diff options
author | Jeremy <Golrag@users.noreply.github.com> | 2024-02-23 18:09:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-23 18:09:57 +0100 |
commit | 9c5b8927f89cda74eb7350801c364b003048ba2b (patch) | |
tree | f48f34842d89f4ddd21be90947f208db7027e72e /src/server/scripts/Northrend | |
parent | 89438607ae6595396cfdb6c93429805da132c7c6 (diff) |
Core/Battlegrounds: Move some areatrigger handling to scripts (#29700)
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r-- | src/server/scripts/Northrend/zone_dalaran.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
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(); } |