aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-04-14 23:31:17 +0200
committerShauren <shauren.trinity@gmail.com>2022-04-16 12:15:37 +0200
commit84486ded67efc4e779412ff865c66ca8b9cee7ea (patch)
treea151ddae81c40c305f9540689ae9778d21b81d5b /src/server/game/Entities/Player
parent15fe4e09d4dda16f23100412670dbdfbae5c5e61 (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.cpp29
-rw-r--r--src/server/game/Entities/Player/Player.h4
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];