diff options
author | DoctorKraft <DoctorKraft@users.noreply.github.com> | 2018-04-09 23:15:09 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2018-04-10 00:15:09 +0300 |
commit | a48d96c892cece071709aa57e2cf53d2468e278a (patch) | |
tree | 97d1ac5e0e040f8329262d5576e837d16bc63f86 /src | |
parent | b3b685a43da041a3d8959e5e60624241de8501e0 (diff) |
Core/Auras: Implemented Aura 178 (SPELL_AURA_MOD_MAX_POWER_PCT) (#21804)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index f8a44b1cadd..7c92e81872e 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -247,7 +247,7 @@ enum AuraType : uint32 SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT = 175, SPELL_AURA_SPIRIT_OF_REDEMPTION = 176, SPELL_AURA_AOE_CHARM = 177, - SPELL_AURA_MOD_MAX_POWER_PCT = 178, // NYI + SPELL_AURA_MOD_MAX_POWER_PCT = 178, SPELL_AURA_MOD_POWER_DISPLAY = 179, SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS = 180, SPELL_AURA_181 = 181, // old SPELL_AURA_MOD_FLAT_SPELL_CRIT_DAMAGE_VERSUS - possible flat spell crit damage versus diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 018d03ce9ee..dfe5f801381 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -244,7 +244,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleModSpellHealingPercentFromStat, //175 SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT implemented in Unit::SpellBaseHealingBonus &AuraEffect::HandleSpiritOfRedemption, //176 SPELL_AURA_SPIRIT_OF_REDEMPTION only for Spirit of Redemption spell, die at aura end &AuraEffect::HandleCharmConvert, //177 SPELL_AURA_AOE_CHARM - &AuraEffect::HandleNULL, //178 SPELL_AURA_MOD_MAX_POWER_PCT + &AuraEffect::HandleAuraModMaxPowerPct, //178 SPELL_AURA_MOD_MAX_POWER_PCT &AuraEffect::HandleAuraModPowerDisplay, //179 SPELL_AURA_MOD_POWER_DISPLAY &AuraEffect::HandleNoImmediateEffect, //180 SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS implemented in Unit::SpellDamageBonus &AuraEffect::HandleUnused, //181 unused (4.3.4) old SPELL_AURA_MOD_FLAT_SPELL_CRIT_DAMAGE_VERSUS @@ -3806,6 +3806,31 @@ void AuraEffect::HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp target->SetUInt32Value(UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID, 0); } +void AuraEffect::HandleAuraModMaxPowerPct(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; + + Powers powerType = Powers(GetMiscValue()); + UnitMods unitMod = UnitMods(UNIT_MOD_POWER_START + powerType); + + // Save old powers for further calculation + int32 oldPower = target->GetPower(powerType); + int32 oldMaxPower = target->GetMaxPower(powerType); + + // Handle aura effect for max power + target->HandleStatModifier(unitMod, TOTAL_PCT, float(GetAmount()), apply); + + // Calculate the current power change + int32 change = target->GetMaxPower(powerType) - oldMaxPower; + change = (oldPower + change) - target->GetPower(powerType); + target->ModifyPower(powerType, change); +} + /********************************/ /*** FIGHT ***/ /********************************/ diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 93a64406273..a19d7cb1033 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -251,6 +251,7 @@ class TC_GAME_API AuraEffect void HandleAuraModIncreaseBaseManaPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModPowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleAuraModMaxPowerPct(AuraApplication const* aurApp, uint8 mode, bool apply) const; // fight void HandleAuraModParryPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModDodgePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; |