Core/PacketIO: Fixed BattlefieldStatusHeader structure and QueueID values for other battleground types

Port From (https://github.com/TrinityCore/TrinityCore/commit/d435d5d5ba7040a0de16d5b97202b2e61fd03344)
This commit is contained in:
hondacrx
2020-06-02 13:51:01 -04:00
parent 0e61c38792
commit 7290270bbf
4 changed files with 29 additions and 12 deletions
@@ -155,6 +155,15 @@ namespace Framework.Constants
Max Max
} }
public enum BattlegroundQueueIdType
{
Battleground = 0,
Arena = 1,
Wargame = 2,
Cheat = 3,
ArenaSkirmish = 4
}
public enum BattlegroundQueueInvitationType public enum BattlegroundQueueInvitationType
{ {
NoBalance = 0, // no balance: N+M vs N players NoBalance = 0, // no balance: N+M vs N players
+5 -1
View File
@@ -1803,7 +1803,11 @@ namespace Game.BattleGrounds
public ulong GetQueueId() public ulong GetQueueId()
{ {
return (ulong)_battlegroundTemplate.Id | 0x1F10000000000000ul; 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) public BattlegroundTypeId GetTypeID(bool getRandom = false)
@@ -124,14 +124,14 @@ namespace Game.BattleGrounds
} }
} }
void BuildBattlegroundStatusHeader(ref BattlefieldStatusHeader header, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType) void BuildBattlegroundStatusHeader(BattlefieldStatusHeader header, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
{ {
header.Ticket = new RideTicket(); header.Ticket = new RideTicket();
header.Ticket.RequesterGuid = player.GetGUID(); header.Ticket.RequesterGuid = player.GetGUID();
header.Ticket.Id = ticketId; header.Ticket.Id = ticketId;
header.Ticket.Type = RideType.Battlegrounds; header.Ticket.Type = RideType.Battlegrounds;
header.Ticket.Time = (int)joinTime; header.Ticket.Time = (int)joinTime;
header.QueueID = bg.GetQueueId(); header.QueueID.Add(bg.GetQueueId());
header.RangeMin = (byte)bg.GetMinLevel(); header.RangeMin = (byte)bg.GetMinLevel();
header.RangeMax = (byte)bg.GetMaxLevel(); header.RangeMax = (byte)bg.GetMaxLevel();
header.TeamSize = (byte)(bg.IsArena() ? arenaType : 0); header.TeamSize = (byte)(bg.IsArena() ? arenaType : 0);
@@ -152,7 +152,7 @@ namespace Game.BattleGrounds
public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType) public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType)
{ {
battlefieldStatus = new BattlefieldStatusNeedConfirmation(); battlefieldStatus = new BattlefieldStatusNeedConfirmation();
BuildBattlegroundStatusHeader(ref battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType); BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
battlefieldStatus.Mapid = bg.GetMapId(); battlefieldStatus.Mapid = bg.GetMapId();
battlefieldStatus.Timeout = timeout; battlefieldStatus.Timeout = timeout;
battlefieldStatus.Role = 0; battlefieldStatus.Role = 0;
@@ -161,7 +161,7 @@ namespace Game.BattleGrounds
public void BuildBattlegroundStatusActive(out BattlefieldStatusActive battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType) public void BuildBattlegroundStatusActive(out BattlefieldStatusActive battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
{ {
battlefieldStatus = new BattlefieldStatusActive(); battlefieldStatus = new BattlefieldStatusActive();
BuildBattlegroundStatusHeader(ref battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType); BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
battlefieldStatus.ShutdownTimer = bg.GetRemainingTime(); battlefieldStatus.ShutdownTimer = bg.GetRemainingTime();
battlefieldStatus.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? TeamId.Horde : TeamId.Alliance); battlefieldStatus.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? TeamId.Horde : TeamId.Alliance);
battlefieldStatus.LeftEarly = false; battlefieldStatus.LeftEarly = false;
@@ -172,7 +172,7 @@ namespace Game.BattleGrounds
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, uint avgWaitTime, ArenaTypes arenaType, bool asGroup)
{ {
battlefieldStatus = new BattlefieldStatusQueued(); battlefieldStatus = new BattlefieldStatusQueued();
BuildBattlegroundStatusHeader(ref battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType); BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, bg, player, ticketId, joinTime, arenaType);
battlefieldStatus.AverageWaitTime = avgWaitTime; battlefieldStatus.AverageWaitTime = avgWaitTime;
battlefieldStatus.AsGroup = asGroup; battlefieldStatus.AsGroup = asGroup;
battlefieldStatus.SuspendedQueue = false; battlefieldStatus.SuspendedQueue = false;
@@ -245,7 +245,7 @@ namespace Game.Network.Packets
public uint Timeout; public uint Timeout;
public uint Mapid; public uint Mapid;
public BattlefieldStatusHeader Hdr; public BattlefieldStatusHeader Hdr = new BattlefieldStatusHeader();
public byte Role; public byte Role;
} }
@@ -264,7 +264,7 @@ namespace Game.Network.Packets
_worldPacket.FlushBits(); _worldPacket.FlushBits();
} }
public BattlefieldStatusHeader Hdr; public BattlefieldStatusHeader Hdr = new BattlefieldStatusHeader();
public uint ShutdownTimer; public uint ShutdownTimer;
public byte ArenaFaction; public byte ArenaFaction;
public bool LeftEarly; public bool LeftEarly;
@@ -288,7 +288,7 @@ namespace Game.Network.Packets
} }
public uint AverageWaitTime; public uint AverageWaitTime;
public BattlefieldStatusHeader Hdr; public BattlefieldStatusHeader Hdr = new BattlefieldStatusHeader();
public bool AsGroup; public bool AsGroup;
public bool SuspendedQueue; public bool SuspendedQueue;
public bool EligibleForMatchmaking; public bool EligibleForMatchmaking;
@@ -570,23 +570,27 @@ namespace Game.Network.Packets
} }
//Structs //Structs
public struct BattlefieldStatusHeader public class BattlefieldStatusHeader
{ {
public void Write(WorldPacket data) public void Write(WorldPacket data)
{ {
Ticket.Write(data); Ticket.Write(data);
data.WriteUInt64(QueueID); data.WriteInt32(QueueID.Count);
data.WriteUInt8(RangeMin); data.WriteUInt8(RangeMin);
data.WriteUInt8(RangeMax); data.WriteUInt8(RangeMax);
data.WriteUInt8(TeamSize); data.WriteUInt8(TeamSize);
data.WriteUInt32(InstanceID); data.WriteUInt32(InstanceID);
foreach (ulong queueID in QueueID)
data.WriteUInt64(queueID);
data.WriteBit(RegisteredMatch); data.WriteBit(RegisteredMatch);
data.WriteBit(TournamentRules); data.WriteBit(TournamentRules);
data.FlushBits(); data.FlushBits();
} }
public RideTicket Ticket; public RideTicket Ticket;
public ulong QueueID; public List<ulong> QueueID = new List<ulong>();
public byte RangeMin; public byte RangeMin;
public byte RangeMax; public byte RangeMax;
public byte TeamSize; public byte TeamSize;