Scripts/Spells: Properly utilize all Arcane Explosion energize effects

Port From (https://github.com/TrinityCore/TrinityCore/commit/fd7f854995580a6e0100710fdd0d6a9d63082777)
This commit is contained in:
hondacrx
2021-05-17 14:30:14 -04:00
parent 61c9f6edea
commit 3df467e345
+28 -17
View File
@@ -30,6 +30,7 @@ namespace Scripts.Spells.Mage
struct SpellIds struct SpellIds
{ {
public const uint ArcaneBarrageR3 = 321526; public const uint ArcaneBarrageR3 = 321526;
public const uint ArcaneMage = 137021;
public const uint BlazingBarrierTrigger = 235314; public const uint BlazingBarrierTrigger = 235314;
public const uint Cauterized = 87024; public const uint Cauterized = 87024;
public const uint CauterizeDot = 87023; public const uint CauterizeDot = 87023;
@@ -47,6 +48,7 @@ namespace Scripts.Spells.Mage
public const uint LivingBombExplosion = 44461; public const uint LivingBombExplosion = 44461;
public const uint LivingBombPeriodic = 217694; public const uint LivingBombPeriodic = 217694;
public const uint ManaSurge = 37445; public const uint ManaSurge = 37445;
public const uint Reverberate = 281482;
public const uint RingOfFrostDummy = 91264; public const uint RingOfFrostDummy = 91264;
public const uint RingOfFrostFreeze = 82691; public const uint RingOfFrostFreeze = 82691;
public const uint RingOfFrostSummon = 113724; public const uint RingOfFrostSummon = 113724;
@@ -112,33 +114,42 @@ namespace Scripts.Spells.Mage
[Script] // 1449 - Arcane Explosion [Script] // 1449 - Arcane Explosion
class spell_mage_arcane_explosion : SpellScript class spell_mage_arcane_explosion : SpellScript
{ {
bool _once = true; public override bool Validate(SpellInfo spellInfo)
void PreventEnergize(uint effIndex)
{ {
PreventHitDefaultEffect(effIndex); if (!ValidateSpellInfo(SpellIds.ArcaneMage, SpellIds.Reverberate))
return false;
SpellEffectInfo damageEffect = spellInfo.GetEffect(1);
return damageEffect != null && damageEffect.IsEffect(SpellEffectName.SchoolDamage);
} }
void HandleTargetHit(uint effIndex) void CheckRequiredAuraForBaselineEnergize(uint effIndex)
{ {
if (_once) if (GetUnitTargetCountForEffect(1) == 0 || !GetCaster().HasAura(SpellIds.ArcaneMage))
PreventHitDefaultEffect(effIndex);
}
void HandleReverberate(uint effIndex)
{
bool procTriggered = false;
Unit caster = GetCaster();
AuraEffect triggerChance = caster.GetAuraEffect(SpellIds.Reverberate, 0);
if (triggerChance != null)
{ {
SpellEffectInfo effInfo = GetEffectInfo(0); AuraEffect requiredTargets = caster.GetAuraEffect(SpellIds.Reverberate, 1);
if (effInfo != null) if (requiredTargets != null)
{ procTriggered = GetUnitTargetCountForEffect(1) >= requiredTargets.GetAmount() && RandomHelper.randChance(triggerChance.GetAmount());
Unit caster = GetCaster();
int value = effInfo.CalcValue(caster);
caster.ModifyPower((PowerType)effInfo.MiscValue, value);
}
_once = false;
} }
if (!procTriggered)
PreventHitDefaultEffect(effIndex);
} }
public override void Register() public override void Register()
{ {
OnEffectHitTarget.Add(new EffectHandler(PreventEnergize, 0, SpellEffectName.Energize)); OnEffectHitTarget.Add(new EffectHandler(CheckRequiredAuraForBaselineEnergize, 0, SpellEffectName.Energize));
OnEffectHitTarget.Add(new EffectHandler(PreventEnergize, 2, SpellEffectName.Energize)); OnEffectHitTarget.Add(new EffectHandler(HandleReverberate, 2, SpellEffectName.Energize));
OnEffectHitTarget.Add(new EffectHandler(HandleTargetHit, 1, SpellEffectName.SchoolDamage));
} }
} }