diff options
| author | DanVS <33371360+DanVS@users.noreply.github.com> | 2018-07-25 13:35:03 +0000 |
|---|---|---|
| committer | Aokromes <Aokromes@users.noreply.github.com> | 2018-07-25 15:35:03 +0200 |
| commit | ba9943d8a422c0ca9db0dd340f1e9e2ca67c8c33 (patch) | |
| tree | 98ee7b8f1115609b764d26209b0a9aa456c217b7 /src | |
| parent | 2b3f29aa6d2d3787c063ebc2a541149bd2181c85 (diff) | |
Core/Entities: Ethereal Soul-Trader (#22050)
Diffstat (limited to 'src')
| -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 2d50dbbaba4..059a9cb222c 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -320,10 +320,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 94632eb9171..2ff9d51dc8b 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1614,6 +1614,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 const* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + std::list<Creature*> 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 - Steal Essence Visual +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 TransporterBackfires { SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH = 23444, @@ -3977,6 +4089,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_gadgetzan_transporter_backfire); RegisterAuraScript(spell_gen_gift_of_naaru); RegisterSpellScript(spell_gen_gnomish_transporter); |
