Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. void __fastcall User::SendUserInfo(User *this, CUserSocket *pSocket, CVariableBitSet *pNeedUpdatePacketBitSetToBackup)
  2. {
  3.   CSharedCreatureData *m_data; // rax
  4.   CUserSocket *v5; // rax
  5.   const wchar_t *v6; // rax
  6.   CSharedCreatureData *v7; // r8
  7.   CSharedCreatureData *v8; // rcx
  8.   CSharedCreatureData *v9; // rcx
  9.   CSharedCreatureData *v10; // rcx
  10.   int *v11; // rbx
  11.   int *m_nOrgSpeed; // rdi
  12.   __int64 v13; // r14
  13.   long double v14; // xmm0_8
  14.   long double v15; // xmm0_8
  15.   __int64 v16; // r15
  16.   bool v17; // al
  17.   long double *p_m_dCollisionRadius; // rdx
  18.   CVariableBitSet *p_m_NeedUpdatePacketBitSet; // rcx
  19.   long double m_orgCollisionHeight; // xmm2_8
  20.   CSharedCreatureData *v21; // rax
  21.   unsigned int v22; // r8d
  22.   bool v23; // zf
  23.   User_vtbl *v24; // rax
  24.   unsigned int v25; // eax
  25.   FVector *p_m_MyPos; // r8
  26.   unsigned int MyStatus; // eax
  27.   unsigned int VitalPoint; // eax
  28.   unsigned int SocialClass; // eax
  29.   __int64 v30; // rcx
  30.   int *v31; // rax
  31.   CSharedCreatureData *v32; // rax
  32.   __int64 v33; // r14
  33.   _DWORD *v34; // r13
  34.   char *v35; // rdi
  35.   CSharedCreatureData *v36; // rbx
  36.   CSharedFactory<CCreature,CSharedCreatureData,CSharedCreatureConstant,&SharedDefine_Creature> *v37; // rax
  37.   const InstantZoneKey *v38; // rbx
  38.   InstantZoneKey *v39; // rdi
  39.   CSharedCreatureData *v40; // rax
  40.   unsigned int v41; // edi
  41.   std::_Tree_node<std::pair<int const ,std::pair<CCubic *,CubicActivationInfo> >,void *> *Left; // rbx
  42.   int v43; // eax
  43.   std::_Tree_node<std::pair<int const ,std::pair<CCubic *,CubicActivationInfo> >,void *> *Right; // rax
  44.   std::_Tree_node<std::pair<int const ,std::pair<CCubic *,CubicActivationInfo> >,void *> *i; // rax
  45.   unsigned int v46; // eax
  46.   unsigned int PledgePowerByGrade; // eax
  47.   char EventMatchTeamId; // al
  48.   CUserSocket *v49; // rbx
  49.   CUserSocket *v50; // rax
  50.   CParty *v51; // rax
  51.   _SETJMP_FLOAT128 *v52; // rbx
  52.   __int64 v53; // rcx
  53.   WOlympiadMatch *Field; // rbx
  54.   int v55; // eax
  55.   CDuelManager *v56; // rax
  56.   int m_nBonusCount; // esi
  57.   int nOrgSpeed3; // [rsp+28h] [rbp-B10h]
  58.   int nOrgSpeed3a; // [rsp+28h] [rbp-B10h]
  59.   int nOrgSpeed3_8; // [rsp+30h] [rbp-B08h]
  60.   unsigned int des; // [rsp+AB8h] [rbp-80h] BYREF
  61.   int m_CrystallizeLevel; // [rsp+ABCh] [rbp-7Ch]
  62.   int nOrgSpeed0[3]; // [rsp+AC0h] [rbp-78h] BYREF
  63.   int nOrgSpeed4[2]; // [rsp+ACCh] [rbp-6Ch] BYREF
  64.   int nOrgSpeed6[2]; // [rsp+AD4h] [rbp-64h] BYREF
  65.   int nOrgSpeed7; // [rsp+ADCh] [rbp-5Ch] BYREF
  66.   unsigned int m_nMyStatus; // [rsp+AE0h] [rbp-58h]
  67.   int m_nHairColorEx; // [rsp+AE4h] [rbp-54h]
  68.   InstantZoneKey *v69; // [rsp+AE8h] [rbp-50h]
  69.   CSharedCreatureData *v70; // [rsp+AF0h] [rbp-48h]
  70.   int v71; // [rsp+AF8h] [rbp-40h]
  71.   int v72; // [rsp+AFCh] [rbp-3Ch]
  72.   int m_nAttackValue; // [rsp+B00h] [rbp-38h]
  73.   int m_nAttackType; // [rsp+B04h] [rbp-34h]
  74.   int v75; // [rsp+B08h] [rbp-30h]
  75.   unsigned int m_nPledgeEmblemDbId; // [rsp+B0Ch] [rbp-2Ch]
  76.   int v77; // [rsp+B10h] [rbp-28h]
  77.   int m_snEnchant; // [rsp+B14h] [rbp-24h]
  78.   int m_dCP; // [rsp+B18h] [rbp-20h]
  79.   int m_dBaseCP; // [rsp+B1Ch] [rbp-1Ch]
  80.   ClassType m_nClass; // [rsp+B20h] [rbp-18h]
  81.   int v82; // [rsp+B24h] [rbp-14h]
  82.   int m_nDuelCount; // [rsp+B28h] [rbp-10h]
  83.   int v84; // [rsp+B2Ch] [rbp-Ch]
  84.   int PrivateStoreType; // [rsp+B30h] [rbp-8h]
  85.   unsigned int m_nPledgeSid; // [rsp+B34h] [rbp-4h]
  86.   int m_nBuilder; // [rsp+B38h] [rbp+0h]
  87.   int HairShapeForBroadcast; // [rsp+B3Ch] [rbp+4h]
  88.   int FaceForBroadcast; // [rsp+B40h] [rbp+8h]
  89.   int v90; // [rsp+B44h] [rbp+Ch]
  90.   int v91; // [rsp+B48h] [rbp+10h]
  91.   int v92; // [rsp+B4Ch] [rbp+14h]
  92.   int v93; // [rsp+B50h] [rbp+18h]
  93.   int v94; // [rsp+B54h] [rbp+1Ch]
  94.   int v95; // [rsp+B58h] [rbp+20h]
  95.   int v96; // [rsp+B5Ch] [rbp+24h]
  96.   int v97; // [rsp+B60h] [rbp+28h]
  97.   int v98; // [rsp+B64h] [rbp+2Ch]
  98.   int v99; // [rsp+B68h] [rbp+30h]
  99.   int v100; // [rsp+B6Ch] [rbp+34h]
  100.   int v101; // [rsp+B70h] [rbp+38h]
  101.   int v102; // [rsp+B74h] [rbp+3Ch]
  102.   int v103; // [rsp+B78h] [rbp+40h]
  103.   int m_hMinNewSetItemEnchantedEffect; // [rsp+B7Ch] [rbp+44h]
  104.   int m_nActiveArtifactSlotGroup_low; // [rsp+B80h] [rbp+48h]
  105.   int m_dMaxAgathionSubSlotCount_low; // [rsp+B84h] [rbp+4Ch]
  106.   int m_dMaxAgathionMainSlotCount_low; // [rsp+B88h] [rbp+50h]
  107.   int m_dMaxJewelSlotCount_low; // [rsp+B8Ch] [rbp+54h]
  108.   char *p_m_cEventMatchTeamID; // [rsp+B90h] [rbp+58h]
  109.   int m_dCarryWeight; // [rsp+B98h] [rbp+60h]
  110.   int m_nCarryingWeight; // [rsp+B9Ch] [rbp+64h]
  111.   int m_dMP; // [rsp+BA0h] [rbp+68h]
  112.   int m_dBaseMP; // [rsp+BA4h] [rbp+6Ch]
  113.   int m_dHP; // [rsp+BA8h] [rbp+70h]
  114.   int m_dBaseHP; // [rsp+BACh] [rbp+74h]
  115.   int v116; // [rsp+BB0h] [rbp+78h]
  116.   int v117; // [rsp+BB4h] [rbp+7Ch]
  117.   int v118; // [rsp+BB8h] [rbp+80h]
  118.   int v119; // [rsp+BBCh] [rbp+84h]
  119.   int v120; // [rsp+BC0h] [rbp+88h]
  120.   int v121; // [rsp+BC4h] [rbp+8Ch]
  121.   int v122; // [rsp+BC8h] [rbp+90h]
  122.   int v123; // [rsp+BCCh] [rbp+94h]
  123.   int m_nLevel; // [rsp+BD0h] [rbp+98h]
  124.   int m_nBaseClass; // [rsp+BD4h] [rbp+9Ch]
  125.   SexType m_Sex; // [rsp+BD8h] [rbp+A0h]
  126.   RaceType m_Race; // [rsp+BDCh] [rbp+A4h]
  127.   int z; // [rsp+BE0h] [rbp+A8h]
  128.   int y; // [rsp+BE4h] [rbp+ACh]
  129.   int v130; // [rsp+BE8h] [rbp+B0h]
  130.   int v131; // [rsp+BECh] [rbp+B4h]
  131.   int v132; // [rsp+BF0h] [rbp+B8h]
  132.   _BOOL8 v133; // [rsp+BF8h] [rbp+C0h]
  133.   __int64 m_nSP; // [rsp+C00h] [rbp+C8h]
  134.   __int64 m_nExp; // [rsp+C08h] [rbp+D0h]
  135.   CSharedCreatureData *v136; // [rsp+C10h] [rbp+D8h]
  136.   int v137; // [rsp+C18h] [rbp+E0h]
  137.   int v138; // [rsp+D18h] [rbp+1E0h] BYREF
  138.   int v139; // [rsp+E18h] [rbp+2E0h] BYREF
  139.   __int64 v140; // [rsp+1018h] [rbp+4E0h]
  140.   wchar_t String1[220]; // [rsp+1020h] [rbp+4E8h] BYREF
  141.   CPacketHelperEx<20480> ph; // [rsp+11D8h] [rbp+6A0h] BYREF
  142.  
  143.   v140 = -2i64;
  144.   memset(String1, 0, 0x32ui64);
  145.   if ( !this->m_data->m_bIsActive || this->m_nPreviewTimeStamp > 0 && this->m_nPreviewTimeStamp + 10 > time32(0i64) )
  146.     return;
  147.   if ( !FloatChecker::CheckValidation(this->m_data->m_dHP) || !FloatChecker::CheckValidation(this->m_data->m_dCP) )
  148.   {
  149.     m_data = this->m_data;
  150.     CLog::Add(
  151.       &Log,
  152.       LOG_ERROR,
  153.       L"[PLog] HP(%.5f(%p)/%.5f(%p)) CP(%.5f(%p)/%.5f(%p))",
  154.       m_data->m_dHP,
  155.       m_data->m_dHP,
  156.       _mm_unpacklo_pd(*&m_data->m_dBaseHP, *&m_data->m_dBaseHP),
  157.       _mm_unpacklo_pd(*&m_data->m_dCP, *&m_data->m_dCP),
  158.       _mm_unpacklo_pd(*&m_data->m_dBaseCP, *&m_data->m_dBaseCP));
  159.     v5 = this->GetSocket(this);
  160.     CUserSocket::ReportPacketLog(v5, 0);
  161.   }
  162.   v6 = this->GetName(this);
  163.   lstrcpyW(String1, v6);
  164.   v7 = this->m_data;
  165.   m_Race = v7->m_Race;
  166.   m_Sex = v7->m_Sex;
  167.   m_nBaseClass = this->m_nBaseClass;
  168.   m_nClass = v7->m_nClass;
  169.   m_nLevel = v7->m_nLevel;
  170.   m_nExp = v7->m_nExp;
  171.   v123 = v7->m_Stat.m_N[1];
  172.   v122 = v7->m_Stat.m_N[4];
  173.   v121 = v7->m_Stat.m_N[2];
  174.   v120 = v7->m_Stat.m_N[0];
  175.   v119 = v7->m_Stat.m_N[5];
  176.   v118 = v7->m_Stat.m_N[3];
  177.   v117 = v7->m_Stat.m_N[6];
  178.   v116 = v7->m_Stat.m_N[7];
  179.   m_dBaseHP = v7->m_dBaseHP;
  180.   m_dHP = v7->m_dHP;
  181.   m_dBaseMP = v7->m_dBaseMP;
  182.   m_dMP = v7->m_dMP;
  183.   m_dBaseCP = v7->m_dBaseCP;
  184.   m_dCP = v7->m_dCP;
  185.   m_nSP = v7->m_nSP;
  186.   m_nCarryingWeight = this->m_inv.m_nCarryingWeight;
  187.   m_dCarryWeight = v7->m_dCarryWeight;
  188.   FaceForBroadcast = User::GetFaceForBroadcast(this);
  189.   HairShapeForBroadcast = User::GetHairShapeForBroadcast(this);
  190.   v8 = this->m_data;
  191.   m_nHairColorEx = v8->m_nHairColorEx;
  192.   if ( !m_nHairColorEx )
  193.     m_nHairColorEx = v8->m_nHairColor;
  194.   m_nBuilder = v8->m_nBuilder;
  195.   PrivateStoreType = User::GetPrivateStoreType(this);
  196.   v9 = this->m_data;
  197.   v103 = v9->m_dParam[2];
  198.   v101 = v9->m_dParam[0];
  199.   v97 = v9->m_dParam[3];
  200.   v94 = v9->m_dParam[1];
  201.   v102 = v9->m_dParam[4];
  202.   v96 = (v9->m_dParam[5] * 333.0);
  203.   v95 = (v9->m_dParam[6] * 333.0);
  204.   v98 = CCreature::CriticalRateForInfo(this, PCRITICAL);
  205.   v10 = this->m_data;
  206.   v99 = v10->m_dParam[7];
  207.   v100 = v10->m_dParam[14];
  208.   v92 = v10->m_dParam[8];
  209.   v93 = v10->m_dParam[15];
  210.   v91 = CCreature::CriticalRateForInfo(this, MCRITICAL);
  211.   memset(nOrgSpeed0, 0, sizeof(nOrgSpeed0));
  212.   *nOrgSpeed4 = 0i64;
  213.   *nOrgSpeed6 = 0i64;
  214.   nOrgSpeed7 = 0;
  215.   User::SetOrgSpeed(
  216.     this,
  217.     nOrgSpeed0,
  218.     &nOrgSpeed0[1],
  219.     &nOrgSpeed0[2],
  220.     nOrgSpeed4,
  221.     &nOrgSpeed4[1],
  222.     nOrgSpeed6,
  223.     &nOrgSpeed6[1],
  224.     &nOrgSpeed7);
  225.   v11 = nOrgSpeed0;
  226.   m_nOrgSpeed = this->m_nOrgSpeed;
  227.   v13 = 8i64;
  228.   do
  229.   {
  230.     CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, m_nOrgSpeed++, *v11++, 0x3Du);
  231.     --v13;
  232.   }
  233.   while ( v13 );
  234.   m_CrystallizeLevel = this->m_CrystallizeLevel;
  235.   v14 = this->GetAttackModifier(this);
  236.   CVariableBitSet::SetDoubleValue_IfModifed(
  237.     &this->m_data->m_NeedUpdatePacketBitSet,
  238.     &this->m_dAttackSpeedModifier,
  239.     v14,
  240.     0x3Eu);
  241.   v15 = this->GetMoveModifier(this);
  242.   v16 = 63i64;
  243.   CVariableBitSet::SetDoubleValue_IfModifed(
  244.     &this->m_data->m_NeedUpdatePacketBitSet,
  245.     &this->m_dMoveSpeedModifier,
  246.     v15,
  247.     0x3Fu);
  248.   v17 = this->IsRiding(this);
  249.   p_m_dCollisionRadius = &this->m_dCollisionRadius;
  250.   if ( v17 )
  251.   {
  252.     CVariableBitSet::SetDoubleValue_IfModifed(
  253.       &this->m_data->m_NeedUpdatePacketBitSet,
  254.       p_m_dCollisionRadius,
  255.       this->m_pStriderInfo->m_commonInfo.m_orgCollisionRadius,
  256.       0x1Bu);
  257.     p_m_NeedUpdatePacketBitSet = &this->m_data->m_NeedUpdatePacketBitSet;
  258.     m_orgCollisionHeight = this->m_pStriderInfo->m_commonInfo.m_orgCollisionHeight;
  259.   }
  260.   else
  261.   {
  262.     CVariableBitSet::SetDoubleValue_IfModifed(
  263.       &this->m_data->m_NeedUpdatePacketBitSet,
  264.       p_m_dCollisionRadius,
  265.       this->m_data->m_dCollisionRadius,
  266.       0x1Bu);
  267.     v21 = this->m_data;
  268.     p_m_NeedUpdatePacketBitSet = &v21->m_NeedUpdatePacketBitSet;
  269.     m_orgCollisionHeight = v21->m_dCollisionHeight;
  270.   }
  271.   CVariableBitSet::SetDoubleValue_IfModifed(
  272.     p_m_NeedUpdatePacketBitSet,
  273.     &this->m_dCollisionHeight,
  274.     m_orgCollisionHeight,
  275.     0x1Cu);
  276.   FVector::FVector(nOrgSpeed0, &this->m_data->m_Pos);
  277.   CVariableBitSet::SetFVectorValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_MyPos, nOrgSpeed0, 0x40u);
  278.   des = 0;
  279.   if ( this->IsInVehicle(this) )
  280.   {
  281.     CContainerDB::Inst();
  282.     v22 = 1;
  283.   }
  284.   else
  285.   {
  286.     v23 = !this->IsInAirShip(this);
  287.     v24 = this->__vftable;
  288.     if ( v23 )
  289.     {
  290.       if ( !v24->IsInShuttle(this) )
  291.         goto LABEL_22;
  292.       v25 = this->GetMyShuttleID(this);
  293.     }
  294.     else
  295.     {
  296.       v25 = v24->GetMyAirShipID(this);
  297.     }
  298.     v22 = v25;
  299.   }
  300.   CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &des, v22, 0x41u);
  301. LABEL_22:
  302.   if ( des <= 0 )
  303.   {
  304.     p_m_MyPos = &this->m_MyPos;
  305.   }
  306.   else
  307.   {
  308.     FVector::FVector(nOrgSpeed0, &this->m_RelPos);
  309.     p_m_MyPos = nOrgSpeed0;
  310.   }
  311.   CVariableBitSet::SetFVectorValue_IfModifed(
  312.     &this->m_data->m_NeedUpdatePacketBitSet,
  313.     &this->m_InformingPos,
  314.     p_m_MyPos,
  315.     0x42u);
  316.   m_nPledgeSid = this->m_nPledgeSid;
  317.   m_nPledgeEmblemDbId = this->m_nPledgeEmblemDbId;
  318.   MyStatus = User::GetMyStatus(this);
  319.   CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_nMyStatus, MyStatus, 0x43u);
  320.   CVariableBitSet::SetShortValue_IfModifed(
  321.     &this->m_data->m_NeedUpdatePacketBitSet,
  322.     &this->m_sBonusCount,
  323.     this->m_nBonusCount,
  324.     0x21u);
  325.   VitalPoint = User::GetVitalPoint(this);
  326.   CVariableBitSet::SetIntValue_IfModifed(
  327.     &this->m_data->m_NeedUpdatePacketBitSet,
  328.     &this->m_nVitalPoint,
  329.     VitalPoint,
  330.     0x22u);
  331.   SocialClass = User::GetSocialClass(this);
  332.   CVariableBitSet::SetIntValue_IfModifed(
  333.     &this->m_data->m_NeedUpdatePacketBitSet,
  334.     &this->m_nSocialClass,
  335.     SocialClass,
  336.     0x23u);
  337.   v30 = 63i64;
  338.   v31 = &v139;
  339.   do
  340.   {
  341.     *v31 = 0i64;
  342.     v31 += 2;
  343.     --v30;
  344.   }
  345.   while ( v30 );
  346.   v69 = &v139;
  347.   v32 = (220i64 - &v138);
  348.   v70 = (220i64 - &v138);
  349.   v33 = 0i64;
  350.   do
  351.   {
  352.     v34 = (&v138 + v33);
  353.     v35 = &v138 + v33 + v32;
  354.     v36 = this->m_data;
  355.     v37 = CSharedFactory<CItem,CSharedItemData,CSharedItemConstant,&CSharedDefine const SharedDefine_Item>::Inst();
  356.     CSharedFactory<CItem,CSharedItemData,CSharedItemConstant,&CSharedDefine const SharedDefine_Item>::FindObjectSP(
  357.       v37,
  358.       nOrgSpeed0,
  359.       *(&v36->__vftable + v35));
  360.     v38 = *nOrgSpeed0;
  361.     v39 = v69;
  362.     if ( *nOrgSpeed0 )
  363.     {
  364.       *v34 = *(*nOrgSpeed0 + 24i64);
  365.       *(&v137 + v33) = v38[3].clusterId;
  366.       VariationKey::VariationKey(v39, v38 + 98);
  367.     }
  368.     else
  369.     {
  370.       *v34 = 0;
  371.       *(&v137 + v33) = 0;
  372.     }
  373.     if ( v38 )
  374.     {
  375.       LOBYTE(nOrgSpeed3) = 0;
  376.       (*(*v38 + 8i64))(
  377.         v38,
  378.         "d:\\_jenkins\\workspace\\dailybuild work(live) vs2015\\lineage2build\\server\\main\\shared\\ThreadSafeLibrary.h",
  379.         133i64,
  380.         nOrgSpeed0[2],
  381.         nOrgSpeed3);
  382.       *nOrgSpeed0 = 0i64;
  383.     }
  384.     v69 = v39 + 1;
  385.     v33 += 4i64;
  386.     --v16;
  387.     v32 = v70;
  388.   }
  389.   while ( v16 );
  390.   if ( this->IsInAirShip(this) )
  391.     this->GetMyAirShipID(this);
  392.   v40 = this->m_data;
  393.   v84 = v40->m_nPKCount - v40->m_nPKPardonCount;
  394.   m_nDuelCount = v40->m_nDuelCount;
  395.   this->GetInventoryLimit(this);
  396.   v41 = 0;
  397.   Left = this->m_cubicMap._Mypair._Myval2._Myval2._Myhead->_Left;
  398.   while ( Left != this->m_cubicMap._Mypair._Myval2._Myval2._Myhead )
  399.   {
  400.     v43 = Assemble(&String1[28] + v41, 128 - v41, "h", SLOWORD(Left->_Myval.second.first->m_classID));
  401.     if ( v43 > 0 )
  402.       v41 += v43;
  403.     if ( !Left->_Isnil )
  404.     {
  405.       Right = Left->_Right;
  406.       if ( Right->_Isnil )
  407.       {
  408.         for ( i = Left->_Parent; !i->_Isnil && Left == i->_Right; i = i->_Parent )
  409.           Left = i;
  410.         Left = i;
  411.       }
  412.       else
  413.       {
  414.         do
  415.         {
  416.           Left = Right;
  417.           Right = Right->_Left;
  418.         }
  419.         while ( !Right->_Isnil );
  420.       }
  421.     }
  422.   }
  423.   v46 = this->CalcCriminalRate(this);
  424.   CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_nCriminalRate, v46, 0x45u);
  425.   PledgePowerByGrade = User::GetPledgePowerByGrade(this);
  426.   CVariableBitSet::SetIntValue_IfModifed(
  427.     &this->m_data->m_NeedUpdatePacketBitSet,
  428.     &this->m_pledgePower,
  429.     PledgePowerByGrade,
  430.     0x46u);
  431.   p_m_cEventMatchTeamID = &this->m_cEventMatchTeamID;
  432.   EventMatchTeamId = User::GetEventMatchTeamId(this);
  433.   CVariableBitSet::SetCharValue_IfModifed(
  434.     &this->m_data->m_NeedUpdatePacketBitSet,
  435.     &this->m_cEventMatchTeamID,
  436.     EventMatchTeamId,
  437.     0x47u);
  438.   ph.__vftable = &CPacketHelperEx<20480>::`vftable';
  439.  memset(ph.m_buffer, 0, 20488);
  440.  CCreature::MakeAbnormalVisualEffectPacket(this, &ph);
  441.  if ( pSocket )
  442.  {
  443.    v136 = this->m_data;
  444.    m_nBonusCount = this->m_nBonusCount;
  445.    z = this->m_MyPos.z;
  446.    y = this->m_MyPos.y;
  447.    LODWORD(v69) = this->m_MyPos.x;
  448.    *nOrgSpeed0 = &pSocket->Send;
  449.    v70 = this->m_data;
  450.    m_nMyStatus = this->m_nMyStatus;
  451.    User::GetVitalPoint(this);
  452.    v130 = v70->m_BaseAttribute.m_nDefendValue[4];
  453.    v131 = v70->m_BaseAttribute.m_nDefendValue[3];
  454.    v132 = v70->m_BaseAttribute.m_nDefendValue[2];
  455.    v71 = v70->m_BaseAttribute.m_nDefendValue[1];
  456.    v72 = v70->m_BaseAttribute.m_nDefendValue[0];
  457.    m_nAttackValue = v70->m_BaseAttribute.m_nAttackValue;
  458.    m_nAttackType = v70->m_BaseAttribute.m_nAttackType;
  459.    v75 = User::GetSocialClass(this);
  460.    v77 = *p_m_cEventMatchTeamID;
  461.    m_snEnchant = this->m_snEnchant;
  462.    v82 = m_nBonusCount;
  463.    v133 = m_CrystallizeLevel > 0;
  464.    m_CrystallizeLevel = (m_nMyStatus >> 6) & 1;
  465.    v90 = this->GetGuilty(this);
  466.    m_hMinNewSetItemEnchantedEffect = this->m_hMinNewSetItemEnchantedEffect;
  467.    m_nActiveArtifactSlotGroup_low = SLOBYTE(this->m_SkillMod.m_nActiveArtifactSlotGroup);
  468.    m_dMaxAgathionSubSlotCount_low = SLOBYTE(this->m_SkillMod.m_dMaxAgathionSubSlotCount);
  469.    m_dMaxAgathionMainSlotCount_low = SLOBYTE(this->m_SkillMod.m_dMaxAgathionMainSlotCount);
  470.    m_dMaxJewelSlotCount_low = SLOBYTE(this->m_SkillMod.m_dMaxJewelSlotCount);
  471.    LODWORD(p_m_cEventMatchTeamID) = SLOBYTE(this->m_SkillMod.m_dMaxDecoSlotCount);
  472.    this->GetAttackRange(this);
  473. //MISSING DATA !!! SocketAssemblePacket//IDAPRO ISSUE - too many args
  474.    User::SendPrivateStoreMessage(this, pSocket, PSMT_NO_BROADCAST);
  475.    User::SendUserHennaInfo(this, pSocket);
  476.    User::SendVitalityEffectInfo(this, pSocket);
  477.  }
  478.  else
  479.  {
  480.    v49 = this->GetSocket(this);
  481.    User::SendUserInfo2(this, 0, v49);
  482.    if ( CVariableBitSet::IsSet(
  483.           &this->m_data->m_NeedUpdatePacketBitSet,
  484.           16,
  485.           15,
  486.           -1,
  487.           0xFFFFFFFF,
  488.           0xFFFFFFFF,
  489.           0xFFFFFFFF,
  490.           0xFFFFFFFF,
  491.           0xFFFFFFFF,
  492.           0xFFFFFFFF,
  493.           0xFFFFFFFF) )
  494.    {
  495.      User::SendInvenCarryingWeight(this, v49);
  496.    }
  497.    if ( CVariableBitSet::IsSet(
  498.           &this->m_data->m_NeedUpdatePacketBitSet,
  499.           73,
  500.           96,
  501.           -1,
  502.           0xFFFFFFFF,
  503.           0xFFFFFFFF,
  504.           0xFFFFFFFF,
  505.           0xFFFFFFFF,
  506.           0xFFFFFFFF,
  507.           0xFFFFFFFF,
  508.           0xFFFFFFFF) )
  509.    {
  510.      User::SendEquipSlotInfo(this, v49);
  511.    }
  512.    if ( CVariableBitSet::IsSet(
  513.           &this->m_data->m_NeedUpdatePacketBitSet,
  514.           74,
  515.           68,
  516.           -1,
  517.           0xFFFFFFFF,
  518.           0xFFFFFFFF,
  519.           0xFFFFFFFF,
  520.           0xFFFFFFFF,
  521.           0xFFFFFFFF,
  522.           0xFFFFFFFF,
  523.           0xFFFFFFFF) )
  524.    {
  525.      User::SendCubicInfo(this, v49);
  526.    }
  527.    if ( CVariableBitSet::IsSet(
  528.           &this->m_data->m_NeedUpdatePacketBitSet,
  529.           75,
  530.           81,
  531.           -1,
  532.           0xFFFFFFFF,
  533.           0xFFFFFFFF,
  534.           0xFFFFFFFF,
  535.           0xFFFFFFFF,
  536.           0xFFFFFFFF,
  537.           0xFFFFFFFF,
  538.           0xFFFFFFFF) )
  539.    {
  540.      User::SendAbnormalVisualEffectInfo(this, v49);
  541.    }
  542.    if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x4Cu) )
  543.      User::SendFishingInfo(this, v49);
  544.    if ( pNeedUpdatePacketBitSetToBackup )
  545.      CVariableBitSet::operator=|(pNeedUpdatePacketBitSetToBackup, &this->m_data->m_NeedUpdatePacketBitSet);
  546.    CVariableBitSet::Clear(&this->m_data->m_NeedUpdatePacketBitSet);
  547.    v50 = this->GetSocket(this);
  548.    User::SendPrivateStoreMessage(this, v50, PSMT_NO_BROADCAST);
  549.    v51 = this->GetParty(this);
  550.    v52 = v51;
  551.    if ( v51 )
  552.    {
  553.      nOrgSpeed3_8 = 0;
  554.      CParty::UpdateWindowPacket(v51, this, 0, 0, 0);
  555.      AtomicUpdateUserPoint::Dump(v52);
  556.    }
  557.    if ( this->m_EventMatchUser.m_byEventMatchTeamId )
  558.    {
  559.      CEventMatchUser::GetEventMatch(&this->m_EventMatchUser, nOrgSpeed0);
  560.      v53 = *nOrgSpeed0;
  561.      if ( *nOrgSpeed0 )
  562.      {
  563.        CEventMatch::UpdateUserStatus(*nOrgSpeed0, this, 0);
  564.        v53 = *nOrgSpeed0;
  565.      }
  566.      if ( v53 )
  567.      {
  568.        LOBYTE(nOrgSpeed3a) = 0;
  569.        (*(*v53 + 8i64))(
  570.          v53,
  571.          "d:\\_jenkins\\workspace\\dailybuild work(live) vs2015\\lineage2build\\server\\main\\shared\\ThreadSafeLibrary.h",
  572.          133i64,
  573.          nOrgSpeed0[2],
  574.          nOrgSpeed3a,
  575.          nOrgSpeed3_8);
  576.      }
  577.    }
  578.    if ( User::IsOlympiadPlayer(this) )
  579.    {
  580.      Field = WOlympiadUser::GetField(this->m_pWOlympiadUser);
  581.      if ( Field )
  582.      {
  583.        v55 = this->GetServerId(this);
  584.        WOlympiadMatch::UpdateUserStatus(Field, v55, 0);
  585.      }
  586.    }
  587.    if ( CDuelUserInfo::IsInFightStatus(&this->m_DuelUserInfo) )
  588.    {
  589.      v56 = Singleton<CDuelManager>::inst();
  590.      CDuelManager::UpdateDuelPlayerStatus(v56, this);
  591.    }
  592.  }
  593. }
  594. //----- (000000000098FD54) ----------------------------------------------------
  595. void __fastcall User::SendUserInfo2(User *this, bool isGMPacket, CUserSocket *pSocket)
  596. {
  597.  __int64 ThreadID; // rbx
  598.  __int64 m_nID; // rdi
  599.  const wchar_t *v7; // rax
  600.  CSharedCreatureData *m_data; // rax
  601.  __int64 m_nLevel; // r13
  602.  __int64 m_nExp; // r8
  603.  double v11; // xmm6_8
  604.  __int64 v12; // rdx
  605.  __int64 EquipedWeapon; // rax
  606.  unsigned __int16 v14; // r8
  607.  CSharedCreatureData *v15; // rcx
  608.  CSharedCreatureData *v16; // rcx
  609.  CSharedCreatureData *v17; // rcx
  610.  int *p_nOrgSpeed0; // rbx
  611.  int *m_nOrgSpeed; // r14
  612.  __int64 v20; // r15
  613.  long double v21; // xmm0_8
  614.  long double v22; // xmm0_8
  615.  bool v23; // al
  616.  long double *p_m_dCollisionRadius; // rdx
  617.  CVariableBitSet *p_m_NeedUpdatePacketBitSet; // rcx
  618.  long double m_orgCollisionHeight; // xmm2_8
  619.  CSharedCreatureData *v27; // rax
  620.  unsigned int MyStatus; // eax
  621.  unsigned int v29; // r8d
  622.  bool v30; // zf
  623.  User_vtbl *v31; // rax
  624.  unsigned int v32; // eax
  625.  FVector *p_m_MyPos; // r8
  626.  unsigned int PledgePowerByGrade; // eax
  627.  char EventMatchTeamId; // al
  628.  unsigned __int64 v36; // rax
  629.  bool v37; // al
  630.  CSharedCreatureData *v38; // rcx
  631.  __int64 v39; // rcx
  632.  int *v40; // r8
  633.  CSharedCreatureData *v41; // rcx
  634.  CPartyRoomRegistry *v42; // rcx
  635.  char DoesShowPartyWantedMessage; // al
  636.  unsigned __int64 v44; // rax
  637.  CSharedCreatureData *v45; // rcx
  638.  unsigned int v46; // eax
  639.  unsigned int SocialClass; // eax
  640.  CSharedCreatureData *v48; // rcx
  641.  int v49; // r14d
  642.  int m_nDuelCount; // r13d
  643.  int m_nVoteCount; // ebx
  644.  CSharedCreatureData *v52; // rcx
  645.  CSharedCreatureData *v53; // rcx
  646.  int m_nCursedWeaponClassId; // r14d
  647.  CCursedWeaponMgr *v55; // rax
  648.  unsigned int WeaponLevel; // r8d
  649.  unsigned int m_transformID; // r8d
  650.  CVariableBitSet *v58; // rcx
  651.  CSharedCreatureData *v59; // rax
  652.  CSharedCreatureData *v60; // rcx
  653.  char UserFlag; // al
  654.  int *nOrgSpeed3; // [rsp+20h] [rbp-E0h]
  655.  int *nOrgSpeed3a; // [rsp+20h] [rbp-E0h]
  656.  unsigned int des; // [rsp+60h] [rbp-A0h] BYREF
  657.  int m_nHairColorEx; // [rsp+64h] [rbp-9Ch]
  658.  int m_nBuilder; // [rsp+68h] [rbp-98h]
  659.  RaceType m_Race; // [rsp+6Ch] [rbp-94h]
  660.  SexType m_Sex; // [rsp+70h] [rbp-90h]
  661.  int m_nBaseClass; // [rsp+74h] [rbp-8Ch]
  662.  int m_nClass; // [rsp+78h] [rbp-88h]
  663.  int v71; // [rsp+7Ch] [rbp-84h]
  664.  int v72; // [rsp+80h] [rbp-80h]
  665.  int v73; // [rsp+84h] [rbp-7Ch]
  666.  int v74; // [rsp+88h] [rbp-78h]
  667.  int v75; // [rsp+8Ch] [rbp-74h]
  668.  int v76; // [rsp+90h] [rbp-70h]
  669.  int v77; // [rsp+94h] [rbp-6Ch]
  670.  int v78; // [rsp+98h] [rbp-68h]
  671.  l2::UserInfo_BaseAttr v79; // [rsp+9Ch] [rbp-64h]
  672.  int m_dHP; // [rsp+A8h] [rbp-58h]
  673.  int m_dMP; // [rsp+ACh] [rbp-54h]
  674.  int m_dCP; // [rsp+B0h] [rbp-50h]
  675.  int FaceForBroadcast; // [rsp+B4h] [rbp-4Ch]
  676.  int HairShapeForBroadcast; // [rsp+B8h] [rbp-48h]
  677.  int m_nPrivateStoreType; // [rsp+BCh] [rbp-44h]
  678.  BOOL v86; // [rsp+C0h] [rbp-40h]
  679.  int RemainAP; // [rsp+C4h] [rbp-3Ch]
  680.  int v88; // [rsp+C8h] [rbp-38h]
  681.  int v89; // [rsp+CCh] [rbp-34h]
  682.  int v90; // [rsp+D0h] [rbp-30h]
  683.  int v91; // [rsp+D4h] [rbp-2Ch]
  684.  int v92; // [rsp+D8h] [rbp-28h]
  685.  int v93; // [rsp+DCh] [rbp-24h]
  686.  int v94; // [rsp+E0h] [rbp-20h]
  687.  int v95; // [rsp+E4h] [rbp-1Ch]
  688.  int v96; // [rsp+E8h] [rbp-18h]
  689.  int v97; // [rsp+ECh] [rbp-14h]
  690.  int v98; // [rsp+F0h] [rbp-10h]
  691.  int v99; // [rsp+F4h] [rbp-Ch]
  692.  int v100; // [rsp+F8h] [rbp-8h]
  693.  int m_rideClassID; // [rsp+FCh] [rbp-4h]
  694.  int v102; // [rsp+100h] [rbp+0h]
  695.  int nOrgSpeed0; // [rsp+108h] [rbp+8h] BYREF
  696.  int nOrgSpeed1[2]; // [rsp+10Ch] [rbp+Ch] BYREF
  697.  int nOrgSpeed4[2]; // [rsp+114h] [rbp+14h] BYREF
  698.  int nOrgSpeed5[2]; // [rsp+11Ch] [rbp+1Ch] BYREF
  699.  int nOrgSpeed7[3]; // [rsp+124h] [rbp+24h] BYREF
  700.  l2::S_UserInfo v108; // [rsp+130h] [rbp+30h] BYREF
  701.  unsigned __int8 bits; // [rsp+2F0h] [rbp+1F0h] BYREF
  702.  __int64 v110; // [rsp+2F1h] [rbp+1F1h]
  703.  int v111; // [rsp+2F9h] [rbp+1F9h]
  704.  __int64 m_nSP; // [rsp+300h] [rbp+200h]
  705.  __int64 v113; // [rsp+308h] [rbp+208h]
  706.  CSPointer<User> v114; // [rsp+310h] [rbp+210h] BYREF
  707.  CVariableBitSet v115; // [rsp+320h] [rbp+220h] BYREF
  708.  network::Stream v116; // [rsp+330h] [rbp+230h] BYREF
  709.  network::Stream rStream; // [rsp+350h] [rbp+250h] BYREF
  710.  JOB *v118; // [rsp+370h] [rbp+270h]
  711.  __int64 v119; // [rsp+378h] [rbp+278h]
  712.  wchar_t String1[28]; // [rsp+380h] [rbp+280h] BYREF
  713.  FVector src; // [rsp+3B8h] [rbp+2B8h] BYREF
  714.  FVector v122; // [rsp+3D0h] [rbp+2D0h] BYREF
  715.  char v123[20480]; // [rsp+3F0h] [rbp+2F0h] BYREF
  716.  char v124[20480]; // [rsp+53F0h] [rbp+52F0h] BYREF
  717.  void **v125; // [rsp+A3F0h] [rbp+A2F0h]
  718.  char v126[20480]; // [rsp+A3F8h] [rbp+A2F8h] BYREF
  719.  __int64 v127; // [rsp+F3F8h] [rbp+F2F8h]
  720.  char m_rideType; // [rsp+F468h] [rbp+F368h]
  721.  
  722.  v119 = -2i64;
  723.  v118 = &JOB_SEND_EXUSERINFO;
  724.  ThreadID = (int)CThreadManager::GetThreadID();
  725.  m_nID = JOB_SEND_EXUSERINFO.m_nID;
  726.  g_Timer.m_EachJobBeginTimes[ThreadID]._Mypair._Myval2._Myfirst[m_nID] = GetTickCount();
  727.  if ( pSocket )
  728.  {
  729.    memset(String1, 0, 0x32ui64);
  730.    v7 = this->GetName(this);
  731.    lstrcpyW(String1, v7);
  732.    m_data = this->m_data;
  733.    m_nBuilder = m_data->m_nBuilder;
  734.    m_Race = m_data->m_Race;
  735.    m_Sex = m_data->m_Sex;
  736.    m_nBaseClass = this->m_nBaseClass;
  737.    m_nClass = m_data->m_nClass;
  738.    m_nLevel = m_data->m_nLevel;
  739.    v71 = m_data->m_Stat.m_N[1];
  740.    v72 = m_data->m_Stat.m_N[4];
  741.    v73 = m_data->m_Stat.m_N[2];
  742.    v74 = m_data->m_Stat.m_N[0];
  743.    v75 = m_data->m_Stat.m_N[5];
  744.    v76 = m_data->m_Stat.m_N[3];
  745.    v77 = m_data->m_Stat.m_N[6];
  746.    v78 = m_data->m_Stat.m_N[7];
  747.    v79.nBaseHP = (int)m_data->m_dBaseHP;
  748.    v79.nBaseMP = (int)m_data->m_dBaseMP;
  749.    v79.nBaseCP = (int)m_data->m_dBaseCP;
  750.    m_dHP = (int)m_data->m_dHP;
  751.    m_dMP = (int)m_data->m_dMP;
  752.    m_dCP = (int)m_data->m_dCP;
  753.    m_nSP = m_data->m_nSP;
  754.    m_nExp = m_data->m_nExp;
  755.    v113 = m_nExp;
  756.    v11 = 0.0;
  757.    if ( (int)m_nLevel > 0 )
  758.    {
  759.      v12 = ExpByLevel[(int)m_nLevel - 1];
  760.      v11 = (double)((int)m_nExp - (int)v12) / (double)(int)(ExpByLevel[m_nLevel] - v12);
  761.    }
  762.    EquipedWeapon = CCreature::GetEquipedWeapon(this);
  763.    if ( EquipedWeapon )
  764.      v14 = *(_WORD *)(EquipedWeapon + 116);
  765.    else
  766.      v14 = 0;
  767.    CVariableBitSet::SetShortValue_IfModifed(
  768.      &this->m_data->m_NeedUpdatePacketBitSet,
  769.      (unsigned __int16 *)&this->m_snEnchant,
  770.      v14,
  771.      0x4Du);
  772.    FaceForBroadcast = User::GetFaceForBroadcast(this);
  773.    HairShapeForBroadcast = User::GetHairShapeForBroadcast(this);
  774.    v15 = this->m_data;
  775.    m_nHairColorEx = v15->m_nHairColorEx;
  776.    if ( !m_nHairColorEx )
  777.      m_nHairColorEx = v15->m_nHairColor;
  778.    m_rideType = v15->m_rideType;
  779.    m_rideClassID = v15->m_rideClassID;
  780.    m_nPrivateStoreType = v15->m_nPrivateStoreType;
  781.    RemainAP = CSharedCreatureData::GetRemainAP(v15);
  782.    v16 = this->m_data;
  783.    v88 = (int)v16->m_dParam[2];
  784.    v90 = (int)v16->m_dParam[0];
  785.    v94 = (int)v16->m_dParam[3];
  786.    v98 = (int)v16->m_dParam[1];
  787.    v89 = (int)v16->m_dParam[4];
  788.    v95 = (int)(v16->m_dParam[5] * 333.0);
  789.    v96 = (int)(v16->m_dParam[6] * 333.0);
  790.    v93 = CCreature::CriticalRateForInfo(this, PCRITICAL);
  791.    v17 = this->m_data;
  792.    v92 = (int)v17->m_dParam[7];
  793.    v91 = (int)v17->m_dParam[14];
  794.    v99 = (int)v17->m_dParam[8];
  795.    v97 = (int)v17->m_dParam[15];
  796.    v100 = CCreature::CriticalRateForInfo(this, MCRITICAL);
  797.    FVector::FVector(&src, &this->m_data->m_Pos);
  798.    CVariableBitSet::SetFVectorValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_MyPos, &src, 0x40u);
  799.    nOrgSpeed0 = 0;
  800.    *(_QWORD *)nOrgSpeed1 = 0i64;
  801.    *(_QWORD *)nOrgSpeed4 = 0i64;
  802.    *(_QWORD *)nOrgSpeed5 = 0i64;
  803.    nOrgSpeed7[0] = 0;
  804.    User::SetOrgSpeed(
  805.      this,
  806.      &nOrgSpeed0,
  807.      nOrgSpeed1,
  808.      &nOrgSpeed1[1],
  809.      nOrgSpeed4,
  810.      &nOrgSpeed4[1],
  811.      nOrgSpeed5,
  812.      &nOrgSpeed5[1],
  813.      nOrgSpeed7);
  814.    p_nOrgSpeed0 = &nOrgSpeed0;
  815.    m_nOrgSpeed = this->m_nOrgSpeed;
  816.    v20 = 8i64;
  817.    do
  818.    {
  819.      CVariableBitSet::SetIntValue_IfModifed(
  820.        &this->m_data->m_NeedUpdatePacketBitSet,
  821.        (unsigned int *)m_nOrgSpeed++,
  822.        *p_nOrgSpeed0++,
  823.        0x3Du);
  824.      --v20;
  825.    }
  826.    while ( v20 );
  827.    v21 = this->GetAttackModifier(this);
  828.    CVariableBitSet::SetDoubleValue_IfModifed(
  829.      &this->m_data->m_NeedUpdatePacketBitSet,
  830.      &this->m_dAttackSpeedModifier,
  831.      v21,
  832.      0x3Eu);
  833.    v22 = this->GetMoveModifier(this);
  834.    CVariableBitSet::SetDoubleValue_IfModifed(
  835.      &this->m_data->m_NeedUpdatePacketBitSet,
  836.      &this->m_dMoveSpeedModifier,
  837.      v22,
  838.      0x3Fu);
  839.    v23 = this->IsRiding(this);
  840.    p_m_dCollisionRadius = &this->m_dCollisionRadius;
  841.    if ( v23 )
  842.    {
  843.      CVariableBitSet::SetDoubleValue_IfModifed(
  844.        &this->m_data->m_NeedUpdatePacketBitSet,
  845.        p_m_dCollisionRadius,
  846.        this->m_pStriderInfo->m_commonInfo.m_orgCollisionRadius,
  847.        0x1Bu);
  848.      p_m_NeedUpdatePacketBitSet = &this->m_data->m_NeedUpdatePacketBitSet;
  849.      m_orgCollisionHeight = this->m_pStriderInfo->m_commonInfo.m_orgCollisionHeight;
  850.    }
  851.    else
  852.    {
  853.      CVariableBitSet::SetDoubleValue_IfModifed(
  854.        &this->m_data->m_NeedUpdatePacketBitSet,
  855.        p_m_dCollisionRadius,
  856.        this->m_data->m_dCollisionRadius,
  857.        0x1Bu);
  858.      v27 = this->m_data;
  859.      p_m_NeedUpdatePacketBitSet = &v27->m_NeedUpdatePacketBitSet;
  860.      m_orgCollisionHeight = v27->m_dCollisionHeight;
  861.    }
  862.    CVariableBitSet::SetDoubleValue_IfModifed(
  863.      p_m_NeedUpdatePacketBitSet,
  864.      &this->m_dCollisionHeight,
  865.      m_orgCollisionHeight,
  866.      0x1Cu);
  867.    v86 = this->m_CrystallizeLevel > CRT_NONE;
  868.    MyStatus = User::GetMyStatus(this);
  869.    CVariableBitSet::SetIntValue_IfModifed(
  870.      &this->m_data->m_NeedUpdatePacketBitSet,
  871.      (unsigned int *)&this->m_nMyStatus,
  872.      MyStatus,
  873.      0x43u);
  874.    CVariableBitSet::SetShortValue_IfModifed(
  875.      &this->m_data->m_NeedUpdatePacketBitSet,
  876.      (unsigned __int16 *)&this->m_sBonusCount,
  877.      this->m_nBonusCount,
  878.      0x21u);
  879.    CVariableBitSet::SetIntValue_IfModifed(
  880.      &this->m_data->m_NeedUpdatePacketBitSet,
  881.      (unsigned int *)&this->m_nVitalPoint,
  882.      this->m_pVitality->m_Data.vitalPoint,
  883.      0x22u);
  884.    des = 0;
  885.    if ( this->IsInVehicle(this) )
  886.    {
  887.      CContainerDB::Inst();
  888.      v29 = 1;
  889.      goto LABEL_23;
  890.    }
  891.    v30 = !this->IsInAirShip(this);
  892.    v31 = this->__vftable;
  893.    if ( v30 )
  894.    {
  895.      if ( !v31->IsInShuttle(this) )
  896.      {
  897.        v29 = 0;
  898. LABEL_23:
  899.        CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &des, v29, 0x41u);
  900.        if ( (int)des <= 0 )
  901.        {
  902.          p_m_MyPos = &this->m_MyPos;
  903.        }
  904.        else
  905.        {
  906.          FVector::FVector(&v122, &this->m_RelPos);
  907.          p_m_MyPos = &v122;
  908.        }
  909.        CVariableBitSet::SetFVectorValue_IfModifed(
  910.          &this->m_data->m_NeedUpdatePacketBitSet,
  911.          &this->m_InformingPos,
  912.          p_m_MyPos,
  913.          0x42u);
  914.        v102 = this->GetInventoryLimit(this);
  915.        PledgePowerByGrade = (unsigned int)User::GetPledgePowerByGrade(this);
  916.        CVariableBitSet::SetIntValue_IfModifed(
  917.          &this->m_data->m_NeedUpdatePacketBitSet,
  918.          (unsigned int *)&this->m_pledgePower,
  919.          PledgePowerByGrade,
  920.          0x46u);
  921.        EventMatchTeamId = User::GetEventMatchTeamId(this);
  922.        CVariableBitSet::SetCharValue_IfModifed(
  923.          &this->m_data->m_NeedUpdatePacketBitSet,
  924.          &this->m_cEventMatchTeamID,
  925.          EventMatchTeamId,
  926.          0x47u);
  927.        v125 = &CPacketHelperEx<20480>::`vftable';
  928.         v127 = 0i64;
  929.         memset(v126, 0, sizeof(v126));
  930.         CVariableBitSet::CVariableBitSet(&v115);
  931.         l2::S_UserInfo::S_UserInfo(&v108);
  932.         if ( CVariableBitSet::Init(&v108.bitSet, 0x18u, 3u, v108.bits) )
  933.           CVariableBitSet::SetAllBits(&v108.bitSet);
  934.         CVariableBitSet::Clear(&v108.bitSet);
  935.         bits = 0;
  936.         v110 = 0i64;
  937.         v111 = 0;
  938.         if ( !CVariableBitSet::Init(&v115, 0x67u, 0xDu, &bits) )
  939.           goto LABEL_104;
  940.         if ( CVariableBitSet::IsSet(
  941.                &this->m_data->m_NeedUpdatePacketBitSet,
  942.                0,
  943.                17,
  944.                1,
  945.                2u,
  946.                4u,
  947.                3u,
  948.                5u,
  949.                0xFFFFFFFF,
  950.                0xFFFFFFFF,
  951.                0xFFFFFFFF) )
  952.         {
  953.           if ( String1[0] )
  954.             v36 = wcslen(String1);
  955.           else
  956.             v36 = 0i64;
  957.           std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::assign(
  958.             &v108.basic.wstrName,
  959.             String1,
  960.             v36);
  961.           v108.basic.nBuilder = m_nBuilder;
  962.           v108.basic.nRace = m_Race;
  963.           v108.basic.nSex = m_Sex;
  964.           v108.basic.nOriginalClass = m_nBaseClass;
  965.           v108.basic.nNowClass = m_nClass;
  966.           v108.basic.nLevel = m_nLevel;
  967.           CVariableBitSet::SetBit(&v108.bitSet, 1u);
  968.         }
  969.         if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x3Cu) )
  970.         {
  971.           v108.stat.nStr = v71;
  972.           v108.stat.nDex = v72;
  973.           v108.stat.nCon = v73;
  974.           v108.stat.nInt = v74;
  975.           v108.stat.nWit = v75;
  976.           v108.stat.nMen = v76;
  977.           v108.stat.nLuc = v77;
  978.           v108.stat.nCha = v78;
  979.           CVariableBitSet::SetBit(&v108.bitSet, 2u);
  980.         }
  981.         if ( CVariableBitSet::IsSet(
  982.                &this->m_data->m_NeedUpdatePacketBitSet,
  983.                8,
  984.                9,
  985.                10,
  986.                0xFFFFFFFF,
  987.                0xFFFFFFFF,
  988.                0xFFFFFFFF,
  989.                0xFFFFFFFF,
  990.                0xFFFFFFFF,
  991.                0xFFFFFFFF,
  992.                0xFFFFFFFF) )
  993.         {
  994.           v108.baseAttr = v79;
  995.           CVariableBitSet::SetBit(&v108.bitSet, 3u);
  996.         }
  997.         v37 = CDuelUserInfo::IsDuelDead(&this->m_DuelUserInfo, this)
  998.            || (unsigned __int8)CPledgeGameUser::IsPlayer(&this->m_PledgeGameUser) && !this->m_PledgeGameUser.m_IsAlive
  999.            || this->m_data->m_bIsAlive == 0;
  1000.         v38 = this->m_data;
  1001.         if ( !v37 != v38->m_bIsAlive )
  1002.           CVariableBitSet::SetBit(&v38->m_NeedUpdatePacketBitSet, 0x61u);
  1003.         if ( CVariableBitSet::IsSet(
  1004.                &this->m_data->m_NeedUpdatePacketBitSet,
  1005.                11,
  1006.                12,
  1007.                13,
  1008.                0xEu,
  1009.                6u,
  1010.                7u,
  1011.                0xFFFFFFFF,
  1012.                0xFFFFFFFF,
  1013.                0xFFFFFFFF,
  1014.                0xFFFFFFFF) )
  1015.         {
  1016.           v108.attribute.nHP = m_dHP;
  1017.           v108.attribute.nMP = m_dMP;
  1018.           v108.attribute.nCP = m_dCP;
  1019.           v108.attribute.nSP = m_nSP;
  1020.           v108.attribute.nExp = v113;
  1021.           v108.attribute.expRatio = v11;
  1022.           CVariableBitSet::SetBit(&v108.bitSet, 4u);
  1023.         }
  1024.         if ( CVariableBitSet::IsSet(
  1025.                &this->m_data->m_NeedUpdatePacketBitSet,
  1026.                77,
  1027.                78,
  1028.                -1,
  1029.                0xFFFFFFFF,
  1030.                0xFFFFFFFF,
  1031.                0xFFFFFFFF,
  1032.                0xFFFFFFFF,
  1033.                0xFFFFFFFF,
  1034.                0xFFFFFFFF,
  1035.                0xFFFFFFFF) )
  1036.         {
  1037.           v108.equipSlot.cEnchant = this->m_snEnchant;
  1038.           v108.equipSlot.hMinSetItemEnchanted = this->m_hMinNewSetItemEnchantedEffect;
  1039.           CVariableBitSet::SetBit(&v108.bitSet, 5u);
  1040.         }
  1041.         if ( CVariableBitSet::IsSet(
  1042.                &this->m_data->m_NeedUpdatePacketBitSet,
  1043.                18,
  1044.                21,
  1045.                19,
  1046.                0x16u,
  1047.                0x14u,
  1048.                0x17u,
  1049.                0xFFFFFFFF,
  1050.                0xFFFFFFFF,
  1051.                0xFFFFFFFF,
  1052.                0xFFFFFFFF) )
  1053.         {
  1054.           v108.hairShop.nFace = FaceForBroadcast;
  1055.           v108.hairShop.nHairShape = HairShapeForBroadcast;
  1056.           v108.hairShop.nHairColor = m_nHairColorEx;
  1057.           v108.hairShop.bIsUseHairAccessory = this->m_bHairAccFlag;
  1058.           CVariableBitSet::SetBit(&v108.bitSet, 6u);
  1059.         }
  1060.         if ( CVariableBitSet::IsSet(
  1061.                &this->m_data->m_NeedUpdatePacketBitSet,
  1062.                24,
  1063.                26,
  1064.                53,
  1065.                0x64u,
  1066.                0xFFFFFFFF,
  1067.                0xFFFFFFFF,
  1068.                0xFFFFFFFF,
  1069.                0xFFFFFFFF,
  1070.                0xFFFFFFFF,
  1071.                0xFFFFFFFF) )
  1072.         {
  1073.           v108.rideStoreCrystalizeAp.cYongmaType = m_rideType;
  1074.           v108.rideStoreCrystalizeAp.cPrivateStore = m_nPrivateStoreType;
  1075.           v108.rideStoreCrystalizeAp.canCrystallize = v86;
  1076.           v108.rideStoreCrystalizeAp.cRemainAbilityPoint = RemainAP;
  1077.           CVariableBitSet::SetBit(&v108.bitSet, 7u);
  1078.         }
  1079.         if ( CVariableBitSet::IsSet(
  1080.                &this->m_data->m_NeedUpdatePacketBitSet,
  1081.                37,
  1082.                59,
  1083.                -1,
  1084.                0xFFFFFFFF,
  1085.                0xFFFFFFFF,
  1086.                0xFFFFFFFF,
  1087.                0xFFFFFFFF,
  1088.                0xFFFFFFFF,
  1089.                0xFFFFFFFF,
  1090.                0xFFFFFFFF) )
  1091.         {
  1092.           v108.parameter.hAttackRange = this->GetAttackRange(this);
  1093.           v108.parameter.nPAttack = v88;
  1094.           v108.parameter.nPAttackSpeed = v89;
  1095.           v108.parameter.nPDefence = v90;
  1096.           v108.parameter.nPAvoid = v91;
  1097.           v108.parameter.nPHitRate = v92;
  1098.           v108.parameter.nPCriticalRate = v93;
  1099.           v108.parameter.nMAttack = v94;
  1100.           v108.parameter.nMCastingSpeed = v95;
  1101.           v108.parameter.nPCastingSpeed = v96;
  1102.           v108.parameter.nMAvoid = v97;
  1103.           v108.parameter.nMDefend = v98;
  1104.           v108.parameter.nMHitRate = v99;
  1105.           v108.parameter.nMCriticalRate = v100;
  1106.           CVariableBitSet::SetBit(&v108.bitSet, 8u);
  1107.         }
  1108.         if ( CVariableBitSet::IsSet(
  1109.                &this->m_data->m_NeedUpdatePacketBitSet,
  1110.                64,
  1111.                65,
  1112.                -1,
  1113.                0xFFFFFFFF,
  1114.                0xFFFFFFFF,
  1115.                0xFFFFFFFF,
  1116.                0xFFFFFFFF,
  1117.                0xFFFFFFFF,
  1118.                0xFFFFFFFF,
  1119.                0xFFFFFFFF) )
  1120.         {
  1121.           v108.posVehicle.nPosX = (int)this->m_MyPos.x;
  1122.           v108.posVehicle.nPosY = (int)this->m_MyPos.y;
  1123.           v108.posVehicle.nPosZ = (int)this->m_MyPos.z;
  1124.           v108.posVehicle.nVehicleID = des;
  1125.           CVariableBitSet::SetBit(&v108.bitSet, 0xAu);
  1126.         }
  1127.         if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x3Du) )
  1128.         {
  1129.           v39 = 0i64;
  1130.           v40 = this->m_nOrgSpeed;
  1131.           do
  1132.             v108.orgSpeed.nOrgSpeed[v39++] = *(_WORD *)v40++;
  1133.           while ( v39 < 8 );
  1134.           CVariableBitSet::SetBit(&v108.bitSet, 0xBu);
  1135.         }
  1136.         if ( CVariableBitSet::IsSet(
  1137.                &this->m_data->m_NeedUpdatePacketBitSet,
  1138.                63,
  1139.                62,
  1140.                -1,
  1141.                0xFFFFFFFF,
  1142.                0xFFFFFFFF,
  1143.                0xFFFFFFFF,
  1144.                0xFFFFFFFF,
  1145.                0xFFFFFFFF,
  1146.                0xFFFFFFFF,
  1147.                0xFFFFFFFF) )
  1148.         {
  1149.           v108.speedModifier.dMoveSpeedModifier = this->m_dMoveSpeedModifier;
  1150.           v108.speedModifier.dAttackSpeedModifier = this->m_dAttackSpeedModifier;
  1151.           CVariableBitSet::SetBit(&v108.bitSet, 0xCu);
  1152.         }
  1153.         if ( CVariableBitSet::IsSet(
  1154.                &this->m_data->m_NeedUpdatePacketBitSet,
  1155.                27,
  1156.                28,
  1157.                -1,
  1158.                0xFFFFFFFF,
  1159.                0xFFFFFFFF,
  1160.                0xFFFFFFFF,
  1161.                0xFFFFFFFF,
  1162.                0xFFFFFFFF,
  1163.                0xFFFFFFFF,
  1164.                0xFFFFFFFF) )
  1165.         {
  1166.           v108.collisionInfo = *(l2::UserInfo_CollisionInfo *)&this->m_dCollisionRadius;
  1167.           CVariableBitSet::SetBit(&v108.bitSet, 0xDu);
  1168.         }
  1169.         if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x24u) )
  1170.         {
  1171.           v41 = this->m_data;
  1172.           v108.attackInfo.nAttackType = v41->m_BaseAttribute.m_nAttackType;
  1173.           v108.attackInfo.nAttackValue = v41->m_BaseAttribute.m_nAttackValue;
  1174.           CVariableBitSet::SetBit(&v108.bitSet, 0xEu);
  1175.           v108.defend = *(l2::UserInfo_Defend *)this->m_data->m_BaseAttribute.m_nDefendValue;
  1176.           CVariableBitSet::SetBit(&v108.bitSet, 9u);
  1177.         }
  1178.         v114.m_p = this;
  1179.         v114.m_ort = ORT_FUNCTION_CHAIN;
  1180.         this->AddRef(
  1181.           this,
  1182.           "d:\\_jenkins\\workspace\\dailybuild work(live) vs2015\\lineage2build\\server\\main\\shared\\ThreadSafeLibrary.h",
  1183.           155i64,
  1184.           ORT_FUNCTION_CHAIN);
  1185.         v42 = CPartyRoomRegistry::inst();
  1186.         DoesShowPartyWantedMessage = CPartyRoomRegistry::DoesShowPartyWantedMessage(v42, &v114);
  1187.         CVariableBitSet::SetCharValue_IfModifed(
  1188.           &this->m_data->m_NeedUpdatePacketBitSet,
  1189.           &this->m_cShowPartyWantedMessage,
  1190.           DoesShowPartyWantedMessage != 0,
  1191.           0x52u);
  1192.         if ( CVariableBitSet::IsSet(
  1193.                &this->m_data->m_NeedUpdatePacketBitSet,
  1194.                79,
  1195.                51,
  1196.                50,
  1197.                0x34u,
  1198.                0xFFFFFFFF,
  1199.                0xFFFFFFFF,
  1200.                0xFFFFFFFF,
  1201.                0xFFFFFFFF,
  1202.                0xFFFFFFFF,
  1203.                0xFFFFFFFF)
  1204.           || CVariableBitSet::IsSet(
  1205.                &this->m_data->m_NeedUpdatePacketBitSet,
  1206.                48,
  1207.                47,
  1208.                49,
  1209.                0x46u,
  1210.                0x52u,
  1211.                0xFFFFFFFF,
  1212.                0xFFFFFFFF,
  1213.                0xFFFFFFFF,
  1214.                0xFFFFFFFF,
  1215.                0xFFFFFFFF) )
  1216.         {
  1217.           if ( this->m_sNickName[0] )
  1218.             v44 = wcslen(this->m_sNickName);
  1219.           else
  1220.             v44 = 0i64;
  1221.           std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::assign(
  1222.             &v108.pledge.wstrNickName,
  1223.             this->m_sNickName,
  1224.             v44);
  1225.           v45 = this->m_data;
  1226.           v108.pledge.nPledgetype = v45->m_nPledgeType;
  1227.           v108.pledge.nPledgeSId = this->m_nPledgeSid;
  1228.           v108.pledge.nPledgeEmblemId = this->m_nPledgeEmblemDbId;
  1229.           v108.pledge.nPledgeCrestId = this->m_nPledgeCrestDbId;
  1230.           v108.pledge.nPledgePower = this->m_pledgePower;
  1231.           v108.pledge.cIsPledgeMaster = (this->m_nMyStatus & 0x40) != 0;
  1232.           v108.pledge.nAllianceId = v45->m_nAllianceId;
  1233.           v108.pledge.nAllianceCrestId = this->m_nAllianceCrestDbId;
  1234.           v108.pledge.cIsShowPartyWantedMessage = this->m_cShowPartyWantedMessage;
  1235.           CVariableBitSet::SetBit(&v108.bitSet, 0xFu);
  1236.         }
  1237.         if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x43u) )
  1238.         {
  1239.           v108.nMyStatus = this->m_nMyStatus;
  1240.           CVariableBitSet::SetBit(&v108.bitSet, 0);
  1241.         }
  1242.         v46 = this->CalcCriminalRate(this);
  1243.         CVariableBitSet::SetIntValue_IfModifed(
  1244.           &this->m_data->m_NeedUpdatePacketBitSet,
  1245.           (unsigned int *)&this->m_nCriminalRate,
  1246.           v46,
  1247.           0x45u);
  1248.         SocialClass = User::GetSocialClass(this);
  1249.         CVariableBitSet::SetIntValue_IfModifed(
  1250.           &this->m_data->m_NeedUpdatePacketBitSet,
  1251.           (unsigned int *)&this->m_nSocialClass,
  1252.           SocialClass,
  1253.           0x23u);
  1254.         v48 = this->m_data;
  1255.         v49 = v48->m_nPKCount - v48->m_nPKPardonCount;
  1256.         m_nDuelCount = v48->m_nDuelCount;
  1257.         if ( CVariableBitSet::IsSet(
  1258.                &v48->m_NeedUpdatePacketBitSet,
  1259.                38,
  1260.                69,
  1261.                40,
  1262.                0x27u,
  1263.                0x23u,
  1264.                0x1Eu,
  1265.                0x1Du,
  1266.                0x1Fu,
  1267.                0x20u,
  1268.                0x21u) )
  1269.         {
  1270.           m_nVoteCount = this->m_nVoteCount;
  1271.           v108.social.nGuility = this->GetGuilty(this);
  1272.           v108.social.nCriminalRate = this->m_nCriminalRate;
  1273.           v52 = this->m_data;
  1274.           v108.social.cIsNobless = v52->m_nNoblessType;
  1275.           v108.social.cIsHero = v52->m_nHeroType;
  1276.           v108.social.nSocialClass = this->m_nSocialClass;
  1277.           v108.social.nPkCount = v49;
  1278.           v108.social.nDuelCount = m_nDuelCount;
  1279.           v108.social.m_sVoteCount = m_nVoteCount;
  1280.           v108.social.m_sBonusCount = this->m_sBonusCount;
  1281.           CVariableBitSet::SetBit(&v108.bitSet, 0x10u);
  1282.         }
  1283.         if ( CVariableBitSet::IsSet(
  1284.                &this->m_data->m_NeedUpdatePacketBitSet,
  1285.                34,
  1286.                45,
  1287.                42,
  1288.                0x2Bu,
  1289.                0xFFFFFFFF,
  1290.                0xFFFFFFFF,
  1291.                0xFFFFFFFF,
  1292.                0xFFFFFFFF,
  1293.                0xFFFFFFFF,
  1294.                0xFFFFFFFF) )
  1295.         {
  1296.           v108.point.nVitalPoint = this->m_nVitalPoint;
  1297.           v108.point.cBR_LectureMark = this->m_BR_LectureMark;
  1298.           v53 = this->m_data;
  1299.           v108.point.nPVPPoint = v53->m_nPVPPoint;
  1300.           v108.point.nRaidPoint = v53->m_nRaidPointAsset;
  1301.           CVariableBitSet::SetBit(&v108.bitSet, 0x11u);
  1302.         }
  1303.         if ( CVariableBitSet::IsSet(
  1304.                &this->m_data->m_NeedUpdatePacketBitSet,
  1305.                54,
  1306.                55,
  1307.                44,
  1308.                0x47u,
  1309.                0x48u,
  1310.                0x38u,
  1311.                0x39u,
  1312.                0x66u,
  1313.                0xFFFFFFFF,
  1314.                0xFFFFFFFF) )
  1315.         {
  1316.           v108.etc1.nSkillModMaxDecoSlotCount = this->m_SkillMod.m_dMaxDecoSlotCount;
  1317.           v108.etc1.nSkillModMaxJewelSlotCount = this->m_SkillMod.m_dMaxJewelSlotCount;
  1318.           v108.etc1.cEventMatchTeamID = this->m_cEventMatchTeamID;
  1319.           v108.etc1.nFootEffect = this->m_FootEffect;
  1320.           v108.etc1.nSkillModMaxAgathionMainSlotCount = this->m_SkillMod.m_dMaxAgathionMainSlotCount;
  1321.           v108.etc1.nSkillModMaxAgathionSubSlotCount = this->m_SkillMod.m_dMaxAgathionSubSlotCount;
  1322.           v108.etc1.nSkillModMaxArtifactSlotGroupCount = this->m_SkillMod.m_nActiveArtifactSlotGroup;
  1323.           CVariableBitSet::SetBit(&v108.bitSet, 0x12u);
  1324.         }
  1325.         if ( isGMPacket )
  1326.         {
  1327.           memset(v123, 0, sizeof(v123));
  1328.           rStream.__vftable = (network::Stream_vtbl *)&network::Stream::`vftable';
  1329.          rStream.m_pBuffer = v123;
  1330.          rStream.m_pCursor = v123;
  1331.          rStream.m_bufferSize = 20480;
  1332.          if ( !l2::S_UserInfo::Encode(&v108, &rStream) )
  1333.          {
  1334.            LODWORD(nOrgSpeed3) = 6485;
  1335.            CLog::Add(&Log, LOG_ERROR, (wchar_t *)L"[%s][%d] GMPacket Encode Failed", L"User.cpp", nOrgSpeed3);
  1336. LABEL_104:
  1337.            std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
  1338.              &v108.pledge.wstrNickName,
  1339.              1,
  1340.              0i64);
  1341.            std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
  1342.              &v108.basic.wstrName,
  1343.              1,
  1344.              0i64);
  1345.            CVariableBitSet::~CVariableBitSet(&v108.bitSet);
  1346.            v108.__vftable = (l2::S_UserInfo_vtbl *)&network::IPacket::`vftable';
  1347.             CVariableBitSet::~CVariableBitSet(&v115);
  1348.             v125 = &IPacketHelper::`vftable';
  1349.            goto LABEL_105;
  1350.          }
  1351.          pSocket->Send(pSocket, "chddb", 254i64);
  1352.        }
  1353.        else
  1354.        {
  1355.          Singleton<CCursedWeaponMgr>::inst();
  1356.          m_nCursedWeaponClassId = this->m_nCursedWeaponClassId;
  1357.          if ( m_nCursedWeaponClassId <= 0 )
  1358.          {
  1359.            WeaponLevel = 0;
  1360.          }
  1361.          else
  1362.          {
  1363.            v55 = Singleton<CCursedWeaponMgr>::inst();
  1364.            WeaponLevel = CCursedWeaponMgr::GetWeaponLevel(v55, m_nCursedWeaponClassId);
  1365.          }
  1366.          CVariableBitSet::SetIntValue_IfModifed(
  1367.            &this->m_data->m_NeedUpdatePacketBitSet,
  1368.            (unsigned int *)&this->m_nCursedWeaponLevel,
  1369.            WeaponLevel,
  1370.            0x50u);
  1371.          if ( this->GetMorphID(this) )
  1372.          {
  1373.            m_transformID = this->GetMorphID(this);
  1374.            v58 = &this->m_data->m_NeedUpdatePacketBitSet;
  1375.          }
  1376.          else
  1377.          {
  1378.            v59 = this->m_data;
  1379.            v58 = &v59->m_NeedUpdatePacketBitSet;
  1380.            m_transformID = v59->m_transformID;
  1381.          }
  1382.          CVariableBitSet::SetIntValue_IfModifed(v58, (unsigned int *)&this->m_nTransformId, m_transformID, 0x51u);
  1383.          if ( CVariableBitSet::IsSet(
  1384.                 &this->m_data->m_NeedUpdatePacketBitSet,
  1385.                 83,
  1386.                 84,
  1387.                 -1,
  1388.                 0xFFFFFFFF,
  1389.                 0xFFFFFFFF,
  1390.                 0xFFFFFFFF,
  1391.                 0xFFFFFFFF,
  1392.                 0xFFFFFFFF,
  1393.                 0xFFFFFFFF,
  1394.                 0xFFFFFFFF) )
  1395.          {
  1396.            v60 = this->m_data;
  1397.            v108.etc2.cEnvironment = v60->m_Environment;
  1398.            v108.etc2.cIsFastMoveMode = v60->m_MoveMode != MT_SLOW;
  1399.            CVariableBitSet::SetBit(&v108.bitSet, 0x13u);
  1400.          }
  1401.          if ( CVariableBitSet::IsSet(
  1402.                 &this->m_data->m_NeedUpdatePacketBitSet,
  1403.                 85,
  1404.                 86,
  1405.                 -1,
  1406.                 0xFFFFFFFF,
  1407.                 0xFFFFFFFF,
  1408.                 0xFFFFFFFF,
  1409.                 0xFFFFFFFF,
  1410.                 0xFFFFFFFF,
  1411.                 0xFFFFFFFF,
  1412.                 0xFFFFFFFF) )
  1413.          {
  1414.            v108.etc3 = *(l2::UserInfo_Etc3 *)&this->m_nCharNameColor;
  1415.            CVariableBitSet::SetBit(&v108.bitSet, 0x14u);
  1416.          }
  1417.          if ( CVariableBitSet::IsSet(
  1418.                 &this->m_data->m_NeedUpdatePacketBitSet,
  1419.                 25,
  1420.                 87,
  1421.                 80,
  1422.                 0xFFFFFFFF,
  1423.                 0xFFFFFFFF,
  1424.                 0xFFFFFFFF,
  1425.                 0xFFFFFFFF,
  1426.                 0xFFFFFFFF,
  1427.                 0xFFFFFFFF,
  1428.                 0xFFFFFFFF) )
  1429.          {
  1430.            v108.etc4.nYongmaClass = m_rideClassID;
  1431.            v108.etc4.hInvenLimit = v102;
  1432.            v108.etc4.nCursedWeaponLevel = this->m_nCursedWeaponLevel;
  1433.            CVariableBitSet::SetBit(&v108.bitSet, 0x15u);
  1434.          }
  1435.          CVariableBitSet::SetCharValue_IfModifed(
  1436.            &this->m_data->m_NeedUpdatePacketBitSet,
  1437.            &this->m_cPVPRestrainStatus,
  1438.            this->KillPVPPointChecker.m_bStatus,
  1439.            0x58u);
  1440.          UserFlag = CPledgeGameSystem::GetUserFlag(&g_PledgeGameSystem, this);
  1441.          CVariableBitSet::SetCharValue_IfModifed(
  1442.            &this->m_data->m_NeedUpdatePacketBitSet,
  1443.            &this->m_cPledgeGameMemberFlag,
  1444.            UserFlag,
  1445.            0x5Eu);
  1446.          if ( CVariableBitSet::IsSet(
  1447.                 &this->m_data->m_NeedUpdatePacketBitSet,
  1448.                 88,
  1449.                 89,
  1450.                 90,
  1451.                 0x5Eu,
  1452.                 0xFFFFFFFF,
  1453.                 0xFFFFFFFF,
  1454.                 0xFFFFFFFF,
  1455.                 0xFFFFFFFF,
  1456.                 0xFFFFFFFF,
  1457.                 0xFFFFFFFF) )
  1458.          {
  1459.            v108.etc5.cPVPRestrainStatus = this->m_cPVPRestrainStatus;
  1460.            v108.etc5.nUltimateSkillGauge = this->m_data->m_UltimateSkillGauge;
  1461.            v108.etc5.cIsSheathingWeapon = this->m_IsSheathingWeapon;
  1462.            v108.etc5.cPledgeGameMemberFlag = this->m_cPledgeGameMemberFlag;
  1463.            CVariableBitSet::SetBit(&v108.bitSet, 0x16u);
  1464.          }
  1465.          memset(v124, 0, sizeof(v124));
  1466.          v116.__vftable = (network::Stream_vtbl *)&network::Stream::`vftable';
  1467.           v116.m_pBuffer = v124;
  1468.           v116.m_pCursor = v124;
  1469.           v116.m_bufferSize = 20480;
  1470.           if ( !l2::S_UserInfo::Encode(&v108, &v116) )
  1471.           {
  1472.             LODWORD(nOrgSpeed3a) = 6614;
  1473.             CLog::Add(&Log, LOG_ERROR, (wchar_t *)L"[%s][%d] GMPacket Encode Failed", L"User.cpp", nOrgSpeed3a);
  1474.             goto LABEL_104;
  1475.           }
  1476.           pSocket->Send(
  1477.             pSocket,
  1478.             "cddb",
  1479.             50i64,
  1480.             this->m_nId,
  1481.             LODWORD(v116.m_pCursor) - LODWORD(v116.m_pBuffer),
  1482.             LODWORD(v116.m_pCursor) - LODWORD(v116.m_pBuffer),
  1483.             v116.m_pBuffer);
  1484.           if ( !this->m_bIsSendUserInfoCompleted )
  1485.             this->m_bIsSendUserInfoCompleted = 1;
  1486.         }
  1487.         std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
  1488.           &v108.pledge.wstrNickName,
  1489.           1,
  1490.           0i64);
  1491.         std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
  1492.           &v108.basic.wstrName,
  1493.           1,
  1494.           0i64);
  1495.         CVariableBitSet::~CVariableBitSet(&v108.bitSet);
  1496.         v108.__vftable = (l2::S_UserInfo_vtbl *)&network::IPacket::`vftable';
  1497.        CVariableBitSet::~CVariableBitSet(&v115);
  1498.        v125 = &IPacketHelper::`vftable';
  1499.         CTimer::EndJob(&g_Timer, &JOB_SEND_EXUSERINFO);
  1500.         return;
  1501.       }
  1502.       v32 = this->GetMyShuttleID(this);
  1503.     }
  1504.     else
  1505.     {
  1506.       v32 = v31->GetMyAirShipID(this);
  1507.     }
  1508.     v29 = v32;
  1509.     goto LABEL_23;
  1510.   }
  1511.   CLog::Add(&Log, LOG_ERROR, (wchar_t *)L"[%s][%d] pSocket is NULL", L"User.cpp", 5845);
  1512. LABEL_105:
  1513.   CTimer::EndJob(&g_Timer, &JOB_SEND_EXUSERINFO);
  1514. }
  1515. void __fastcall CNPC::SendCharInfo_internal(CNPC *this, User *pUser, bool bInSight)
  1516. {
  1517.   DroidNPCInfo *p_m_DroidNPCInfo; // r12
  1518.   CSharedCreatureData *m_data; // rax
  1519.   long double v6; // xmm6_8
  1520.   long double v7; // xmm7_8
  1521.   const int *p_nKarma; // rcx
  1522.   CSharedCreatureData *v9; // rax
  1523.   int m_length; // r13d
  1524.   int cHairAccFlag; // ebx
  1525.   int m_dBaseMP; // edi
  1526.   int m_dMP; // esi
  1527.   int m_dBaseHP; // r14d
  1528.   int m_dHP; // r15d
  1529.   int nPledgeType_low; // r12d
  1530.   const wchar_t *v17; // rax
  1531.   CUserSocket *v18; // rax
  1532.   int nHairShapeEx; // [rsp+388h] [rbp-80h]
  1533.   int nFaceEx; // [rsp+38Ch] [rbp-7Ch]
  1534.   int m_bIsAlive; // [rsp+390h] [rbp-78h]
  1535.   int m_assembledCount; // [rsp+394h] [rbp-74h]
  1536.   int Yaw_low; // [rsp+398h] [rbp-70h]
  1537.   int cHero; // [rsp+39Ch] [rbp-6Ch]
  1538.   int cNobless; // [rsp+3A0h] [rbp-68h]
  1539.   int m_Environment_low; // [rsp+3A4h] [rbp-64h]
  1540.   BOOL m_bIsInCombatMode; // [rsp+3A8h] [rbp-60h]
  1541.   BOOL v28; // [rsp+3ACh] [rbp-5Ch]
  1542.   BOOL v29; // [rsp+3B0h] [rbp-58h]
  1543.   int v30; // [rsp+3B4h] [rbp-54h]
  1544.   int v31; // [rsp+3B8h] [rbp-50h]
  1545.   int v32; // [rsp+3BCh] [rbp-4Ch]
  1546.   int nVariationOpt2; // [rsp+3C0h] [rbp-48h]
  1547.   int nVariationOpt1; // [rsp+3C4h] [rbp-44h]
  1548.   int cGender; // [rsp+3C8h] [rbp-40h]
  1549.   int cRace; // [rsp+3CCh] [rbp-3Ch]
  1550.   int v37; // [rsp+3D0h] [rbp-38h]
  1551.   int v38; // [rsp+3D4h] [rbp-34h]
  1552.   int v39; // [rsp+3D8h] [rbp-30h]
  1553.   OrgSpeeds s; // [rsp+3E0h] [rbp-28h] BYREF
  1554.   __int64 v41[5]; // [rsp+400h] [rbp-8h] BYREF
  1555.   char v42[128]; // [rsp+428h] [rbp+20h] BYREF
  1556.   CPacketHelperEx<20480> ph; // [rsp+4A8h] [rbp+A0h] BYREF
  1557.   CPacketHelperEx<20480> v44; // [rsp+54B8h] [rbp+50B0h] BYREF
  1558.   int nHairColorEx; // [rsp+A550h] [rbp+A148h]
  1559.  
  1560.   v41[3] = -2i64;
  1561.   if ( this->m_isDroidNPC )
  1562.   {
  1563.     p_m_DroidNPCInfo = &this->m_DroidNPCInfo;
  1564.     if ( this != -30264i64 )
  1565.     {
  1566.       this->GetPos(this, v41);
  1567.       m_data = this->m_data;
  1568.       v31 = m_data->m_dParam[5];
  1569.       v30 = m_data->m_dParam[6];
  1570.       memset(&s, 0, sizeof(s));
  1571.       CNPC::GetOrgSpeeds(this, &s);
  1572.       v6 = this->GetMoveModifier(this);
  1573.       v7 = this->GetAttackModifier(this);
  1574.       m_bIsAlive = this->m_data->m_bIsAlive;
  1575.       memset(v42, 0, sizeof(v42));
  1576.       p_nKarma = &MAX_CRIMINAL_RATE;
  1577.       if ( p_m_DroidNPCInfo->nKarma < 500 )
  1578.         p_nKarma = &p_m_DroidNPCInfo->nKarma;
  1579.       v32 = *p_nKarma;
  1580.       if ( !p_m_DroidNPCInfo->cHairAccFlag || p_m_DroidNPCInfo->nSlotHair == -1 && p_m_DroidNPCInfo->nSlotHair2 == -1 )
  1581.       {
  1582.         nFaceEx = p_m_DroidNPCInfo->nFaceEx;
  1583.         if ( !nFaceEx )
  1584.           nFaceEx = p_m_DroidNPCInfo->nFace;
  1585.         nHairShapeEx = p_m_DroidNPCInfo->nHairShapeEx;
  1586.         if ( !nHairShapeEx )
  1587.           nHairShapeEx = p_m_DroidNPCInfo->nHairShape;
  1588.         nHairColorEx = p_m_DroidNPCInfo->nHairColorEx;
  1589.         if ( nHairColorEx )
  1590.           goto LABEL_15;
  1591.       }
  1592.       else
  1593.       {
  1594.         nFaceEx = p_m_DroidNPCInfo->nFace;
  1595.         nHairShapeEx = p_m_DroidNPCInfo->nHairShape;
  1596.       }
  1597.       nHairColorEx = p_m_DroidNPCInfo->nHairColor;
  1598. LABEL_15:
  1599.       ph.__vftable = &CPacketHelperEx<20480>::`vftable';
  1600.      memset(ph.m_buffer, 0, 20488);
  1601.      CCreature::MakeAbnormalVisualEffectPacket(this, &ph);
  1602.      v44.__vftable = &CPacketHelperEx<20480>::`vftable';
  1603.       memset(v44.m_buffer, 0, 20488);
  1604.       v9 = this->m_data;
  1605.       v29 = (v9->m_StopMode & 0xFFFFFFFD) != 0;
  1606.       m_length = ph.m_length;
  1607.       m_assembledCount = ph.m_assembledCount;
  1608.       Yaw_low = LOWORD(v9->m_Dir.Yaw);
  1609.       v37 = *&v41[2];
  1610.       v38 = *&v41[1];
  1611.       v39 = *v41;
  1612.       nVariationOpt2 = p_m_DroidNPCInfo->nVariationOpt2;
  1613.       nVariationOpt1 = p_m_DroidNPCInfo->nVariationOpt1;
  1614.       cHairAccFlag = p_m_DroidNPCInfo->cHairAccFlag;
  1615.       m_dBaseMP = v9->m_dBaseMP;
  1616.       m_dMP = v9->m_dMP;
  1617.       m_dBaseHP = v9->m_dBaseHP;
  1618.       m_dHP = v9->m_dHP;
  1619.       nPledgeType_low = SLOWORD(p_m_DroidNPCInfo->nPledgeType);
  1620.       cHero = this->m_DroidNPCInfo.cHero;
  1621.       cNobless = this->m_DroidNPCInfo.cNobless;
  1622.       m_Environment_low = SLOBYTE(v9->m_Environment);
  1623.       m_bIsInCombatMode = v9->m_bIsInCombatMode;
  1624.       v28 = v9->m_MoveMode != MT_SLOW;
  1625.       cGender = this->m_DroidNPCInfo.cGender;
  1626.       cRace = this->m_DroidNPCInfo.cRace;
  1627.       v17 = this->GetName(this);
  1628.       CPacketHelperEx<20480>::Assemble(
  1629.         &v44,
  1630.         "ccdddddShcdddddddddddddddddddcdddddddddcdddhhhhhhhhffffdddSddddccccccchbcchdddccdcccdddddchdcdddcdddddcdbccc",
  1631.         49i64,
  1632.         !bInSight,
  1633.         v39,
  1634.         v38,
  1635.         v37,
  1636.         0i64,
  1637.         this->m_data->m_nId,
  1638.         v17,
  1639.         cRace,
  1640.         cGender,
  1641.         this->m_DroidNPCInfo.nBaseClass,
  1642.         this->m_DroidNPCInfo.nSlotUnderware,
  1643.         this->m_DroidNPCInfo.nSlotHead,
  1644.         this->m_DroidNPCInfo.nSlotRightHand,
  1645.         this->m_DroidNPCInfo.nSlotLeftHand,
  1646.         this->m_DroidNPCInfo.nSlotGloves,
  1647.         this->m_DroidNPCInfo.nSlotChest,
  1648.         this->m_DroidNPCInfo.nSlotLegs,
  1649.         this->m_DroidNPCInfo.nSlotFeet,
  1650.         this->m_DroidNPCInfo.nSlotBack,
  1651.         this->m_DroidNPCInfo.nSlotBothHands,
  1652.         this->m_DroidNPCInfo.nSlotHair,
  1653.         this->m_DroidNPCInfo.nSlotHair2,
  1654.         nVariationOpt1,
  1655.         nVariationOpt2,
  1656.         nVariationOpt1,
  1657.         nVariationOpt2,
  1658.         nVariationOpt1,
  1659.         nVariationOpt2,
  1660.         0i64,
  1661.         this->m_DroidNPCInfo.nShapeShiftRightHand,
  1662.         this->m_DroidNPCInfo.nShapeShiftLeftHand,
  1663.         this->m_DroidNPCInfo.nShapeShiftBothHands,
  1664.         this->m_DroidNPCInfo.nShapeShiftGloves,
  1665.         this->m_DroidNPCInfo.nShapeShiftChest,
  1666.         this->m_DroidNPCInfo.nShapeShiftLegs,
  1667.         this->m_DroidNPCInfo.nShapeShiftFeet,
  1668.         this->m_DroidNPCInfo.nShapeShiftHair,
  1669.         this->m_DroidNPCInfo.nShapeShfitHair2,
  1670.         0i64,
  1671.         v32,
  1672.         v31,
  1673.         v30,
  1674.         SLOWORD(s.m_nOrgSpeed0),
  1675.         SLOWORD(s.m_nOrgSpeed1),
  1676.         SLOWORD(s.m_nOrgSpeed2),
  1677.         SLOWORD(s.m_nOrgSpeed3),
  1678.         SLOWORD(s.m_nOrgSpeed4),
  1679.         SLOWORD(s.m_nOrgSpeed5),
  1680.         SLOWORD(s.m_nOrgSpeed6),
  1681.         SLOWORD(s.m_nOrgSpeed7),
  1682.         v6,
  1683.         v7,
  1684.         this->m_DroidNPCInfo.dCollisionRadius,
  1685.         this->m_DroidNPCInfo.dCollisionHeight,
  1686.         nFaceEx,
  1687.         nHairShapeEx,
  1688.         nHairColorEx,
  1689.         this->m_sNickName,
  1690.         this->m_DroidNPCInfo.nPledgeSID,
  1691.         this->m_DroidNPCInfo.nPledgeCrestDBID,
  1692.         this->m_DroidNPCInfo.nAllianceDBID,
  1693.         this->m_DroidNPCInfo.nAllianceCrestDBID,
  1694.         v29,
  1695.         v28,
  1696.         m_bIsInCombatMode,
  1697.         m_bIsAlive == 0,
  1698.         0i64,
  1699.         0i64,
  1700.         0i64,
  1701.         0i64,
  1702.         0,
  1703.         v42,
  1704.         0i64,
  1705.         m_Environment_low,
  1706.         this->m_DroidNPCInfo.nBonusCount,
  1707.         0i64,
  1708.         this->m_DroidNPCInfo.nNowClass,
  1709.         0i64,
  1710.         this->m_DroidNPCInfo.nEnchantWeapon,
  1711.         0i64,
  1712.         this->m_DroidNPCInfo.nPledgeEmblemDBID,
  1713.         cNobless,
  1714.         cHero,
  1715.         0i64,
  1716.         0i64,
  1717.         0i64,
  1718.         0i64,
  1719.         this->m_DroidNPCInfo.nCharNameColor,
  1720.         Yaw_low,
  1721.         0i64,
  1722.         nPledgeType_low,
  1723.         this->m_DroidNPCInfo.nNickNameColor,
  1724.         0i64,
  1725.         0i64,
  1726.         0i64,
  1727.         0i64,
  1728.         0,
  1729.         0i64,
  1730.         m_dHP,
  1731.         m_dBaseHP,
  1732.         m_dMP,
  1733.         m_dBaseMP,
  1734.         0i64,
  1735.         m_assembledCount,
  1736.         m_length,
  1737.         ph.m_buffer,
  1738.         0i64,
  1739.         cHairAccFlag,
  1740.         this->m_DroidNPCInfo.nAP);
  1741.       if ( pUser )
  1742.       {
  1743.         if ( pUser->GetSocket(pUser) )
  1744.         {
  1745.           v18 = pUser->GetSocket(pUser);
  1746.           v18->Send(v18, "b", v44.m_length, v44.m_buffer);
  1747.         }
  1748.       }
  1749.       else
  1750.       {
  1751.         this->GetPos(this, &s);
  1752.       }
  1753.     }
  1754.   }
  1755. }
  1756. void __fastcall CCreature::Init(CCreature *this)
  1757. {
  1758.   __int64 i; // rcx
  1759.   CContributeData *v3; // rax
  1760.   CContributeData *v4; // rax
  1761.   wchar_t *m_sNickName; // rdi
  1762.   __int64 j; // rcx
  1763.   FVector v; // [rsp+28h] [rbp-50h] BYREF
  1764.   FVector v8; // [rsp+40h] [rbp-38h] BYREF
  1765.  
  1766.   this->pClassConstant = &DEFAULT_CLASS_CONSTANT;
  1767.   *(_QWORD *)this->m_attackLeaderId = 0i64;
  1768.   *(_QWORD *)&this->m_attackLeaderId[2] = 0i64;
  1769.   this->m_data->m_iLastArrowIndex = -1;
  1770.   for ( i = 220i64; i < 472; i += 4i64 )
  1771.     *(_DWORD *)((char *)&this->m_data->__vftable + i) = -1;
  1772.   v3 = (CContributeData *)CGeneralObject::operator new(0x1E0ui64);
  1773.   if ( v3 )
  1774.     CContributeData::CContributeData(v3);
  1775.   else
  1776.     v4 = 0i64;
  1777.   this->m_pContribute = v4;
  1778.   this->m_bDietMode = 0;
  1779.   this->m_dGMSpeed = 1.0;
  1780.   this->m_dSpeedModByWeight = 1.0;
  1781.   this->m_dHPRegenModByWeight = 1.0;
  1782.   this->m_dMPRegenModByWeight = 1.0;
  1783.   this->m_nSetItemClassId = 0;
  1784.   std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const,int>>,0>>::clear(&this->m_mapNewSetItem);
  1785.   std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const,int>>,0>>::clear(&this->m_mapShapeShiftedSetItem);
  1786.   this->m_data->m_nCanHarvest = 0;
  1787.   this->m_bLeft = 0;
  1788.   this->m_AlwaysSkillSuccess = 0;
  1789.   this->m_dMeleeMultiTargetBias = 1.0;
  1790.   *(_WORD *)&this->m_bAttackedByRange = 0;
  1791.   this->m_bIgnoreRegeneration = 0;
  1792.   this->PrepareLookNeighbor = 0;
  1793.   this->m_bMoving = 0;
  1794.   memset(&v, 0, sizeof(v));
  1795.   FVector::operator=(&this->m_vMovingDirection, &v);
  1796.   this->m_nLastTick = -1;
  1797.   this->m_data->m_bIsActive = 0;
  1798.   this->m_data->m_ClanId[0] = 0;
  1799.   this->m_data->m_nClanHelpRange = 500;
  1800.   this->m_data->m_nPrivateID = 0;
  1801.   *(_QWORD *)&this->m_dwDamagedTick = 0i64;
  1802.   CSharedCreatureData::DeleteAllAbnormalStatus(this->m_data);
  1803.   this->m_data->m_bMoveTrouble = 0;
  1804.   this->m_data->m_dwPathFindFailCount = 0;
  1805.   memset(&v8, 0, sizeof(v8));
  1806.   FVector::operator=(&this->m_vPosOnTick, &v8);
  1807.   this->m_data->m_BossID = 0;
  1808.   this->SetMyAirShipID(this, 0);
  1809.   *(_WORD *)&this->m_AvoidAgroWhenEnterWorld = 0;
  1810.   m_sNickName = this->m_sNickName;
  1811.   for ( j = 25i64; j; --j )
  1812.     *m_sNickName++ = 0;
  1813.   this->m_nLaunchedSkills = 0;
  1814.   this->m_bDoubleCastingMod = 0;
  1815.   this->m_OnSummonStatBonus = 0;
  1816.   this->m_bCanEscape = 1;
  1817.   this->nCountAttacked = 0;
  1818.   this->dDPSBonusForBuilder = 1.0;
  1819.   this->m_InitializingSkillMod = 0;
  1820.   *(_QWORD *)&this->m_nWeaponPAttackBonusByLevel = 0i64;
  1821.   *(_DWORD *)&this->m_hMinNewSetItemEnchantedEffect = 0;
  1822.   CVariableBitSet::Init(
  1823.     &this->m_data->m_NeedUpdatePacketBitSet,
  1824.     0x67u,
  1825.     0x10u,
  1826.     (unsigned __int8 *)this->m_data->m_bNeedUpdatePacketBits);
  1827.   CVariableBitSet::SetAllBits(&this->m_data->m_NeedUpdatePacketBitSet);
  1828.   this->m_nDamageExceptAttackerId = 0;
  1829.   this->m_dExtraParam[0] = 0.0;
  1830.   this->m_dExtraParam[1] = 0.0;
  1831.   this->m_nChainAttackCount = 0;
  1832.   this->m_DefenceFatalBlowSuccessBonus.m_Diff = 0.0;
  1833.   this->m_DefenceFatalBlowSuccessBonus.m_Per = 1.0;
  1834.   this->m_lSaveSkillReuseDelay = 0;
  1835. }
  1836.  
  1837.