diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 7 |
5 files changed, 15 insertions, 6 deletions
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index f63326e801f..def55ca8f7c 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1087,6 +1087,7 @@ class TC_GAME_API Unit : public WorldObject // returns the change in power int32 ModifyPower(Powers power, int32 val); + void ApplyModManaCostMultiplier(float manaCostMultiplier, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ManaCostMultiplier), manaCostMultiplier, apply); } void ApplyModManaCostModifier(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ManaCostModifier, school), mod, apply); } uint32 GetBaseAttackTime(WeaponAttackType att) const; diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index fdf0d27b216..2df9c9bd955 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -495,7 +495,7 @@ enum AuraType : uint32 SPELL_AURA_MOD_BATTLE_PET_XP_PCT = 420, // NYI SPELL_AURA_MOD_ABSORB_EFFECTS_DONE_PCT = 421, // NYI SPELL_AURA_MOD_ABSORB_EFFECTS_TAKEN_PCT = 422, // NYI - SPELL_AURA_423 = 423, + SPELL_AURA_MOD_MANA_COST_PCT = 423, SPELL_AURA_CASTER_IGNORE_LOS = 424, // NYI SPELL_AURA_425 = 425, SPELL_AURA_426 = 426, diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 9a12e7e95bc..d7a6877715b 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -491,7 +491,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //420 SPELL_AURA_MOD_BATTLE_PET_XP_PCT &AuraEffect::HandleNULL, //421 SPELL_AURA_MOD_ABSORB_EFFECTS_DONE_PCT &AuraEffect::HandleNULL, //422 SPELL_AURA_MOD_ABSORB_EFFECTS_TAKEN_PCT - &AuraEffect::HandleNULL, //423 + &AuraEffect::HandleModManaCostPct, //423 SPELL_AURA_MOD_MANA_COST_PCT &AuraEffect::HandleNULL, //424 SPELL_AURA_CASTER_IGNORE_LOS &AuraEffect::HandleNULL, //425 &AuraEffect::HandleNULL, //426 @@ -3822,6 +3822,14 @@ void AuraEffect::HandleAuraModIncreaseBaseManaPercent(AuraApplication const* aur } } +void AuraEffect::HandleModManaCostPct(AuraApplication const* aurApp, uint8 mode, bool apply) const +{ + if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) + return; + + aurApp->GetTarget()->ApplyModManaCostMultiplier(GetAmount() / 100.0f, apply); +} + void AuraEffect::HandleAuraModPowerDisplay(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK)) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 23f3fd65b96..0c304d558e1 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 HandleAuraModIncreaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraIncreaseBaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModIncreaseBaseManaPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const; + void HandleModManaCostPct(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; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index ee06f6e7d3f..2c62209ce4d 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3834,9 +3834,6 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc flatMod += (*i)->GetAmount(); } - if (power->PowerType == POWER_MANA) - flatMod *= 1.0f + caster->m_unitData->ManaCostMultiplier; // this is wrong - powerCost += flatMod; } @@ -3901,7 +3898,9 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc powerCost += CalculatePct(powerCost, (*i)->GetAmount()); } - if (power->PowerType == POWER_HEALTH) + if (power->PowerType == POWER_MANA) + powerCost = float(powerCost) * (1.0f + caster->m_unitData->ManaCostMultiplier); + else if (power->PowerType == POWER_HEALTH) { healthCost += powerCost; continue; |