Core/Battlegrounds: Move some areatrigger handling to scripts (#29700)
This commit is contained in:
@@ -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');
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user