aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorJeremy <Golrag@users.noreply.github.com>2024-02-23 18:09:57 +0100
committerGitHub <noreply@github.com>2024-02-23 18:09:57 +0100
commit9c5b8927f89cda74eb7350801c364b003048ba2b (patch)
treef48f34842d89f4ddd21be90947f208db7027e72e /src/server/scripts
parent89438607ae6595396cfdb6c93429805da132c7c6 (diff)
Core/Battlegrounds: Move some areatrigger handling to scripts (#29700)
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp16
-rw-r--r--src/server/scripts/Northrend/zone_dalaran.cpp37
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();
}