Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/cypher_proxy' into cypher_proxy
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed Apr 27, 2022
2 parents 89431df + 2af338f commit 06557e4
Show file tree
Hide file tree
Showing 8 changed files with 77 additions and 37 deletions.
17 changes: 1 addition & 16 deletions HermesProxy/GlobalSessionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class GameSessionData
public int GroupUpdateCounter;
public uint GroupReadyCheckResponses;
public LootMethod CurrentGroupLootMethod;
public List<WowGuid128> CurrentGroupMembers = new();
public HashSet<WowGuid128> CurrentGroupMembers = new();
public WowGuid128 CurrentGroupGuid;
public WowGuid128 CurrentGroupLeader;
public WowGuid128 CurrentPlayerGuid;
Expand Down Expand Up @@ -73,7 +73,6 @@ public class GameSessionData
public Dictionary<uint, uint> ItemBuyCount = new();
public Dictionary<uint, uint> RealSpellToLearnSpell = new();
public Dictionary<uint, ArenaTeamData> ArenaTeams = new();
public Dictionary<uint, uint> CurrentArenaTeamIdBySize = new Dictionary<uint, uint>();
public World.Server.Packets.MailListResult PendingMailListPacket;
public HashSet<uint> RequestedItemTextIds = new HashSet<uint>();
public Dictionary<uint, string> ItemTexts = new Dictionary<uint, string>();
Expand Down Expand Up @@ -161,20 +160,6 @@ public void StoreArenaTeamDataForPlayer(WowGuid128 guid, byte slot, ArenaTeamIns

PlayerArenaTeams[guid][slot] = team;
}
public uint GetCurrentArenaTeamIdFromSize(uint size)
{
uint teamId;
if (CurrentArenaTeamIdBySize.TryGetValue(size, out teamId))
return teamId;
return 0;
}
public void StoreCurrentArenaTeamIdForSize(uint size, uint teamId)
{
if (CurrentArenaTeamIdBySize.ContainsKey(size))
CurrentArenaTeamIdBySize[size] = teamId;
else
CurrentArenaTeamIdBySize.Add(size, teamId);
}
public WowGuid64 GetInventorySlotItem(int slot)
{
int PLAYER_FIELD_INV_SLOT_HEAD = LegacyVersion.GetUpdateField(PlayerField.PLAYER_FIELD_INV_SLOT_HEAD);
Expand Down
9 changes: 5 additions & 4 deletions HermesProxy/World/Client/PacketHandlers/ArenaHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,18 @@ void HandleArenaTeamRoster(WorldPacket packet)

var count = packet.ReadUInt32();
arena.TeamSize = packet.ReadUInt32();
GetSession().GameState.StoreCurrentArenaTeamIdForSize(arena.TeamSize, arena.TeamId);

for (var i = 0; i < count; i++)
{
ArenaTeamMember member = new ArenaTeamMember();
PlayerCache cache = new PlayerCache();
member.MemberGUID = packet.ReadGuid().To128(GetSession().GameState);
member.Online = packet.ReadBool();
member.Name = packet.ReadCString();
member.Name = cache.Name = packet.ReadCString();
member.Captain = packet.ReadInt32();
member.Level = packet.ReadUInt8();
member.ClassId = (Class)packet.ReadUInt8();
member.Level = cache.Level = packet.ReadUInt8();
member.ClassId = cache.ClassId = (Class)packet.ReadUInt8();
GetSession().GameState.UpdatePlayerCache(member.MemberGUID, cache);
member.WeekGamesPlayed = packet.ReadUInt32();
member.WeekGamesWon = packet.ReadUInt32();
member.SeasonGamesPlayed = packet.ReadUInt32();
Expand Down
20 changes: 14 additions & 6 deletions HermesProxy/World/Client/PacketHandlers/GroupHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ void HandleGroupListVanilla(WorldPacket packet)
bool isRaid = packet.ReadBool();
byte ownSubGroupAndFlags = packet.ReadUInt8();

GetSession().GameState.CurrentGroupMembers = new List<WowGuid128>();
GetSession().GameState.CurrentGroupMembers = new HashSet<WowGuid128>();
uint membersCount = packet.ReadUInt32();
if (membersCount > 0)
{
Expand Down Expand Up @@ -117,8 +117,12 @@ void HandleGroupListVanilla(WorldPacket packet)
member.ClassId = GetSession().GameState.GetUnitClass(member.GUID);
if (!member.Flags.HasAnyFlag(GroupMemberFlags.Assistant))
allAssist = false;
party.PlayerList.Add(member);
GetSession().GameState.CurrentGroupMembers.Add(member.GUID);

if (!GetSession().GameState.CurrentGroupMembers.Contains(member.GUID))
{
party.PlayerList.Add(member);
GetSession().GameState.CurrentGroupMembers.Add(member.GUID);
}
}

if (allAssist)
Expand Down Expand Up @@ -155,7 +159,7 @@ void HandleGroupListTBC(WorldPacket packet)
byte ownGroupFlags = packet.ReadUInt8();
party.PartyGUID = GetSession().GameState.CurrentGroupGuid = packet.ReadGuid().To128(GetSession().GameState);

GetSession().GameState.CurrentGroupMembers = new List<WowGuid128>();
GetSession().GameState.CurrentGroupMembers = new HashSet<WowGuid128>();
uint membersCount = packet.ReadUInt32();
if (membersCount > 0)
{
Expand Down Expand Up @@ -191,8 +195,12 @@ void HandleGroupListTBC(WorldPacket packet)
member.ClassId = GetSession().GameState.GetUnitClass(member.GUID);
if (!member.Flags.HasAnyFlag(GroupMemberFlags.Assistant))
allAssist = false;
party.PlayerList.Add(member);
GetSession().GameState.CurrentGroupMembers.Add(member.GUID);

if (!GetSession().GameState.CurrentGroupMembers.Contains(member.GUID))
{
party.PlayerList.Add(member);
GetSession().GameState.CurrentGroupMembers.Add(member.GUID);
}
}

if (allAssist)
Expand Down
1 change: 0 additions & 1 deletion HermesProxy/World/Enums/Opcodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,6 @@ public enum Opcode
CMSG_BATTLEMASTER_HELLO,
CMSG_BATTLEMASTER_JOIN,
CMSG_BATTLEMASTER_JOIN_ARENA,
CMSG_BATTLEMASTER_JOIN_ARENA_SKIRMISH,
CMSG_BATTLEMASTER_JOIN_BRAWL,
CMSG_BATTLEMASTER_JOIN_RATED,
CMSG_BATTLEMASTER_JOIN_SKIRMISH,
Expand Down
23 changes: 21 additions & 2 deletions HermesProxy/World/Server/PacketHandlers/ArenaHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void HandleBattlematerJoinArena(BattlemasterJoinArena join)
{
WorldPacket packet = new WorldPacket(Opcode.CMSG_BATTLEMASTER_JOIN_ARENA);
packet.WriteGuid(join.Guid.To64());
packet.WriteUInt8(join.TeamSizeIndex);
packet.WriteUInt8(join.TeamIndex);
packet.WriteBool(true); // As Group
packet.WriteBool(true); // Is Rated
SendPacketToServer(packet);
Expand All @@ -70,10 +70,29 @@ void HandleBattlematerJoinSkirmish(BattlemasterJoinSkirmish join)
{
WorldPacket packet = new WorldPacket(Opcode.CMSG_BATTLEMASTER_JOIN_ARENA);
packet.WriteGuid(join.Guid.To64());
packet.WriteUInt8(join.TeamSizeIndex);
packet.WriteUInt8(join.TeamSize);
packet.WriteBool(join.AsGroup);
packet.WriteBool(false); // Is Rated
SendPacketToServer(packet);
}

[PacketHandler(Opcode.CMSG_ARENA_TEAM_REMOVE)]
[PacketHandler(Opcode.CMSG_ARENA_TEAM_LEADER)]
void HandleArenaUnimplemented(ArenaTeamRemove arena)
{
WorldPacket packet = new WorldPacket(arena.GetUniversalOpcode());
packet.WriteUInt32(arena.TeamId);
packet.WriteCString(GetSession().GameState.GetPlayerName(arena.PlayerGuid));
SendPacketToServer(packet);
}

[PacketHandler(Opcode.CMSG_ARENA_TEAM_DISBAND)]
[PacketHandler(Opcode.CMSG_ARENA_TEAM_LEAVE)]
void HandleArenaTeamLeave(ArenaTeamLeave arena)
{
WorldPacket packet = new WorldPacket(arena.GetUniversalOpcode());
packet.WriteUInt32(arena.TeamId);
SendPacketToServer(packet);
}
}
}
4 changes: 2 additions & 2 deletions HermesProxy/World/Server/PacketHandlers/GuildHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ void HandleGuildOfficerRemoveMember(GuildOfficerRemoveMember remove)
[PacketHandler(Opcode.CMSG_GUILD_INVITE_BY_NAME)]
void HandleGuildInviteByName(GuildInviteByName invite)
{
if (invite.ArenaTeamSize == 0)
if (invite.ArenaTeamId == 0)
{
WorldPacket packet = new WorldPacket(Opcode.CMSG_GUILD_INVITE_BY_NAME);
packet.WriteCString(invite.Name);
Expand All @@ -109,7 +109,7 @@ void HandleGuildInviteByName(GuildInviteByName invite)
else
{
WorldPacket packet = new WorldPacket(Opcode.CMSG_ARENA_TEAM_INVITE);
packet.WriteUInt32(GetSession().GameState.GetCurrentArenaTeamIdFromSize(invite.ArenaTeamSize));
packet.WriteUInt32(invite.ArenaTeamId);
packet.WriteCString(invite.Name);
SendPacketToServer(packet);
}
Expand Down
36 changes: 32 additions & 4 deletions HermesProxy/World/Server/Packets/ArenaPackets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,12 @@ public BattlemasterJoinArena(WorldPacket packet) : base(packet) { }
public override void Read()
{
Guid = _worldPacket.ReadPackedGuid128();
TeamSizeIndex = _worldPacket.ReadUInt8();
TeamIndex = _worldPacket.ReadUInt8();
Roles = _worldPacket.ReadUInt8();
}

public WowGuid128 Guid;
public byte TeamSizeIndex;
public byte TeamIndex;
public byte Roles;
}

Expand All @@ -189,13 +189,41 @@ public override void Read()
{
Guid = _worldPacket.ReadPackedGuid128();
Roles = _worldPacket.ReadUInt8();
TeamSizeIndex = _worldPacket.ReadUInt8();
TeamSize = _worldPacket.ReadUInt8();
AsGroup = _worldPacket.HasBit();
Requeue = _worldPacket.HasBit();
}

public WowGuid128 Guid;
public byte Roles;
public byte TeamSizeIndex;
public byte TeamSize;
public bool AsGroup;
public bool Requeue;
}

public class ArenaTeamRemove : ClientPacket
{
public ArenaTeamRemove(WorldPacket packet) : base(packet) { }

public override void Read()
{
TeamId = _worldPacket.ReadUInt32();
PlayerGuid = _worldPacket.ReadPackedGuid128();
}

public uint TeamId;
public WowGuid128 PlayerGuid;
}

public class ArenaTeamLeave : ClientPacket
{
public ArenaTeamLeave(WorldPacket packet) : base(packet) { }

public override void Read()
{
TeamId = _worldPacket.ReadUInt32();
}

public uint TeamId;
}
}
4 changes: 2 additions & 2 deletions HermesProxy/World/Server/Packets/GuildPackets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -592,11 +592,11 @@ public override void Read()
Name = _worldPacket.ReadString(nameLen);

if (isArena)
ArenaTeamSize = _worldPacket.ReadUInt32();
ArenaTeamId = _worldPacket.ReadUInt32();
}

public string Name;
public uint ArenaTeamSize;
public uint ArenaTeamId;
}

public class GuildInvite : ServerPacket
Expand Down

0 comments on commit 06557e4

Please sign in to comment.