void __fastcall User::SendUserInfo(User *this, CUserSocket *pSocket, CVariableBitSet *pNeedUpdatePacketBitSetToBackup)
{
CSharedCreatureData *m_data; // rax
CUserSocket *v5; // rax
const wchar_t *v6; // rax
CSharedCreatureData *v7; // r8
CSharedCreatureData *v8; // rcx
CSharedCreatureData *v9; // rcx
CSharedCreatureData *v10; // rcx
int *v11; // rbx
int *m_nOrgSpeed; // rdi
__int64 v13; // r14
long double v14; // xmm0_8
long double v15; // xmm0_8
__int64 v16; // r15
bool v17; // al
long double *p_m_dCollisionRadius; // rdx
CVariableBitSet *p_m_NeedUpdatePacketBitSet; // rcx
long double m_orgCollisionHeight; // xmm2_8
CSharedCreatureData *v21; // rax
unsigned int v22; // r8d
bool v23; // zf
User_vtbl *v24; // rax
unsigned int v25; // eax
FVector *p_m_MyPos; // r8
unsigned int MyStatus; // eax
unsigned int VitalPoint; // eax
unsigned int SocialClass; // eax
__int64 v30; // rcx
int *v31; // rax
CSharedCreatureData *v32; // rax
__int64 v33; // r14
_DWORD *v34; // r13
char *v35; // rdi
CSharedCreatureData *v36; // rbx
CSharedFactory<CCreature,CSharedCreatureData,CSharedCreatureConstant,&SharedDefine_Creature> *v37; // rax
const InstantZoneKey *v38; // rbx
InstantZoneKey *v39; // rdi
CSharedCreatureData *v40; // rax
unsigned int v41; // edi
std::_Tree_node<std::pair<int const ,std::pair<CCubic *,CubicActivationInfo> >,void *> *Left; // rbx
int v43; // eax
std::_Tree_node<std::pair<int const ,std::pair<CCubic *,CubicActivationInfo> >,void *> *Right; // rax
std::_Tree_node<std::pair<int const ,std::pair<CCubic *,CubicActivationInfo> >,void *> *i; // rax
unsigned int v46; // eax
unsigned int PledgePowerByGrade; // eax
char EventMatchTeamId; // al
CUserSocket *v49; // rbx
CUserSocket *v50; // rax
CParty *v51; // rax
_SETJMP_FLOAT128 *v52; // rbx
__int64 v53; // rcx
WOlympiadMatch *Field; // rbx
int v55; // eax
CDuelManager *v56; // rax
int m_nBonusCount; // esi
int nOrgSpeed3; // [rsp+28h] [rbp-B10h]
int nOrgSpeed3a; // [rsp+28h] [rbp-B10h]
int nOrgSpeed3_8; // [rsp+30h] [rbp-B08h]
unsigned int des; // [rsp+AB8h] [rbp-80h] BYREF
int m_CrystallizeLevel; // [rsp+ABCh] [rbp-7Ch]
int nOrgSpeed0[3]; // [rsp+AC0h] [rbp-78h] BYREF
int nOrgSpeed4[2]; // [rsp+ACCh] [rbp-6Ch] BYREF
int nOrgSpeed6[2]; // [rsp+AD4h] [rbp-64h] BYREF
int nOrgSpeed7; // [rsp+ADCh] [rbp-5Ch] BYREF
unsigned int m_nMyStatus; // [rsp+AE0h] [rbp-58h]
int m_nHairColorEx; // [rsp+AE4h] [rbp-54h]
InstantZoneKey *v69; // [rsp+AE8h] [rbp-50h]
CSharedCreatureData *v70; // [rsp+AF0h] [rbp-48h]
int v71; // [rsp+AF8h] [rbp-40h]
int v72; // [rsp+AFCh] [rbp-3Ch]
int m_nAttackValue; // [rsp+B00h] [rbp-38h]
int m_nAttackType; // [rsp+B04h] [rbp-34h]
int v75; // [rsp+B08h] [rbp-30h]
unsigned int m_nPledgeEmblemDbId; // [rsp+B0Ch] [rbp-2Ch]
int v77; // [rsp+B10h] [rbp-28h]
int m_snEnchant; // [rsp+B14h] [rbp-24h]
int m_dCP; // [rsp+B18h] [rbp-20h]
int m_dBaseCP; // [rsp+B1Ch] [rbp-1Ch]
ClassType m_nClass; // [rsp+B20h] [rbp-18h]
int v82; // [rsp+B24h] [rbp-14h]
int m_nDuelCount; // [rsp+B28h] [rbp-10h]
int v84; // [rsp+B2Ch] [rbp-Ch]
int PrivateStoreType; // [rsp+B30h] [rbp-8h]
unsigned int m_nPledgeSid; // [rsp+B34h] [rbp-4h]
int m_nBuilder; // [rsp+B38h] [rbp+0h]
int HairShapeForBroadcast; // [rsp+B3Ch] [rbp+4h]
int FaceForBroadcast; // [rsp+B40h] [rbp+8h]
int v90; // [rsp+B44h] [rbp+Ch]
int v91; // [rsp+B48h] [rbp+10h]
int v92; // [rsp+B4Ch] [rbp+14h]
int v93; // [rsp+B50h] [rbp+18h]
int v94; // [rsp+B54h] [rbp+1Ch]
int v95; // [rsp+B58h] [rbp+20h]
int v96; // [rsp+B5Ch] [rbp+24h]
int v97; // [rsp+B60h] [rbp+28h]
int v98; // [rsp+B64h] [rbp+2Ch]
int v99; // [rsp+B68h] [rbp+30h]
int v100; // [rsp+B6Ch] [rbp+34h]
int v101; // [rsp+B70h] [rbp+38h]
int v102; // [rsp+B74h] [rbp+3Ch]
int v103; // [rsp+B78h] [rbp+40h]
int m_hMinNewSetItemEnchantedEffect; // [rsp+B7Ch] [rbp+44h]
int m_nActiveArtifactSlotGroup_low; // [rsp+B80h] [rbp+48h]
int m_dMaxAgathionSubSlotCount_low; // [rsp+B84h] [rbp+4Ch]
int m_dMaxAgathionMainSlotCount_low; // [rsp+B88h] [rbp+50h]
int m_dMaxJewelSlotCount_low; // [rsp+B8Ch] [rbp+54h]
char *p_m_cEventMatchTeamID; // [rsp+B90h] [rbp+58h]
int m_dCarryWeight; // [rsp+B98h] [rbp+60h]
int m_nCarryingWeight; // [rsp+B9Ch] [rbp+64h]
int m_dMP; // [rsp+BA0h] [rbp+68h]
int m_dBaseMP; // [rsp+BA4h] [rbp+6Ch]
int m_dHP; // [rsp+BA8h] [rbp+70h]
int m_dBaseHP; // [rsp+BACh] [rbp+74h]
int v116; // [rsp+BB0h] [rbp+78h]
int v117; // [rsp+BB4h] [rbp+7Ch]
int v118; // [rsp+BB8h] [rbp+80h]
int v119; // [rsp+BBCh] [rbp+84h]
int v120; // [rsp+BC0h] [rbp+88h]
int v121; // [rsp+BC4h] [rbp+8Ch]
int v122; // [rsp+BC8h] [rbp+90h]
int v123; // [rsp+BCCh] [rbp+94h]
int m_nLevel; // [rsp+BD0h] [rbp+98h]
int m_nBaseClass; // [rsp+BD4h] [rbp+9Ch]
SexType m_Sex; // [rsp+BD8h] [rbp+A0h]
RaceType m_Race; // [rsp+BDCh] [rbp+A4h]
int z; // [rsp+BE0h] [rbp+A8h]
int y; // [rsp+BE4h] [rbp+ACh]
int v130; // [rsp+BE8h] [rbp+B0h]
int v131; // [rsp+BECh] [rbp+B4h]
int v132; // [rsp+BF0h] [rbp+B8h]
_BOOL8 v133; // [rsp+BF8h] [rbp+C0h]
__int64 m_nSP; // [rsp+C00h] [rbp+C8h]
__int64 m_nExp; // [rsp+C08h] [rbp+D0h]
CSharedCreatureData *v136; // [rsp+C10h] [rbp+D8h]
int v137; // [rsp+C18h] [rbp+E0h]
int v138; // [rsp+D18h] [rbp+1E0h] BYREF
int v139; // [rsp+E18h] [rbp+2E0h] BYREF
__int64 v140; // [rsp+1018h] [rbp+4E0h]
wchar_t String1[220]; // [rsp+1020h] [rbp+4E8h] BYREF
CPacketHelperEx<20480> ph; // [rsp+11D8h] [rbp+6A0h] BYREF
v140 = -2i64;
memset(String1, 0, 0x32ui64);
if ( !this->m_data->m_bIsActive || this->m_nPreviewTimeStamp > 0 && this->m_nPreviewTimeStamp + 10 > time32(0i64) )
return;
if ( !FloatChecker::CheckValidation(this->m_data->m_dHP) || !FloatChecker::CheckValidation(this->m_data->m_dCP) )
{
m_data = this->m_data;
CLog::Add(
&Log,
LOG_ERROR,
L"[PLog] HP(%.5f(%p)/%.5f(%p)) CP(%.5f(%p)/%.5f(%p))",
m_data->m_dHP,
m_data->m_dHP,
_mm_unpacklo_pd(*&m_data->m_dBaseHP, *&m_data->m_dBaseHP),
_mm_unpacklo_pd(*&m_data->m_dCP, *&m_data->m_dCP),
_mm_unpacklo_pd(*&m_data->m_dBaseCP, *&m_data->m_dBaseCP));
v5 = this->GetSocket(this);
CUserSocket::ReportPacketLog(v5, 0);
}
v6 = this->GetName(this);
lstrcpyW(String1, v6);
v7 = this->m_data;
m_Race = v7->m_Race;
m_Sex = v7->m_Sex;
m_nBaseClass = this->m_nBaseClass;
m_nClass = v7->m_nClass;
m_nLevel = v7->m_nLevel;
m_nExp = v7->m_nExp;
v123 = v7->m_Stat.m_N[1];
v122 = v7->m_Stat.m_N[4];
v121 = v7->m_Stat.m_N[2];
v120 = v7->m_Stat.m_N[0];
v119 = v7->m_Stat.m_N[5];
v118 = v7->m_Stat.m_N[3];
v117 = v7->m_Stat.m_N[6];
v116 = v7->m_Stat.m_N[7];
m_dBaseHP = v7->m_dBaseHP;
m_dHP = v7->m_dHP;
m_dBaseMP = v7->m_dBaseMP;
m_dMP = v7->m_dMP;
m_dBaseCP = v7->m_dBaseCP;
m_dCP = v7->m_dCP;
m_nSP = v7->m_nSP;
m_nCarryingWeight = this->m_inv.m_nCarryingWeight;
m_dCarryWeight = v7->m_dCarryWeight;
FaceForBroadcast = User::GetFaceForBroadcast(this);
HairShapeForBroadcast = User::GetHairShapeForBroadcast(this);
v8 = this->m_data;
m_nHairColorEx = v8->m_nHairColorEx;
if ( !m_nHairColorEx )
m_nHairColorEx = v8->m_nHairColor;
m_nBuilder = v8->m_nBuilder;
PrivateStoreType = User::GetPrivateStoreType(this);
v9 = this->m_data;
v103 = v9->m_dParam[2];
v101 = v9->m_dParam[0];
v97 = v9->m_dParam[3];
v94 = v9->m_dParam[1];
v102 = v9->m_dParam[4];
v96 = (v9->m_dParam[5] * 333.0);
v95 = (v9->m_dParam[6] * 333.0);
v98 = CCreature::CriticalRateForInfo(this, PCRITICAL);
v10 = this->m_data;
v99 = v10->m_dParam[7];
v100 = v10->m_dParam[14];
v92 = v10->m_dParam[8];
v93 = v10->m_dParam[15];
v91 = CCreature::CriticalRateForInfo(this, MCRITICAL);
memset(nOrgSpeed0, 0, sizeof(nOrgSpeed0));
*nOrgSpeed4 = 0i64;
*nOrgSpeed6 = 0i64;
nOrgSpeed7 = 0;
User::SetOrgSpeed(
this,
nOrgSpeed0,
&nOrgSpeed0[1],
&nOrgSpeed0[2],
nOrgSpeed4,
&nOrgSpeed4[1],
nOrgSpeed6,
&nOrgSpeed6[1],
&nOrgSpeed7);
v11 = nOrgSpeed0;
m_nOrgSpeed = this->m_nOrgSpeed;
v13 = 8i64;
do
{
CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, m_nOrgSpeed++, *v11++, 0x3Du);
--v13;
}
while ( v13 );
m_CrystallizeLevel = this->m_CrystallizeLevel;
v14 = this->GetAttackModifier(this);
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_dAttackSpeedModifier,
v14,
0x3Eu);
v15 = this->GetMoveModifier(this);
v16 = 63i64;
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_dMoveSpeedModifier,
v15,
0x3Fu);
v17 = this->IsRiding(this);
p_m_dCollisionRadius = &this->m_dCollisionRadius;
if ( v17 )
{
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
p_m_dCollisionRadius,
this->m_pStriderInfo->m_commonInfo.m_orgCollisionRadius,
0x1Bu);
p_m_NeedUpdatePacketBitSet = &this->m_data->m_NeedUpdatePacketBitSet;
m_orgCollisionHeight = this->m_pStriderInfo->m_commonInfo.m_orgCollisionHeight;
}
else
{
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
p_m_dCollisionRadius,
this->m_data->m_dCollisionRadius,
0x1Bu);
v21 = this->m_data;
p_m_NeedUpdatePacketBitSet = &v21->m_NeedUpdatePacketBitSet;
m_orgCollisionHeight = v21->m_dCollisionHeight;
}
CVariableBitSet::SetDoubleValue_IfModifed(
p_m_NeedUpdatePacketBitSet,
&this->m_dCollisionHeight,
m_orgCollisionHeight,
0x1Cu);
FVector::FVector(nOrgSpeed0, &this->m_data->m_Pos);
CVariableBitSet::SetFVectorValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_MyPos, nOrgSpeed0, 0x40u);
des = 0;
if ( this->IsInVehicle(this) )
{
CContainerDB::Inst();
v22 = 1;
}
else
{
v23 = !this->IsInAirShip(this);
v24 = this->__vftable;
if ( v23 )
{
if ( !v24->IsInShuttle(this) )
goto LABEL_22;
v25 = this->GetMyShuttleID(this);
}
else
{
v25 = v24->GetMyAirShipID(this);
}
v22 = v25;
}
CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &des, v22, 0x41u);
LABEL_22:
if ( des <= 0 )
{
p_m_MyPos = &this->m_MyPos;
}
else
{
FVector::FVector(nOrgSpeed0, &this->m_RelPos);
p_m_MyPos = nOrgSpeed0;
}
CVariableBitSet::SetFVectorValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_InformingPos,
p_m_MyPos,
0x42u);
m_nPledgeSid = this->m_nPledgeSid;
m_nPledgeEmblemDbId = this->m_nPledgeEmblemDbId;
MyStatus = User::GetMyStatus(this);
CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_nMyStatus, MyStatus, 0x43u);
CVariableBitSet::SetShortValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_sBonusCount,
this->m_nBonusCount,
0x21u);
VitalPoint = User::GetVitalPoint(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_nVitalPoint,
VitalPoint,
0x22u);
SocialClass = User::GetSocialClass(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_nSocialClass,
SocialClass,
0x23u);
v30 = 63i64;
v31 = &v139;
do
{
*v31 = 0i64;
v31 += 2;
--v30;
}
while ( v30 );
v69 = &v139;
v32 = (220i64 - &v138);
v70 = (220i64 - &v138);
v33 = 0i64;
do
{
v34 = (&v138 + v33);
v35 = &v138 + v33 + v32;
v36 = this->m_data;
v37 = CSharedFactory<CItem,CSharedItemData,CSharedItemConstant,&CSharedDefine const SharedDefine_Item>::Inst();
CSharedFactory<CItem,CSharedItemData,CSharedItemConstant,&CSharedDefine const SharedDefine_Item>::FindObjectSP(
v37,
nOrgSpeed0,
*(&v36->__vftable + v35));
v38 = *nOrgSpeed0;
v39 = v69;
if ( *nOrgSpeed0 )
{
*v34 = *(*nOrgSpeed0 + 24i64);
*(&v137 + v33) = v38[3].clusterId;
VariationKey::VariationKey(v39, v38 + 98);
}
else
{
*v34 = 0;
*(&v137 + v33) = 0;
}
if ( v38 )
{
LOBYTE(nOrgSpeed3) = 0;
(*(*v38 + 8i64))(
v38,
"d:\\_jenkins\\workspace\\dailybuild work(live) vs2015\\lineage2build\\server\\main\\shared\\ThreadSafeLibrary.h",
133i64,
nOrgSpeed0[2],
nOrgSpeed3);
*nOrgSpeed0 = 0i64;
}
v69 = v39 + 1;
v33 += 4i64;
--v16;
v32 = v70;
}
while ( v16 );
if ( this->IsInAirShip(this) )
this->GetMyAirShipID(this);
v40 = this->m_data;
v84 = v40->m_nPKCount - v40->m_nPKPardonCount;
m_nDuelCount = v40->m_nDuelCount;
this->GetInventoryLimit(this);
v41 = 0;
Left = this->m_cubicMap._Mypair._Myval2._Myval2._Myhead->_Left;
while ( Left != this->m_cubicMap._Mypair._Myval2._Myval2._Myhead )
{
v43 = Assemble(&String1[28] + v41, 128 - v41, "h", SLOWORD(Left->_Myval.second.first->m_classID));
if ( v43 > 0 )
v41 += v43;
if ( !Left->_Isnil )
{
Right = Left->_Right;
if ( Right->_Isnil )
{
for ( i = Left->_Parent; !i->_Isnil && Left == i->_Right; i = i->_Parent )
Left = i;
Left = i;
}
else
{
do
{
Left = Right;
Right = Right->_Left;
}
while ( !Right->_Isnil );
}
}
}
v46 = this->CalcCriminalRate(this);
CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_nCriminalRate, v46, 0x45u);
PledgePowerByGrade = User::GetPledgePowerByGrade(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_pledgePower,
PledgePowerByGrade,
0x46u);
p_m_cEventMatchTeamID = &this->m_cEventMatchTeamID;
EventMatchTeamId = User::GetEventMatchTeamId(this);
CVariableBitSet::SetCharValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_cEventMatchTeamID,
EventMatchTeamId,
0x47u);
ph.__vftable = &CPacketHelperEx<20480>::`vftable';
memset(ph.m_buffer, 0, 20488);
CCreature::MakeAbnormalVisualEffectPacket(this, &ph);
if ( pSocket )
{
v136 = this->m_data;
m_nBonusCount = this->m_nBonusCount;
z = this->m_MyPos.z;
y = this->m_MyPos.y;
LODWORD(v69) = this->m_MyPos.x;
*nOrgSpeed0 = &pSocket->Send;
v70 = this->m_data;
m_nMyStatus = this->m_nMyStatus;
User::GetVitalPoint(this);
v130 = v70->m_BaseAttribute.m_nDefendValue[4];
v131 = v70->m_BaseAttribute.m_nDefendValue[3];
v132 = v70->m_BaseAttribute.m_nDefendValue[2];
v71 = v70->m_BaseAttribute.m_nDefendValue[1];
v72 = v70->m_BaseAttribute.m_nDefendValue[0];
m_nAttackValue = v70->m_BaseAttribute.m_nAttackValue;
m_nAttackType = v70->m_BaseAttribute.m_nAttackType;
v75 = User::GetSocialClass(this);
v77 = *p_m_cEventMatchTeamID;
m_snEnchant = this->m_snEnchant;
v82 = m_nBonusCount;
v133 = m_CrystallizeLevel > 0;
m_CrystallizeLevel = (m_nMyStatus >> 6) & 1;
v90 = this->GetGuilty(this);
m_hMinNewSetItemEnchantedEffect = this->m_hMinNewSetItemEnchantedEffect;
m_nActiveArtifactSlotGroup_low = SLOBYTE(this->m_SkillMod.m_nActiveArtifactSlotGroup);
m_dMaxAgathionSubSlotCount_low = SLOBYTE(this->m_SkillMod.m_dMaxAgathionSubSlotCount);
m_dMaxAgathionMainSlotCount_low = SLOBYTE(this->m_SkillMod.m_dMaxAgathionMainSlotCount);
m_dMaxJewelSlotCount_low = SLOBYTE(this->m_SkillMod.m_dMaxJewelSlotCount);
LODWORD(p_m_cEventMatchTeamID) = SLOBYTE(this->m_SkillMod.m_dMaxDecoSlotCount);
this->GetAttackRange(this);
//MISSING DATA !!! SocketAssemblePacket//IDAPRO ISSUE - too many args
User::SendPrivateStoreMessage(this, pSocket, PSMT_NO_BROADCAST);
User::SendUserHennaInfo(this, pSocket);
User::SendVitalityEffectInfo(this, pSocket);
}
else
{
v49 = this->GetSocket(this);
User::SendUserInfo2(this, 0, v49);
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
16,
15,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
User::SendInvenCarryingWeight(this, v49);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
73,
96,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
User::SendEquipSlotInfo(this, v49);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
74,
68,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
User::SendCubicInfo(this, v49);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
75,
81,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
User::SendAbnormalVisualEffectInfo(this, v49);
}
if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x4Cu) )
User::SendFishingInfo(this, v49);
if ( pNeedUpdatePacketBitSetToBackup )
CVariableBitSet::operator=|(pNeedUpdatePacketBitSetToBackup, &this->m_data->m_NeedUpdatePacketBitSet);
CVariableBitSet::Clear(&this->m_data->m_NeedUpdatePacketBitSet);
v50 = this->GetSocket(this);
User::SendPrivateStoreMessage(this, v50, PSMT_NO_BROADCAST);
v51 = this->GetParty(this);
v52 = v51;
if ( v51 )
{
nOrgSpeed3_8 = 0;
CParty::UpdateWindowPacket(v51, this, 0, 0, 0);
AtomicUpdateUserPoint::Dump(v52);
}
if ( this->m_EventMatchUser.m_byEventMatchTeamId )
{
CEventMatchUser::GetEventMatch(&this->m_EventMatchUser, nOrgSpeed0);
v53 = *nOrgSpeed0;
if ( *nOrgSpeed0 )
{
CEventMatch::UpdateUserStatus(*nOrgSpeed0, this, 0);
v53 = *nOrgSpeed0;
}
if ( v53 )
{
LOBYTE(nOrgSpeed3a) = 0;
(*(*v53 + 8i64))(
v53,
"d:\\_jenkins\\workspace\\dailybuild work(live) vs2015\\lineage2build\\server\\main\\shared\\ThreadSafeLibrary.h",
133i64,
nOrgSpeed0[2],
nOrgSpeed3a,
nOrgSpeed3_8);
}
}
if ( User::IsOlympiadPlayer(this) )
{
Field = WOlympiadUser::GetField(this->m_pWOlympiadUser);
if ( Field )
{
v55 = this->GetServerId(this);
WOlympiadMatch::UpdateUserStatus(Field, v55, 0);
}
}
if ( CDuelUserInfo::IsInFightStatus(&this->m_DuelUserInfo) )
{
v56 = Singleton<CDuelManager>::inst();
CDuelManager::UpdateDuelPlayerStatus(v56, this);
}
}
}
//----- (000000000098FD54) ----------------------------------------------------
void __fastcall User::SendUserInfo2(User *this, bool isGMPacket, CUserSocket *pSocket)
{
__int64 ThreadID; // rbx
__int64 m_nID; // rdi
const wchar_t *v7; // rax
CSharedCreatureData *m_data; // rax
__int64 m_nLevel; // r13
__int64 m_nExp; // r8
double v11; // xmm6_8
__int64 v12; // rdx
__int64 EquipedWeapon; // rax
unsigned __int16 v14; // r8
CSharedCreatureData *v15; // rcx
CSharedCreatureData *v16; // rcx
CSharedCreatureData *v17; // rcx
int *p_nOrgSpeed0; // rbx
int *m_nOrgSpeed; // r14
__int64 v20; // r15
long double v21; // xmm0_8
long double v22; // xmm0_8
bool v23; // al
long double *p_m_dCollisionRadius; // rdx
CVariableBitSet *p_m_NeedUpdatePacketBitSet; // rcx
long double m_orgCollisionHeight; // xmm2_8
CSharedCreatureData *v27; // rax
unsigned int MyStatus; // eax
unsigned int v29; // r8d
bool v30; // zf
User_vtbl *v31; // rax
unsigned int v32; // eax
FVector *p_m_MyPos; // r8
unsigned int PledgePowerByGrade; // eax
char EventMatchTeamId; // al
unsigned __int64 v36; // rax
bool v37; // al
CSharedCreatureData *v38; // rcx
__int64 v39; // rcx
int *v40; // r8
CSharedCreatureData *v41; // rcx
CPartyRoomRegistry *v42; // rcx
char DoesShowPartyWantedMessage; // al
unsigned __int64 v44; // rax
CSharedCreatureData *v45; // rcx
unsigned int v46; // eax
unsigned int SocialClass; // eax
CSharedCreatureData *v48; // rcx
int v49; // r14d
int m_nDuelCount; // r13d
int m_nVoteCount; // ebx
CSharedCreatureData *v52; // rcx
CSharedCreatureData *v53; // rcx
int m_nCursedWeaponClassId; // r14d
CCursedWeaponMgr *v55; // rax
unsigned int WeaponLevel; // r8d
unsigned int m_transformID; // r8d
CVariableBitSet *v58; // rcx
CSharedCreatureData *v59; // rax
CSharedCreatureData *v60; // rcx
char UserFlag; // al
int *nOrgSpeed3; // [rsp+20h] [rbp-E0h]
int *nOrgSpeed3a; // [rsp+20h] [rbp-E0h]
unsigned int des; // [rsp+60h] [rbp-A0h] BYREF
int m_nHairColorEx; // [rsp+64h] [rbp-9Ch]
int m_nBuilder; // [rsp+68h] [rbp-98h]
RaceType m_Race; // [rsp+6Ch] [rbp-94h]
SexType m_Sex; // [rsp+70h] [rbp-90h]
int m_nBaseClass; // [rsp+74h] [rbp-8Ch]
int m_nClass; // [rsp+78h] [rbp-88h]
int v71; // [rsp+7Ch] [rbp-84h]
int v72; // [rsp+80h] [rbp-80h]
int v73; // [rsp+84h] [rbp-7Ch]
int v74; // [rsp+88h] [rbp-78h]
int v75; // [rsp+8Ch] [rbp-74h]
int v76; // [rsp+90h] [rbp-70h]
int v77; // [rsp+94h] [rbp-6Ch]
int v78; // [rsp+98h] [rbp-68h]
l2::UserInfo_BaseAttr v79; // [rsp+9Ch] [rbp-64h]
int m_dHP; // [rsp+A8h] [rbp-58h]
int m_dMP; // [rsp+ACh] [rbp-54h]
int m_dCP; // [rsp+B0h] [rbp-50h]
int FaceForBroadcast; // [rsp+B4h] [rbp-4Ch]
int HairShapeForBroadcast; // [rsp+B8h] [rbp-48h]
int m_nPrivateStoreType; // [rsp+BCh] [rbp-44h]
BOOL v86; // [rsp+C0h] [rbp-40h]
int RemainAP; // [rsp+C4h] [rbp-3Ch]
int v88; // [rsp+C8h] [rbp-38h]
int v89; // [rsp+CCh] [rbp-34h]
int v90; // [rsp+D0h] [rbp-30h]
int v91; // [rsp+D4h] [rbp-2Ch]
int v92; // [rsp+D8h] [rbp-28h]
int v93; // [rsp+DCh] [rbp-24h]
int v94; // [rsp+E0h] [rbp-20h]
int v95; // [rsp+E4h] [rbp-1Ch]
int v96; // [rsp+E8h] [rbp-18h]
int v97; // [rsp+ECh] [rbp-14h]
int v98; // [rsp+F0h] [rbp-10h]
int v99; // [rsp+F4h] [rbp-Ch]
int v100; // [rsp+F8h] [rbp-8h]
int m_rideClassID; // [rsp+FCh] [rbp-4h]
int v102; // [rsp+100h] [rbp+0h]
int nOrgSpeed0; // [rsp+108h] [rbp+8h] BYREF
int nOrgSpeed1[2]; // [rsp+10Ch] [rbp+Ch] BYREF
int nOrgSpeed4[2]; // [rsp+114h] [rbp+14h] BYREF
int nOrgSpeed5[2]; // [rsp+11Ch] [rbp+1Ch] BYREF
int nOrgSpeed7[3]; // [rsp+124h] [rbp+24h] BYREF
l2::S_UserInfo v108; // [rsp+130h] [rbp+30h] BYREF
unsigned __int8 bits; // [rsp+2F0h] [rbp+1F0h] BYREF
__int64 v110; // [rsp+2F1h] [rbp+1F1h]
int v111; // [rsp+2F9h] [rbp+1F9h]
__int64 m_nSP; // [rsp+300h] [rbp+200h]
__int64 v113; // [rsp+308h] [rbp+208h]
CSPointer<User> v114; // [rsp+310h] [rbp+210h] BYREF
CVariableBitSet v115; // [rsp+320h] [rbp+220h] BYREF
network::Stream v116; // [rsp+330h] [rbp+230h] BYREF
network::Stream rStream; // [rsp+350h] [rbp+250h] BYREF
JOB *v118; // [rsp+370h] [rbp+270h]
__int64 v119; // [rsp+378h] [rbp+278h]
wchar_t String1[28]; // [rsp+380h] [rbp+280h] BYREF
FVector src; // [rsp+3B8h] [rbp+2B8h] BYREF
FVector v122; // [rsp+3D0h] [rbp+2D0h] BYREF
char v123[20480]; // [rsp+3F0h] [rbp+2F0h] BYREF
char v124[20480]; // [rsp+53F0h] [rbp+52F0h] BYREF
void **v125; // [rsp+A3F0h] [rbp+A2F0h]
char v126[20480]; // [rsp+A3F8h] [rbp+A2F8h] BYREF
__int64 v127; // [rsp+F3F8h] [rbp+F2F8h]
char m_rideType; // [rsp+F468h] [rbp+F368h]
v119 = -2i64;
v118 = &JOB_SEND_EXUSERINFO;
ThreadID = (int)CThreadManager::GetThreadID();
m_nID = JOB_SEND_EXUSERINFO.m_nID;
g_Timer.m_EachJobBeginTimes[ThreadID]._Mypair._Myval2._Myfirst[m_nID] = GetTickCount();
if ( pSocket )
{
memset(String1, 0, 0x32ui64);
v7 = this->GetName(this);
lstrcpyW(String1, v7);
m_data = this->m_data;
m_nBuilder = m_data->m_nBuilder;
m_Race = m_data->m_Race;
m_Sex = m_data->m_Sex;
m_nBaseClass = this->m_nBaseClass;
m_nClass = m_data->m_nClass;
m_nLevel = m_data->m_nLevel;
v71 = m_data->m_Stat.m_N[1];
v72 = m_data->m_Stat.m_N[4];
v73 = m_data->m_Stat.m_N[2];
v74 = m_data->m_Stat.m_N[0];
v75 = m_data->m_Stat.m_N[5];
v76 = m_data->m_Stat.m_N[3];
v77 = m_data->m_Stat.m_N[6];
v78 = m_data->m_Stat.m_N[7];
v79.nBaseHP = (int)m_data->m_dBaseHP;
v79.nBaseMP = (int)m_data->m_dBaseMP;
v79.nBaseCP = (int)m_data->m_dBaseCP;
m_dHP = (int)m_data->m_dHP;
m_dMP = (int)m_data->m_dMP;
m_dCP = (int)m_data->m_dCP;
m_nSP = m_data->m_nSP;
m_nExp = m_data->m_nExp;
v113 = m_nExp;
v11 = 0.0;
if ( (int)m_nLevel > 0 )
{
v12 = ExpByLevel[(int)m_nLevel - 1];
v11 = (double)((int)m_nExp - (int)v12) / (double)(int)(ExpByLevel[m_nLevel] - v12);
}
EquipedWeapon = CCreature::GetEquipedWeapon(this);
if ( EquipedWeapon )
v14 = *(_WORD *)(EquipedWeapon + 116);
else
v14 = 0;
CVariableBitSet::SetShortValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned __int16 *)&this->m_snEnchant,
v14,
0x4Du);
FaceForBroadcast = User::GetFaceForBroadcast(this);
HairShapeForBroadcast = User::GetHairShapeForBroadcast(this);
v15 = this->m_data;
m_nHairColorEx = v15->m_nHairColorEx;
if ( !m_nHairColorEx )
m_nHairColorEx = v15->m_nHairColor;
m_rideType = v15->m_rideType;
m_rideClassID = v15->m_rideClassID;
m_nPrivateStoreType = v15->m_nPrivateStoreType;
RemainAP = CSharedCreatureData::GetRemainAP(v15);
v16 = this->m_data;
v88 = (int)v16->m_dParam[2];
v90 = (int)v16->m_dParam[0];
v94 = (int)v16->m_dParam[3];
v98 = (int)v16->m_dParam[1];
v89 = (int)v16->m_dParam[4];
v95 = (int)(v16->m_dParam[5] * 333.0);
v96 = (int)(v16->m_dParam[6] * 333.0);
v93 = CCreature::CriticalRateForInfo(this, PCRITICAL);
v17 = this->m_data;
v92 = (int)v17->m_dParam[7];
v91 = (int)v17->m_dParam[14];
v99 = (int)v17->m_dParam[8];
v97 = (int)v17->m_dParam[15];
v100 = CCreature::CriticalRateForInfo(this, MCRITICAL);
FVector::FVector(&src, &this->m_data->m_Pos);
CVariableBitSet::SetFVectorValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &this->m_MyPos, &src, 0x40u);
nOrgSpeed0 = 0;
*(_QWORD *)nOrgSpeed1 = 0i64;
*(_QWORD *)nOrgSpeed4 = 0i64;
*(_QWORD *)nOrgSpeed5 = 0i64;
nOrgSpeed7[0] = 0;
User::SetOrgSpeed(
this,
&nOrgSpeed0,
nOrgSpeed1,
&nOrgSpeed1[1],
nOrgSpeed4,
&nOrgSpeed4[1],
nOrgSpeed5,
&nOrgSpeed5[1],
nOrgSpeed7);
p_nOrgSpeed0 = &nOrgSpeed0;
m_nOrgSpeed = this->m_nOrgSpeed;
v20 = 8i64;
do
{
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)m_nOrgSpeed++,
*p_nOrgSpeed0++,
0x3Du);
--v20;
}
while ( v20 );
v21 = this->GetAttackModifier(this);
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_dAttackSpeedModifier,
v21,
0x3Eu);
v22 = this->GetMoveModifier(this);
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_dMoveSpeedModifier,
v22,
0x3Fu);
v23 = this->IsRiding(this);
p_m_dCollisionRadius = &this->m_dCollisionRadius;
if ( v23 )
{
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
p_m_dCollisionRadius,
this->m_pStriderInfo->m_commonInfo.m_orgCollisionRadius,
0x1Bu);
p_m_NeedUpdatePacketBitSet = &this->m_data->m_NeedUpdatePacketBitSet;
m_orgCollisionHeight = this->m_pStriderInfo->m_commonInfo.m_orgCollisionHeight;
}
else
{
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
p_m_dCollisionRadius,
this->m_data->m_dCollisionRadius,
0x1Bu);
v27 = this->m_data;
p_m_NeedUpdatePacketBitSet = &v27->m_NeedUpdatePacketBitSet;
m_orgCollisionHeight = v27->m_dCollisionHeight;
}
CVariableBitSet::SetDoubleValue_IfModifed(
p_m_NeedUpdatePacketBitSet,
&this->m_dCollisionHeight,
m_orgCollisionHeight,
0x1Cu);
v86 = this->m_CrystallizeLevel > CRT_NONE;
MyStatus = User::GetMyStatus(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)&this->m_nMyStatus,
MyStatus,
0x43u);
CVariableBitSet::SetShortValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned __int16 *)&this->m_sBonusCount,
this->m_nBonusCount,
0x21u);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)&this->m_nVitalPoint,
this->m_pVitality->m_Data.vitalPoint,
0x22u);
des = 0;
if ( this->IsInVehicle(this) )
{
CContainerDB::Inst();
v29 = 1;
goto LABEL_23;
}
v30 = !this->IsInAirShip(this);
v31 = this->__vftable;
if ( v30 )
{
if ( !v31->IsInShuttle(this) )
{
v29 = 0;
LABEL_23:
CVariableBitSet::SetIntValue_IfModifed(&this->m_data->m_NeedUpdatePacketBitSet, &des, v29, 0x41u);
if ( (int)des <= 0 )
{
p_m_MyPos = &this->m_MyPos;
}
else
{
FVector::FVector(&v122, &this->m_RelPos);
p_m_MyPos = &v122;
}
CVariableBitSet::SetFVectorValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_InformingPos,
p_m_MyPos,
0x42u);
v102 = this->GetInventoryLimit(this);
PledgePowerByGrade = (unsigned int)User::GetPledgePowerByGrade(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)&this->m_pledgePower,
PledgePowerByGrade,
0x46u);
EventMatchTeamId = User::GetEventMatchTeamId(this);
CVariableBitSet::SetCharValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_cEventMatchTeamID,
EventMatchTeamId,
0x47u);
v125 = &CPacketHelperEx<20480>::`vftable';
v127 = 0i64;
memset(v126, 0, sizeof(v126));
CVariableBitSet::CVariableBitSet(&v115);
l2::S_UserInfo::S_UserInfo(&v108);
if ( CVariableBitSet::Init(&v108.bitSet, 0x18u, 3u, v108.bits) )
CVariableBitSet::SetAllBits(&v108.bitSet);
CVariableBitSet::Clear(&v108.bitSet);
bits = 0;
v110 = 0i64;
v111 = 0;
if ( !CVariableBitSet::Init(&v115, 0x67u, 0xDu, &bits) )
goto LABEL_104;
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
0,
17,
1,
2u,
4u,
3u,
5u,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
if ( String1[0] )
v36 = wcslen(String1);
else
v36 = 0i64;
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::assign(
&v108.basic.wstrName,
String1,
v36);
v108.basic.nBuilder = m_nBuilder;
v108.basic.nRace = m_Race;
v108.basic.nSex = m_Sex;
v108.basic.nOriginalClass = m_nBaseClass;
v108.basic.nNowClass = m_nClass;
v108.basic.nLevel = m_nLevel;
CVariableBitSet::SetBit(&v108.bitSet, 1u);
}
if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x3Cu) )
{
v108.stat.nStr = v71;
v108.stat.nDex = v72;
v108.stat.nCon = v73;
v108.stat.nInt = v74;
v108.stat.nWit = v75;
v108.stat.nMen = v76;
v108.stat.nLuc = v77;
v108.stat.nCha = v78;
CVariableBitSet::SetBit(&v108.bitSet, 2u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
8,
9,
10,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.baseAttr = v79;
CVariableBitSet::SetBit(&v108.bitSet, 3u);
}
v37 = CDuelUserInfo::IsDuelDead(&this->m_DuelUserInfo, this)
|| (unsigned __int8)CPledgeGameUser::IsPlayer(&this->m_PledgeGameUser) && !this->m_PledgeGameUser.m_IsAlive
|| this->m_data->m_bIsAlive == 0;
v38 = this->m_data;
if ( !v37 != v38->m_bIsAlive )
CVariableBitSet::SetBit(&v38->m_NeedUpdatePacketBitSet, 0x61u);
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
11,
12,
13,
0xEu,
6u,
7u,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.attribute.nHP = m_dHP;
v108.attribute.nMP = m_dMP;
v108.attribute.nCP = m_dCP;
v108.attribute.nSP = m_nSP;
v108.attribute.nExp = v113;
v108.attribute.expRatio = v11;
CVariableBitSet::SetBit(&v108.bitSet, 4u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
77,
78,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.equipSlot.cEnchant = this->m_snEnchant;
v108.equipSlot.hMinSetItemEnchanted = this->m_hMinNewSetItemEnchantedEffect;
CVariableBitSet::SetBit(&v108.bitSet, 5u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
18,
21,
19,
0x16u,
0x14u,
0x17u,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.hairShop.nFace = FaceForBroadcast;
v108.hairShop.nHairShape = HairShapeForBroadcast;
v108.hairShop.nHairColor = m_nHairColorEx;
v108.hairShop.bIsUseHairAccessory = this->m_bHairAccFlag;
CVariableBitSet::SetBit(&v108.bitSet, 6u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
24,
26,
53,
0x64u,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.rideStoreCrystalizeAp.cYongmaType = m_rideType;
v108.rideStoreCrystalizeAp.cPrivateStore = m_nPrivateStoreType;
v108.rideStoreCrystalizeAp.canCrystallize = v86;
v108.rideStoreCrystalizeAp.cRemainAbilityPoint = RemainAP;
CVariableBitSet::SetBit(&v108.bitSet, 7u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
37,
59,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.parameter.hAttackRange = this->GetAttackRange(this);
v108.parameter.nPAttack = v88;
v108.parameter.nPAttackSpeed = v89;
v108.parameter.nPDefence = v90;
v108.parameter.nPAvoid = v91;
v108.parameter.nPHitRate = v92;
v108.parameter.nPCriticalRate = v93;
v108.parameter.nMAttack = v94;
v108.parameter.nMCastingSpeed = v95;
v108.parameter.nPCastingSpeed = v96;
v108.parameter.nMAvoid = v97;
v108.parameter.nMDefend = v98;
v108.parameter.nMHitRate = v99;
v108.parameter.nMCriticalRate = v100;
CVariableBitSet::SetBit(&v108.bitSet, 8u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
64,
65,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.posVehicle.nPosX = (int)this->m_MyPos.x;
v108.posVehicle.nPosY = (int)this->m_MyPos.y;
v108.posVehicle.nPosZ = (int)this->m_MyPos.z;
v108.posVehicle.nVehicleID = des;
CVariableBitSet::SetBit(&v108.bitSet, 0xAu);
}
if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x3Du) )
{
v39 = 0i64;
v40 = this->m_nOrgSpeed;
do
v108.orgSpeed.nOrgSpeed[v39++] = *(_WORD *)v40++;
while ( v39 < 8 );
CVariableBitSet::SetBit(&v108.bitSet, 0xBu);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
63,
62,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.speedModifier.dMoveSpeedModifier = this->m_dMoveSpeedModifier;
v108.speedModifier.dAttackSpeedModifier = this->m_dAttackSpeedModifier;
CVariableBitSet::SetBit(&v108.bitSet, 0xCu);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
27,
28,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.collisionInfo = *(l2::UserInfo_CollisionInfo *)&this->m_dCollisionRadius;
CVariableBitSet::SetBit(&v108.bitSet, 0xDu);
}
if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x24u) )
{
v41 = this->m_data;
v108.attackInfo.nAttackType = v41->m_BaseAttribute.m_nAttackType;
v108.attackInfo.nAttackValue = v41->m_BaseAttribute.m_nAttackValue;
CVariableBitSet::SetBit(&v108.bitSet, 0xEu);
v108.defend = *(l2::UserInfo_Defend *)this->m_data->m_BaseAttribute.m_nDefendValue;
CVariableBitSet::SetBit(&v108.bitSet, 9u);
}
v114.m_p = this;
v114.m_ort = ORT_FUNCTION_CHAIN;
this->AddRef(
this,
"d:\\_jenkins\\workspace\\dailybuild work(live) vs2015\\lineage2build\\server\\main\\shared\\ThreadSafeLibrary.h",
155i64,
ORT_FUNCTION_CHAIN);
v42 = CPartyRoomRegistry::inst();
DoesShowPartyWantedMessage = CPartyRoomRegistry::DoesShowPartyWantedMessage(v42, &v114);
CVariableBitSet::SetCharValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_cShowPartyWantedMessage,
DoesShowPartyWantedMessage != 0,
0x52u);
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
79,
51,
50,
0x34u,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF)
|| CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
48,
47,
49,
0x46u,
0x52u,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
if ( this->m_sNickName[0] )
v44 = wcslen(this->m_sNickName);
else
v44 = 0i64;
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::assign(
&v108.pledge.wstrNickName,
this->m_sNickName,
v44);
v45 = this->m_data;
v108.pledge.nPledgetype = v45->m_nPledgeType;
v108.pledge.nPledgeSId = this->m_nPledgeSid;
v108.pledge.nPledgeEmblemId = this->m_nPledgeEmblemDbId;
v108.pledge.nPledgeCrestId = this->m_nPledgeCrestDbId;
v108.pledge.nPledgePower = this->m_pledgePower;
v108.pledge.cIsPledgeMaster = (this->m_nMyStatus & 0x40) != 0;
v108.pledge.nAllianceId = v45->m_nAllianceId;
v108.pledge.nAllianceCrestId = this->m_nAllianceCrestDbId;
v108.pledge.cIsShowPartyWantedMessage = this->m_cShowPartyWantedMessage;
CVariableBitSet::SetBit(&v108.bitSet, 0xFu);
}
if ( CVariableBitSet::IsSet(&this->m_data->m_NeedUpdatePacketBitSet, 0x43u) )
{
v108.nMyStatus = this->m_nMyStatus;
CVariableBitSet::SetBit(&v108.bitSet, 0);
}
v46 = this->CalcCriminalRate(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)&this->m_nCriminalRate,
v46,
0x45u);
SocialClass = User::GetSocialClass(this);
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)&this->m_nSocialClass,
SocialClass,
0x23u);
v48 = this->m_data;
v49 = v48->m_nPKCount - v48->m_nPKPardonCount;
m_nDuelCount = v48->m_nDuelCount;
if ( CVariableBitSet::IsSet(
&v48->m_NeedUpdatePacketBitSet,
38,
69,
40,
0x27u,
0x23u,
0x1Eu,
0x1Du,
0x1Fu,
0x20u,
0x21u) )
{
m_nVoteCount = this->m_nVoteCount;
v108.social.nGuility = this->GetGuilty(this);
v108.social.nCriminalRate = this->m_nCriminalRate;
v52 = this->m_data;
v108.social.cIsNobless = v52->m_nNoblessType;
v108.social.cIsHero = v52->m_nHeroType;
v108.social.nSocialClass = this->m_nSocialClass;
v108.social.nPkCount = v49;
v108.social.nDuelCount = m_nDuelCount;
v108.social.m_sVoteCount = m_nVoteCount;
v108.social.m_sBonusCount = this->m_sBonusCount;
CVariableBitSet::SetBit(&v108.bitSet, 0x10u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
34,
45,
42,
0x2Bu,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.point.nVitalPoint = this->m_nVitalPoint;
v108.point.cBR_LectureMark = this->m_BR_LectureMark;
v53 = this->m_data;
v108.point.nPVPPoint = v53->m_nPVPPoint;
v108.point.nRaidPoint = v53->m_nRaidPointAsset;
CVariableBitSet::SetBit(&v108.bitSet, 0x11u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
54,
55,
44,
0x47u,
0x48u,
0x38u,
0x39u,
0x66u,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.etc1.nSkillModMaxDecoSlotCount = this->m_SkillMod.m_dMaxDecoSlotCount;
v108.etc1.nSkillModMaxJewelSlotCount = this->m_SkillMod.m_dMaxJewelSlotCount;
v108.etc1.cEventMatchTeamID = this->m_cEventMatchTeamID;
v108.etc1.nFootEffect = this->m_FootEffect;
v108.etc1.nSkillModMaxAgathionMainSlotCount = this->m_SkillMod.m_dMaxAgathionMainSlotCount;
v108.etc1.nSkillModMaxAgathionSubSlotCount = this->m_SkillMod.m_dMaxAgathionSubSlotCount;
v108.etc1.nSkillModMaxArtifactSlotGroupCount = this->m_SkillMod.m_nActiveArtifactSlotGroup;
CVariableBitSet::SetBit(&v108.bitSet, 0x12u);
}
if ( isGMPacket )
{
memset(v123, 0, sizeof(v123));
rStream.__vftable = (network::Stream_vtbl *)&network::Stream::`vftable';
rStream.m_pBuffer = v123;
rStream.m_pCursor = v123;
rStream.m_bufferSize = 20480;
if ( !l2::S_UserInfo::Encode(&v108, &rStream) )
{
LODWORD(nOrgSpeed3) = 6485;
CLog::Add(&Log, LOG_ERROR, (wchar_t *)L"[%s][%d] GMPacket Encode Failed", L"User.cpp", nOrgSpeed3);
LABEL_104:
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
&v108.pledge.wstrNickName,
1,
0i64);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
&v108.basic.wstrName,
1,
0i64);
CVariableBitSet::~CVariableBitSet(&v108.bitSet);
v108.__vftable = (l2::S_UserInfo_vtbl *)&network::IPacket::`vftable';
CVariableBitSet::~CVariableBitSet(&v115);
v125 = &IPacketHelper::`vftable';
goto LABEL_105;
}
pSocket->Send(pSocket, "chddb", 254i64);
}
else
{
Singleton<CCursedWeaponMgr>::inst();
m_nCursedWeaponClassId = this->m_nCursedWeaponClassId;
if ( m_nCursedWeaponClassId <= 0 )
{
WeaponLevel = 0;
}
else
{
v55 = Singleton<CCursedWeaponMgr>::inst();
WeaponLevel = CCursedWeaponMgr::GetWeaponLevel(v55, m_nCursedWeaponClassId);
}
CVariableBitSet::SetIntValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
(unsigned int *)&this->m_nCursedWeaponLevel,
WeaponLevel,
0x50u);
if ( this->GetMorphID(this) )
{
m_transformID = this->GetMorphID(this);
v58 = &this->m_data->m_NeedUpdatePacketBitSet;
}
else
{
v59 = this->m_data;
v58 = &v59->m_NeedUpdatePacketBitSet;
m_transformID = v59->m_transformID;
}
CVariableBitSet::SetIntValue_IfModifed(v58, (unsigned int *)&this->m_nTransformId, m_transformID, 0x51u);
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
83,
84,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v60 = this->m_data;
v108.etc2.cEnvironment = v60->m_Environment;
v108.etc2.cIsFastMoveMode = v60->m_MoveMode != MT_SLOW;
CVariableBitSet::SetBit(&v108.bitSet, 0x13u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
85,
86,
-1,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.etc3 = *(l2::UserInfo_Etc3 *)&this->m_nCharNameColor;
CVariableBitSet::SetBit(&v108.bitSet, 0x14u);
}
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
25,
87,
80,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.etc4.nYongmaClass = m_rideClassID;
v108.etc4.hInvenLimit = v102;
v108.etc4.nCursedWeaponLevel = this->m_nCursedWeaponLevel;
CVariableBitSet::SetBit(&v108.bitSet, 0x15u);
}
CVariableBitSet::SetCharValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_cPVPRestrainStatus,
this->KillPVPPointChecker.m_bStatus,
0x58u);
UserFlag = CPledgeGameSystem::GetUserFlag(&g_PledgeGameSystem, this);
CVariableBitSet::SetCharValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_cPledgeGameMemberFlag,
UserFlag,
0x5Eu);
if ( CVariableBitSet::IsSet(
&this->m_data->m_NeedUpdatePacketBitSet,
88,
89,
90,
0x5Eu,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF) )
{
v108.etc5.cPVPRestrainStatus = this->m_cPVPRestrainStatus;
v108.etc5.nUltimateSkillGauge = this->m_data->m_UltimateSkillGauge;
v108.etc5.cIsSheathingWeapon = this->m_IsSheathingWeapon;
v108.etc5.cPledgeGameMemberFlag = this->m_cPledgeGameMemberFlag;
CVariableBitSet::SetBit(&v108.bitSet, 0x16u);
}
memset(v124, 0, sizeof(v124));
v116.__vftable = (network::Stream_vtbl *)&network::Stream::`vftable';
v116.m_pBuffer = v124;
v116.m_pCursor = v124;
v116.m_bufferSize = 20480;
if ( !l2::S_UserInfo::Encode(&v108, &v116) )
{
LODWORD(nOrgSpeed3a) = 6614;
CLog::Add(&Log, LOG_ERROR, (wchar_t *)L"[%s][%d] GMPacket Encode Failed", L"User.cpp", nOrgSpeed3a);
goto LABEL_104;
}
pSocket->Send(
pSocket,
"cddb",
50i64,
this->m_nId,
LODWORD(v116.m_pCursor) - LODWORD(v116.m_pBuffer),
LODWORD(v116.m_pCursor) - LODWORD(v116.m_pBuffer),
v116.m_pBuffer);
if ( !this->m_bIsSendUserInfoCompleted )
this->m_bIsSendUserInfoCompleted = 1;
}
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
&v108.pledge.wstrNickName,
1,
0i64);
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::xallocator<wchar_t>>::_Tidy(
&v108.basic.wstrName,
1,
0i64);
CVariableBitSet::~CVariableBitSet(&v108.bitSet);
v108.__vftable = (l2::S_UserInfo_vtbl *)&network::IPacket::`vftable';
CVariableBitSet::~CVariableBitSet(&v115);
v125 = &IPacketHelper::`vftable';
CTimer::EndJob(&g_Timer, &JOB_SEND_EXUSERINFO);
return;
}
v32 = this->GetMyShuttleID(this);
}
else
{
v32 = v31->GetMyAirShipID(this);
}
v29 = v32;
goto LABEL_23;
}
CLog::Add(&Log, LOG_ERROR, (wchar_t *)L"[%s][%d] pSocket is NULL", L"User.cpp", 5845);
LABEL_105:
CTimer::EndJob(&g_Timer, &JOB_SEND_EXUSERINFO);
}
void __fastcall CNPC::SendCharInfo_internal(CNPC *this, User *pUser, bool bInSight)
{
DroidNPCInfo *p_m_DroidNPCInfo; // r12
CSharedCreatureData *m_data; // rax
long double v6; // xmm6_8
long double v7; // xmm7_8
const int *p_nKarma; // rcx
CSharedCreatureData *v9; // rax
int m_length; // r13d
int cHairAccFlag; // ebx
int m_dBaseMP; // edi
int m_dMP; // esi
int m_dBaseHP; // r14d
int m_dHP; // r15d
int nPledgeType_low; // r12d
const wchar_t *v17; // rax
CUserSocket *v18; // rax
int nHairShapeEx; // [rsp+388h] [rbp-80h]
int nFaceEx; // [rsp+38Ch] [rbp-7Ch]
int m_bIsAlive; // [rsp+390h] [rbp-78h]
int m_assembledCount; // [rsp+394h] [rbp-74h]
int Yaw_low; // [rsp+398h] [rbp-70h]
int cHero; // [rsp+39Ch] [rbp-6Ch]
int cNobless; // [rsp+3A0h] [rbp-68h]
int m_Environment_low; // [rsp+3A4h] [rbp-64h]
BOOL m_bIsInCombatMode; // [rsp+3A8h] [rbp-60h]
BOOL v28; // [rsp+3ACh] [rbp-5Ch]
BOOL v29; // [rsp+3B0h] [rbp-58h]
int v30; // [rsp+3B4h] [rbp-54h]
int v31; // [rsp+3B8h] [rbp-50h]
int v32; // [rsp+3BCh] [rbp-4Ch]
int nVariationOpt2; // [rsp+3C0h] [rbp-48h]
int nVariationOpt1; // [rsp+3C4h] [rbp-44h]
int cGender; // [rsp+3C8h] [rbp-40h]
int cRace; // [rsp+3CCh] [rbp-3Ch]
int v37; // [rsp+3D0h] [rbp-38h]
int v38; // [rsp+3D4h] [rbp-34h]
int v39; // [rsp+3D8h] [rbp-30h]
OrgSpeeds s; // [rsp+3E0h] [rbp-28h] BYREF
__int64 v41[5]; // [rsp+400h] [rbp-8h] BYREF
char v42[128]; // [rsp+428h] [rbp+20h] BYREF
CPacketHelperEx<20480> ph; // [rsp+4A8h] [rbp+A0h] BYREF
CPacketHelperEx<20480> v44; // [rsp+54B8h] [rbp+50B0h] BYREF
int nHairColorEx; // [rsp+A550h] [rbp+A148h]
v41[3] = -2i64;
if ( this->m_isDroidNPC )
{
p_m_DroidNPCInfo = &this->m_DroidNPCInfo;
if ( this != -30264i64 )
{
this->GetPos(this, v41);
m_data = this->m_data;
v31 = m_data->m_dParam[5];
v30 = m_data->m_dParam[6];
memset(&s, 0, sizeof(s));
CNPC::GetOrgSpeeds(this, &s);
v6 = this->GetMoveModifier(this);
v7 = this->GetAttackModifier(this);
m_bIsAlive = this->m_data->m_bIsAlive;
memset(v42, 0, sizeof(v42));
p_nKarma = &MAX_CRIMINAL_RATE;
if ( p_m_DroidNPCInfo->nKarma < 500 )
p_nKarma = &p_m_DroidNPCInfo->nKarma;
v32 = *p_nKarma;
if ( !p_m_DroidNPCInfo->cHairAccFlag || p_m_DroidNPCInfo->nSlotHair == -1 && p_m_DroidNPCInfo->nSlotHair2 == -1 )
{
nFaceEx = p_m_DroidNPCInfo->nFaceEx;
if ( !nFaceEx )
nFaceEx = p_m_DroidNPCInfo->nFace;
nHairShapeEx = p_m_DroidNPCInfo->nHairShapeEx;
if ( !nHairShapeEx )
nHairShapeEx = p_m_DroidNPCInfo->nHairShape;
nHairColorEx = p_m_DroidNPCInfo->nHairColorEx;
if ( nHairColorEx )
goto LABEL_15;
}
else
{
nFaceEx = p_m_DroidNPCInfo->nFace;
nHairShapeEx = p_m_DroidNPCInfo->nHairShape;
}
nHairColorEx = p_m_DroidNPCInfo->nHairColor;
LABEL_15:
ph.__vftable = &CPacketHelperEx<20480>::`vftable';
memset(ph.m_buffer, 0, 20488);
CCreature::MakeAbnormalVisualEffectPacket(this, &ph);
v44.__vftable = &CPacketHelperEx<20480>::`vftable';
memset(v44.m_buffer, 0, 20488);
v9 = this->m_data;
v29 = (v9->m_StopMode & 0xFFFFFFFD) != 0;
m_length = ph.m_length;
m_assembledCount = ph.m_assembledCount;
Yaw_low = LOWORD(v9->m_Dir.Yaw);
v37 = *&v41[2];
v38 = *&v41[1];
v39 = *v41;
nVariationOpt2 = p_m_DroidNPCInfo->nVariationOpt2;
nVariationOpt1 = p_m_DroidNPCInfo->nVariationOpt1;
cHairAccFlag = p_m_DroidNPCInfo->cHairAccFlag;
m_dBaseMP = v9->m_dBaseMP;
m_dMP = v9->m_dMP;
m_dBaseHP = v9->m_dBaseHP;
m_dHP = v9->m_dHP;
nPledgeType_low = SLOWORD(p_m_DroidNPCInfo->nPledgeType);
cHero = this->m_DroidNPCInfo.cHero;
cNobless = this->m_DroidNPCInfo.cNobless;
m_Environment_low = SLOBYTE(v9->m_Environment);
m_bIsInCombatMode = v9->m_bIsInCombatMode;
v28 = v9->m_MoveMode != MT_SLOW;
cGender = this->m_DroidNPCInfo.cGender;
cRace = this->m_DroidNPCInfo.cRace;
v17 = this->GetName(this);
CPacketHelperEx<20480>::Assemble(
&v44,
"ccdddddShcdddddddddddddddddddcdddddddddcdddhhhhhhhhffffdddSddddccccccchbcchdddccdcccdddddchdcdddcdddddcdbccc",
49i64,
!bInSight,
v39,
v38,
v37,
0i64,
this->m_data->m_nId,
v17,
cRace,
cGender,
this->m_DroidNPCInfo.nBaseClass,
this->m_DroidNPCInfo.nSlotUnderware,
this->m_DroidNPCInfo.nSlotHead,
this->m_DroidNPCInfo.nSlotRightHand,
this->m_DroidNPCInfo.nSlotLeftHand,
this->m_DroidNPCInfo.nSlotGloves,
this->m_DroidNPCInfo.nSlotChest,
this->m_DroidNPCInfo.nSlotLegs,
this->m_DroidNPCInfo.nSlotFeet,
this->m_DroidNPCInfo.nSlotBack,
this->m_DroidNPCInfo.nSlotBothHands,
this->m_DroidNPCInfo.nSlotHair,
this->m_DroidNPCInfo.nSlotHair2,
nVariationOpt1,
nVariationOpt2,
nVariationOpt1,
nVariationOpt2,
nVariationOpt1,
nVariationOpt2,
0i64,
this->m_DroidNPCInfo.nShapeShiftRightHand,
this->m_DroidNPCInfo.nShapeShiftLeftHand,
this->m_DroidNPCInfo.nShapeShiftBothHands,
this->m_DroidNPCInfo.nShapeShiftGloves,
this->m_DroidNPCInfo.nShapeShiftChest,
this->m_DroidNPCInfo.nShapeShiftLegs,
this->m_DroidNPCInfo.nShapeShiftFeet,
this->m_DroidNPCInfo.nShapeShiftHair,
this->m_DroidNPCInfo.nShapeShfitHair2,
0i64,
v32,
v31,
v30,
SLOWORD(s.m_nOrgSpeed0),
SLOWORD(s.m_nOrgSpeed1),
SLOWORD(s.m_nOrgSpeed2),
SLOWORD(s.m_nOrgSpeed3),
SLOWORD(s.m_nOrgSpeed4),
SLOWORD(s.m_nOrgSpeed5),
SLOWORD(s.m_nOrgSpeed6),
SLOWORD(s.m_nOrgSpeed7),
v6,
v7,
this->m_DroidNPCInfo.dCollisionRadius,
this->m_DroidNPCInfo.dCollisionHeight,
nFaceEx,
nHairShapeEx,
nHairColorEx,
this->m_sNickName,
this->m_DroidNPCInfo.nPledgeSID,
this->m_DroidNPCInfo.nPledgeCrestDBID,
this->m_DroidNPCInfo.nAllianceDBID,
this->m_DroidNPCInfo.nAllianceCrestDBID,
v29,
v28,
m_bIsInCombatMode,
m_bIsAlive == 0,
0i64,
0i64,
0i64,
0i64,
0,
v42,
0i64,
m_Environment_low,
this->m_DroidNPCInfo.nBonusCount,
0i64,
this->m_DroidNPCInfo.nNowClass,
0i64,
this->m_DroidNPCInfo.nEnchantWeapon,
0i64,
this->m_DroidNPCInfo.nPledgeEmblemDBID,
cNobless,
cHero,
0i64,
0i64,
0i64,
0i64,
this->m_DroidNPCInfo.nCharNameColor,
Yaw_low,
0i64,
nPledgeType_low,
this->m_DroidNPCInfo.nNickNameColor,
0i64,
0i64,
0i64,
0i64,
0,
0i64,
m_dHP,
m_dBaseHP,
m_dMP,
m_dBaseMP,
0i64,
m_assembledCount,
m_length,
ph.m_buffer,
0i64,
cHairAccFlag,
this->m_DroidNPCInfo.nAP);
if ( pUser )
{
if ( pUser->GetSocket(pUser) )
{
v18 = pUser->GetSocket(pUser);
v18->Send(v18, "b", v44.m_length, v44.m_buffer);
}
}
else
{
this->GetPos(this, &s);
}
}
}
}
void __fastcall CCreature::Init(CCreature *this)
{
__int64 i; // rcx
CContributeData *v3; // rax
CContributeData *v4; // rax
wchar_t *m_sNickName; // rdi
__int64 j; // rcx
FVector v; // [rsp+28h] [rbp-50h] BYREF
FVector v8; // [rsp+40h] [rbp-38h] BYREF
this->pClassConstant = &DEFAULT_CLASS_CONSTANT;
*(_QWORD *)this->m_attackLeaderId = 0i64;
*(_QWORD *)&this->m_attackLeaderId[2] = 0i64;
this->m_data->m_iLastArrowIndex = -1;
for ( i = 220i64; i < 472; i += 4i64 )
*(_DWORD *)((char *)&this->m_data->__vftable + i) = -1;
v3 = (CContributeData *)CGeneralObject::operator new(0x1E0ui64);
if ( v3 )
CContributeData::CContributeData(v3);
else
v4 = 0i64;
this->m_pContribute = v4;
this->m_bDietMode = 0;
this->m_dGMSpeed = 1.0;
this->m_dSpeedModByWeight = 1.0;
this->m_dHPRegenModByWeight = 1.0;
this->m_dMPRegenModByWeight = 1.0;
this->m_nSetItemClassId = 0;
std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const,int>>,0>>::clear(&this->m_mapNewSetItem);
std::_Tree<std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<int const,int>>,0>>::clear(&this->m_mapShapeShiftedSetItem);
this->m_data->m_nCanHarvest = 0;
this->m_bLeft = 0;
this->m_AlwaysSkillSuccess = 0;
this->m_dMeleeMultiTargetBias = 1.0;
*(_WORD *)&this->m_bAttackedByRange = 0;
this->m_bIgnoreRegeneration = 0;
this->PrepareLookNeighbor = 0;
this->m_bMoving = 0;
memset(&v, 0, sizeof(v));
FVector::operator=(&this->m_vMovingDirection, &v);
this->m_nLastTick = -1;
this->m_data->m_bIsActive = 0;
this->m_data->m_ClanId[0] = 0;
this->m_data->m_nClanHelpRange = 500;
this->m_data->m_nPrivateID = 0;
*(_QWORD *)&this->m_dwDamagedTick = 0i64;
CSharedCreatureData::DeleteAllAbnormalStatus(this->m_data);
this->m_data->m_bMoveTrouble = 0;
this->m_data->m_dwPathFindFailCount = 0;
memset(&v8, 0, sizeof(v8));
FVector::operator=(&this->m_vPosOnTick, &v8);
this->m_data->m_BossID = 0;
this->SetMyAirShipID(this, 0);
*(_WORD *)&this->m_AvoidAgroWhenEnterWorld = 0;
m_sNickName = this->m_sNickName;
for ( j = 25i64; j; --j )
*m_sNickName++ = 0;
this->m_nLaunchedSkills = 0;
this->m_bDoubleCastingMod = 0;
this->m_OnSummonStatBonus = 0;
this->m_bCanEscape = 1;
this->nCountAttacked = 0;
this->dDPSBonusForBuilder = 1.0;
this->m_InitializingSkillMod = 0;
*(_QWORD *)&this->m_nWeaponPAttackBonusByLevel = 0i64;
*(_DWORD *)&this->m_hMinNewSetItemEnchantedEffect = 0;
CVariableBitSet::Init(
&this->m_data->m_NeedUpdatePacketBitSet,
0x67u,
0x10u,
(unsigned __int8 *)this->m_data->m_bNeedUpdatePacketBits);
CVariableBitSet::SetAllBits(&this->m_data->m_NeedUpdatePacketBitSet);
this->m_nDamageExceptAttackerId = 0;
this->m_dExtraParam[0] = 0.0;
this->m_dExtraParam[1] = 0.0;
this->m_nChainAttackCount = 0;
this->m_DefenceFatalBlowSuccessBonus.m_Diff = 0.0;
this->m_DefenceFatalBlowSuccessBonus.m_Per = 1.0;
this->m_lSaveSkillReuseDelay = 0;
}