aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanVS <33371360+DanVS@users.noreply.github.com>2018-07-25 13:35:03 +0000
committerShauren <shauren.trinity@gmail.com>2021-10-17 01:40:21 +0200
commit3503e9dc929692bc9a8e9a23de2bae9cad24497f (patch)
tree157ad78304b48fa335ea40ade1291b85cafd66ed /src
parent5d08e13108431e3facc3246f46740fe54e9f6884 (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')
-rw-r--r--src/server/scripts/Pet/pet_generic.cpp27
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp116
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);