void __fastcall User::ValidateParameters(User *this, __int16 vb, bool bEnterWorld)
{
__int16 v4; // di
__int16 v6; // si
v4 = vb;
if ( (vb & 0x2000) != 0 )
{
CCreature::ValidateBaseData(this);
CCreature::ValidateBaseAttributeData(this);
this->ValidateLevel(this);
this->ValidateOrgSpeed(this);
this->ValidateAllOnWeaponArmors(this);
this->ValidateItemSkills(this);
this->ValidateSkillList(this);
CCreature::ValidateSkillMod(this);
CCreature::ValidateHPMPCP(this, bEnterWorld);
this->ValidateAllOnSIM(this);
LABEL_29:
this->ValidateOrgSpeed(this);
goto LABEL_30;
}
if ( (vb & 1) != 0 )
CCreature::ValidateBaseData(this);
if ( (v4 & 0x102) != 0 )
CCreature::ValidateBaseAttributeData(this);
if ( (v4 & 4) != 0 )
{
if ( this->ValidateLevel(this) )
v4 |= 0x620u;
else
v4 |= 0x200u;
}
if ( (v4 & 8) != 0 )
this->ValidateOrgSpeed(this);
v6 = v4 | 0xA00;
if ( (v4 & 0x10) == 0 )
v6 = v4;
if ( (v6 & 0x20) != 0 )
this->ValidateAllOnWeaponArmors(this);
v4 = v6;
if ( (v6 & 0x40) != 0 && this->ValidateItemSkills(this) )
v4 = v6 | 0x580;
if ( (v4 & 0x80u) != 0 )
this->ValidateSkillList(this);
if ( (v4 & 0x100) != 0 )
CCreature::ValidateSkillMod(this);
if ( (v4 & 0x200) != 0 )
CCreature::ValidateHPMPCP(this, bEnterWorld);
if ( (v4 & 0x400) != 0 )
this->ValidateAllOnSIM(this);
if ( (v4 & 0x800) != 0 )
goto LABEL_29;
LABEL_30:
if ( (v4 & 0x1000) != 0 )
this->ValidateLevelUP(this);
this->ParamChanged(this, 16i64);
}
char __fastcall User::ValidateSpeed(User *this)
{
double v2; // xmm6_8
CUserRidingInfo *m_pStriderInfo; // rbx
const PetDataSheet::Record *v5; // rax
CSharedCreatureData *m_data; // rcx
double v7; // xmm2_8
double *v8; // rdx
double v9; // xmm2_8
v2 = ((double)this->m_data->m_nOrgParam[11]
* this->m_dGMSpeed
* this->m_SkillMod.m_Mods[7].m_Per
* this->m_AreaMod.m_dSpeedModByArea
+ this->m_SkillMod.m_Mods[7].m_Diff)
* this->m_dSpeedModByWeight;
if ( ((unsigned __int8 (*)(void))this->IsCameraMode)() )
{
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_data->m_dParam[11],
400.0,
0x3Bu);
return 0;
}
if ( this->IsRidingOnGround(this) )
{
m_pStriderInfo = this->m_pStriderInfo;
v5 = CCommonRidingInfo::Record(&m_pStriderInfo->m_commonInfo);
if ( m_pStriderInfo->m_pRidingInfo->IsHungry(m_pStriderInfo->m_pRidingInfo, v5->m_nHungryLimit) )
v2 = v2 * 0.5;
if ( this->m_pStriderInfo->m_commonInfo.m_striderLevel >= this->m_data->m_nLevel + 10 )
v2 = v2 * 0.5;
}
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_data->m_dParam[11],
v2,
0x3Bu);
this->ValidateGradePenalty(this, SPEED);
m_data = this->m_data;
v7 = DOUBLE_1_0;
v8 = &m_data->m_dParam[11];
if ( m_data->m_moveType == CMT_FLY )
{
if ( *v8 >= 1.0 )
{
v9 = DOUBLE_350_0;
LABEL_13:
v7 = fmin(v9, *v8);
}
}
else if ( *v8 >= 1.0 )
{
v9 = DOUBLE_300_0;
goto LABEL_13;
}
CVariableBitSet::SetDoubleValue_IfModifed(&m_data->m_NeedUpdatePacketBitSet, v8, v7, 0x3Bu);
return 1;
}
char __fastcall User::ValidateOrgSpeed(User *this)
{
const PetDataSheet::Record *v2; // rax
int *m_data; // r8
int v4; // eax
CNPC *m_pPolymorphNPC; // r9
int v6; // ebx
if ( this->IsRiding(this) )
{
v2 = CCommonRidingInfo::Record(&this->m_pStriderInfo->m_commonInfo);
this->m_data->m_nOrgParam[11] = v2->mSpeedOnRide[this->m_data->m_MoveMode][this->m_data->m_Environment];
m_data = (int *)this->m_data;
v4 = v2->mSpeedOnRide[m_data[148]][m_data[150]];
LABEL_5:
m_data[3276] = v4;
goto LABEL_10;
}
if ( User::IsTransformedExcept(this, DamageText) )
{
this->m_data->m_nOrgParam[11] = (int)this->m_transform->m_commonData->orgSpeed[this->m_data->m_MoveMode][this->m_data->m_Environment];
m_data = (int *)this->m_data;
v4 = (int)this->m_transform->m_commonData->orgSpeed[m_data[148]][m_data[150]];
goto LABEL_5;
}
m_pPolymorphNPC = this->m_pPolymorphNPC;
if ( m_pPolymorphNPC )
{
this->m_data->m_nOrgParam[11] = m_pPolymorphNPC->m_pClassConst->m_SpeedByME[this->m_data->m_MoveMode][this->m_data->m_Environment];
this->m_data->m_nMoveTypeSpeed = m_pPolymorphNPC->m_pClassConst->m_SpeedByME[this->m_data->m_MoveMode][this->m_data->m_Environment];
}
else
{
this->m_data->m_nOrgParam[11] = (int)CPCParamDB::GetOrgSpeed(
&g_PCParamDB,
this->m_data->m_Sex,
this->m_data->m_nClass,
this->m_data->m_MoveMode,
this->m_data->m_Environment,
this->m_data->m_Race);
this->m_data->m_nMoveTypeSpeed = (int)CPCParamDB::GetOrgSpeed(
&g_PCParamDB,
this->m_data->m_Sex,
this->m_data->m_nClass,
this->m_data->m_MoveMode,
this->m_data->m_Environment,
this->m_data->m_Race);
}
v6 = (int)this->EquipedArmorsValidate(this, SPEED);
this->m_data->m_nOrgParam[11] += v6 + (int)this->EquipedWeaponValidate(this, SPEED);
LABEL_10:
this->ValidateSpeed(this);
return 1;
}
long double __fastcall CCreature::GetMoveModifier(CCreature *this)
{
CSharedCreatureData *m_data; // rax
m_data = this->m_data;
if ( m_data->m_nMoveTypeSpeed <= 0 )
m_data->m_nMoveTypeSpeed = 1;
return this->m_data->m_dParam[11] / (double)this->m_data->m_nMoveTypeSpeed;
}
char __fastcall User::ValidateSpeed(User *this)
{
double v2; // xmm6_8
CUserRidingInfo *m_pStriderInfo; // rbx
const PetDataSheet::Record *v5; // rax
CSharedCreatureData *m_data; // rcx
double v7; // xmm2_8
double *v8; // rdx
double v9; // xmm2_8
v2 = ((double)this->m_data->m_nOrgParam[11]
* this->m_dGMSpeed
* this->m_SkillMod.m_Mods[7].m_Per
* this->m_AreaMod.m_dSpeedModByArea
+ this->m_SkillMod.m_Mods[7].m_Diff)
* this->m_dSpeedModByWeight;
if ( ((unsigned __int8 (*)(void))this->IsCameraMode)() )
{
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_data->m_dParam[11],
400.0,
0x3Bu);
return 0;
}
if ( this->IsRidingOnGround(this) )
{
m_pStriderInfo = this->m_pStriderInfo;
v5 = CCommonRidingInfo::Record(&m_pStriderInfo->m_commonInfo);
if ( m_pStriderInfo->m_pRidingInfo->IsHungry(m_pStriderInfo->m_pRidingInfo, v5->m_nHungryLimit) )
v2 = v2 * 0.5;
if ( this->m_pStriderInfo->m_commonInfo.m_striderLevel >= this->m_data->m_nLevel + 10 )
v2 = v2 * 0.5;
}
CVariableBitSet::SetDoubleValue_IfModifed(
&this->m_data->m_NeedUpdatePacketBitSet,
&this->m_data->m_dParam[11],
v2,
0x3Bu);
this->ValidateGradePenalty(this, SPEED);
m_data = this->m_data;
v7 = DOUBLE_1_0;
v8 = &m_data->m_dParam[11];
if ( m_data->m_moveType == CMT_FLY )
{
if ( *v8 >= 1.0 )
{
v9 = DOUBLE_350_0;
LABEL_13:
v7 = fmin(v9, *v8);
}
}
else if ( *v8 >= 1.0 )
{
v9 = DOUBLE_300_0;
goto LABEL_13;
}
CVariableBitSet::SetDoubleValue_IfModifed(&m_data->m_NeedUpdatePacketBitSet, v8, v7, 0x3Bu);
return 1;
}