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
+27 -16
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)
{ {
if (!ValidateSpellInfo(SpellIds.ArcaneMage, SpellIds.Reverberate))
return false;
SpellEffectInfo damageEffect = spellInfo.GetEffect(1);
return damageEffect != null && damageEffect.IsEffect(SpellEffectName.SchoolDamage);
}
void CheckRequiredAuraForBaselineEnergize(uint effIndex)
{
if (GetUnitTargetCountForEffect(1) == 0 || !GetCaster().HasAura(SpellIds.ArcaneMage))
PreventHitDefaultEffect(effIndex); PreventHitDefaultEffect(effIndex);
} }
void HandleTargetHit(uint effIndex) void HandleReverberate(uint effIndex)
{
if (_once)
{
SpellEffectInfo effInfo = GetEffectInfo(0);
if (effInfo != null)
{ {
bool procTriggered = false;
Unit caster = GetCaster(); Unit caster = GetCaster();
int value = effInfo.CalcValue(caster); AuraEffect triggerChance = caster.GetAuraEffect(SpellIds.Reverberate, 0);
caster.ModifyPower((PowerType)effInfo.MiscValue, value); if (triggerChance != null)
} {
_once = false; AuraEffect requiredTargets = caster.GetAuraEffect(SpellIds.Reverberate, 1);
if (requiredTargets != null)
procTriggered = GetUnitTargetCountForEffect(1) >= requiredTargets.GetAmount() && RandomHelper.randChance(triggerChance.GetAmount());
} }
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));
} }
} }