diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-08-10 11:18:28 +0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-03-12 14:48:03 +0100 |
commit | ac82e23fa3d2649ca2d0160ac477c9b0510d8200 (patch) | |
tree | 1b62e78a69b0174d3042c473b8f8fc11fff40bc2 /src | |
parent | 20c8698bc467d493463c5afbced910d11d3b71b3 (diff) |
Scripts/Spells: Fix support for 'Teleport This!' (10857) (#26789)
Co-authored-by: offl <offl@users.noreply.github.com>
(cherry picked from commit 8186e6deca7a42403db8b45b341c655cec9c8a73)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Outland/zone_netherstorm.cpp | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 02685b97dcf..ee34faf192e 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -27,11 +27,11 @@ npc_commander_dawnforge EndContentData */ #include "ScriptMgr.h" -#include "GameObjectAI.h" #include "Log.h" #include "ObjectAccessor.h" #include "Player.h" #include "ScriptedCreature.h" +#include "SpellScript.h" /*###### ## npc_commander_dawnforge @@ -459,9 +459,81 @@ public: }; }; +/*###### +## Quest 10857: Teleport This! +######*/ + +enum DetonateTeleporter +{ + SPELL_TELEPORTER_KILL_CREDIT_1 = 38982, // 22348 + SPELL_TELEPORTER_KILL_CREDIT_2 = 38983, // 22351 + SPELL_TELEPORTER_KILL_CREDIT_3 = 38984, // 22350 + NPC_WESTERN_TELEPORTER_CREDIT = 22348, + NPC_EASTERN_TELEPORTER_CREDIT = 22351, + NPC_CENTRAL_TELEPORTER_CREDIT = 22350 +}; + +// 38920 - Detonate Teleporter +class spell_detonate_teleporter : public SpellScript +{ + PrepareSpellScript(spell_detonate_teleporter); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_TELEPORTER_KILL_CREDIT_1, + SPELL_TELEPORTER_KILL_CREDIT_2, + SPELL_TELEPORTER_KILL_CREDIT_3 + }); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Unit* creature = GetHitCreature()) + { + if (Unit* charmer = GetCaster()->GetCharmerOrOwner()) + { + if (Player* player = charmer->ToPlayer()) + { + uint32 spellId = 0; + + switch (creature->GetEntry()) + { + case NPC_WESTERN_TELEPORTER_CREDIT: + spellId = SPELL_TELEPORTER_KILL_CREDIT_1; + break; + case NPC_EASTERN_TELEPORTER_CREDIT: + spellId = SPELL_TELEPORTER_KILL_CREDIT_2; + break; + case NPC_CENTRAL_TELEPORTER_CREDIT: + spellId = SPELL_TELEPORTER_KILL_CREDIT_3; + break; + default: + return; + } + + player->CastSpell(player, spellId); + } + } + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_detonate_teleporter::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_netherstorm() { new npc_commander_dawnforge(); new at_commander_dawnforge(); new npc_phase_hunter(); + RegisterSpellScript(spell_detonate_teleporter); } |