diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-04-14 23:31:17 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-04-16 12:15:37 +0200 |
| commit | 84486ded67efc4e779412ff865c66ca8b9cee7ea (patch) | |
| tree | a151ddae81c40c305f9540689ae9778d21b81d5b /src/server/game/Entities/Player | |
| parent | 15fe4e09d4dda16f23100412670dbdfbae5c5e61 (diff) | |
Core/Battlegrounds: Store mercenary status separately from the aura obtained from gossip as it can be removed at any time
Diffstat (limited to 'src/server/game/Entities/Player')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 29 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 4 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 032298b4bd9..25013ea35ec 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6293,17 +6293,6 @@ void Player::SwitchToOppositeTeam(bool apply) m_team = (m_team == ALLIANCE) ? HORDE : ALLIANCE; } -uint32 Player::GetBgQueueTeam() const -{ - if (HasAura(SPELL_MERCENARY_CONTRACT_HORDE)) - return HORDE; - - if (HasAura(SPELL_MERCENARY_CONTRACT_ALLIANCE)) - return ALLIANCE; - - return GetTeam(); -} - void Player::SetFactionForRace(uint8 race) { m_team = TeamForRace(race); @@ -18164,6 +18153,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol currentBg->EventPlayerLoggedIn(this); SetInviteForBattlegroundQueueType(bgQueueTypeId, currentBg->GetInstanceID()); + SetMercenaryForBattlegroundQueueType(bgQueueTypeId, currentBg->IsPlayerMercenaryInBattleground(GetGUID())); } // Bg was not found - go to Entry Point else @@ -25249,6 +25239,7 @@ uint32 Player::AddBattlegroundQueueId(BattlegroundQueueTypeId val) m_bgBattlegroundQueueID[i].bgQueueTypeId = val; m_bgBattlegroundQueueID[i].invitedToInstance = 0; m_bgBattlegroundQueueID[i].joinTime = GameTime::GetGameTime(); + m_bgBattlegroundQueueID[i].mercenary = HasAura(SPELL_MERCENARY_CONTRACT_HORDE) || HasAura(SPELL_MERCENARY_CONTRACT_ALLIANCE); return i; } } @@ -25272,6 +25263,7 @@ void Player::RemoveBattlegroundQueueId(BattlegroundQueueTypeId val) m_bgBattlegroundQueueID[i].bgQueueTypeId = BATTLEGROUND_QUEUE_NONE; m_bgBattlegroundQueueID[i].invitedToInstance = 0; m_bgBattlegroundQueueID[i].joinTime = 0; + m_bgBattlegroundQueueID[i].mercenary = false; return; } } @@ -25292,6 +25284,21 @@ bool Player::IsInvitedForBattlegroundInstance(uint32 instanceId) const return false; } +void Player::SetMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, bool mercenary) +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (m_bgBattlegroundQueueID[i].bgQueueTypeId == bgQueueTypeId) + m_bgBattlegroundQueueID[i].mercenary = mercenary; +} + +bool Player::IsMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (m_bgBattlegroundQueueID[i].bgQueueTypeId == bgQueueTypeId) + return m_bgBattlegroundQueueID[i].mercenary; + return false; +} + bool Player::InArena() const { Battleground* bg = GetBattleground(); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c4074cbb44e..78c74fcee7d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2211,7 +2211,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> static TeamId TeamIdForRace(uint8 race); uint32 GetTeam() const { return m_team; } void SwitchToOppositeTeam(bool apply); - uint32 GetBgQueueTeam() const; TeamId GetTeamId() const { return m_team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; } void SetFactionForRace(uint8 race); @@ -2392,6 +2391,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val); void SetInviteForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, uint32 instanceId); bool IsInvitedForBattlegroundInstance(uint32 instanceId) const; + void SetMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, bool mercenary); + bool IsMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const; WorldLocation const& GetBattlegroundEntryPoint() const { return m_bgData.joinPos; } void SetBattlegroundEntryPoint(); @@ -2826,6 +2827,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> BattlegroundQueueTypeId bgQueueTypeId; uint32 invitedToInstance; uint32 joinTime; + bool mercenary; }; BgBattlegroundQueueID_Rec m_bgBattlegroundQueueID[PLAYER_MAX_BATTLEGROUND_QUEUES]; |
