diff options
| author | joschiwald <joschiwald.trinity@gmail.com> | 2018-05-12 11:42:38 +0200 | 
|---|---|---|
| committer | joschiwald <joschiwald.trinity@gmail.com> | 2018-05-12 12:49:12 +0200 | 
| commit | aed52529bec72262f448df89d1932b9040635c6c (patch) | |
| tree | 4a2a554981d96405f7656723a96c1c5af355f503 /src/server/game/Spells/SpellInfo.cpp | |
| parent | 98eb06ac25166276731a8e23e48f5677d8aa8db3 (diff) | |
Core/Spells: Implemented optional power cost
Closes #18348
Diffstat (limited to 'src/server/game/Spells/SpellInfo.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 958bcc82f16..d1dfa32f7cb 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3698,6 +3698,19 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc              if (power->PowerCostMaxPct)                  healthCost += int32(CalculatePct(caster->GetMaxHealth(), power->PowerCostMaxPct)); +            int32 optionalCost = int32(power->OptionalCost); +            optionalCost += caster->GetTotalAuraModifier(SPELL_AURA_MOD_ADDITIONAL_POWER_COST, [this, power](AuraEffect const* aurEff) -> bool +            { +                return aurEff->GetMiscValue() == power->PowerType +                    && aurEff->IsAffectingSpell(this); +            }); + +            if (optionalCost) +            { +                int32 remainingPower = caster->GetPower(Powers(power->PowerType)) - powerCost; +                powerCost += RoundToInterval<int32>(remainingPower, 0, optionalCost); +            } +              if (power->PowerType != POWER_HEALTH)              {                  // Flat mod from caster auras by spell school and power type  | 
