diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 |
4 files changed, 29 insertions, 12 deletions
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 3c93d8404a0..0f1733bc72c 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -23,6 +23,7 @@ #include "Pet.h" #include "Creature.h" #include "GameTables.h" +#include "ObjectMgr.h" #include "SharedDefines.h" #include "SpellAuras.h" #include "SpellAuraEffects.h" @@ -745,19 +746,21 @@ void Player::UpdateManaRegen() if (manaIndex == MAX_POWERS) return; - // Mana regen from spirit - float spirit_regen = 0.0f; - // Apply PCT bonus from SPELL_AURA_MOD_POWER_REGEN_PERCENT aura on spirit base regen - spirit_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_MANA); + // Get base of Mana Pool in sBaseMPGameTable + uint32 basemana = 0; + sObjectMgr->GetPlayerClassLevelInfo(getClass(), getLevel(), basemana); + float base_regen = basemana / 100.f; - // CombatRegen = 5% of Base Mana - float base_regen = GetCreateMana() * 0.02f + GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, POWER_MANA) / 5.0f; + base_regen += GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_POWER_REGEN, POWER_MANA); - // Set regen rate in cast state apply only on spirit based regen - int32 modManaRegenInterrupt = GetTotalAuraModifier(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT); + // Apply PCT bonus from SPELL_AURA_MOD_POWER_REGEN_PERCENT + base_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_POWER_REGEN_PERCENT, POWER_MANA); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + manaIndex, base_regen + CalculatePct(spirit_regen, modManaRegenInterrupt)); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + manaIndex, 0.001f + spirit_regen + base_regen); + // Apply PCT bonus from SPELL_AURA_MOD_MANA_REGEN_PCT + base_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_MANA_REGEN_PCT, POWER_MANA); + + SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + manaIndex, base_regen); + SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + manaIndex, base_regen); } void Player::UpdateAllRunesRegen() diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 4e33349d33d..f8a44b1cadd 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -448,7 +448,7 @@ enum AuraType : uint32 SPELL_AURA_MOD_CURRENCY_GAIN_FROM_SOURCE = 376, // NYI SPELL_AURA_CAST_WHILE_WALKING_2 = 377, // NYI SPELL_AURA_378 = 378, - SPELL_AURA_379 = 379, + SPELL_AURA_MOD_MANA_REGEN_PCT = 379, SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE = 380, // Allows melee abilities to benefit from haste GCD reduction SPELL_AURA_381 = 381, SPELL_AURA_MOD_PET_STAT_PCT = 382, // NYI diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index c21c6147e98..018d03ce9ee 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -445,7 +445,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //376 SPELL_AURA_MOD_CURRENCY_GAIN_FROM_SOURCE &AuraEffect::HandleNULL, //377 SPELL_AURA_CAST_WHILE_WALKING_2 &AuraEffect::HandleNULL, //378 - &AuraEffect::HandleNULL, //379 + &AuraEffect::HandleModManaRegenPct, //379 SPELL_AURA_MOD_MANA_REGEN_PCT implemented in Player::UpdateManaRegen &AuraEffect::HandleNoImmediateEffect, //380 SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE implemented in Spell::TriggerGlobalCooldown &AuraEffect::HandleNULL, //381 &AuraEffect::HandleNULL, //382 SPELL_AURA_MOD_PET_STAT_PCT @@ -3644,6 +3644,19 @@ void AuraEffect::HandleModManaRegen(AuraApplication const* aurApp, uint8 mode, b target->ToPlayer()->UpdateManaRegen(); } +void AuraEffect::HandleModManaRegenPct(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const +{ + if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) + return; + + Unit* target = aurApp->GetTarget(); + + if (!target->IsPlayer()) + return; + + target->ToPlayer()->UpdateManaRegen(); +} + void AuraEffect::HandleAuraModIncreaseHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 7493aaab17a..93a64406273 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -241,6 +241,7 @@ class TC_GAME_API AuraEffect void HandleModPowerRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModPowerRegenPCT(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleModManaRegen(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleModManaRegenPct(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModIncreaseHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModIncreaseMaxHealth(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModIncreaseEnergy(AuraApplication const* aurApp, uint8 mode, bool apply) const; |
