hondacrx
2020-12-31 15:49:46 -05:00
parent e9fd790e07
commit 26c42d517e
3 changed files with 115 additions and 3 deletions
+1 -1
View File
@@ -2841,7 +2841,7 @@ namespace Game.Entities
spellInfo.GetEffect(0).TriggerSpell = 33760;
break;
case 44544: // Fingers of Frost
spellInfo.GetEffect(0).SpellClassMask = new FlagArray128(685904631, 1151048, 0, 0);
spellInfo.GetEffect(0).SpellClassMask[0] |= 0x20000;
break;
case 52212: // Death and Decay
case 41485: // Deadly Poison - Black Temple
+101 -2
View File
@@ -54,6 +54,11 @@ namespace Scripts.Spells.Mage
public const uint TemporalDisplacement = 80354;
public const uint WorgenForm = 32819;
public const uint Chilled = 205708;
public const uint IceLanceTrigger = 228598;
public const uint ThermalVoid = 155149;
public const uint IcyVeins = 12472;
public const uint ChainReactionDummy = 278309;
public const uint ChainReaction = 278310;
//Misc
public const uint HunterInsanity = 95809;
@@ -238,6 +243,26 @@ namespace Scripts.Spells.Mage
}
}
[Script] // 44544 - Fingers of Frost
class spell_mage_fingers_of_frost : AuraScript
{
void SuppressWarning(AuraEffect aurEff, ProcEventInfo procInfo)
{
PreventDefaultAction();
}
void DropFingersOfFrost(ProcEventInfo eventInfo)
{
GetAura().ModStackAmount(-1);
}
public override void Register()
{
OnEffectProc.Add(new EffectProcHandler(SuppressWarning, 1, AuraType.Dummy));
AfterProc.Add(new AuraProcHandler(DropFingersOfFrost));
}
}
[Script] // 11426 - Ice Barrier
class spell_mage_ice_barrier : AuraScript
{
@@ -270,8 +295,82 @@ namespace Scripts.Spells.Mage
}
}
// 11119 - Ignite
[Script]
[Script] // Ice Lance - 30455
class spell_mage_ice_lance : SpellScript
{
List<ObjectGuid> _orderedTargets = new List<ObjectGuid>();
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.IceLanceTrigger, SpellIds.ThermalVoid, SpellIds.IcyVeins, SpellIds.ChainReactionDummy, SpellIds.ChainReaction, SpellIds.FingersOfFrost);
}
void IndexTarget(uint effIndex)
{
_orderedTargets.Add(GetHitUnit().GetGUID());
}
void HandleOnHit(uint effIndex)
{
Unit caster = GetCaster();
Unit target = GetHitUnit();
int index = _orderedTargets.IndexOf(target.GetGUID());
if (index == 0 // only primary target triggers these benefits
&& target.HasAuraState(AuraStateType.Frozen, GetSpellInfo(), caster))
{
// Thermal Void
Aura thermalVoid = caster.GetAura(SpellIds.ThermalVoid);
if (thermalVoid != null)
{
SpellEffectInfo thermalVoidEffect = thermalVoid.GetSpellInfo().GetEffect(0);
if (thermalVoidEffect != null)
{
Aura icyVeins = caster.GetAura(SpellIds.IcyVeins);
if (icyVeins != null)
icyVeins.SetDuration(icyVeins.GetDuration() + thermalVoidEffect.CalcValue(caster) * Time.InMilliseconds);
}
}
// Chain Reaction
if (caster.HasAura(SpellIds.ChainReactionDummy))
caster.CastSpell(caster, SpellIds.ChainReaction, true);
}
// put target index for chain value multiplier into EFFECT_1 base points, otherwise triggered spell doesn't know which damage multiplier to apply
caster.CastCustomSpell(SpellIds.IceLanceTrigger, SpellValueMod.BasePoint1, index, target, true);
}
public override void Register()
{
OnEffectLaunchTarget.Add(new EffectHandler(IndexTarget, 0, SpellEffectName.ScriptEffect));
OnEffectHitTarget.Add(new EffectHandler(HandleOnHit, 0, SpellEffectName.ScriptEffect));
}
}
[Script] // 228598 - Ice Lance
class spell_mage_ice_lance_damage : SpellScript
{
void ApplyDamageMultiplier(uint effIndex)
{
SpellValue spellValue = GetSpellValue();
if ((spellValue.CustomBasePointsMask & (1 << 1)) != 0)
{
int originalDamage = GetHitDamage();
float targetIndex = (float)spellValue.EffectBasePoints[1];
float multiplier = MathF.Pow(GetEffectInfo().CalcDamageMultiplier(GetCaster(), GetSpell()), targetIndex);
SetHitDamage((int)(originalDamage * multiplier));
}
}
public override void Register()
{
OnEffectHitTarget.Add(new EffectHandler(ApplyDamageMultiplier, 0, SpellEffectName.SchoolDamage));
}
}
[Script] // 11119 - Ignite
class spell_mage_ignite : AuraScript
{
public override bool Validate(SpellInfo spellInfo)
@@ -0,0 +1,13 @@
-- Fingers of Frost
DELETE FROM `spell_proc` WHERE `SpellId`=44544;
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
(44544,0,3,0,0,0,0x100,0x10000,0,0x4,0x3FFF,0,0,0,100,0,0); -- PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG; PROC_SPELL_PHASE_FINISH; PROC_HIT_MASK_ALL
-- mage ice lance
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_mage_fingers_of_frost';
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_mage_ice_lance';
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_mage_ice_lance_damage';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(44544,'spell_mage_fingers_of_frost'),
(30455,'spell_mage_ice_lance'),
(228598,'spell_mage_ice_lance_damage');