Fix haste caps

Before these were mostly guess work, now based on what clients report
since they do their own calculations so are most likely correct.
This commit is contained in:
Michael Cook
2013-12-11 15:44:59 -05:00
parent 76ec6e4da2
commit c70ea4a621
3 changed files with 51 additions and 40 deletions
+25 -16
View File
@@ -2875,33 +2875,42 @@ uint32 Mob::GetZoneID() const {
}
int Mob::GetHaste() {
int h = spellbonuses.haste + spellbonuses.hastetype2 + itembonuses.haste;
int h = spellbonuses.haste + spellbonuses.hastetype2;
int cap = 0;
int overhaste = 0;
int level = GetLevel();
if(level < 30) { // Rogean: Are these caps correct? Will use for now.
cap = 50;
} else if(level < 50) {
cap = 74;
} else if(level < 55) {
cap = 84;
} else if(level < 60) {
cap = 94;
} else {
// 26+ no cap, 1-25 10
if (level > 25) // 26+
h += itembonuses.haste;
else // 1-25
h += itembonuses.haste > 10 ? 10 : itembonuses.haste;
// 60+ 100, 51-59 85, 1-50 level+25
if (level > 59) // 60+
cap = RuleI(Character, HasteCap);
}
else if (level > 50) // 51-59
cap = 85;
else // 1-50
cap = level + 25;
if(h > cap) h = cap;
if(h > cap)
h = cap;
h += spellbonuses.hastetype3;
// 51+ 25 (despite there being higher spells...), 1-50 10
if (level > 50) // 51+
overhaste = spellbonuses.hastetype3 > 25 ? 25 : spellbonuses.hastetype3;
else // 1-50
overhaste = spellbonuses.hastetype3 > 10 ? 10 : spellbonuses.hastetype3;
h += overhaste;
h += ExtraHaste; //GM granted haste.
if (spellbonuses.inhibitmelee){
if (spellbonuses.inhibitmelee) {
if (h >= 0)
h -= spellbonuses.inhibitmelee;
else
h -=((100+h)*spellbonuses.inhibitmelee/100);
h -= ((100 + h) * spellbonuses.inhibitmelee / 100);
}
return(h);