33334Fermer33336
WarptenLe 06/02/2018 à 02:24
(Y a que moi qui ne fait pas attention aux points grin ?)

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 cheeky)