43aab94a35
Port From (https://github.com/TrinityCore/TrinityCore/commit/2e3f3fda3fc533daa4064739b633dbb28f5115d3)
741 lines
24 KiB
C#
741 lines
24 KiB
C#
// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
|
|
// Licensed under the Gnu General Public License. See License file in the project root for full license information.
|
|
|
|
using Framework.Constants;
|
|
using Framework.Dynamic;
|
|
using Game.AI;
|
|
using Game.DataStorage;
|
|
using Game.Entities;
|
|
using Game.Scripting;
|
|
using Game.Spells;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Scripts.Spells.Evoker;
|
|
|
|
struct SpellIds
|
|
{
|
|
public const uint AzureEssenceBurst = 375721;
|
|
public const uint BlastFurnace = 375510;
|
|
public const uint BlessingOfTheBronzeDk = 381732;
|
|
public const uint BlessingOfTheBronzeDh = 381741;
|
|
public const uint BlessingOfTheBronzeDruid = 381746;
|
|
public const uint BlessingOfTheBronzeEvoker = 381748;
|
|
public const uint BlessingOfTheBronzeHunter = 381749;
|
|
public const uint BlessingOfTheBronzeMage = 381750;
|
|
public const uint BlessingOfTheBronzeMonk = 381751;
|
|
public const uint BlessingOfTheBronzePaladin = 381752;
|
|
public const uint BlessingOfTheBronzePriest = 381753;
|
|
public const uint BlessingOfTheBronzeRogue = 381754;
|
|
public const uint BlessingOfTheBronzeShaman = 381756;
|
|
public const uint BlessingOfTheBronzeWarlock = 381757;
|
|
public const uint BlessingOfTheBronzeWarrior = 381758;
|
|
public const uint Burnout = 375802;
|
|
public const uint CallOfYseraTalent = 373834;
|
|
public const uint CallOfYsera = 373835;
|
|
public const uint Causality = 375777;
|
|
public const uint Disintegrate = 356995;
|
|
public const uint EmeraldBlossomHeal = 355916;
|
|
public const uint EnergizingFlame = 400006;
|
|
public const uint EssenceBurst = 359618;
|
|
public const uint FirestormDamage = 369374;
|
|
public const uint EternitySurge = 359073;
|
|
public const uint FireBreath = 357208;
|
|
public const uint FireBreathDamage = 357209;
|
|
public const uint GlideKnockback = 358736;
|
|
public const uint Hover = 358267;
|
|
public const uint LivingFlame = 361469;
|
|
public const uint LivingFlameDamage = 361500;
|
|
public const uint LivingFlameHeal = 361509;
|
|
public const uint PanaceaHeal = 387763;
|
|
public const uint PanaceaTalent = 387761;
|
|
public const uint PermeatingChillTalent = 370897;
|
|
public const uint PyreDamage = 357212;
|
|
public const uint RubyEmbers = 365937;
|
|
public const uint RubyEssenceBurst = 376872;
|
|
public const uint ScouringFlame = 378438;
|
|
public const uint Snapfire = 370818;
|
|
public const uint SoarRacial = 369536;
|
|
public const uint VerdantEmbraceHeal = 361195;
|
|
public const uint VerdantEmbraceJump = 373514;
|
|
|
|
public const uint LabelEvokerBlue = 1465;
|
|
|
|
public const uint VisualKitEvokerVerdantEmbraceJump = 152557;
|
|
|
|
public static uint[] CausalityAffectedEmpowerSpells = [EternitySurge, FireBreath];
|
|
}
|
|
|
|
[Script] // 362969 - Azure Strike (blue)
|
|
class spell_evo_azure_strike : SpellScript
|
|
{
|
|
void FilterTargets(List<WorldObject> targets)
|
|
{
|
|
targets.Remove(GetExplTargetUnit());
|
|
targets.RandomResize((uint)GetEffectInfo(0).CalcValue(GetCaster()) - 1);
|
|
targets.Add(GetExplTargetUnit());
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnObjectAreaTargetSelect.Add(new(FilterTargets, 1, Targets.UnitDestAreaEnemy));
|
|
}
|
|
}
|
|
|
|
// 381732 - Blessing of the Bronze (Bronze)
|
|
// 381741 - Blessing of the Bronze (Bronze)
|
|
// 381746 - Blessing of the Bronze (Bronze)
|
|
// 381748 - Blessing of the Bronze (Bronze)
|
|
// 381749 - Blessing of the Bronze (Bronze)
|
|
// 381750 - Blessing of the Bronze (Bronze)
|
|
// 381751 - Blessing of the Bronze (Bronze)
|
|
// 381752 - Blessing of the Bronze (Bronze)
|
|
// 381753 - Blessing of the Bronze (Bronze)
|
|
// 381754 - Blessing of the Bronze (Bronze)
|
|
// 381756 - Blessing of the Bronze (Bronze)
|
|
// 381757 - Blessing of the Bronze (Bronze)
|
|
[Script] // 381758 - Blessing of the Bronze (Bronze)
|
|
class spell_evo_blessing_of_the_bronze : SpellScript
|
|
{
|
|
void RemoveInvalidTargets(List<WorldObject> targets)
|
|
{
|
|
targets.RemoveAll(target =>
|
|
{
|
|
Unit unitTarget = target.ToUnit();
|
|
if (unitTarget == null)
|
|
return true;
|
|
|
|
switch (GetSpellInfo().Id)
|
|
{
|
|
case SpellIds.BlessingOfTheBronzeDk: return unitTarget.GetClass() != Class.DeathKnight;
|
|
case SpellIds.BlessingOfTheBronzeDh: return unitTarget.GetClass() != Class.DemonHunter;
|
|
case SpellIds.BlessingOfTheBronzeDruid: return unitTarget.GetClass() != Class.Druid;
|
|
case SpellIds.BlessingOfTheBronzeEvoker: return unitTarget.GetClass() != Class.Evoker;
|
|
case SpellIds.BlessingOfTheBronzeHunter: return unitTarget.GetClass() != Class.Hunter;
|
|
case SpellIds.BlessingOfTheBronzeMage: return unitTarget.GetClass() != Class.Mage;
|
|
case SpellIds.BlessingOfTheBronzeMonk: return unitTarget.GetClass() != Class.Monk;
|
|
case SpellIds.BlessingOfTheBronzePaladin: return unitTarget.GetClass() != Class.Paladin;
|
|
case SpellIds.BlessingOfTheBronzePriest: return unitTarget.GetClass() != Class.Priest;
|
|
case SpellIds.BlessingOfTheBronzeRogue: return unitTarget.GetClass() != Class.Rogue;
|
|
case SpellIds.BlessingOfTheBronzeShaman: return unitTarget.GetClass() != Class.Shaman;
|
|
case SpellIds.BlessingOfTheBronzeWarlock: return unitTarget.GetClass() != Class.Warlock;
|
|
case SpellIds.BlessingOfTheBronzeWarrior: return unitTarget.GetClass() != Class.Warrior;
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnObjectAreaTargetSelect.Add(new(RemoveInvalidTargets, SpellConst.EffectAll, Targets.UnitCasterAreaRaid));
|
|
}
|
|
}
|
|
|
|
[Script] // 375801 - Burnout
|
|
class spell_evo_burnout : AuraScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.Burnout);
|
|
}
|
|
|
|
bool CheckProc(AuraEffect aurEff, ProcEventInfo eventInfo)
|
|
{
|
|
return RandomHelper.randChance(aurEff.GetAmount());
|
|
}
|
|
|
|
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo)
|
|
{
|
|
eventInfo.GetActor().CastSpell(eventInfo.GetActor(), SpellIds.Burnout, TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
DoCheckEffectProc.Add(new(CheckProc, 0, AuraType.Dummy));
|
|
OnEffectProc.Add(new(HandleProc, 0, AuraType.Dummy));
|
|
}
|
|
}
|
|
|
|
[Script] // 373834 - Call of Ysera (attached to 361195 - Verdant Embrace (Green))
|
|
class spell_evo_call_of_ysera : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.CallOfYseraTalent, SpellIds.CallOfYsera);
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
return GetCaster().HasAura(SpellIds.CallOfYseraTalent);
|
|
}
|
|
|
|
void HandleCallOfYsera()
|
|
{
|
|
GetCaster().CastSpell(GetCaster(), SpellIds.CallOfYsera, new CastSpellExtraArgs()
|
|
{
|
|
TriggerFlags = TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError,
|
|
TriggeringSpell = GetSpell()
|
|
});
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
AfterCast.Add(new(HandleCallOfYsera));
|
|
}
|
|
}
|
|
|
|
[Script] // Called by 356995 - Disintegrate (Blue)
|
|
class spell_evo_causality_disintegrate : AuraScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellEffect((SpellIds.Causality, 1));
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
return GetCaster().HasAura(SpellIds.Causality);
|
|
}
|
|
|
|
void OnTick(AuraEffect aurEff)
|
|
{
|
|
AuraEffect causality = GetCaster().GetAuraEffect(SpellIds.Causality, 0);
|
|
if (causality != null)
|
|
{
|
|
foreach (uint spell in SpellIds.CausalityAffectedEmpowerSpells)
|
|
GetCaster().GetSpellHistory().ModifyCooldown(spell, TimeSpan.FromSeconds(causality.GetAmount()));
|
|
}
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectPeriodic.Add(new(OnTick, 0, AuraType.PeriodicDamage));
|
|
}
|
|
}
|
|
|
|
[Script] // Called by 357212 - Pyre (Red)
|
|
class spell_evo_causality_pyre : SpellScript
|
|
{
|
|
static long TargetLimit = 5;
|
|
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellEffect((SpellIds.Causality, 1));
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
return GetCaster().HasAura(SpellIds.Causality);
|
|
}
|
|
|
|
void HandleCooldown()
|
|
{
|
|
AuraEffect causality = GetCaster().GetAuraEffect(SpellIds.Causality, 1);
|
|
if (causality == null)
|
|
return;
|
|
|
|
TimeSpan cooldownReduction = TimeSpan.FromSeconds(Math.Min(GetUnitTargetCountForEffect(0), TargetLimit) * causality.GetAmount());
|
|
foreach (uint spell in SpellIds.CausalityAffectedEmpowerSpells)
|
|
GetCaster().GetSpellHistory().ModifyCooldown(spell, cooldownReduction);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
AfterCast.Add(new(HandleCooldown));
|
|
}
|
|
}
|
|
|
|
[Script] // 370455 - Charged Blast
|
|
class spell_evo_charged_blast : AuraScript
|
|
{
|
|
bool CheckProc(ProcEventInfo procInfo)
|
|
{
|
|
return procInfo.GetSpellInfo() != null && procInfo.GetSpellInfo().HasLabel(SpellIds.LabelEvokerBlue);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
DoCheckProc.Add(new(CheckProc));
|
|
}
|
|
}
|
|
|
|
// 355913 - Emerald Blossom (Green)
|
|
[Script] // Id - 23318
|
|
class at_evo_emerald_blossom(AreaTrigger areaTrigger) : AreaTriggerAI(areaTrigger)
|
|
{
|
|
public override void OnRemove()
|
|
{
|
|
Unit caster = at.GetCaster();
|
|
if (caster != null)
|
|
caster.CastSpell(at.GetPosition(), SpellIds.EmeraldBlossomHeal, TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError);
|
|
}
|
|
}
|
|
|
|
[Script] // 355916 - Emerald Blossom (Green)
|
|
class spell_evo_emerald_blossom_heal : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellEffect((spellInfo.Id, 1));
|
|
}
|
|
|
|
void FilterTargets(List<WorldObject> targets)
|
|
{
|
|
uint maxTargets = (uint)GetSpellInfo().GetEffect(1).CalcValue(GetCaster());
|
|
SelectRandomInjuredTargets(targets, maxTargets, true);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnObjectAreaTargetSelect.Add(new(FilterTargets, 0, Targets.UnitDestAreaAlly));
|
|
}
|
|
}
|
|
|
|
// Called by 362969 - Azure Strike
|
|
// Called by 361469 - Living Flame (Red)
|
|
[Script("spell_evo_azure_essence_burst", SpellIds.AzureEssenceBurst)]
|
|
[Script("spell_evo_ruby_essence_burst", SpellIds.RubyEssenceBurst)]
|
|
class spell_evo_essence_burst_trigger(uint talentAuraId) : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(talentAuraId, SpellIds.EssenceBurst);
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
AuraEffect aurEff = GetCaster().GetAuraEffect(talentAuraId, 0);
|
|
return aurEff != null && RandomHelper.randChance(aurEff.GetAmount());
|
|
}
|
|
|
|
void HandleEssenceBurst()
|
|
{
|
|
GetCaster().CastSpell(GetCaster(), SpellIds.EssenceBurst, new CastSpellExtraArgs()
|
|
{
|
|
TriggerFlags = TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError,
|
|
TriggeringSpell = GetSpell()
|
|
});
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
AfterCast.Add(new(HandleEssenceBurst));
|
|
}
|
|
}
|
|
|
|
// 357208 Fire Breath (Red)
|
|
[Script] // 382266 Fire Breath (Red)
|
|
class spell_evo_fire_breath : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.FireBreathDamage, SpellIds.BlastFurnace);
|
|
}
|
|
|
|
void OnComplete(int completedStageCount)
|
|
{
|
|
int dotTicks = 10 - (completedStageCount - 1) * 3;
|
|
AuraEffect blastFurnace = GetCaster().GetAuraEffect(SpellIds.BlastFurnace, 0);
|
|
if (blastFurnace != null)
|
|
dotTicks += blastFurnace.GetAmount() / 2;
|
|
|
|
GetCaster().CastSpell(GetCaster(), SpellIds.FireBreathDamage, new CastSpellExtraArgs()
|
|
.SetTriggeringSpell(GetSpell())
|
|
.SetTriggerFlags(TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError)
|
|
.AddSpellMod(SpellValueModFloat.DurationPct, 100 * dotTicks)
|
|
.SetCustomArg(completedStageCount));
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEmpowerCompleted.Add(new(OnComplete));
|
|
}
|
|
}
|
|
|
|
[Script] // 357209 Fire Breath (Red)
|
|
class spell_evo_fire_breath_damage : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellEffect((spellInfo.Id, 2))
|
|
&& spellInfo.GetEffect(2).IsAura(AuraType.ModSilence); // validate we are removing the correct effect
|
|
}
|
|
|
|
void AddBonusUpfrontDamage(SpellEffectInfo spellEffectInfo, Unit victim, ref int damage, ref int flatMod, ref float pctMod)
|
|
{
|
|
var empowerLevel = (int)GetSpell().m_customArg;
|
|
if (empowerLevel == 0)
|
|
return;
|
|
|
|
// damage is done after aura is applied, grab periodic amount
|
|
AuraEffect fireBreath = victim.GetAuraEffect(GetSpellInfo().Id, 1, GetCaster().GetGUID());
|
|
if (fireBreath != null)
|
|
flatMod += (int)fireBreath.GetEstimatedAmount().GetValueOrDefault(fireBreath.GetAmount()) * (empowerLevel - 1) * 3;
|
|
}
|
|
|
|
void RemoveUnusedEffect(List<WorldObject> targets)
|
|
{
|
|
targets.Clear();
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
CalcDamage.Add(new(AddBonusUpfrontDamage));
|
|
OnObjectAreaTargetSelect.Add(new(RemoveUnusedEffect, 2, Targets.UnitConeCasterToDestEnemy));
|
|
}
|
|
}
|
|
|
|
[Script] // 369372 - Firestorm (Red)
|
|
class at_evo_firestorm(AreaTrigger areaTrigger) : AreaTriggerAI(areaTrigger)
|
|
{
|
|
TaskScheduler _scheduler = new();
|
|
object _damageSpellCustomArg;
|
|
|
|
public class extra_create_data
|
|
{
|
|
public float SnapshotDamageMultipliers = 1.0f;
|
|
}
|
|
|
|
public static extra_create_data GetOrCreateExtraData(Spell firestorm)
|
|
{
|
|
if (firestorm.m_customArg.GetType() != typeof(extra_create_data))
|
|
firestorm.m_customArg = new extra_create_data();
|
|
|
|
return (extra_create_data)firestorm.m_customArg;
|
|
}
|
|
|
|
public override void OnCreate(Spell creatingSpell)
|
|
{
|
|
_damageSpellCustomArg = creatingSpell.m_customArg;
|
|
|
|
_scheduler.Schedule(TimeSpan.FromSeconds(0), task =>
|
|
{
|
|
TimeSpan period = TimeSpan.FromSeconds(2); // TimeSpan.FromSeconds(2), affected by haste
|
|
Unit caster = at.GetCaster();
|
|
if (caster != null)
|
|
{
|
|
period *= caster.m_unitData.ModCastingSpeed;
|
|
caster.CastSpell(at.GetPosition(), SpellIds.FirestormDamage, new CastSpellExtraArgs()
|
|
{
|
|
TriggerFlags = TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError,
|
|
CustomArg = _damageSpellCustomArg
|
|
});
|
|
}
|
|
|
|
task.Repeat(period);
|
|
});
|
|
}
|
|
|
|
public override void OnUpdate(uint diff)
|
|
{
|
|
_scheduler.Update(diff);
|
|
}
|
|
}
|
|
|
|
[Script] // 358733 - Glide (Racial)
|
|
class spell_evo_glide : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.GlideKnockback, SpellIds.Hover, SpellIds.SoarRacial);
|
|
}
|
|
|
|
SpellCastResult CheckCast()
|
|
{
|
|
Unit caster = GetCaster();
|
|
|
|
if (!caster.IsFalling())
|
|
return SpellCastResult.NotOnGround;
|
|
|
|
return SpellCastResult.SpellCastOk;
|
|
}
|
|
|
|
void HandleCast()
|
|
{
|
|
Player caster = GetCaster().ToPlayer();
|
|
if (caster == null)
|
|
return;
|
|
|
|
caster.CastSpell(caster, SpellIds.GlideKnockback, true);
|
|
|
|
caster.GetSpellHistory().StartCooldown(Global.SpellMgr.GetSpellInfo(SpellIds.Hover, GetCastDifficulty()), 0, null, false, TimeSpan.FromSeconds(250));
|
|
caster.GetSpellHistory().StartCooldown(Global.SpellMgr.GetSpellInfo(SpellIds.SoarRacial, GetCastDifficulty()), 0, null, false, TimeSpan.FromSeconds(250));
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnCheckCast.Add(new(CheckCast));
|
|
OnCast.Add(new(HandleCast));
|
|
}
|
|
}
|
|
|
|
[Script] // 361469 - Living Flame (Red)
|
|
class spell_evo_living_flame : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.LivingFlameDamage, SpellIds.LivingFlameHeal, SpellIds.EnergizingFlame);
|
|
}
|
|
|
|
void HandleHitTarget(uint effIndex)
|
|
{
|
|
Unit caster = GetCaster();
|
|
Unit hitUnit = GetHitUnit();
|
|
if (caster.IsValidAssistTarget(hitUnit))
|
|
caster.CastSpell(hitUnit, SpellIds.LivingFlameHeal, true);
|
|
else
|
|
caster.CastSpell(hitUnit, SpellIds.LivingFlameDamage, true);
|
|
}
|
|
|
|
void HandleLaunchTarget(uint effIndex)
|
|
{
|
|
Unit caster = GetCaster();
|
|
if (caster.IsValidAssistTarget(GetHitUnit()))
|
|
return;
|
|
|
|
AuraEffect auraEffect = caster.GetAuraEffect(SpellIds.EnergizingFlame, 0);
|
|
if (auraEffect != null)
|
|
{
|
|
int manaCost = GetSpell().GetPowerTypeCostAmount(PowerType.Mana).GetValueOrDefault(0);
|
|
if (manaCost != 0)
|
|
GetCaster().ModifyPower(PowerType.Mana, MathFunctions.CalculatePct(manaCost, auraEffect.GetAmount()));
|
|
}
|
|
}
|
|
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new(HandleHitTarget, 0, SpellEffectName.Dummy));
|
|
OnEffectLaunchTarget.Add(new(HandleLaunchTarget, 0, SpellEffectName.Dummy));
|
|
}
|
|
}
|
|
|
|
[Script] // 387761 Panacea (Green) (attached to 355913 - Emerald Blossom (Green) and 360995 - Verdant Embrace (Green))
|
|
class spell_evo_panacea : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.PanaceaTalent, SpellIds.PanaceaHeal);
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
return GetCaster().HasAura(SpellIds.PanaceaTalent);
|
|
}
|
|
|
|
void HandlePanacea()
|
|
{
|
|
GetCaster().CastSpell(GetCaster(), SpellIds.PanaceaHeal, new CastSpellExtraArgs()
|
|
{
|
|
TriggerFlags = TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError,
|
|
TriggeringSpell = GetSpell()
|
|
});
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
AfterCast.Add(new(HandlePanacea));
|
|
}
|
|
}
|
|
|
|
[Script] // 381773 - Permeating Chill
|
|
class spell_evo_permeating_chill : AuraScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.PermeatingChillTalent);
|
|
}
|
|
|
|
bool CheckProc(ProcEventInfo procInfo)
|
|
{
|
|
SpellInfo spellInfo = procInfo.GetSpellInfo();
|
|
if (spellInfo == null)
|
|
return false;
|
|
|
|
if (!spellInfo.HasLabel(SpellIds.LabelEvokerBlue))
|
|
return false;
|
|
|
|
if (!procInfo.GetActor().HasAura(SpellIds.PermeatingChillTalent))
|
|
if (!spellInfo.IsAffected(SpellFamilyNames.Evoker, new FlagArray128(0x40, 0, 0, 0))) // disintegrate
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
DoCheckProc.Add(new(CheckProc));
|
|
}
|
|
}
|
|
|
|
[Script] // 393568 - Pyre
|
|
class spell_evo_pyre : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.PyreDamage);
|
|
}
|
|
|
|
void HandleDamage(uint effIndex)
|
|
{
|
|
GetCaster().CastSpell(GetHitUnit().GetPosition(), SpellIds.PyreDamage, true);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new(HandleDamage, 0, SpellEffectName.Dummy));
|
|
}
|
|
}
|
|
|
|
// 361500 Living Flame (Red)
|
|
[Script] // 361509 Living Flame (Red)
|
|
class spell_evo_ruby_embers : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.RubyEmbers)
|
|
&& ValidateSpellEffect((spellInfo.Id, 1))
|
|
&& spellInfo.GetEffect(1).IsEffect(SpellEffectName.ApplyAura)
|
|
&& spellInfo.GetEffect(1).ApplyAuraPeriod != 0;
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
return !GetCaster().HasAura(SpellIds.RubyEmbers);
|
|
}
|
|
|
|
void PreventPeriodic(ref WorldObject target)
|
|
{
|
|
target = null;
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnObjectTargetSelect.Add(new(PreventPeriodic, 1, m_scriptSpellId == SpellIds.LivingFlameDamage ? Targets.UnitTargetEnemy : Targets.UnitTargetAlly));
|
|
}
|
|
}
|
|
|
|
[Script] // 357209 Fire Breath (Red)
|
|
class spell_evo_scouring_flame : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.ScouringFlame);
|
|
}
|
|
|
|
void HandleScouringFlame(List<WorldObject> targets)
|
|
{
|
|
if (!GetCaster().HasAura(SpellIds.ScouringFlame))
|
|
targets.Clear();
|
|
}
|
|
|
|
void CalcDispelCount(uint effIndex)
|
|
{
|
|
int empowerLevel = (int)GetSpell().m_customArg;
|
|
if (empowerLevel != 0)
|
|
SetEffectValue(empowerLevel);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnObjectAreaTargetSelect.Add(new(HandleScouringFlame, 3, Targets.UnitConeCasterToDestEnemy));
|
|
OnEffectHitTarget.Add(new(CalcDispelCount, 3, SpellEffectName.Dispel));
|
|
}
|
|
}
|
|
|
|
[Script] // Called by 368847 - Firestorm (Red)
|
|
class spell_evo_snapfire : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellEffect((SpellIds.Snapfire, 1));
|
|
}
|
|
|
|
public override bool Load()
|
|
{
|
|
return GetCaster().HasAura(SpellIds.Snapfire);
|
|
}
|
|
|
|
public override void OnPrecast()
|
|
{
|
|
AuraEffect snapfire = GetCaster().GetAuraEffect(SpellIds.Snapfire, 1);
|
|
if (snapfire != null)
|
|
if (GetSpell().m_appliedMods.Contains(snapfire.GetBase()))
|
|
MathFunctions.AddPct(ref at_evo_firestorm.GetOrCreateExtraData(GetSpell()).SnapshotDamageMultipliers, snapfire.GetAmount());
|
|
}
|
|
|
|
public override void Register() { }
|
|
}
|
|
|
|
[Script] // Called by 369374 - Firestorm (Red)
|
|
class spell_evo_snapfire_bonus_damage : SpellScript
|
|
{
|
|
void CalculateDamageBonus(SpellEffectInfo spellEffectInfo, Unit victim, ref int damage, ref int flatMod, ref float pctMod)
|
|
{
|
|
if (GetSpell().m_customArg is at_evo_firestorm.extra_create_data bonus)
|
|
pctMod *= bonus.SnapshotDamageMultipliers;
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
CalcDamage.Add(new(CalculateDamageBonus));
|
|
}
|
|
}
|
|
|
|
[Script] // 360995 - Verdant Embrace (Green)
|
|
class spell_evo_verdant_embrace : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.VerdantEmbraceHeal, SpellIds.VerdantEmbraceJump)
|
|
&& CliDB.SpellVisualKitStorage.HasRecord(SpellIds.VisualKitEvokerVerdantEmbraceJump);
|
|
}
|
|
|
|
void HandleLaunchTarget(uint effIndex)
|
|
{
|
|
Unit caster = GetCaster();
|
|
Unit target = GetHitUnit();
|
|
CastSpellExtraArgs args = new();
|
|
args.SetTriggerFlags(TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError);
|
|
args.SetTriggeringSpell(GetSpell());
|
|
|
|
if (target != caster)
|
|
{
|
|
caster.CastSpell(target, SpellIds.VerdantEmbraceJump, args);
|
|
caster.SendPlaySpellVisualKit(SpellIds.VisualKitEvokerVerdantEmbraceJump, 0, 0);
|
|
}
|
|
else
|
|
caster.CastSpell(caster, SpellIds.VerdantEmbraceHeal, args);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectLaunchTarget.Add(new(HandleLaunchTarget, 0, SpellEffectName.Dummy));
|
|
}
|
|
}
|
|
|
|
[Script] // 396557 - Verdant Embrace
|
|
class spell_evo_verdant_embrace_trigger_heal : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.VerdantEmbraceHeal);
|
|
}
|
|
|
|
void HandleHitTarget(uint effIndex)
|
|
{
|
|
GetHitUnit().CastSpell(GetExplTargetUnit(), SpellIds.VerdantEmbraceHeal, new CastSpellExtraArgs()
|
|
{
|
|
TriggerFlags = TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError,
|
|
TriggeringSpell = GetSpell()
|
|
});
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new(HandleHitTarget, 0, SpellEffectName.Dummy));
|
|
}
|
|
}
|