Files
CypherCore/Source/Scripts/Events/HallowsEnd.cs
T
2023-10-20 07:29:05 -04:00

218 lines
8.8 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 Game.Entities;
using Game.Scripting;
using Game.Spells;
using System.Collections.Generic;
namespace Scripts.Events.HallowsEnd
{
struct SpellIds
{
//CandySpells
public const uint HallowsEndCandyOrangeGiant = 24924;
public const uint HallowsEndCandySkeleton = 24925;
public const uint HallowsEndCandyPirate = 24926;
public const uint HallowsEndCandyGhost = 24927;
public const uint HallowsEndCandyFemaleDefiasPirate = 44742;
public const uint HallowsEndCandyMaleDefiasPirate = 44743;
//TrickSpells
public const uint PirateCostumeMale = 24708;
public const uint PirateCostumeFemale = 24709;
public const uint NinjaCostumeMale = 24710;
public const uint NinjaCostumeFemale = 24711;
public const uint LeperGnomeCostumeMale = 24712;
public const uint LeperGnomeCostumeFemale = 24713;
public const uint SkeletonCostume = 24723;
public const uint GhostCostumeMale = 24735;
public const uint GhostCostumeFemale = 24736;
public const uint TrickBuff = 24753;
//TrickOrTreatSpells
public const uint Trick = 24714;
public const uint Treat = 24715;
public const uint TrickedOrTreated = 24755;
public const uint TrickyTreatSpeed = 42919;
public const uint TrickyTreatTrigger = 42965;
public const uint UpsetTummy = 42966;
//HallowendData
public const uint HallowedWandPirate = 24717;
public const uint HallowedWandNinja = 24718;
public const uint HallowedWandLeperGnome = 24719;
public const uint HallowedWandRandom = 24720;
public const uint HallowedWandSkeleton = 24724;
public const uint HallowedWandWisp = 24733;
public const uint HallowedWandGhost = 24737;
public const uint HallowedWandBat = 24741;
}
[Script] // 24930 - Hallow's End Candy
class spell_hallow_end_candy : SpellScript
{
uint[] CandysSpells = { SpellIds.HallowsEndCandyOrangeGiant, SpellIds.HallowsEndCandySkeleton, SpellIds.HallowsEndCandyPirate, SpellIds.HallowsEndCandyGhost };
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(CandysSpells);
}
void HandleDummy(uint effIndex)
{
GetCaster().CastSpell(GetCaster(), CandysSpells.SelectRandom(), true);
}
public override void Register()
{
OnEffectHit.Add(new(HandleDummy, 0, SpellEffectName.Dummy));
}
}
[Script] // 24926 - Hallow's End Candy
class spell_hallow_end_candy_pirate : AuraScript
{
public override bool Validate(SpellInfo spellInfo)
{
return ValidateSpellInfo(SpellIds.HallowsEndCandyFemaleDefiasPirate, SpellIds.HallowsEndCandyMaleDefiasPirate);
}
void HandleApply(AuraEffect aurEff, AuraEffectHandleModes mode)
{
uint spell = GetTarget().GetNativeGender() == Gender.Female ? SpellIds.HallowsEndCandyFemaleDefiasPirate : SpellIds.HallowsEndCandyMaleDefiasPirate;
GetTarget().CastSpell(GetTarget(), spell, true);
}
void HandleRemove(AuraEffect aurEff, AuraEffectHandleModes mode)
{
uint spell = GetTarget().GetNativeGender() == Gender.Female ? SpellIds.HallowsEndCandyFemaleDefiasPirate : SpellIds.HallowsEndCandyMaleDefiasPirate;
GetTarget().RemoveAurasDueToSpell(spell);
}
public override void Register()
{
AfterEffectApply.Add(new(HandleApply, 0, AuraType.ModIncreaseSwimSpeed, AuraEffectHandleModes.Real));
AfterEffectRemove.Add(new(HandleRemove, 0, AuraType.ModIncreaseSwimSpeed, AuraEffectHandleModes.Real));
}
}
[Script] // 24750 - Trick
class spell_hallow_end_trick : SpellScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo(SpellIds.PirateCostumeMale, SpellIds.PirateCostumeFemale, SpellIds.NinjaCostumeMale, SpellIds.NinjaCostumeFemale, SpellIds.LeperGnomeCostumeMale,
SpellIds.LeperGnomeCostumeFemale, SpellIds.SkeletonCostume, SpellIds.GhostCostumeMale, SpellIds.GhostCostumeFemale, SpellIds.TrickBuff);
}
void HandleScript(uint effIndex)
{
Unit caster = GetCaster();
Player target = GetHitPlayer();
if (target != null)
{
Gender gender = target.GetNativeGender();
uint spellId = RandomHelper.URand(0, 5) switch
{
1 => gender == Gender.Female ? SpellIds.LeperGnomeCostumeFemale : SpellIds.LeperGnomeCostumeMale,
2 => gender == Gender.Female ? SpellIds.PirateCostumeFemale : SpellIds.PirateCostumeMale,
3 => gender == Gender.Female ? SpellIds.GhostCostumeFemale : SpellIds.GhostCostumeMale,
4 => gender == Gender.Female ? SpellIds.NinjaCostumeFemale : SpellIds.NinjaCostumeMale,
5 => SpellIds.SkeletonCostume,
_ => SpellIds.TrickBuff
};
caster.CastSpell(target, spellId, true);
}
}
public override void Register()
{
OnEffectHitTarget.Add(new(HandleScript, 0, SpellEffectName.ScriptEffect));
}
}
[Script] // 24751 - Trick or Treat
class spell_hallow_end_trick_or_treat : SpellScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo(SpellIds.Trick, SpellIds.Treat, SpellIds.TrickedOrTreated);
}
void HandleScript(uint effIndex)
{
Unit caster = GetCaster();
Player target = GetHitPlayer();
if (target != null)
{
caster.CastSpell(target, RandomHelper.randChance(50) ? SpellIds.Trick : SpellIds.Treat, true);
caster.CastSpell(target, SpellIds.TrickedOrTreated, true);
}
}
public override void Register()
{
OnEffectHitTarget.Add(new(HandleScript, 0, SpellEffectName.ScriptEffect));
}
}
[Script] // 44436 - Tricky Treat
class spell_hallow_end_tricky_treat : SpellScript
{
public override bool Validate(SpellInfo spell)
{
return ValidateSpellInfo(SpellIds.TrickyTreatSpeed, SpellIds.TrickyTreatTrigger, SpellIds.UpsetTummy);
}
void HandleScript(uint effIndex)
{
Unit caster = GetCaster();
if (caster.HasAura(SpellIds.TrickyTreatTrigger) && caster.GetAuraCount(SpellIds.TrickyTreatSpeed) > 3 && RandomHelper.randChance(33))
caster.CastSpell(caster, SpellIds.UpsetTummy, true);
}
public override void Register()
{
OnEffectHitTarget.Add(new(HandleScript, 0, SpellEffectName.ScriptEffect));
}
}
[Script] // 24717, 24718, 24719, 24720, 24724, 24733, 24737, 24741
class spell_hallow_end_wand : SpellScript
{
public override bool Validate(SpellInfo spellEntry)
{
return ValidateSpellInfo(SpellIds.PirateCostumeMale, SpellIds.PirateCostumeFemale, SpellIds.NinjaCostumeMale, SpellIds.NinjaCostumeFemale, SpellIds.LeperGnomeCostumeMale,
SpellIds.LeperGnomeCostumeFemale, SpellIds.GhostCostumeMale, SpellIds.GhostCostumeFemale);
}
void HandleScriptEffect()
{
Unit caster = GetCaster();
Unit target = GetHitUnit();
Gender gender = target.GetNativeGender();
uint spellId = GetSpellInfo().Id switch
{
SpellIds.HallowedWandLeperGnome => gender == Gender.Female ? SpellIds.LeperGnomeCostumeFemale : SpellIds.LeperGnomeCostumeMale,
SpellIds.HallowedWandPirate => gender == Gender.Female ? SpellIds.PirateCostumeFemale : SpellIds.PirateCostumeMale,
SpellIds.HallowedWandGhost => gender == Gender.Female ? SpellIds.GhostCostumeFemale : SpellIds.GhostCostumeMale,
SpellIds.HallowedWandNinja => gender == Gender.Female ? SpellIds.NinjaCostumeFemale : SpellIds.NinjaCostumeMale,
SpellIds.HallowedWandRandom => RandomHelper.RAND(SpellIds.HallowedWandPirate, SpellIds.HallowedWandNinja, SpellIds.HallowedWandLeperGnome, SpellIds.HallowedWandSkeleton, SpellIds.HallowedWandWisp, SpellIds.HallowedWandGhost, SpellIds.HallowedWandBat),
_ => 0
};
if (spellId != 0)
caster.CastSpell(target, spellId, true);
}
public override void Register()
{
AfterHit.Add(new(HandleScriptEffect));
}
}
}