From 2c01fe59ce50f8fd9a72c2dc7190dafa56b72b3c Mon Sep 17 00:00:00 2001 From: KayenEQ Date: Tue, 10 Aug 2021 19:39:12 -0400 Subject: [PATCH] [Spells] Implemented SPA 489 SE_Worn_Endurance_Regen_Cap (#1493) Implemented SE_Worn_Endurance_Regen_Cap 489 modify worn item regen cap base: amt, limit: none, max: none Also added support to allow item mana regen cap to check item and spell bonuses. --- common/spdat.h | 2 +- zone/bonuses.cpp | 17 +++++++++++++++++ zone/client_mods.cpp | 4 ++-- zone/common.h | 1 + zone/spell_effects.cpp | 2 +- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/common/spdat.h b/common/spdat.h index 5e29cc4e3..2a53e9aaa 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -852,7 +852,7 @@ typedef enum { #define SE_Ff_Same_Caster 486 // implemented, @Ff, Caster of spell on target with a focus effect that is checked by incoming spells, base1: 0=Must be different caster 1=Must be same caster //#define SE_Extend_Tradeskill_Cap 487 // //#define SE_Defender_Melee_Force_Pct_PC 488 // -//#define SE_Worn_Endurance_Regen_Cap 489 // +#define SE_Worn_Endurance_Regen_Cap 489 // implemented, modify worn regen cap, base: amt, limit: none, max: none #define SE_Ff_ReuseTimeMin 490 // implemented, @Ff, Minimum recast time of a spell that can be focused, base: recast time #define SE_Ff_ReuseTimeMax 491 // implemented, @Ff, Max recast time of a spell that can be focused, base: recast time #define SE_Ff_Endurance_Min 492 // implemented, @Ff, Minimum endurance cost of a spell that can be focused, base: endurance cost diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 8c4b5893f..9ba4f4237 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -1628,6 +1628,9 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon) break; } + case SE_Worn_Endurance_Regen_Cap: + newbon->ItemEnduranceRegenCap += base1; + break; // to do case SE_PetDiscipline: @@ -3541,6 +3544,14 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne new_bonus->Pet_Add_Atk += effect_value; break; + case SE_Worn_Endurance_Regen_Cap: + new_bonus->ItemEnduranceRegenCap += effect_value; + break; + + case SE_ItemManaRegenCapIncrease: + new_bonus->ItemManaRegenCap += effect_value; + break; + case SE_Weapon_Stance: { if (IsValidSpell(effect_value)) { //base1 is the spell_id of buff if (base2 <= WEAPON_STANCE_TYPE_MAX) { //0=2H, 1=Shield, 2=DW @@ -4925,6 +4936,12 @@ void Mob::NegateSpellsBonuses(uint16 spell_id) itembonuses.ItemHPRegenCap = effect_value; break; + case SE_Worn_Endurance_Regen_Cap: + spellbonuses.ItemEnduranceRegenCap = effect_value; + aabonuses.ItemEnduranceRegenCap = effect_value; + itembonuses.ItemEnduranceRegenCap = effect_value; + break; + case SE_OffhandRiposteFail: spellbonuses.OffhandRiposteFail = effect_value; aabonuses.OffhandRiposteFail = effect_value; diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index d31bc6c9b..f51406150 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -781,7 +781,7 @@ int32 Client::CalcManaRegen(bool bCombat) int32 Client::CalcManaRegenCap() { - int32 cap = RuleI(Character, ItemManaRegenCap) + aabonuses.ItemManaRegenCap; + int32 cap = RuleI(Character, ItemManaRegenCap) + aabonuses.ItemManaRegenCap + itembonuses.ItemManaRegenCap + spellbonuses.ItemManaRegenCap; return (cap * RuleI(Character, ManaRegenMultiplier) / 100); } @@ -1751,7 +1751,7 @@ int32 Client::CalcEnduranceRegen(bool bCombat) int32 Client::CalcEnduranceRegenCap() { - int cap = RuleI(Character, ItemEnduranceRegenCap); + int cap = RuleI(Character, ItemEnduranceRegenCap) + aabonuses.ItemEnduranceRegenCap + itembonuses.ItemEnduranceRegenCap + spellbonuses.ItemEnduranceRegenCap; return (cap * RuleI(Character, EnduranceRegenMultiplier) / 100); } diff --git a/zone/common.h b/zone/common.h index ddcb034fc..feccc7910 100644 --- a/zone/common.h +++ b/zone/common.h @@ -549,6 +549,7 @@ struct StatBonuses { int32 DS_Mitigation_Percentage; // base = percent amt of DS mitigation. Negative value to reduce int32 Pet_Crit_Melee_Damage_Pct_Owner; // base = percent mod for pet critcal damage from owner int32 Pet_Add_Atk; // base = Pet ATK bonus from owner + int32 ItemEnduranceRegenCap; // modify endurance regen cap int32 WeaponStance[WEAPON_STANCE_TYPE_MAX +1];// base = trigger spell id, base2 = 0 is 2h, 1 is shield, 2 is dual wield, [0]spid 2h, [1]spid shield, [2]spid DW // AAs diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 11dfb5b38..a8626c570 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -3238,8 +3238,8 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove case SE_AddExtraAttackPct_1h_Primary: case SE_AddExtraAttackPct_1h_Secondary: case SE_Skill_Base_Damage_Mod: + case SE_Worn_Endurance_Regen_Cap: case SE_Buy_AA_Rank: - { break; }