From 1c4220fbe3682d732f036cf577ce88066ece0424 Mon Sep 17 00:00:00 2001 From: Kandera Date: Fri, 5 Oct 2012 14:25:29 -0400 Subject: [PATCH] Core/Battlefield: fix the wintergrasp and ioc teleporters. --- ...2012_10_05_01_world_spell_script_names.sql | 3 ++ src/server/scripts/Northrend/wintergrasp.cpp | 39 ++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2012_10_05_01_world_spell_script_names.sql diff --git a/sql/updates/world/2012_10_05_01_world_spell_script_names.sql b/sql/updates/world/2012_10_05_01_world_spell_script_names.sql new file mode 100644 index 00000000000..c7269b981ec --- /dev/null +++ b/sql/updates/world/2012_10_05_01_world_spell_script_names.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` = 54643; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(54643, 'spell_wintergrasp_defender_teleport_trigger'); diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index 59e9a31c4cf..b9b59bcdd88 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -541,6 +541,11 @@ public: } }; +enum WgTeleport +{ + SPELL_WINTERGRASP_TELEPORT_TRIGGER = 54643, +}; + class spell_wintergrasp_defender_teleport : public SpellScriptLoader { public: @@ -554,7 +559,7 @@ public: { if (Battlefield* wg = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) if (Player* target = GetExplTargetUnit()->ToPlayer()) - if (target->GetTeamId() != wg->GetDefenderTeam()) + if (target->GetTeamId() != wg->GetDefenderTeam() || target->HasAura(SPELL_WINTERGRASP_TELEPORT_TRIGGER)) return SPELL_FAILED_BAD_TARGETS; return SPELL_CAST_OK; } @@ -571,6 +576,37 @@ public: } }; +class spell_wintergrasp_defender_teleport_trigger : public SpellScriptLoader +{ +public: + spell_wintergrasp_defender_teleport_trigger() : SpellScriptLoader("spell_wintergrasp_defender_teleport_trigger") { } + + class spell_wintergrasp_defender_teleport_trigger_SpellScript : public SpellScript + { + PrepareSpellScript(spell_wintergrasp_defender_teleport_trigger_SpellScript); + + WorldLocation& loc; + void HandleDummy(SpellEffIndex /*effindex*/) + { + if (Unit* target = GetHitUnit()) + { + target->GetPosition(loc); + SetExplTargetDest(loc) + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_wintergrasp_defender_teleport_trigger_SpellScript, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_wintergrasp_defender_teleport_trigger_SpellScript(); + } +}; + void AddSC_wintergrasp() { new npc_wg_queue(); @@ -582,4 +618,5 @@ void AddSC_wintergrasp() new spell_wintergrasp_grab_passenger(); new achievement_wg_didnt_stand_a_chance(); new spell_wintergrasp_defender_teleport(); + new spell_wintergrasp_defender_teleport_trigger(); }