Core/Battlegrounds: Queue updates

Port From (https://github.com/TrinityCore/TrinityCore/commit/bf8714b8705c3fccc77083c6dc8665767430d346)
This commit is contained in:
hondacrx
2020-06-02 17:43:49 -04:00
parent 7290270bbf
commit ac876b7c6c
17 changed files with 562 additions and 451 deletions
+46 -45
View File
@@ -415,14 +415,6 @@ namespace Game.BattleGrounds
Player player = Global.ObjAccessor.FindPlayer(guid);
if (player)
{
// BG Status packet
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(GetTypeID(), GetArenaType());
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
BattlefieldStatusActive battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusActive(out battlefieldStatus, this, player, queueSlot, player.GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
player.SendPacket(battlefieldStatus);
// Correctly display EnemyUnitFrame
player.SetArenaFaction((byte)player.GetBGTeam());
@@ -699,10 +691,12 @@ namespace Game.BattleGrounds
//we must set it this way, because end time is sent in packet!
SetRemainingTime(BattlegroundConst.AutocloseBattleground);
PVPLogData pvpLogData;
BuildPvPLogDataPacket(out pvpLogData);
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(GetTypeID(), GetArenaType());
PVPMatchEnd pvpMatchEnd = new PVPMatchEnd();
pvpMatchEnd.Winner = (byte)GetWinner();
pvpMatchEnd.Duration = (int)Math.Max(0, (GetElapsedTime() - (int)BattlegroundStartTimeIntervals.Delay2m) / Time.InMilliseconds);
pvpMatchEnd.LogData.HasValue = true;
BuildPvPLogDataPacket(out pvpMatchEnd.LogData.Value);
pvpMatchEnd.Write();
foreach (var pair in m_Players)
{
@@ -799,11 +793,7 @@ namespace Game.BattleGrounds
BlockMovement(player);
player.SendPacket(pvpLogData);
BattlefieldStatusActive battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusActive(out battlefieldStatus, this, player, player.GetBattlegroundQueueIndex(bgQueueTypeId), player.GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
player.SendPacket(battlefieldStatus);
player.SendPacket(pvpMatchEnd);
player.UpdateCriteria(CriteriaTypes.CompleteBattleground, player.GetMapId());
}
@@ -866,7 +856,7 @@ namespace Game.BattleGrounds
RemovePlayer(player, guid, team); // BG subclass specific code
BattlegroundTypeId bgTypeId = GetTypeID();
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(GetTypeID(), GetArenaType());
BattlegroundQueueTypeId bgQueueTypeId = GetQueueId();
if (participant) // if the player was a match participant, remove auras, calc rating, update queue
{
@@ -907,7 +897,7 @@ namespace Game.BattleGrounds
{
// a player has left the Battleground, so there are free slots . add to queue
AddToBGFreeSlotQueue();
Global.BattlegroundMgr.ScheduleQueueUpdate(0, 0, bgQueueTypeId, bgTypeId, GetBracketId());
Global.BattlegroundMgr.ScheduleQueueUpdate(0, bgQueueTypeId, GetBracketId());
}
// Let others know
BattlegroundPlayerLeft playerLeft = new BattlegroundPlayerLeft();
@@ -1006,13 +996,36 @@ namespace Game.BattleGrounds
playerJoined.Guid = player.GetGUID();
SendPacketToTeam(team, playerJoined, player);
// BG Status packet
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(GetTypeID(), GetArenaType());
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
PVPMatchInit pvpMatchState = new PVPMatchInit();
pvpMatchState.MapID = GetMapId();
switch (GetStatus())
{
case BattlegroundStatus.None:
case BattlegroundStatus.WaitQueue:
pvpMatchState.State = PVPMatchInit.MatchState.Inactive;
break;
case BattlegroundStatus.WaitJoin:
case BattlegroundStatus.InProgress:
pvpMatchState.State = PVPMatchInit.MatchState.InProgress;
break;
case BattlegroundStatus.WaitLeave:
pvpMatchState.State = PVPMatchInit.MatchState.Complete;
break;
default:
break;
}
BattlefieldStatusActive battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusActive(out battlefieldStatus, this, player, queueSlot, player.GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
player.SendPacket(battlefieldStatus);
if (GetElapsedTime() >= (int)BattlegroundStartTimeIntervals.Delay2m)
{
pvpMatchState.Duration = (int)(GetElapsedTime() - (int)BattlegroundStartTimeIntervals.Delay2m) / Time.InMilliseconds;
pvpMatchState.StartTime = GameTime.GetGameTime() - pvpMatchState.Duration;
}
pvpMatchState.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? BattlegroundTeamId.Horde : BattlegroundTeamId.Alliance);
pvpMatchState.BattlemasterListID = (uint)GetTypeID();
pvpMatchState.Registered = false;
pvpMatchState.AffectsRating = IsRated();
player.SendPacket(pvpMatchState);
player.RemoveAurasByType(AuraType.Mounted);
@@ -1132,7 +1145,7 @@ namespace Game.BattleGrounds
{
if (!m_InBGFreeSlotQueue && IsBattleground())
{
Global.BattlegroundMgr.AddToBGFreeSlotQueue(GetTypeID(), this);
Global.BattlegroundMgr.AddToBGFreeSlotQueue(GetQueueId(), this);
m_InBGFreeSlotQueue = true;
}
}
@@ -1142,7 +1155,7 @@ namespace Game.BattleGrounds
{
if (m_InBGFreeSlotQueue)
{
Global.BattlegroundMgr.RemoveFromBGFreeSlotQueue(GetTypeID(), m_InstanceID);
Global.BattlegroundMgr.RemoveFromBGFreeSlotQueue(GetQueueId(), m_InstanceID);
m_InBGFreeSlotQueue = false;
}
}
@@ -1415,7 +1428,7 @@ namespace Game.BattleGrounds
public uint GetMapId()
{
return _battlegroundTemplate.BattlemasterEntry.MapId[0];
return (uint)_battlegroundTemplate.BattlemasterEntry.MapId[0];
}
public void SpawnBGObject(int type, uint respawntime)
@@ -1692,17 +1705,11 @@ namespace Game.BattleGrounds
if (GetStatus() != BattlegroundStatus.WaitLeave)
return;
PVPLogData pvpLogData;
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(GetTypeID(), GetArenaType());
BlockMovement(player);
BuildPvPLogDataPacket(out pvpLogData);
PVPLogDataMessage pvpLogData = new PVPLogDataMessage();
BuildPvPLogDataPacket(out pvpLogData.Data);
player.SendPacket(pvpLogData);
BattlefieldStatusActive battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusActive(out battlefieldStatus, this, player, player.GetBattlegroundQueueIndex(bgQueueTypeId), player.GetBattlegroundQueueJoinTime(bgQueueTypeId), GetArenaType());
player.SendPacket(battlefieldStatus);
}
public uint GetAlivePlayersCountByTeam(Team Team)
@@ -1801,15 +1808,6 @@ namespace Game.BattleGrounds
return _battlegroundTemplate.BattlemasterEntry.Name[Global.WorldMgr.GetDefaultDbcLocale()];
}
public ulong GetQueueId()
{
BattlegroundQueueIdType type = BattlegroundQueueIdType.Battleground;
if (IsArena())
type = IsRated() ? BattlegroundQueueIdType.Arena : BattlegroundQueueIdType.ArenaSkirmish;
return (ulong)_battlegroundTemplate.Id | (ulong)type << 16 | 0x1F10000000000000;
}
public BattlegroundTypeId GetTypeID(bool getRandom = false)
{
return getRandom ? m_RandomTypeID : _battlegroundTemplate.Id;
@@ -1883,6 +1881,7 @@ namespace Game.BattleGrounds
public virtual void DestroyGate(Player player, GameObject go) { }
public virtual bool IsAllNodesControlledByTeam(Team team) { return false; }
public BattlegroundQueueTypeId GetQueueId() { return m_queueId; }
public uint GetInstanceID() { return m_InstanceID; }
public BattlegroundStatus GetStatus() { return m_Status; }
public uint GetClientInstanceID() { return m_ClientInstanceID; }
@@ -1895,6 +1894,7 @@ namespace Game.BattleGrounds
BattlegroundTeamId GetWinner() { return _winnerTeamId; }
public bool IsRandom() { return m_IsRandom; }
public void SetQueueId(BattlegroundQueueTypeId queueId) { m_queueId = queueId; }
public void SetRandomTypeID(BattlegroundTypeId TypeID) { m_RandomTypeID = TypeID; }
//here we can count minlevel and maxlevel for players
public void SetInstanceID(uint InstanceID) { m_InstanceID = InstanceID; }
@@ -2032,6 +2032,7 @@ namespace Game.BattleGrounds
public uint[] Buff_Entries = { BattlegroundConst.SpeedBuff, BattlegroundConst.RegenBuff, BattlegroundConst.BerserkerBuff };
// Battleground
BattlegroundQueueTypeId m_queueId;
BattlegroundTypeId m_RandomTypeID;
uint m_InstanceID; // Battleground Instance's GUID!
BattlegroundStatus m_Status;
+137 -143
View File
@@ -33,20 +33,20 @@ namespace Game.BattleGrounds
BattlegroundManager()
{
m_NextRatedArenaUpdate = WorldConfig.GetUIntValue(WorldCfg.ArenaRatedUpdateTimer);
for (var i = 0; i < (int)BattlegroundQueueTypeId.Max; ++i)
m_BattlegroundQueues[i] = new BattlegroundQueue();
}
public void DeleteAllBattlegrounds()
{
foreach (var data in bgDataStore.Values)
{
data.m_Battlegrounds.Clear();
data.BGFreeSlotQueue.Clear();
}
foreach (var data in bgDataStore.Values.ToList())
while(data.m_Battlegrounds.Empty())
data.m_Battlegrounds.First().Value.Dispose();
bgDataStore.Clear();
foreach (var bg in m_BGFreeSlotQueue.Values.ToList())
bg.Dispose();
m_BGFreeSlotQueue.Clear();
}
public void Update(uint diff)
@@ -79,23 +79,21 @@ namespace Game.BattleGrounds
m_UpdateTimer = 0;
}
// update events timer
for (var qtype = BattlegroundQueueTypeId.None; qtype < BattlegroundQueueTypeId.Max; ++qtype)
m_BattlegroundQueues[(int)qtype].UpdateEvents(diff);
foreach (var pair in m_BattlegroundQueues)
pair.Value.UpdateEvents(diff);
// update scheduled queues
if (!m_QueueUpdateScheduler.Empty())
{
List<ulong> scheduled = new List<ulong>();
List<ScheduledQueueUpdate> scheduled = new List<ScheduledQueueUpdate>();
Extensions.Swap(ref scheduled, ref m_QueueUpdateScheduler);
for (byte i = 0; i < scheduled.Count; i++)
{
uint arenaMMRating = (uint)(scheduled[i] >> 32);
byte arenaType = (byte)(scheduled[i] >> 24 & 255);
BattlegroundQueueTypeId bgQueueTypeId = (BattlegroundQueueTypeId)(scheduled[i] >> 16 & 255);
BattlegroundTypeId bgTypeId = (BattlegroundTypeId)((scheduled[i] >> 8) & 255);
BattlegroundBracketId bracket_id = (BattlegroundBracketId)(scheduled[i] & 255);
m_BattlegroundQueues[(int)bgQueueTypeId].BattlegroundQueueUpdate(diff, bgTypeId, bracket_id, arenaType, arenaMMRating > 0, arenaMMRating);
uint arenaMMRating = scheduled[i].ArenaMatchmakerRating;
BattlegroundQueueTypeId bgQueueTypeId = scheduled[i].QueueId;
BattlegroundBracketId bracket_id = scheduled[i].BracketId;
GetBattlegroundQueue(bgQueueTypeId).BattlegroundQueueUpdate(diff, bracket_id, arenaMMRating);
}
}
@@ -107,14 +105,11 @@ namespace Game.BattleGrounds
{
// forced update for rated arenas (scan all, but skipped non rated)
Log.outDebug(LogFilter.Arena, "BattlegroundMgr: UPDATING ARENA QUEUES");
for (var qtype = BattlegroundQueueTypeId.Arena2v2; qtype <= BattlegroundQueueTypeId.Arena5v5; ++qtype)
foreach (ArenaTypes teamSize in new[] { ArenaTypes.Team2v2, ArenaTypes.Team3v3, ArenaTypes.Team5v5 })
{
for (int bracket = (int)BattlegroundBracketId.First; bracket < (int)BattlegroundBracketId.Max; ++bracket)
{
m_BattlegroundQueues[(int)qtype].BattlegroundQueueUpdate(diff,
BattlegroundTypeId.AA, (BattlegroundBracketId)bracket,
(byte)BGArenaType(qtype), true, 0);
}
BattlegroundQueueTypeId ratedArenaQueueId = BGQueueTypeId((ushort)BattlegroundTypeId.AA, BattlegroundQueueIdType.Arena, true, teamSize);
for (var bracket = BattlegroundBracketId.First; bracket < BattlegroundBracketId.Max; ++bracket)
GetBattlegroundQueue(ratedArenaQueueId).BattlegroundQueueUpdate(diff, bracket, 0);
}
m_NextRatedArenaUpdate = WorldConfig.GetUIntValue(WorldCfg.ArenaRatedUpdateTimer);
@@ -124,14 +119,14 @@ namespace Game.BattleGrounds
}
}
void BuildBattlegroundStatusHeader(BattlefieldStatusHeader header, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
void BuildBattlegroundStatusHeader(BattlefieldStatusHeader header, Battleground bg, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId, ArenaTypes arenaType)
{
header.Ticket = new RideTicket();
header.Ticket.RequesterGuid = player.GetGUID();
header.Ticket.Id = ticketId;
header.Ticket.Type = RideType.Battlegrounds;
header.Ticket.Time = (int)joinTime;
header.QueueID.Add(bg.GetQueueId());
header.QueueID.Add(queueId.GetPacked());
header.RangeMin = (byte)bg.GetMinLevel();
header.RangeMax = (byte)bg.GetMaxLevel();
header.TeamSize = (byte)(bg.IsArena() ? arenaType : 0);
@@ -152,7 +147,7 @@ namespace Game.BattleGrounds
public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType)
{
battlefieldStatus = new BattlefieldStatusNeedConfirmation();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, bg.GetQueueId(), arenaType);
battlefieldStatus.Mapid = bg.GetMapId();
battlefieldStatus.Timeout = timeout;
battlefieldStatus.Role = 0;
@@ -161,7 +156,7 @@ namespace Game.BattleGrounds
public void BuildBattlegroundStatusActive(out BattlefieldStatusActive battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
{
battlefieldStatus = new BattlefieldStatusActive();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, bg.GetQueueId(), arenaType);
battlefieldStatus.ShutdownTimer = bg.GetRemainingTime();
battlefieldStatus.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? TeamId.Horde : TeamId.Alliance);
battlefieldStatus.LeftEarly = false;
@@ -169,10 +164,10 @@ namespace Game.BattleGrounds
battlefieldStatus.Mapid = bg.GetMapId();
}
public void BuildBattlegroundStatusQueued(out BattlefieldStatusQueued battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint avgWaitTime, ArenaTypes arenaType, bool asGroup)
public void BuildBattlegroundStatusQueued(out BattlefieldStatusQueued battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, BattlegroundQueueTypeId queueId, uint avgWaitTime, ArenaTypes arenaType, bool asGroup)
{
battlefieldStatus = new BattlefieldStatusQueued();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, queueId, arenaType);
battlefieldStatus.AverageWaitTime = avgWaitTime;
battlefieldStatus.AsGroup = asGroup;
battlefieldStatus.SuspendedQueue = false;
@@ -180,14 +175,14 @@ namespace Game.BattleGrounds
battlefieldStatus.WaitTime = Time.GetMSTimeDiffToNow(joinTime);
}
public void BuildBattlegroundStatusFailed(out BattlefieldStatusFailed battlefieldStatus, Battleground bg, Player pPlayer, uint ticketId, ArenaTypes arenaType, GroupJoinBattlegroundResult result, ObjectGuid errorGuid = default)
public void BuildBattlegroundStatusFailed(out BattlefieldStatusFailed battlefieldStatus, Battleground bg, Player pPlayer, uint ticketId, GroupJoinBattlegroundResult result, ObjectGuid errorGuid = default)
{
battlefieldStatus = new BattlefieldStatusFailed();
battlefieldStatus.Ticket.RequesterGuid = pPlayer.GetGUID();
battlefieldStatus.Ticket.Id = ticketId;
battlefieldStatus.Ticket.Type = RideType.Battlegrounds;
battlefieldStatus.Ticket.Time = (int)pPlayer.GetBattlegroundQueueJoinTime(BGQueueTypeId(bg.GetTypeID(), arenaType));
battlefieldStatus.QueueID = bg.GetQueueId();
battlefieldStatus.Ticket.Time = (int)pPlayer.GetBattlegroundQueueJoinTime(bg.GetQueueId());
battlefieldStatus.QueueID = bg.GetQueueId().GetPacked();
battlefieldStatus.Reason = (int)result;
if (!errorGuid.IsEmpty() && (result == GroupJoinBattlegroundResult.NotInBattleground || result == GroupJoinBattlegroundResult.JoinTimedOut))
battlefieldStatus.ClientID = errorGuid;
@@ -198,7 +193,7 @@ namespace Game.BattleGrounds
if (instanceId == 0)
return null;
if (bgTypeId != BattlegroundTypeId.None)
if (bgTypeId != BattlegroundTypeId.None || bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.RandomEpic)
{
var data = bgDataStore.LookupByKey(bgTypeId);
return data.m_Battlegrounds.LookupByKey(instanceId);
@@ -249,9 +244,9 @@ namespace Game.BattleGrounds
}
// create a new Battleground that will really be used to play
public Battleground CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvpDifficultyRecord bracketEntry, ArenaTypes arenaType, bool isRated)
public Battleground CreateNewBattleground(BattlegroundQueueTypeId queueId, PvpDifficultyRecord bracketEntry)
{
BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId);
BattlegroundTypeId bgTypeId = GetRandomBG((BattlegroundTypeId)queueId.BattlemasterListId);
// get the template BG
Battleground bg_template = GetBattlegroundTemplate(bgTypeId);
@@ -261,22 +256,23 @@ namespace Game.BattleGrounds
return null;
}
if (bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.AA)
if (bgTypeId == BattlegroundTypeId.RB || bgTypeId == BattlegroundTypeId.AA || bgTypeId == BattlegroundTypeId.RandomEpic)
return null;
// create a copy of the BG template
Battleground bg = bg_template.GetCopy();
bool isRandom = bgTypeId != originalBgTypeId && !bg.IsArena();
bool isRandom = bgTypeId != (BattlegroundTypeId)queueId.BattlemasterListId && !bg.IsArena();
bg.SetQueueId(queueId);
bg.SetBracket(bracketEntry);
bg.SetInstanceID(Global.MapMgr.GenerateInstanceId());
bg.SetClientInstanceID(CreateClientVisibleInstanceId(isRandom ? BattlegroundTypeId.RB : bgTypeId, bracketEntry.GetBracketId()));
bg.SetClientInstanceID(CreateClientVisibleInstanceId((BattlegroundTypeId)queueId.BattlemasterListId, bracketEntry.GetBracketId()));
bg.Reset(); // reset the new bg (set status to status_wait_queue from status_none)
bg.SetStatus(BattlegroundStatus.WaitJoin); // start the joining of the bg
bg.SetArenaType(arenaType);
bg.SetArenaType((ArenaTypes)queueId.TeamSize);
bg.SetRandomTypeID(bgTypeId);
bg.SetRated(isRated);
bg.SetRated(queueId.Rated);
bg.SetRandom(isRandom);
return bg;
@@ -339,13 +335,15 @@ namespace Game.BattleGrounds
bg = new BattlegroundBFG(bgTemplate);
break;
*/
case BattlegroundTypeId.RandomEpic:
bg = new Battleground(bgTemplate);
bg.SetRandom(true);
break;
default:
return false;
}
}
bg.SetInstanceID(0);
if (!bgDataStore.ContainsKey(bg.GetTypeID()))
bgDataStore[bg.GetTypeID()] = new BattlegroundData();
@@ -390,7 +388,7 @@ namespace Game.BattleGrounds
bgTemplate.ScriptId = Global.ObjectMgr.GetScriptId(result.Read<string>(5));
bgTemplate.BattlemasterEntry = bl;
if (bgTemplate.Id != BattlegroundTypeId.AA && bgTemplate.Id != BattlegroundTypeId.RB)
if (bgTemplate.Id != BattlegroundTypeId.AA && bgTemplate.Id != BattlegroundTypeId.RB && bgTemplate.Id != BattlegroundTypeId.RandomEpic)
{
uint startId = result.Read<uint>(1);
WorldSafeLocsEntry start = Global.ObjectMgr.GetWorldSafeLoc(startId);
@@ -486,94 +484,9 @@ namespace Game.BattleGrounds
|| bgTypeId == BattlegroundTypeId.DS || bgTypeId == BattlegroundTypeId.RV || bgTypeId == BattlegroundTypeId.RL;
}
public BattlegroundQueueTypeId BGQueueTypeId(BattlegroundTypeId bgTypeId, ArenaTypes arenaType)
public BattlegroundQueueTypeId BGQueueTypeId(ushort battlemasterListId, BattlegroundQueueIdType type, bool rated, ArenaTypes teamSize)
{
switch (bgTypeId)
{
case BattlegroundTypeId.AB:
return BattlegroundQueueTypeId.AB;
case BattlegroundTypeId.AV:
return BattlegroundQueueTypeId.AV;
case BattlegroundTypeId.EY:
return BattlegroundQueueTypeId.EY;
case BattlegroundTypeId.IC:
return BattlegroundQueueTypeId.IC;
case BattlegroundTypeId.TP:
return BattlegroundQueueTypeId.TP;
case BattlegroundTypeId.BFG:
return BattlegroundQueueTypeId.BFG;
case BattlegroundTypeId.RB:
return BattlegroundQueueTypeId.RB;
case BattlegroundTypeId.SA:
return BattlegroundQueueTypeId.SA;
case BattlegroundTypeId.WS:
return BattlegroundQueueTypeId.WS;
case BattlegroundTypeId.AA:
case BattlegroundTypeId.BE:
case BattlegroundTypeId.DS:
case BattlegroundTypeId.NA:
case BattlegroundTypeId.RL:
case BattlegroundTypeId.RV:
switch (arenaType)
{
case ArenaTypes.Team2v2:
return BattlegroundQueueTypeId.Arena2v2;
case ArenaTypes.Team3v3:
return BattlegroundQueueTypeId.Arena3v3;
case ArenaTypes.Team5v5:
return BattlegroundQueueTypeId.Arena5v5;
default:
return BattlegroundQueueTypeId.None;
}
default:
return BattlegroundQueueTypeId.None;
}
}
public BattlegroundTypeId BGTemplateId(BattlegroundQueueTypeId bgQueueTypeId)
{
switch (bgQueueTypeId)
{
case BattlegroundQueueTypeId.WS:
return BattlegroundTypeId.WS;
case BattlegroundQueueTypeId.AB:
return BattlegroundTypeId.AB;
case BattlegroundQueueTypeId.AV:
return BattlegroundTypeId.AV;
case BattlegroundQueueTypeId.EY:
return BattlegroundTypeId.EY;
case BattlegroundQueueTypeId.SA:
return BattlegroundTypeId.SA;
case BattlegroundQueueTypeId.IC:
return BattlegroundTypeId.IC;
case BattlegroundQueueTypeId.TP:
return BattlegroundTypeId.TP;
case BattlegroundQueueTypeId.BFG:
return BattlegroundTypeId.BFG;
case BattlegroundQueueTypeId.RB:
return BattlegroundTypeId.RB;
case BattlegroundQueueTypeId.Arena2v2:
case BattlegroundQueueTypeId.Arena3v3:
case BattlegroundQueueTypeId.Arena5v5:
return BattlegroundTypeId.AA;
default:
return 0; // used for unknown template (it existed and do nothing)
}
}
public ArenaTypes BGArenaType(BattlegroundQueueTypeId bgQueueTypeId)
{
switch (bgQueueTypeId)
{
case BattlegroundQueueTypeId.Arena2v2:
return ArenaTypes.Team2v2;
case BattlegroundQueueTypeId.Arena3v3:
return ArenaTypes.Team3v3;
case BattlegroundQueueTypeId.Arena5v5:
return ArenaTypes.Team5v5;
default:
return 0;
}
return new BattlegroundQueueTypeId(battlemasterListId, (byte)type, rated, (byte)teamSize);
}
public void ToggleTesting()
@@ -599,10 +512,51 @@ namespace Game.BattleGrounds
}
}
public void ScheduleQueueUpdate(uint arenaMatchmakerRating, ArenaTypes arenaType, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id)
public bool IsValidQueueId(BattlegroundQueueTypeId bgQueueTypeId)
{
BattlemasterListRecord battlemasterList = CliDB.BattlemasterListStorage.LookupByKey(bgQueueTypeId.BattlemasterListId);
if (battlemasterList == null)
return false;
switch ((BattlegroundQueueIdType)bgQueueTypeId.BgType)
{
case BattlegroundQueueIdType.Battleground:
if (battlemasterList.InstanceType != (int)MapTypes.Battleground)
return false;
if (bgQueueTypeId.TeamSize != 0)
return false;
break;
case BattlegroundQueueIdType.Arena:
if (battlemasterList.InstanceType != (int)MapTypes.Arena)
return false;
if (!bgQueueTypeId.Rated)
return false;
if (bgQueueTypeId.TeamSize == 0)
return false;
break;
case BattlegroundQueueIdType.Wargame:
if (bgQueueTypeId.Rated)
return false;
break;
case BattlegroundQueueIdType.ArenaSkirmish:
if (battlemasterList.InstanceType != (int)MapTypes.Arena)
return false;
if (bgQueueTypeId.Rated)
return false;
if (bgQueueTypeId.TeamSize != 0)
return false;
break;
default:
return false;
}
return true;
}
public void ScheduleQueueUpdate(uint arenaMatchmakerRating, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundBracketId bracket_id)
{
//we will use only 1 number created of bgTypeId and bracket_id
ulong scheduleId = ((ulong)arenaMatchmakerRating << 32) | ((uint)arenaType << 24) | ((uint)bgQueueTypeId << 16) | ((uint)bgTypeId << 8) | (uint)bracket_id;
ScheduledQueueUpdate scheduleId = new ScheduledQueueUpdate(arenaMatchmakerRating, bgQueueTypeId, bracket_id);
if (!m_QueueUpdateScheduler.Contains(scheduleId))
m_QueueUpdateScheduler.Add(scheduleId);
}
@@ -766,19 +720,19 @@ namespace Game.BattleGrounds
return BattlegroundTypeId.None;
}
public List<Battleground> GetBGFreeSlotQueueStore(BattlegroundTypeId bgTypeId)
public List<Battleground> GetBGFreeSlotQueueStore(BattlegroundQueueTypeId bgTypeId)
{
return bgDataStore[bgTypeId].BGFreeSlotQueue;
return m_BGFreeSlotQueue[bgTypeId];
}
public void AddToBGFreeSlotQueue(BattlegroundTypeId bgTypeId, Battleground bg)
public void AddToBGFreeSlotQueue(BattlegroundQueueTypeId bgTypeId, Battleground bg)
{
bgDataStore[bgTypeId].BGFreeSlotQueue.Insert(0, bg);
m_BGFreeSlotQueue.Add(bgTypeId, bg);
}
public void RemoveFromBGFreeSlotQueue(BattlegroundTypeId bgTypeId, uint instanceId)
public void RemoveFromBGFreeSlotQueue(BattlegroundQueueTypeId bgTypeId, uint instanceId)
{
var queues = bgDataStore[bgTypeId].BGFreeSlotQueue;
var queues = m_BGFreeSlotQueue[bgTypeId];
foreach (var bg in queues)
{
if (bg.GetInstanceID() == instanceId)
@@ -800,7 +754,13 @@ namespace Game.BattleGrounds
bgDataStore[bgTypeId].m_Battlegrounds.Remove(instanceId);
}
public BattlegroundQueue GetBattlegroundQueue(BattlegroundQueueTypeId bgQueueTypeId) { return m_BattlegroundQueues[(int)bgQueueTypeId]; }
public BattlegroundQueue GetBattlegroundQueue(BattlegroundQueueTypeId bgQueueTypeId)
{
if (!m_BattlegroundQueues.ContainsKey(bgQueueTypeId))
m_BattlegroundQueues[bgQueueTypeId] = new BattlegroundQueue(bgQueueTypeId);
return m_BattlegroundQueues[bgQueueTypeId];
}
public bool IsArenaTesting() { return m_ArenaTesting; }
public bool IsTesting() { return m_Testing; }
@@ -821,11 +781,46 @@ namespace Game.BattleGrounds
}
Dictionary<BattlegroundTypeId, BattlegroundData> bgDataStore = new Dictionary<BattlegroundTypeId, BattlegroundData>();
BattlegroundQueue[] m_BattlegroundQueues = new BattlegroundQueue[(int)BattlegroundQueueTypeId.Max];
Dictionary<BattlegroundQueueTypeId, BattlegroundQueue> m_BattlegroundQueues = new Dictionary<BattlegroundQueueTypeId, BattlegroundQueue>();
MultiMap<BattlegroundQueueTypeId, Battleground> m_BGFreeSlotQueue = new MultiMap<BattlegroundQueueTypeId, Battleground>();
Dictionary<uint, BattlegroundTypeId> mBattleMastersMap = new Dictionary<uint, BattlegroundTypeId>();
Dictionary<BattlegroundTypeId, BattlegroundTemplate> _battlegroundTemplates = new Dictionary<BattlegroundTypeId, BattlegroundTemplate>();
Dictionary<uint, BattlegroundTemplate> _battlegroundMapTemplates = new Dictionary<uint, BattlegroundTemplate>();
List<ulong> m_QueueUpdateScheduler = new List<ulong>();
struct ScheduledQueueUpdate
{
public ScheduledQueueUpdate(uint arenaMatchmakerRating, BattlegroundQueueTypeId queueId, BattlegroundBracketId bracketId)
{
ArenaMatchmakerRating = arenaMatchmakerRating;
QueueId = queueId;
BracketId = bracketId;
}
public uint ArenaMatchmakerRating;
public BattlegroundQueueTypeId QueueId;
public BattlegroundBracketId BracketId;
public static bool operator ==(ScheduledQueueUpdate right, ScheduledQueueUpdate left)
{
return left.ArenaMatchmakerRating == right.ArenaMatchmakerRating && left.QueueId == right.QueueId && left.BracketId == right.BracketId;
}
public static bool operator !=(ScheduledQueueUpdate right, ScheduledQueueUpdate left)
{
return !(right == left);
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return ArenaMatchmakerRating.GetHashCode() ^ QueueId.GetHashCode() ^ BracketId.GetHashCode();
}
}
List<ScheduledQueueUpdate> m_QueueUpdateScheduler = new List<ScheduledQueueUpdate>();
uint m_NextRatedArenaUpdate;
uint m_UpdateTimer;
bool m_ArenaTesting;
@@ -842,7 +837,6 @@ namespace Game.BattleGrounds
public Dictionary<uint, Battleground> m_Battlegrounds = new Dictionary<uint, Battleground>();
public List<uint>[] m_ClientBattlegroundIds = new List<uint>[(int)BattlegroundBracketId.Max];
public List<Battleground> BGFreeSlotQueue = new List<Battleground>();
public Battleground Template;
}
+111 -31
View File
@@ -30,8 +30,10 @@ namespace Game.BattleGrounds
{
public class BattlegroundQueue
{
public BattlegroundQueue()
public BattlegroundQueue(BattlegroundQueueTypeId queueId)
{
m_queueId = queueId;
for (var i = 0; i < (int)BattlegroundBracketId.Max; ++i)
{
m_QueuedGroups[i] = new List<GroupQueueInfo>[BattlegroundConst.BgQueueTypesCount];
@@ -329,14 +331,13 @@ namespace Game.BattleGrounds
Player plr2 = Global.ObjAccessor.FindConnectedPlayer(group.Players.FirstOrDefault().Key);
if (plr2)
{
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(group.BgTypeId, group.ArenaType);
uint queueSlot = plr2.GetBattlegroundQueueIndex(bgQueueTypeId);
uint queueSlot = plr2.GetBattlegroundQueueIndex(m_queueId);
plr2.RemoveBattlegroundQueueId(bgQueueTypeId); // must be called this way, because if you move this call to
plr2.RemoveBattlegroundQueueId(m_queueId); // must be called this way, because if you move this call to
// queue.removeplayer, it causes bugs
BattlefieldStatusNone battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, plr2, queueSlot, plr2.GetBattlegroundQueueJoinTime(bgQueueTypeId));
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, plr2, queueSlot, plr2.GetBattlegroundQueueJoinTime(m_queueId));
plr2.SendPacket(battlefieldStatus);
}
// then actually delete, this may delete the group as well!
@@ -381,7 +382,7 @@ namespace Game.BattleGrounds
// set invitation
ginfo.IsInvitedToBGInstanceGUID = bg.GetInstanceID();
BattlegroundTypeId bgTypeId = bg.GetTypeID();
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(bgTypeId, bg.GetArenaType());
BattlegroundQueueTypeId bgQueueTypeId = bg.GetQueueId();
BattlegroundBracketId bracket_id = bg.GetBracketId();
// set ArenaTeamId for rated matches
@@ -411,7 +412,7 @@ namespace Game.BattleGrounds
BGQueueInviteEvent inviteEvent = new BGQueueInviteEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, ginfo.ArenaType, ginfo.RemoveInviteTime);
m_events.AddEvent(inviteEvent, m_events.CalculateTime(BattlegroundConst.InvitationRemindTime));
// create automatic remove events
BGQueueRemoveEvent removeEvent = new BGQueueRemoveEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, bgQueueTypeId, ginfo.RemoveInviteTime);
BGQueueRemoveEvent removeEvent = new BGQueueRemoveEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgQueueTypeId, ginfo.RemoveInviteTime);
m_events.AddEvent(removeEvent, m_events.CalculateTime(BattlegroundConst.InviteAcceptWaitTime));
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
@@ -730,7 +731,7 @@ namespace Game.BattleGrounds
/// <param name="arenaType"></param>
/// <param name="isRated"></param>
/// <param name="arenaRating"></param>
public void BattlegroundQueueUpdate(uint diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, byte arenaType, bool isRated, uint arenaRating)
public void BattlegroundQueueUpdate(uint diff, BattlegroundBracketId bracket_id, uint arenaRating)
{
//if no players in queue - do nothing
if (m_QueuedGroups[(int)bracket_id][BattlegroundConst.BgQueuePremadeAlliance].Empty() &&
@@ -741,11 +742,11 @@ namespace Game.BattleGrounds
// Battleground with free slot for player should be always in the beggining of the queue
// maybe it would be better to create bgfreeslotqueue for each bracket_id
var bgQueues = Global.BattlegroundMgr.GetBGFreeSlotQueueStore(bgTypeId);
var bgQueues = Global.BattlegroundMgr.GetBGFreeSlotQueueStore(m_queueId);
foreach (var bg in bgQueues)
{
// DO NOT allow queue manager to invite new player to rated games
if (!bg.IsRated() && bg.GetTypeID() == bgTypeId && bg.GetBracketId() == bracket_id &&
if (!bg.IsRated() && bg.GetBracketId() == bracket_id &&
bg.GetStatus() > BattlegroundStatus.WaitQueue && bg.GetStatus() < BattlegroundStatus.WaitLeave)
{
// clear selection pools
@@ -769,10 +770,10 @@ namespace Game.BattleGrounds
// finished iterating through the bgs with free slots, maybe we need to create a new bg
Battleground bg_template = Global.BattlegroundMgr.GetBattlegroundTemplate(bgTypeId);
Battleground bg_template = Global.BattlegroundMgr.GetBattlegroundTemplate((BattlegroundTypeId)m_queueId.BattlemasterListId);
if (!bg_template)
{
Log.outError(LogFilter.Battleground, "Battleground: Update: bg template not found for {0}", bgTypeId);
Log.outError(LogFilter.Battleground, $"Battleground: Update: bg template not found for {m_queueId.BattlemasterListId}");
return;
}
@@ -789,8 +790,8 @@ namespace Game.BattleGrounds
if (bg_template.IsArena())
{
MaxPlayersPerTeam = arenaType;
MinPlayersPerTeam = (uint)(Global.BattlegroundMgr.IsArenaTesting() ? 1 : arenaType);
MaxPlayersPerTeam = m_queueId.TeamSize;
MinPlayersPerTeam = Global.BattlegroundMgr.IsArenaTesting() ? 1u : m_queueId.TeamSize;
}
else if (Global.BattlegroundMgr.IsTesting())
MinPlayersPerTeam = 1;
@@ -803,10 +804,10 @@ namespace Game.BattleGrounds
if (CheckPremadeMatch(bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam))
{
// create new Battleground
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(bgTypeId, bracketEntry, 0, false);
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracketEntry);
if (bg2 == null)
{
Log.outError(LogFilter.Battleground, "BattlegroundQueue.Update - Cannot create Battleground: {0}", bgTypeId);
Log.outError(LogFilter.Battleground, $"BattlegroundQueue.Update - Cannot create Battleground: {m_queueId.BattlemasterListId}");
return;
}
// invite those selection pools
@@ -822,17 +823,17 @@ namespace Game.BattleGrounds
}
// now check if there are in queues enough players to start new game of (normal Battleground, or non-rated arena)
if (!isRated)
if (!m_queueId.Rated)
{
// if there are enough players in pools, start new Battleground or non rated arena
if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)
|| (bg_template.IsArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam)))
{
// we successfully created a pool
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(bgTypeId, bracketEntry, (ArenaTypes)arenaType, false);
Battleground bg2 = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracketEntry);
if (bg2 == null)
{
Log.outError(LogFilter.Battleground, "BattlegroundQueue.Update - Cannot create Battleground: {0}", bgTypeId);
Log.outError(LogFilter.Battleground, $"BattlegroundQueue.Update - Cannot create Battleground: {m_queueId.BattlemasterListId}");
return;
}
@@ -928,7 +929,7 @@ namespace Game.BattleGrounds
{
GroupQueueInfo aTeam = queueArray[TeamId.Alliance];
GroupQueueInfo hTeam = queueArray[TeamId.Horde];
Battleground arena = Global.BattlegroundMgr.CreateNewBattleground(bgTypeId, bracketEntry, (ArenaTypes)arenaType, true);
Battleground arena = Global.BattlegroundMgr.CreateNewBattleground(m_queueId, bracketEntry);
if (!arena)
{
Log.outError(LogFilter.Battleground, "BattlegroundQueue.Update couldn't create arena instance for rated arena match!");
@@ -965,6 +966,8 @@ namespace Game.BattleGrounds
}
}
BattlegroundQueueTypeId m_queueId;
Dictionary<ObjectGuid, PlayerQueueInfo> m_QueuedPlayers = new Dictionary<ObjectGuid, PlayerQueueInfo>();
/// <summary>
@@ -1046,6 +1049,85 @@ namespace Game.BattleGrounds
}
public struct BattlegroundQueueTypeId
{
public ushort BattlemasterListId;
public byte BgType;
public bool Rated;
public byte TeamSize;
public BattlegroundQueueTypeId(ushort battlemasterListId, byte bgType, bool rated, byte teamSize)
{
BattlemasterListId = battlemasterListId;
BgType = bgType;
Rated = rated;
TeamSize = teamSize;
}
public static BattlegroundQueueTypeId FromPacked(ulong packedQueueId)
{
return new BattlegroundQueueTypeId((ushort)(packedQueueId & 0xFFFF), (byte)((packedQueueId >> 16) & 0xF), ((packedQueueId >> 20) & 1) != 0, (byte)((packedQueueId >> 24) & 0x3F));
}
public ulong GetPacked()
{
return (ulong)BattlemasterListId
| ((ulong)(BgType & 0xF) << 16)
| ((ulong)(Rated ? 1 : 0) << 20)
| ((ulong)(TeamSize & 0x3F) << 24)
| 0x1F10000000000000;
}
public static bool operator ==(BattlegroundQueueTypeId left, BattlegroundQueueTypeId right)
{
return left.BattlemasterListId == right.BattlemasterListId
&& left.BgType == right.BgType
&& left.Rated == right.Rated
&& left.TeamSize == right.TeamSize;
}
public static bool operator !=(BattlegroundQueueTypeId left, BattlegroundQueueTypeId right)
{
return !(left == right);
}
public static bool operator <(BattlegroundQueueTypeId left, BattlegroundQueueTypeId right)
{
if (left.BattlemasterListId != right.BattlemasterListId)
return left.BattlemasterListId < right.BattlemasterListId;
if (left.BgType != right.BgType)
return left.BgType < right.BgType;
if (left.Rated != right.Rated)
return (left.Rated ? 1 : 0) < (right.Rated ? 1 : 0);
return left.TeamSize < right.TeamSize;
}
public static bool operator >(BattlegroundQueueTypeId left, BattlegroundQueueTypeId right)
{
if (left.BattlemasterListId != right.BattlemasterListId)
return left.BattlemasterListId > right.BattlemasterListId;
if (left.BgType != right.BgType)
return left.BgType > right.BgType;
if (left.Rated != right.Rated)
return (left.Rated ? 1 : 0) > (right.Rated ? 1 : 0);
return left.TeamSize > right.TeamSize;
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return BattlemasterListId.GetHashCode() ^ BgType.GetHashCode() ^ Rated.GetHashCode() ^ TeamSize.GetHashCode();
}
public override string ToString()
{
return $"{{ BattlemasterListId: {BattlemasterListId}, Type: {BgType}, Rated: {Rated}, TeamSize: {TeamSize} }}";
}
}
/// <summary>
/// stores information for players in queue
/// </summary>
@@ -1081,11 +1163,11 @@ namespace Game.BattleGrounds
/// </summary>
class BGQueueInviteEvent : BasicEvent
{
public BGQueueInviteEvent(ObjectGuid pl_guid, uint BgInstanceGUID, BattlegroundTypeId BgTypeId, ArenaTypes arenaType, uint removeTime)
public BGQueueInviteEvent(ObjectGuid plGuid, uint bgInstanceGUID, BattlegroundTypeId bgTypeId, ArenaTypes arenaType, uint removeTime)
{
m_PlayerGuid = pl_guid;
m_BgInstanceGUID = BgInstanceGUID;
m_BgTypeId = BgTypeId;
m_PlayerGuid = plGuid;
m_BgInstanceGUID = bgInstanceGUID;
m_BgTypeId = bgTypeId;
m_ArenaType = arenaType;
m_RemoveTime = removeTime;
}
@@ -1102,7 +1184,7 @@ namespace Game.BattleGrounds
if (bg == null)
return true;
BattlegroundQueueTypeId bgQueueTypeId = Global.BattlegroundMgr.BGQueueTypeId(bg.GetTypeID(), bg.GetArenaType());
BattlegroundQueueTypeId bgQueueTypeId = bg.GetQueueId();
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
if (queueSlot < SharedConst.BGTeamsCount) // player is in queue or in Battleground
{
@@ -1134,12 +1216,11 @@ namespace Game.BattleGrounds
/// </summary>
class BGQueueRemoveEvent : BasicEvent
{
public BGQueueRemoveEvent(ObjectGuid pl_guid, uint bgInstanceGUID, BattlegroundTypeId BgTypeId, BattlegroundQueueTypeId bgQueueTypeId, uint removeTime)
public BGQueueRemoveEvent(ObjectGuid plGuid, uint bgInstanceGUID, BattlegroundQueueTypeId bgQueueTypeId, uint removeTime)
{
m_PlayerGuid = pl_guid;
m_PlayerGuid = plGuid;
m_BgInstanceGUID = bgInstanceGUID;
m_RemoveTime = removeTime;
m_BgTypeId = BgTypeId;
m_BgQueueTypeId = bgQueueTypeId;
}
@@ -1150,7 +1231,7 @@ namespace Game.BattleGrounds
// player logged off (we should do nothing, he is correctly removed from queue in another procedure)
return true;
Battleground bg = Global.BattlegroundMgr.GetBattleground(m_BgInstanceGUID, m_BgTypeId);
Battleground bg = Global.BattlegroundMgr.GetBattleground(m_BgInstanceGUID, (BattlegroundTypeId)m_BgQueueTypeId.BattlemasterListId);
//Battleground can be deleted already when we are removing queue info
//bg pointer can be NULL! so use it carefully!
@@ -1167,7 +1248,7 @@ namespace Game.BattleGrounds
bgQueue.RemovePlayer(m_PlayerGuid, true);
//update queues if Battleground isn't ended
if (bg && bg.IsBattleground() && bg.GetStatus() != BattlegroundStatus.WaitLeave)
Global.BattlegroundMgr.ScheduleQueueUpdate(0, 0, m_BgQueueTypeId, m_BgTypeId, bg.GetBracketId());
Global.BattlegroundMgr.ScheduleQueueUpdate(0, m_BgQueueTypeId, bg.GetBracketId());
BattlefieldStatusNone battlefieldStatus;
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, queueSlot, player.GetBattlegroundQueueJoinTime(m_BgQueueTypeId));
@@ -1184,7 +1265,6 @@ namespace Game.BattleGrounds
ObjectGuid m_PlayerGuid;
uint m_BgInstanceGUID;
uint m_RemoveTime;
BattlegroundTypeId m_BgTypeId;
BattlegroundQueueTypeId m_BgQueueTypeId;
}
}