I m posting this that follows a serious and passionated debate on PEQ's forums. I didnt posted there since Ylosh suggested and identified the problem (for some other reasons too, linked to my own person safety lol).
zone/attack.cpp
Code:
float Mob::GetProcChances(float &ProcBonus, float &ProcChance) {
int mydex = GetDEX();
ProcBonus = 0;
if(IsClient()) {
//increases based off 1 guys observed results.
switch(CastToClient()->GetAA(aaWeaponAffinity)) {
case 1:
ProcBonus += 0.05f;
break;
case 2:
ProcBonus += 0.10f;
break;
case 3:
ProcBonus += 0.15f;
break;
case 4:
ProcBonus += 0.20f;
break;
case 5:
ProcBonus += 0.25f;
break;
}
}
ProcBonus += float(itembonuses.ProcChance + spellbonuses.ProcChance) / 1000.0f;
ProcChance = float(mydex) / 3020.0f + ProcBonus;
mlog(COMBAT__PROCS, "Proc chance %.2f (%.2f from bonuses)", ProcChance, ProcBonus);
return ProcChance;
}
What's coded is : we calculate the chance to proc like it should be, and ADD 5 to 25% to the total, which can gives values up to 30/35%
Imho, this is a misinterpretation of the AA, which is that we have to increase the chance of 5 to 25%. IE, if you got 5% chances, with WA, it should be between 5.25 to 6.25 (5*5%/25%), not 5+(5%/25%).
Code:
ProcChance = (float(mydex) / 3020.0f ) * (1.0f+ProcBonus));
with a dex of 255 and WA 5 (nothing from spells nor items),
the first formula gives : 255/3020+25=33,44% (Ylosh got such values with mlog)
the second one gives : (255/3020)*1.25=10.55%
Even the second formula is high compared to live, due probably to the dex/3020 which is perhaps not the right formula (it could be scaled and not linear).