mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-22 21:26:23 +00:00
fix(Core/Battlegrounds): fix Warsong Gulch flags not capping when standing on capture area (#5482)
* fix(Core/Battlegrounds): fix Warsong Gulch flags not capping when standing on capture area * Added BG_WS_Trigger enum * add missing brackets
This commit is contained in:
@@ -142,6 +142,26 @@ void BattlegroundWS::RespawnFlagAfterDrop(TeamId teamId)
|
||||
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10);
|
||||
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15);
|
||||
RemoveAssaultAuras();
|
||||
|
||||
CheckFlagKeeperInArea(teamId == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
|
||||
}
|
||||
|
||||
void BattlegroundWS::CheckFlagKeeperInArea(TeamId teamId)
|
||||
{
|
||||
if (GetStatus() != STATUS_IN_PROGRESS || GetFlagState(teamId) != BG_WS_FLAG_STATE_ON_PLAYER)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 triggerId = teamId == TEAM_ALLIANCE ? BG_WS_TRIGGER_HORDE_FLAG_SPAWN : BG_WS_TRIGGER_ALLIANCE_FLAG_SPAWN;
|
||||
AreaTrigger const* areaTrigger = sObjectMgr->GetAreaTrigger(triggerId);
|
||||
if (Player* player = ObjectAccessor::GetPlayer(FindBgMap(), GetFlagPickerGUID(teamId)))
|
||||
{
|
||||
if (areaTrigger && player->IsInAreaTriggerRadius(areaTrigger))
|
||||
{
|
||||
HandleAreaTrigger(player, triggerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BattlegroundWS::EventPlayerCapturedFlag(Player* player)
|
||||
@@ -287,6 +307,8 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* player, GameObject* gameOb
|
||||
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10);
|
||||
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15);
|
||||
RemoveAssaultAuras();
|
||||
|
||||
CheckFlagKeeperInArea(TEAM_HORDE);
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -318,6 +340,8 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* player, GameObject* gameOb
|
||||
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10);
|
||||
_bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15);
|
||||
RemoveAssaultAuras();
|
||||
|
||||
CheckFlagKeeperInArea(TEAM_ALLIANCE);
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -354,11 +378,11 @@ void BattlegroundWS::HandleAreaTrigger(Player* player, uint32 trigger)
|
||||
|
||||
switch (trigger)
|
||||
{
|
||||
case 3646: // Alliance Flag spawn
|
||||
case BG_WS_TRIGGER_ALLIANCE_FLAG_SPAWN: // Alliance Flag spawn
|
||||
if (GetFlagState(TEAM_ALLIANCE) == BG_WS_FLAG_STATE_ON_BASE && GetFlagPickerGUID(TEAM_HORDE) == player->GetGUID())
|
||||
EventPlayerCapturedFlag(player);
|
||||
break;
|
||||
case 3647: // Horde Flag spawn
|
||||
case BG_WS_TRIGGER_HORDE_FLAG_SPAWN: // Horde Flag spawn
|
||||
if (GetFlagState(TEAM_HORDE) == BG_WS_FLAG_STATE_ON_BASE && GetFlagPickerGUID(TEAM_ALLIANCE) == player->GetGUID())
|
||||
EventPlayerCapturedFlag(player);
|
||||
break;
|
||||
@@ -366,12 +390,12 @@ void BattlegroundWS::HandleAreaTrigger(Player* player, uint32 trigger)
|
||||
case 3688: // Not used
|
||||
case 4628: // Not used
|
||||
case 4629: // Not used
|
||||
case 3686: // Alliance elixir of speed spawn
|
||||
case 3687: // Horde elixir of speed spawn
|
||||
case 3706: // Alliance elixir of regeneration spawn
|
||||
case 3708: // Horde elixir of regeneration spawn
|
||||
case 3707: // Alliance elixir of berserk spawn
|
||||
case 3709: // Horde elixir of berserk spawn
|
||||
case BG_WS_TRIGGER_ALLIANCE_ELIXIR_SPEED_SPAWN: // Alliance elixir of speed spawn
|
||||
case BG_WS_TRIGGER_HORDE_ELIXIR_SPEED_SPAWN: // Horde elixir of speed spawn
|
||||
case BG_WS_TRIGGER_ALLIANCE_ELIXIR_REGEN_SPAWN: // Alliance elixir of regeneration spawn
|
||||
case BG_WS_TRIGGER_HORDE_ELIXIR_REGEN_SPAWN: // Horde elixir of regeneration spawn
|
||||
case BG_WS_TRIGGER_ALLIANCE_ELIXIR_BERSERK_SPAWN: // Alliance elixir of berserk spawn
|
||||
case BG_WS_TRIGGER_HORDE_ELIXIR_BERSERK_SPAWN: // Horde elixir of berserk spawn
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,6 +135,21 @@ enum BG_WS_Objectives
|
||||
WS_EVENT_START_BATTLE = 8563
|
||||
};
|
||||
|
||||
enum BG_WS_Trigger
|
||||
{
|
||||
BG_WS_TRIGGER_ALLIANCE_FLAG_SPAWN = 3646,
|
||||
BG_WS_TRIGGER_HORDE_FLAG_SPAWN = 3647,
|
||||
|
||||
BG_WS_TRIGGER_ALLIANCE_ELIXIR_SPEED_SPAWN = 3686,
|
||||
BG_WS_TRIGGER_HORDE_ELIXIR_SPEED_SPAWN = 3687,
|
||||
|
||||
BG_WS_TRIGGER_ALLIANCE_ELIXIR_REGEN_SPAWN = 3706,
|
||||
BG_WS_TRIGGER_HORDE_ELIXIR_REGEN_SPAWN = 3708,
|
||||
|
||||
BG_WS_TRIGGER_ALLIANCE_ELIXIR_BERSERK_SPAWN = 3707,
|
||||
BG_WS_TRIGGER_HORDE_ELIXIR_BERSERK_SPAWN = 3709,
|
||||
};
|
||||
|
||||
struct BattlegroundWGScore : public BattlegroundScore
|
||||
{
|
||||
BattlegroundWGScore(Player* player): BattlegroundScore(player), FlagCaptures(0), FlagReturns(0) { }
|
||||
@@ -163,6 +178,7 @@ public:
|
||||
void SetFlagPicker(ObjectGuid guid, TeamId teamId) { _flagKeepers[teamId] = guid; }
|
||||
void RespawnFlagAfterDrop(TeamId teamId);
|
||||
uint8 GetFlagState(TeamId teamId) const { return _flagState[teamId]; }
|
||||
void CheckFlagKeeperInArea(TeamId teamId);
|
||||
|
||||
/* Battleground Events */
|
||||
void EventPlayerDroppedFlag(Player* player) override;
|
||||
|
||||
Reference in New Issue
Block a user