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

View File

@ -2,6 +2,7 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50)
-------------------------------------------------------
== 12/11/2013 ==
demonstar55: Fixed issue with crippling blow from berserker frenzy not actually doing anything
demonstar55: Fix haste caps
== 12/04/2013 ==
demonstar55: Fixed SpellType_Charm case in AICastSpell

View File

@ -1340,45 +1340,46 @@ int16 Client::CalcCHA() {
}
int Client::CalcHaste() {
int h = spellbonuses.haste + spellbonuses.hastetype2 + itembonuses.haste;
int h = spellbonuses.haste + spellbonuses.hastetype2;
int cap = 0;
int overhaste = 0;
int level = GetLevel();
/*
if(disc_inuse == discBlindingSpeed) {
if(!disc_elapse.Check(false)) {
h += 20; //this ammount is completely unknown
} else {
disc_inuse = discNone;
}
} */
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;
cap = mod_client_haste_cap(cap);
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.
h = mod_client_haste(h);
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);
}
Haste = h;

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