Core/Battlegrounds: Store mercenary status separately from the aura obtained from gossip as it can be removed at any time

Port From (https://github.com/TrinityCore/TrinityCore/commit/84486ded67efc4e779412ff865c66ca8b9cee7ea)
This commit is contained in:
hondacrx
2022-05-31 12:07:04 -04:00
parent 5d315fd84d
commit 036c565f69
10 changed files with 83 additions and 54 deletions
+19 -4
View File
@@ -101,6 +101,21 @@ namespace Game
Group grp = _player.GetGroup();
Team getQueueTeam()
{
// mercenary applies only to unrated battlegrounds
if (!bg.IsRated() && !bg.IsArena())
{
if (_player.HasAura(PlayerConst.SpellMercenaryContractHorde))
return Team.Horde;
if (_player.HasAura(PlayerConst.SpellMercenaryContractAlliance))
return Team.Alliance;
}
return _player.GetTeam();
}
BattlefieldStatusFailed battlefieldStatusFailed;
// check queue conditions
if (grp == null)
@@ -163,7 +178,7 @@ namespace Game
return;
BattlegroundQueue bgQueue = Global.BattlegroundMgr.GetBattlegroundQueue(bgQueueTypeId);
GroupQueueInfo ginfo = bgQueue.AddGroup(GetPlayer(), null, bracketEntry, isPremade, 0, 0);
GroupQueueInfo ginfo = bgQueue.AddGroup(GetPlayer(), null, getQueueTeam(), bracketEntry, isPremade, 0, 0);
uint avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
uint queueSlot = GetPlayer().AddBattlegroundQueueId(bgQueueTypeId);
@@ -189,7 +204,7 @@ namespace Game
if (err == 0)
{
Log.outDebug(LogFilter.Battleground, "Battleground: the following players are joining as group:");
ginfo = bgQueue.AddGroup(GetPlayer(), grp, bracketEntry, isPremade, 0, 0);
ginfo = bgQueue.AddGroup(GetPlayer(), grp, getQueueTeam(), bracketEntry, isPremade, 0, 0);
avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
}
@@ -539,7 +554,7 @@ namespace Game
{
Log.outDebug(LogFilter.Battleground, "Battleground: arena team id {0}, leader {1} queued with matchmaker rating {2} for type {3}", GetPlayer().GetArenaTeamId(packet.TeamSizeIndex), GetPlayer().GetName(), matchmakerRating, arenatype);
ginfo = bgQueue.AddGroup(GetPlayer(), grp, bracketEntry, false, arenaRating, matchmakerRating, ateamId);
ginfo = bgQueue.AddGroup(GetPlayer(), grp, _player.GetTeam(), bracketEntry, false, arenaRating, matchmakerRating, ateamId);
avgTime = bgQueue.GetAverageQueueWaitTime(ginfo, bracketEntry.GetBracketId());
}
@@ -560,7 +575,7 @@ namespace Game
if (!GetPlayer().CanJoinToBattleground(bg))
{
BattlefieldStatusFailed battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusFailed(out battlefieldStatus, bgQueueTypeId, GetPlayer(), 0, GroupJoinBattlegroundResult.JoinFailed, errorGuid);
Global.BattlegroundMgr.BuildBattlegroundStatusFailed(out battlefieldStatus, bgQueueTypeId, GetPlayer(), 0, GroupJoinBattlegroundResult.BattlegroundJoinFailed, errorGuid);
member.SendPacket(battlefieldStatus);
return;
}