aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp14
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp40
3 files changed, 22 insertions, 33 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 119e43ad525..a606cd14190 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8636,20 +8636,6 @@ int64 Unit::GetHealthGain(int64 dVal)
return gain;
}
-// Always return negative value for power reduction (or 0)
-int32 Unit::ConsumeAllPower(Powers power)
-{
- int32 curPower = GetPower(power);
- int32 minPower = GetMinPower(power);
-
- if (curPower <= minPower)
- return 0;
-
- int32 diff = minPower - curPower;
- SetPower(power, minPower);
- return diff;
-}
-
// returns negative amount on power reduction
int32 Unit::ModifyPower(Powers power, int32 dVal, bool withPowerUpdate /*= true*/)
{
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index ab339e8a816..5275677e2e8 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -940,7 +940,6 @@ class TC_GAME_API Unit : public WorldObject
inline void SetFullPower(Powers power) { SetPower(power, GetMaxPower(power)); }
// returns the change in power
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate = true);
- int32 ConsumeAllPower(Powers power);
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); }
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 73e9420699c..461a093be3e 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -33,6 +33,7 @@
enum MageSpells
{
+ SPELL_MAGE_ARCANE_BARRAGE_ENERGIZE = 321529,
SPELL_MAGE_ARCANE_BARRAGE_R3 = 321526,
SPELL_MAGE_ARCANE_MAGE = 137021,
SPELL_MAGE_BLAZING_BARRIER_TRIGGER = 235314,
@@ -83,38 +84,41 @@ class spell_mage_arcane_barrage : public SpellScript
{
PrepareSpellScript(spell_mage_arcane_barrage);
- bool Validate(SpellInfo const* /*spellInfo*/) override
+ bool Validate(SpellInfo const* spellInfo) override
{
- return ValidateSpellInfo({ SPELL_MAGE_ARCANE_BARRAGE_R3 });
+ return ValidateSpellInfo({ SPELL_MAGE_ARCANE_BARRAGE_R3, SPELL_MAGE_ARCANE_BARRAGE_ENERGIZE })
+ && spellInfo->GetEffect(EFFECT_1);
}
- void HandleEffectHitTarget(SpellEffIndex /*effIndex*/)
+ void ConsumeArcaneCharges()
{
- // Consume all arcane charges; for each charge add 30% additional damage
Unit* caster = GetCaster();
- double charges = double(-caster->ConsumeAllPower(POWER_ARCANE_CHARGES));
- double currDamage = double(GetHitDamage());
- double extraDamage = (charges * 0.3) * currDamage;
- SetHitDamage(int32(currDamage + extraDamage));
+ // Consume all arcane charges
+ if (int32 arcaneCharges = -caster->ModifyPower(POWER_ARCANE_CHARGES, -caster->GetMaxPower(POWER_ARCANE_CHARGES), false))
+ if (AuraEffect const* auraEffect = caster->GetAuraEffect(SPELL_MAGE_ARCANE_BARRAGE_R3, EFFECT_0, caster->GetGUID()))
+ caster->CastSpell(caster, SPELL_MAGE_ARCANE_BARRAGE_ENERGIZE, { SPELLVALUE_BASE_POINT0, arcaneCharges * auraEffect->GetAmount() / 100 });
+ }
- if (Aura const* aura = caster->GetAura(SPELL_MAGE_ARCANE_BARRAGE_R3))
- {
- if (AuraEffect const* auraEffect = aura->GetEffect(EFFECT_0))
- {
- double pct = charges * (double(auraEffect->GetAmount()) * 0.01);
- int32 maxMana = caster->GetMaxPower(POWER_MANA);
+ void HandleEffectHitTarget(SpellEffIndex /*effIndex*/)
+ {
+ if (GetHitUnit()->GetGUID() != _primaryTarget)
+ SetHitDamage(CalculatePct(GetHitDamage(), GetEffectInfo(EFFECT_1)->CalcValue(GetCaster())));
+ }
- int32 extraMana = CalculatePct(double(maxMana), pct);
- caster->ModifyPower(POWER_MANA, extraMana);
- }
- }
+ void MarkPrimaryTarget(SpellEffIndex /*effIndex*/)
+ {
+ _primaryTarget = GetHitUnit()->GetGUID();
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_mage_arcane_barrage::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnEffectLaunchTarget += SpellEffectFn(spell_mage_arcane_barrage::MarkPrimaryTarget, EFFECT_1, SPELL_EFFECT_DUMMY);
+ AfterCast += SpellCastFn(spell_mage_arcane_barrage::ConsumeArcaneCharges);
}
+
+ ObjectGuid _primaryTarget;
};
// 1449 - Arcane Explosion