(Y a que moi qui ne fait pas attention aux points
?)
double __cdecl GetEffectiveWeaponDamage(int max_ilvl, int ilvl, int item_class, int item_subclass, unsigned int quality, float armore_damage_mod, DWORD delay, float stat_scaling_factor, int inv_type, __int16 sparse_flags2, char clamp_minimum_1.0)
{
int ilvl:; // eax
float dps; // xmm1_4
double result; // st7
ItemDamageRec_C *v14; // eax
float invMsDelay; // xmm2_4
float v16; // xmm1_4
float v17; // xmm0_4
float v18; // xmm2_4
float v19; // xmm0_4
float delay:; // [esp+Ch] [ebp-8h]
float avgDamage; // [esp+10h] [ebp-4h]
float scaled_stat; // [esp+1Ch] [ebp+8h]
ilvl: = max_ilvl;
dps = 0.0;
if ( max_ilvl <= 0 )
{
ilvl: = ilvl;
}
else if ( max_ilvl >= ilvl )
{
ilvl: = ilvl;
}
if ( item_class != 2 )
return 0.0;
if ( quality > 7 || quality == 7 )
return 0.0;
switch ( inv_type )
{
case INVTYPE_WEAPON:
case INVTYPE_WEAPONMAINHAND:
case INVTYPE_WEAPONOFFHAND:
if ( sparse_flags2 & 0x200 )
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageOneHandCasterDB, ilvl:);
else
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageOneHandDB, ilvl:);
goto LABEL_21;
case INVTYPE_RANGED:
case INVTYPE_THROWN:
case INVTYPE_RANGEDRIGHT:
switch ( item_subclass )
{
case 2:
case 3:
case 18:
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageRangedDB, ilvl:);
goto LABEL_21;
case 16:
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageThrownDB, ilvl:);
goto LABEL_21;
case 19:
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageWandDB, ilvl:);
goto LABEL_21;
default:
goto LABEL_22;
}
break;
case INVTYPE_2HWEAPON:
if ( sparse_flags2 & 0x200 )
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageTwoHandCasterDB, ilvl:);
else
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageTwoHandDB, ilvl:);
goto LABEL_21;
case INVTYPE_AMMO:
v14 = WowClientCompressedDBCache::GetRecord(&g_ItemDamageAmmoDB, ilvl:);
LABEL_21:
dps = v14->m_dps[quality];
break;
default:
break;
}
LABEL_22:
delay: = delay;
avgDamage = (delay * dps) * 0.001;
scaled_stat = floor(((stat_scaling_factor * 0.5) + 1.0) * avgDamage + 0.5);
if ( delay && armore_damage_mod != 0.0 )
{
invMsDelay = 1000.0 / delay:;
v16 = ((1000.0 / delay:) * ((1.0 - (stat_scaling_factor * 0.5)) * avgDamage)) + armore_damage_mod;
if ( v16 < 1.0 )
v16 = 1.0;
v17 = 1.0 / invMsDelay;
v18 = (1.0 / invMsDelay) * v16;
v19 = v17 * (((1000.0 / delay:) * scaled_stat) + armore_damage_mod);
}
else
{
v19 = scaled_stat;
v18 = (1.0 - (stat_scaling_factor * 0.5)) * avgDamage;
}
if ( clamp_minimum_1.0 )
{
if ( v18 <= 1.0 )
result = 1.0;
else
result = v18;
}
else if ( v19 <= 1.0 )
{
result = 1.0;
}
else
{
result = v19;
}
return result;
}
(le plus ironique c'est que je finis par identifier des fonctions sans le vouloir tellement j'ai de noms dans mon IDB
)