Scripts/Spells: Implement mage talent "Heat Shimmer"

Port From (https://github.com/TrinityCore/TrinityCore/commit/6038523692b2189d9b947defcf79879262ebf303)
This commit is contained in:
Hondacrx
2025-12-08 09:53:48 -05:00
parent 0e6cc3bd17
commit ad874bcd49
+73 -8
View File
@@ -54,11 +54,13 @@ struct SpellIds
public const uint FreneticSpeed = 236060;
public const uint FrostNova = 122;
public const uint GiraffeForm = 32816;
public const uint HeatShimmer = 458964;
public const uint HeatingUp = 48107;
public const uint HotStreak = 48108;
public const uint IceBarrier = 11426;
public const uint IceBlock = 45438;
public const uint Ignite = 12654;
public const uint IgnitionBurst = 1217359;
public const uint ImprovedCombustion = 383967;
public const uint ImprovedScorch = 383608;
public const uint IncantersFlow = 116267;
@@ -922,6 +924,44 @@ class spell_mage_frostbolt : SpellScript
}
}
[Script] // 457735 - Heat Shimmer
class spell_mage_heat_shimmer : AuraScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo(SpellIds.HeatShimmer);
}
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
eventInfo.GetActor().CastSpell(eventInfo.GetActor(), SpellIds.HeatShimmer);
}
public override void Register()
{
OnEffectProc.Add(new(HandleProc, 0, AuraType.Dummy));
}
}
[Script] // 2948 - Scorch
class spell_mage_heat_shimmer_remove : SpellScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo(SpellIds.HeatShimmer);
}
void HandleHit()
{
GetCaster().RemoveAurasDueToSpell(SpellIds.HeatShimmer);
}
public override void Register()
{
AfterHit.Add(new(HandleHit));
}
}
[Script] // 44448 - Pyroblast Clearcasting Driver
class spell_mage_hot_streak : AuraScript
{
@@ -1198,6 +1238,30 @@ class spell_mage_ignite : AuraScript
}
}
[Script] // 1217359 - Ignition Burst (attached to 458964 - Heat Shimmer)
class spell_mage_ignition_burst : SpellScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.IgnitionBurst);
}
public override bool Load()
{
return !GetCaster().HasAura(SpellIds.IgnitionBurst);
}
void PreventAura(ref WorldObject target)
{
target = null;
}
public override void Register()
{
OnObjectTargetSelect.Add(new(PreventAura, 1, Targets.UnitCaster));
}
}
// 37447 - Improved Mana Gems
[Script] // 61062 - Improved Mana Gems
class spell_mage_imp_mana_gems : AuraScript
@@ -1256,12 +1320,12 @@ class spell_mage_improved_scorch : AuraScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.ImprovedScorch);
return ValidateSpellInfo(SpellIds.ImprovedScorch, SpellIds.HeatShimmer);
}
bool CheckProc(AuraEffect aurEff, ProcEventInfo eventInfo)
{
return eventInfo.GetProcTarget().HealthBelowPct(aurEff.GetAmount());
return eventInfo.GetProcTarget().HealthBelowPct(aurEff.GetAmount()) || eventInfo.GetActor().HasAura(SpellIds.HeatShimmer);
}
void HandleProc(AuraEffect aurEff, ProcEventInfo eventInfo)
@@ -1745,7 +1809,7 @@ class spell_mage_scald : SpellScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.Scald)
return ValidateSpellInfo(SpellIds.Scald, SpellIds.HeatShimmer)
&& ValidateSpellEffect((spellInfo.Id, 1));
}
@@ -1756,10 +1820,11 @@ class spell_mage_scald : SpellScript
void CalculateDamage(SpellEffectInfo spellEffectInfo, Unit victim, ref int damage, ref int flatMod, ref float pctMod)
{
if (!victim.HealthBelowPct(GetEffectInfo(1).CalcValue(GetCaster())))
Unit caster = GetCaster();
if (!victim.HealthBelowPct(GetEffectInfo(1).CalcValue(caster)) || !caster.HasAura(SpellIds.HeatShimmer))
return;
AuraEffect aurEff = GetCaster().GetAuraEffect(SpellIds.Scald, 0);
AuraEffect aurEff = caster.GetAuraEffect(SpellIds.Scald, 0);
if (aurEff != null)
MathFunctions.AddPct(ref pctMod, aurEff.GetAmount());
}
@@ -1775,19 +1840,19 @@ class spell_mage_scorch : SpellScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.FreneticSpeed);
return ValidateSpellInfo(SpellIds.FreneticSpeed, SpellIds.HeatShimmer);
}
void CalcCritChance(Unit victim, ref float critChance)
{
if (victim.GetHealthPct() < GetEffectInfo(1).CalcValue(GetCaster()))
if (victim.GetHealthPct() < GetEffectInfo(1).CalcValue(GetCaster()) || GetCaster().HasAura(SpellIds.HeatShimmer))
critChance = 100.0f;
}
void HandleFreneticSpeed(uint effIndex)
{
Unit caster = GetCaster();
if (GetHitUnit().GetHealthPct() < GetEffectInfo(1).CalcValue(GetCaster()))
if (GetHitUnit().GetHealthPct() < GetEffectInfo(1).CalcValue(GetCaster()) || GetCaster().HasAura(SpellIds.HeatShimmer))
caster.CastSpell(caster, SpellIds.FreneticSpeed, new CastSpellExtraArgs()
{
TriggerFlags = TriggerCastFlags.IgnoreCastInProgress | TriggerCastFlags.DontReportCastError,