diff options
Diffstat (limited to 'src/server/scripts')
-rw-r--r-- | src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp | 16 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_dalaran.cpp | 37 |
2 files changed, 53 insertions, 0 deletions
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp index 19837a66ba9..629be86a525 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp @@ -177,9 +177,25 @@ private: TaskScheduler _scheduler; }; +class at_av_exploit : public AreaTriggerScript +{ +public: + at_av_exploit() : AreaTriggerScript("at_av_exploit") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + if (Battleground* battleground = player->GetBattleground()) + if (battleground->GetStatus() == STATUS_WAIT_JOIN) + battleground->TeleportPlayerToExploitLocation(player); + + return true; + } +}; + void AddSC_alterac_valley() { RegisterCreatureAI(npc_av_marshal_or_warmaster); RegisterGameObjectAI(go_av_capturable_object); RegisterGameObjectAI(go_av_contested_object); + new at_av_exploit(); } diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index 92fc14b2c64..46460521b6b 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -24,6 +24,7 @@ SDCategory: Dalaran Script Data End */ #include "ScriptMgr.h" +#include "BattlegroundDS.h" #include "Containers.h" #include "DatabaseEnv.h" #include "Mail.h" @@ -253,8 +254,44 @@ private: EventMap events; }; +class at_ds_pipe_knockback : public AreaTriggerScript +{ +public: + at_ds_pipe_knockback() : AreaTriggerScript("at_ds_pipe_knockback") { } + + void Trigger(Player* player) const + { + if (Battleground* battleground = player->GetBattleground()) + { + if (battleground->GetStatus() != STATUS_IN_PROGRESS) + return; + + // Remove effects of Demonic Circle Summon + player->RemoveAurasDueToSpell(SPELL_WARL_DEMONIC_CIRCLE); + + // Someone has get back into the pipes and the knockback has already been performed, + // so we reset the knockback count for kicking the player again into the arena. + if (battleground->GetData(BG_DS_DATA_PIPE_KNOCKBACK_COUNT) >= BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT) + battleground->SetData(BG_DS_DATA_PIPE_KNOCKBACK_COUNT, 0); + } + } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + Trigger(player); + return true; + } + + bool OnExit(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + Trigger(player); + return true; + } +}; + void AddSC_dalaran() { RegisterCreatureAI(npc_mageguard_dalaran); RegisterCreatureAI(npc_minigob_manabonk); + new at_ds_pipe_knockback(); } |