diff options
author | DanVS <33371360+DanVS@users.noreply.github.com> | 2018-07-25 13:35:03 +0000 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-10-17 01:40:21 +0200 |
commit | 3503e9dc929692bc9a8e9a23de2bae9cad24497f (patch) | |
tree | 157ad78304b48fa335ea40ade1291b85cafd66ed /src/server/scripts | |
parent | 5d08e13108431e3facc3246f46740fe54e9f6884 (diff) |
Scripts/Pets: Some cleanup for Snake Trap. Tagging #21847, though this doesn't address it (yet).
(cherry picked from commit 15ab24756dab76066bc24ca2a8c3289afbe836c0)
Diffstat (limited to 'src/server/scripts')
-rw-r--r-- | src/server/scripts/Pet/pet_generic.cpp | 27 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 116 |
2 files changed, 143 insertions, 0 deletions
diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 45efd2dcf96..4d0ffbac70c 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -321,10 +321,37 @@ class npc_pet_gen_mojo : public CreatureScript } }; +enum SoulTrader +{ + SAY_SOUL_TRADER_INTRO = 0, + + SPELL_ETHEREAL_ONSUMMON = 50052, + SPELL_ETHEREAL_PET_REMOVE_AURA = 50055 +}; + +struct npc_pet_gen_soul_trader : public ScriptedAI +{ + npc_pet_gen_soul_trader(Creature* creature) : ScriptedAI(creature) { } + + void LeavingWorld() override + { + if (Unit* owner = me->GetOwner()) + DoCast(owner, SPELL_ETHEREAL_PET_REMOVE_AURA); + } + + void JustAppeared() override + { + Talk(SAY_SOUL_TRADER_INTRO); + if (Unit* owner = me->GetOwner()) + DoCast(owner, SPELL_ETHEREAL_ONSUMMON); + } +}; + void AddSC_generic_pet_scripts() { new npc_pet_gen_baby_blizzard_bear(); new npc_pet_gen_egbert(); new npc_pet_gen_pandaren_monk(); new npc_pet_gen_mojo(); + RegisterCreatureAI(npc_pet_gen_soul_trader); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 338f7f0519f..c203bda137c 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1503,6 +1503,118 @@ class spell_gen_elune_candle : public SpellScript } }; +// 50051 - Ethereal Pet Aura +enum EtherealPet +{ + NPC_ETHEREAL_SOUL_TRADER = 27914, + + SAY_STEAL_ESSENCE = 1, + SAY_CREATE_TOKEN = 2, + + SPELL_PROC_TRIGGER_ON_KILL_AURA = 50051, + SPELL_ETHEREAL_PET_AURA = 50055, + SPELL_CREATE_TOKEN = 50063, + SPELL_STEAL_ESSENCE_VISUAL = 50101 +}; + +// 50051 - Ethereal Pet Aura +class spell_ethereal_pet_aura : public AuraScript +{ + PrepareAuraScript(spell_ethereal_pet_aura); + + bool CheckProc(ProcEventInfo& eventInfo) + { + uint32 levelDiff = std::abs(GetTarget()->getLevel() - eventInfo.GetProcTarget()->getLevel()); + return levelDiff <= 9; + } + + void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + std::list<TempSummon*> minionList; + GetUnitOwner()->GetAllMinionsByEntry(minionList, NPC_ETHEREAL_SOUL_TRADER); + for (Creature* minion : minionList) + { + if (minion->IsAIEnabled) + { + minion->AI()->Talk(SAY_STEAL_ESSENCE); + minion->CastSpell(eventInfo.GetProcTarget(), SPELL_STEAL_ESSENCE_VISUAL); + } + } + } + + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_ethereal_pet_aura::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_ethereal_pet_aura::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } +}; + +// 50052 - Ethereal Pet onSummon +class spell_ethereal_pet_onsummon : public SpellScript +{ + PrepareSpellScript(spell_ethereal_pet_onsummon); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PROC_TRIGGER_ON_KILL_AURA }); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + Unit* target = GetHitUnit(); + target->CastSpell(target, SPELL_PROC_TRIGGER_ON_KILL_AURA, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_ethereal_pet_onsummon::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 50055 - Ethereal Pet Aura Remove +class spell_ethereal_pet_aura_remove : public SpellScript +{ + PrepareSpellScript(spell_ethereal_pet_aura_remove); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_ETHEREAL_PET_AURA }); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + GetHitUnit()->RemoveAurasDueToSpell(SPELL_ETHEREAL_PET_AURA); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_ethereal_pet_aura_remove::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 50101 - Ethereal Pet OnKill Steal Essence +class spell_steal_essence_visual : public AuraScript +{ + PrepareAuraScript(spell_steal_essence_visual); + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + { + caster->CastSpell(caster, SPELL_CREATE_TOKEN, true); + if (Creature* soulTrader = caster->ToCreature()) + soulTrader->AI()->Talk(SAY_CREATE_TOKEN); + } + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_steal_essence_visual::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + enum FishingSpells { SPELL_FISHING_NO_FISHING_POLE = 131476, @@ -4151,6 +4263,10 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_ds_flush_knockback); RegisterSpellScript(spell_gen_dungeon_credit); RegisterSpellScript(spell_gen_elune_candle); + RegisterAuraScript(spell_ethereal_pet_aura); + RegisterSpellScript(spell_ethereal_pet_onsummon); + RegisterSpellScript(spell_ethereal_pet_aura_remove); + RegisterAuraScript(spell_steal_essence_visual); RegisterSpellScript(spell_gen_fishing); RegisterSpellScript(spell_gen_gadgetzan_transporter_backfire); RegisterAuraScript(spell_gen_gift_of_naaru); |