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:
Axel Cocat
2021-05-03 13:14:22 +02:00
committed by GitHub
parent ca1f518b7f
commit de23266f04
2 changed files with 48 additions and 8 deletions

View File

@@ -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;
}
}

View File

@@ -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;