diff options
21 files changed, 77 insertions, 186 deletions
diff --git a/sql/updates/world/master/2024_02_23_00_world.sql b/sql/updates/world/master/2024_02_23_00_world.sql new file mode 100644 index 00000000000..7c4223a5a61 --- /dev/null +++ b/sql/updates/world/master/2024_02_23_00_world.sql @@ -0,0 +1,6 @@ +DELETE FROM `areatrigger_scripts` WHERE `entry` IN (6632, 6633, 5347, 5348); +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES +(6632, 'at_av_exploit'), +(6633, 'at_av_exploit'), +(5347, 'at_ds_pipe_knockback'), +(5348, 'at_ds_pipe_knockback'); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 24fd8729738..e3d532518a9 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -139,32 +139,6 @@ void BattlegroundAB::StartingEventOpenDoors() TriggerGameEvent(AB_EVENT_START_BATTLE); } -void BattlegroundAB::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - switch (trigger) - { - case 6635: // Horde Start - case 6634: // Alliance Start - if (GetStatus() == STATUS_WAIT_JOIN && !entered) - TeleportPlayerToExploitLocation(player); - break; - case 3948: // Arathi Basin Alliance Exit. - case 3949: // Arathi Basin Horde Exit. - case 3866: // Stables - case 3869: // Gold Mine - case 3867: // Farm - case 3868: // Lumber Mill - case 3870: // Black Smith - case 4020: // Unk1 - case 4021: // Unk2 - case 4674: // Unk3 - //break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - void BattlegroundAB::_CalculateTeamNodes(uint8& alliance, uint8& horde) { alliance = 0; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index c5e3928bff3..45be094ba71 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -222,7 +222,6 @@ class BattlegroundAB : public Battleground ~BattlegroundAB(); void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; bool SetupBattleground() override; void Reset() override; void EndBattleground(Team winner) override; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index ce5a1023858..d4723737e64 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -450,32 +450,6 @@ void BattlegroundAV::RemovePlayer(Player* player, ObjectGuid /*guid*/, uint32 /* player->RemoveAurasDueToSpell(AV_BUFF_ARMOR); } -void BattlegroundAV::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - switch (trigger) - { - case 6633: // Horde Start - case 6632: // Alliance Start - if (GetStatus() == STATUS_WAIT_JOIN && entered) - TeleportPlayerToExploitLocation(player); - break; - case 95: - case 2608: - case 2606: - case 3326: - case 3327: - case 3328: - case 3329: - case 3330: - case 3331: - //Source->Unmount(); - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - void BattlegroundAV::EventPlayerDestroyedPoint(GameObject* gameobject) { if (!gameobject) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index 4e3a88d3bd2..767bdb80e20 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -558,7 +558,6 @@ class BattlegroundAV : public Battleground void StartingEventOpenDoors() override; void RemovePlayer(Player* player, ObjectGuid guid, uint32 team) override; - void HandleAreaTrigger(Player* player, uint32 trigger, bool entered) override; bool SetupBattleground() override; /*general stuff*/ diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp index 9c6c7658824..1e6c57cdd27 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp @@ -64,22 +64,6 @@ void BattlegroundBE::StartingEventOpenDoors() SpawnBGObject(i, 60); } -void BattlegroundBE::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - if (GetStatus() != STATUS_IN_PROGRESS) - return; - - switch (trigger) - { - case 4538: // buff trigger? - case 4539: // buff trigger? - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - bool BattlegroundBE::SetupBattleground() { // gates diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h index ec28b5e2bab..fb0d424829c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h @@ -58,7 +58,6 @@ class BattlegroundBE : public Arena void StartingEventCloseDoors() override; void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; bool SetupBattleground() override; private: diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp index 3041072c9c6..d0488b43b41 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp @@ -120,29 +120,6 @@ void BattlegroundDS::StartingEventOpenDoors() player->RemoveAurasDueToSpell(SPELL_WARL_DEMONIC_CIRCLE); } -void BattlegroundDS::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - if (GetStatus() != STATUS_IN_PROGRESS) - return; - - switch (trigger) - { - case 5347: - case 5348: - // 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 (_pipeKnockBackCount >= BG_DS_PIPE_KNOCKBACK_TOTAL_COUNT) - _pipeKnockBackCount = 0; - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - bool BattlegroundDS::SetupBattleground() { // gates @@ -165,3 +142,18 @@ bool BattlegroundDS::SetupBattleground() return true; } + +void BattlegroundDS::SetData(uint32 dataId, uint32 value) +{ + Arena::SetData(dataId, value); + if (dataId == BG_DS_DATA_PIPE_KNOCKBACK_COUNT) + _pipeKnockBackCount = value; +} + +uint32 BattlegroundDS::GetData(uint32 dataId) const +{ + if (dataId == BG_DS_DATA_PIPE_KNOCKBACK_COUNT) + return _pipeKnockBackCount; + + return Arena::GetData(dataId); +} diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h index 74de658eca6..75ac2c3e498 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h @@ -78,6 +78,7 @@ inline constexpr Seconds BG_DS_WATERFALL_TIMER_MAX = 60s; inline constexpr Seconds BG_DS_WATERFALL_WARNING_DURATION = 5s; inline constexpr Seconds BG_DS_WATERFALL_DURATION = 30s; inline constexpr Milliseconds BG_DS_WATERFALL_KNOCKBACK_TIMER = 1500ms; +inline constexpr uint32 BG_DS_DATA_PIPE_KNOCKBACK_COUNT = 1; enum BattlegroundDSEvents { @@ -98,9 +99,10 @@ class BattlegroundDS : public Arena void StartingEventCloseDoors() override; void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; bool SetupBattleground() override; + void SetData(uint32 dataId, uint32 value) override; + uint32 GetData(uint32 dataId) const override; private: void PostUpdateImpl(uint32 diff) override; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index c2b169a6859..f43d3d54023 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -354,34 +354,6 @@ void BattlegroundEY::OnFlagStateChange(GameObject* /*flagInBase*/, FlagState /*o UpdateWorldState(NETHERSTORM_FLAG, AsUnderlyingType(newValue)); } -void BattlegroundEY::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - if (!player->IsAlive()) //hack code, must be removed later - return; - - switch (trigger) - { - case 4530: // Horde Start - case 4531: // Alliance Start - if (GetStatus() == STATUS_WAIT_JOIN && !entered) - TeleportPlayerToExploitLocation(player); - break; - case 4512: - case 4515: - case 4517: - case 4519: - case 4568: - case 4569: - case 4570: - case 4571: - case 5866: - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - bool BattlegroundEY::SetupBattleground() { UpdateWorldState(EY_MAX_RESOURCES, BG_EY_MAX_TEAM_SCORE); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index cd4e69a6885..1ba4de41af5 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -264,7 +264,6 @@ class BattlegroundEY : public Battleground /* inherited from BattlegroundClass */ void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; void HandleKillPlayer(Player* player, Player* killer) override; WorldSafeLocsEntry const* GetExploitTeleportLocation(Team team) override; bool SetupBattleground() override; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp index 510f6caed99..00cbaeb5ba4 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp @@ -61,22 +61,6 @@ void BattlegroundNA::StartingEventOpenDoors() SpawnBGObject(i, 60); } -void BattlegroundNA::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - if (GetStatus() != STATUS_IN_PROGRESS) - return; - - switch (trigger) - { - case 4536: // buff trigger? - case 4537: // buff trigger? - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - bool BattlegroundNA::SetupBattleground() { // gates diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h index d8c7903005d..ba8ee0ad9a8 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h @@ -57,7 +57,6 @@ class BattlegroundNA : public Arena void StartingEventCloseDoors() override; void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; bool SetupBattleground() override; private: diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp index a6559edd804..0f4aacb33c8 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp @@ -61,22 +61,6 @@ void BattlegroundRL::StartingEventOpenDoors() SpawnBGObject(i, 60); } -void BattlegroundRL::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - if (GetStatus() != STATUS_IN_PROGRESS) - return; - - switch (trigger) - { - case 4696: // buff trigger? - case 4697: // buff trigger? - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - bool BattlegroundRL::SetupBattleground() { // gates diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h index 7941f5d3a48..574038d5e20 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h @@ -53,7 +53,6 @@ class BattlegroundRL : public Arena void StartingEventCloseDoors() override; void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; bool SetupBattleground() override; private: diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp index 722b977e87c..e66f1ec7e41 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp @@ -80,25 +80,6 @@ void BattlegroundRV::StartingEventOpenDoors() TogglePillarCollision(); } -void BattlegroundRV::HandleAreaTrigger(Player* player, uint32 trigger, bool entered) -{ - if (GetStatus() != STATUS_IN_PROGRESS) - return; - - switch (trigger) - { - case 5224: - case 5226: - // fire was removed in 3.2.0 - case 5473: - case 5474: - break; - default: - Battleground::HandleAreaTrigger(player, trigger, entered); - break; - } -} - bool BattlegroundRV::SetupBattleground() { // elevators diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h index ca0f183270a..4f8f813fafc 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h @@ -95,7 +95,6 @@ class BattlegroundRV : public Arena /* inherited from BattlegroundClass */ void StartingEventOpenDoors() override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; bool SetupBattleground() override; private: diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index d7857885a66..f1f0f9b5eba 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -327,13 +327,6 @@ void BattlegroundSA::AddPlayer(Player* player, BattlegroundQueueTypeId queueId) void BattlegroundSA::RemovePlayer(Player* /*player*/, ObjectGuid /*guid*/, uint32 /*team*/) { } -void BattlegroundSA::HandleAreaTrigger(Player* /*source*/, uint32 /*trigger*/, bool /*entered*/) -{ - // this is wrong way to implement these things. On official it done by gameobject spell cast. - if (GetStatus() != STATUS_IN_PROGRESS) - return; -} - void BattlegroundSA::TeleportPlayers() const { for (auto const& [playerGuid, bp] : GetPlayers()) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index a6160aa5041..179ceb0923b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -267,7 +267,6 @@ class BattlegroundSA : public Battleground /// Called when a player leave battleground void RemovePlayer(Player* player, ObjectGuid guid, uint32 team) override; - void HandleAreaTrigger(Player* source, uint32 trigger, bool entered) override; void OnGameObjectCreate(GameObject* gameobject) override; void DoAction(uint32 actionId, WorldObject* source, WorldObject* target) override; 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(); } |