Core/Battlegrounds: Capture flag immediately when standing on capture point and your team's flag return due to drop timer ended (#28200)

(cherry picked from commit d86dcce1c8)
This commit is contained in:
Gildor
2022-09-02 14:58:57 +02:00
committed by Shauren
parent cec4cb0222
commit a1ddf5195b
2 changed files with 12 additions and 10 deletions

View File

@@ -279,6 +279,8 @@ void BattlegroundWS::RespawnFlagAfterDrop(uint32 team)
SetDroppedFlagGUID(ObjectGuid::Empty, GetTeamIndexByTeamId(team));
_bothFlagsKept = false;
// Check opposing flag if it is in capture zone; if so, capture it
HandleFlagRoomCapturePoint(team == ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE);
}
void BattlegroundWS::EventPlayerCapturedFlag(Player* player)
@@ -367,6 +369,13 @@ void BattlegroundWS::EventPlayerCapturedFlag(Player* player)
_flagsTimer[GetTeamIndexByTeamId(team) ? 0 : 1] = BG_WS_FLAG_RESPAWN_TIME;
}
}
void BattlegroundWS::HandleFlagRoomCapturePoint(int32 team)
{
Player* flagCarrier = ObjectAccessor::GetPlayer(GetBgMap(), GetFlagPickerGUID(team));
uint32 areaTrigger = team == TEAM_ALLIANCE ? 3647 : 3646;
if (flagCarrier && flagCarrier->IsInAreaTriggerRadius(sAreaTriggerStore.LookupEntry(areaTrigger)))
EventPlayerCapturedFlag(flagCarrier);
}
void BattlegroundWS::EventPlayerDroppedFlag(Player* player)
{
@@ -515,11 +524,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* player, GameObject* target
PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED);
UpdatePlayerScore(player, SCORE_FLAG_RETURNS, 1);
_bothFlagsKept = false;
// Check Horde flag if it is in capture zone; if so, capture it
if (Player* hordeFlagCarrier = ObjectAccessor::GetPlayer(GetBgMap(), GetFlagPickerGUID(TEAM_HORDE)))
if (hordeFlagCarrier->IsInAreaTriggerRadius(sAreaTriggerStore.LookupEntry(3646)))
EventPlayerCapturedFlag(hordeFlagCarrier);
HandleFlagRoomCapturePoint(TEAM_HORDE); // Check Horde flag if it is in capture zone; if so, capture it
}
else
{
@@ -552,11 +557,7 @@ void BattlegroundWS::EventPlayerClickedOnFlag(Player* player, GameObject* target
PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED);
UpdatePlayerScore(player, SCORE_FLAG_RETURNS, 1);
_bothFlagsKept = false;
// Check Alliance flag if it is in capture zone; if so, capture it
if (Player* allianceFlagCarrier = ObjectAccessor::GetPlayer(GetBgMap(), GetFlagPickerGUID(TEAM_ALLIANCE)))
if (allianceFlagCarrier->IsInAreaTriggerRadius(sAreaTriggerStore.LookupEntry(3647)))
EventPlayerCapturedFlag(allianceFlagCarrier);
HandleFlagRoomCapturePoint(TEAM_ALLIANCE); // Check Alliance flag if it is in capture zone; if so, capture it
}
else
{

View File

@@ -245,6 +245,7 @@ class BattlegroundWS : public Battleground
void EventPlayerDroppedFlag(Player* player) override;
void EventPlayerClickedOnFlag(Player* player, GameObject* target_obj) override;
void EventPlayerCapturedFlag(Player* player);
void HandleFlagRoomCapturePoint(int32 team);
void RemovePlayer(Player* player, ObjectGuid guid, uint32 team) override;
void HandleAreaTrigger(Player* player, uint32 trigger, bool entered) override;