mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 12:41:30 +00:00
[Spells] SPA69 TotalHP can be used in Worn Slot, Fixes/Updates to Max HP related variables. (#4244)
* Allow SPA69 to work on worn effects. Update to allow SPA69 to work on worn effects which the client accepts and calculates properly. Updated spell effect related Max HP change variables. 1) We had stat bonuses defined that did same function. Without updating would have had to create another variable for above to work. 2) Negate bonuses spell effect end up negating item HPs. which is not intended since using same variable for items and spells. * HP variable updates fixes * HP variable updates fixes * HP variable updates fixes * Update mob.cpp
This commit is contained in:
parent
1bc1f71254
commit
989d199908
@ -938,7 +938,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
|
||||
case SE_IncreaseRange:
|
||||
break;
|
||||
case SE_MaxHPChange:
|
||||
newbon->MaxHP += base_value;
|
||||
newbon->PercentMaxHPChange += base_value;
|
||||
break;
|
||||
case SE_Packrat:
|
||||
newbon->Packrat += base_value;
|
||||
@ -997,7 +997,7 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
|
||||
newbon->BuffSlotIncrease += base_value;
|
||||
break;
|
||||
case SE_TotalHP:
|
||||
newbon->HP += base_value;
|
||||
newbon->FlatMaxHPChange += base_value;
|
||||
break;
|
||||
case SE_StunResist:
|
||||
newbon->StunResist += base_value;
|
||||
@ -2237,7 +2237,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
|
||||
|
||||
case SE_TotalHP:
|
||||
{
|
||||
new_bonus->HP += effect_value;
|
||||
new_bonus->FlatMaxHPChange += effect_value;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2919,7 +2919,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
|
||||
}
|
||||
|
||||
case SE_MaxHPChange:
|
||||
new_bonus->MaxHPChange += effect_value;
|
||||
new_bonus->PercentMaxHPChange += effect_value;
|
||||
break;
|
||||
|
||||
case SE_EndurancePool:
|
||||
@ -4515,9 +4515,9 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id)
|
||||
break;
|
||||
|
||||
case SE_TotalHP:
|
||||
if (negate_spellbonus) { spellbonuses.HP = effect_value; }
|
||||
if (negate_aabonus) { aabonuses.HP = effect_value; }
|
||||
if (negate_itembonus) { itembonuses.HP = effect_value; }
|
||||
if (negate_spellbonus) { spellbonuses.FlatMaxHPChange = effect_value; }
|
||||
if (negate_aabonus) { aabonuses.FlatMaxHPChange = effect_value; }
|
||||
if (negate_itembonus) { itembonuses.FlatMaxHPChange = effect_value; }
|
||||
break;
|
||||
|
||||
case SE_ManaRegen_v2:
|
||||
@ -4999,10 +4999,9 @@ void Mob::NegateSpellEffectBonuses(uint16 spell_id)
|
||||
}
|
||||
|
||||
case SE_MaxHPChange:
|
||||
if (negate_spellbonus) { spellbonuses.MaxHPChange = effect_value; }
|
||||
if (negate_aabonus) { aabonuses.MaxHPChange = effect_value; }
|
||||
if (negate_aabonus) { aabonuses.MaxHP = effect_value; }
|
||||
if (negate_itembonus) { itembonuses.MaxHPChange = effect_value; }
|
||||
if (negate_spellbonus) { spellbonuses.PercentMaxHPChange = effect_value; }
|
||||
if (negate_aabonus) { aabonuses.PercentMaxHPChange = effect_value; }
|
||||
if (negate_itembonus) { itembonuses.PercentMaxHPChange = effect_value; }
|
||||
break;
|
||||
|
||||
case SE_EndurancePool:
|
||||
|
||||
@ -6235,9 +6235,9 @@ int64 Bot::CalcMaxHP() {
|
||||
uint32 nd = 10000;
|
||||
bot_hp += (GenerateBaseHitPoints() + itembonuses.HP);
|
||||
bot_hp += itembonuses.heroic_max_hp;
|
||||
nd += aabonuses.MaxHP + spellbonuses.MaxHPChange + itembonuses.MaxHPChange;
|
||||
nd += aabonuses.PercentMaxHPChange + spellbonuses.PercentMaxHPChange + itembonuses.PercentMaxHPChange;
|
||||
bot_hp = ((float)bot_hp * (float)nd / (float)10000);
|
||||
bot_hp += (spellbonuses.HP + aabonuses.HP);
|
||||
bot_hp += (spellbonuses.FlatMaxHPChange + aabonuses.FlatMaxHPChange + itembonuses.FlatMaxHPChange);
|
||||
bot_hp += GroupLeadershipAAHealthEnhancement();
|
||||
max_hp = bot_hp;
|
||||
if (current_hp > max_hp)
|
||||
|
||||
@ -323,9 +323,9 @@ int64 Client::CalcMaxHP()
|
||||
//to apply it to (basehp + itemhp).. I will oblige to the client's whims over
|
||||
//the aa description
|
||||
|
||||
nd += aabonuses.MaxHP + spellbonuses.MaxHPChange + itembonuses.MaxHPChange; //Natural Durability, Physical Enhancement, Planar Durability (MaxHP and MaxHPChange are SPA214)
|
||||
nd += aabonuses.PercentMaxHPChange + spellbonuses.PercentMaxHPChange + itembonuses.PercentMaxHPChange; //Natural Durability, Physical Enhancement, Planar Durability
|
||||
max_hp = (float)max_hp * (float)nd / (float)10000; //this is to fix the HP-above-495k issue
|
||||
max_hp += spellbonuses.HP + aabonuses.HP;
|
||||
max_hp += spellbonuses.FlatMaxHPChange + aabonuses.FlatMaxHPChange + itembonuses.FlatMaxHPChange;
|
||||
|
||||
max_hp += GroupLeadershipAAHealthEnhancement();
|
||||
if (current_hp > max_hp) {
|
||||
|
||||
@ -16780,7 +16780,7 @@ void Client::RecordStats()
|
||||
r.level = GetLevel();
|
||||
r.class_ = GetBaseClass();
|
||||
r.race = GetBaseRace();
|
||||
r.hp = GetMaxHP() - GetSpellBonuses().HP;
|
||||
r.hp = GetMaxHP() - GetSpellBonuses().FlatMaxHPChange;
|
||||
r.mana = GetMaxMana() - GetSpellBonuses().Mana;
|
||||
r.endurance = GetMaxEndurance() - GetSpellBonuses().Endurance;
|
||||
r.ac = GetDisplayAC() - GetSpellBonuses().AC;
|
||||
|
||||
@ -278,7 +278,6 @@ struct StatBonuses {
|
||||
int32 AC;
|
||||
int64 HP;
|
||||
int64 HPRegen;
|
||||
int64 MaxHP; //same bonus as MaxHPChange when applied to spells and item bonuses
|
||||
int64 ManaRegen;
|
||||
int64 EnduranceRegen;
|
||||
int64 Mana;
|
||||
@ -404,7 +403,7 @@ struct StatBonuses {
|
||||
int32 MeleeLifetap; //i
|
||||
int32 Vampirism; //i
|
||||
int32 HealRate; // Spell effect that influences effectiveness of heals
|
||||
int32 MaxHPChange; // percent change in hit points (aabonuses use variable MaxHP)
|
||||
int64 PercentMaxHPChange; // base: Max HP change by percentage value from spell effect/item worn effect/aa
|
||||
int16 SkillDmgTaken[EQ::skills::HIGHEST_SKILL + 2]; // All Skills + -1
|
||||
int32 HealAmt; // Item Effect
|
||||
int32 SpellDmg; // Item Effect
|
||||
@ -504,6 +503,7 @@ struct StatBonuses {
|
||||
uint8 invisibility_verse_undead; // IVU level
|
||||
uint8 invisibility_verse_animal; // IVA level
|
||||
int32 ShieldTargetSpa[2]; // [0] base = % mitigation amount, [1] buff slot
|
||||
int64 FlatMaxHPChange; // base: Max HP change by a flat amount value from spell effect/item worn effect/aa
|
||||
|
||||
// AAs
|
||||
int32 TrapCircumvention; // reduce chance to trigger a trap.
|
||||
|
||||
@ -16,6 +16,11 @@ int64 Lua_StatBonuses::GetHP() const {
|
||||
return self->HP;
|
||||
}
|
||||
|
||||
int64 Lua_StatBonuses::GetFlatMaxHPChange() const {
|
||||
Lua_Safe_Call_Int();
|
||||
return self->FlatMaxHPChange;
|
||||
}
|
||||
|
||||
int64 Lua_StatBonuses::GetHPRegen() const {
|
||||
Lua_Safe_Call_Int();
|
||||
return self->HPRegen;
|
||||
@ -23,7 +28,7 @@ int64 Lua_StatBonuses::GetHPRegen() const {
|
||||
|
||||
int64 Lua_StatBonuses::GetMaxHP() const {
|
||||
Lua_Safe_Call_Int();
|
||||
return self->MaxHP;
|
||||
return self->PercentMaxHPChange;
|
||||
}
|
||||
|
||||
int64 Lua_StatBonuses::GetManaRegen() const {
|
||||
@ -608,7 +613,7 @@ int32 Lua_StatBonuses::GetHealRate() const {
|
||||
|
||||
int32 Lua_StatBonuses::GetMaxHPChange() const {
|
||||
Lua_Safe_Call_Int();
|
||||
return self->MaxHPChange;
|
||||
return self->PercentMaxHPChange;
|
||||
}
|
||||
|
||||
int32 Lua_StatBonuses::GetHealAmt() const {
|
||||
@ -1381,6 +1386,7 @@ luabind::scope lua_register_stat_bonuses() {
|
||||
.def("FeignedCastOnChance", &Lua_StatBonuses::GetFeignedCastOnChance)
|
||||
.def("FinishingBlow", &Lua_StatBonuses::GetFinishingBlow)
|
||||
.def("FinishingBlowLvl", &Lua_StatBonuses::GetFinishingBlowLvl)
|
||||
.def("FlatMaxHPChange", &Lua_StatBonuses::GetFlatMaxHPChange)
|
||||
.def("FlurryChance", &Lua_StatBonuses::GetFlurryChance)
|
||||
.def("FocusEffects", &Lua_StatBonuses::GetFocusEffects)
|
||||
.def("FocusEffectsWorn", &Lua_StatBonuses::GetFocusEffectsWorn)
|
||||
|
||||
@ -27,6 +27,7 @@ public:
|
||||
|
||||
int32 GetAC() const;
|
||||
int64 GetHP() const;
|
||||
int64 GetFlatMaxHPChange() const;
|
||||
int64 GetHPRegen() const;
|
||||
int64 GetMaxHP() const;
|
||||
int64 GetManaRegen() const;
|
||||
|
||||
@ -461,10 +461,10 @@ int64 Merc::CalcMaxHP() {
|
||||
//but the actual effect sent on live causes the client
|
||||
//to apply it to (basehp + itemhp).. I will oblige to the client's whims over
|
||||
//the aa description
|
||||
nd += aabonuses.MaxHP + spellbonuses.MaxHPChange + itembonuses.MaxHPChange; //Natural Durability, Physical Enhancement, Planar Durability
|
||||
nd += aabonuses.PercentMaxHPChange + spellbonuses.PercentMaxHPChange + itembonuses.PercentMaxHPChange; //Natural Durability, Physical Enhancement, Planar Durability
|
||||
|
||||
max_hp = (float)max_hp * (float)nd / (float)10000; //this is to fix the HP-above-495k issue
|
||||
max_hp += spellbonuses.HP + aabonuses.HP;
|
||||
max_hp += spellbonuses.FlatMaxHPChange + aabonuses.FlatMaxHPChange + itembonuses.FlatMaxHPChange;
|
||||
|
||||
max_hp += GroupLeadershipAAHealthEnhancement();
|
||||
|
||||
|
||||
10
zone/mob.cpp
10
zone/mob.cpp
@ -967,8 +967,9 @@ int64 Mob::CalcMaxMana()
|
||||
}
|
||||
|
||||
int64 Mob::CalcMaxHP() {
|
||||
max_hp = (base_hp + itembonuses.HP + spellbonuses.HP);
|
||||
max_hp += max_hp * ((aabonuses.MaxHPChange + spellbonuses.MaxHPChange + itembonuses.MaxHPChange) / 10000.0f);
|
||||
max_hp = (base_hp + itembonuses.HP);
|
||||
max_hp += max_hp * ((aabonuses.PercentMaxHPChange + spellbonuses.PercentMaxHPChange + itembonuses.PercentMaxHPChange) / 10000.0f);
|
||||
max_hp += spellbonuses.FlatMaxHPChange + itembonuses.FlatMaxHPChange + aabonuses.FlatMaxHPChange;
|
||||
|
||||
return max_hp;
|
||||
}
|
||||
@ -976,14 +977,13 @@ int64 Mob::CalcMaxHP() {
|
||||
int64 Mob::GetItemHPBonuses() {
|
||||
int64 item_hp = 0;
|
||||
item_hp = itembonuses.HP;
|
||||
item_hp += item_hp * itembonuses.MaxHPChange / 10000;
|
||||
item_hp += item_hp * ((itembonuses.PercentMaxHPChange + spellbonuses.FlatMaxHPChange + aabonuses.FlatMaxHPChange) / 10000.0f);
|
||||
return item_hp;
|
||||
}
|
||||
|
||||
int64 Mob::GetSpellHPBonuses() {
|
||||
int64 spell_hp = 0;
|
||||
spell_hp = spellbonuses.HP;
|
||||
spell_hp += spell_hp * spellbonuses.MaxHPChange / 10000;
|
||||
spell_hp += spellbonuses.FlatMaxHPChange;
|
||||
return spell_hp;
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,11 @@ int64 Perl_StatBonuses_GetHP(StatBonuses* self)
|
||||
return self->HP;
|
||||
}
|
||||
|
||||
int64 Perl_StatBonuses_GetFlatMaxHPChange(StatBonuses* self)
|
||||
{
|
||||
return self->FlatMaxHPChange;
|
||||
}
|
||||
|
||||
int64 Perl_StatBonuses_GetHPRegen(StatBonuses* self)
|
||||
{
|
||||
return self->HPRegen;
|
||||
@ -23,7 +28,7 @@ int64 Perl_StatBonuses_GetHPRegen(StatBonuses* self)
|
||||
|
||||
int64 Perl_StatBonuses_GetMaxHP(StatBonuses* self)
|
||||
{
|
||||
return self->MaxHP;
|
||||
return self->PercentMaxHPChange;
|
||||
}
|
||||
|
||||
int64 Perl_StatBonuses_GetManaRegen(StatBonuses* self)
|
||||
@ -608,7 +613,7 @@ int32 Perl_StatBonuses_GetHealRate(StatBonuses* self)
|
||||
|
||||
int32 Perl_StatBonuses_GetMaxHPChange(StatBonuses* self)
|
||||
{
|
||||
return self->MaxHPChange;
|
||||
return self->PercentMaxHPChange;
|
||||
}
|
||||
|
||||
int32 Perl_StatBonuses_GetHealAmt(StatBonuses* self)
|
||||
@ -1532,6 +1537,7 @@ void perl_register_stat_bonuses()
|
||||
package.add("GetStringedModifier", &Perl_StatBonuses_GetStringedModifier);
|
||||
package.add("GetStunBashChance", &Perl_StatBonuses_GetStunBashChance);
|
||||
package.add("GetStunResist", &Perl_StatBonuses_GetStunResist);
|
||||
package.add("GetFlatMaxHPChange", &Perl_StatBonuses_GetFlatMaxHPChange);
|
||||
package.add("GetTradeSkillMastery", &Perl_StatBonuses_GetTradeSkillMastery);
|
||||
package.add("GetTriggerMeleeThreshold", &Perl_StatBonuses_GetTriggerMeleeThreshold);
|
||||
package.add("GetTriggerOnValueAmount", &Perl_StatBonuses_GetTriggerOnValueAmount);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user