/// <summary> /// Handles an incoming who list request /// </summary> /// <param name="client">the Session the incoming packet belongs to</param> /// <param name="packet">the full packet</param> //[ClientPacketHandler((RealmServerOpCode.CMSG_WHO)] public static void WhoListRequest(IRealmClient client, RealmPacketIn packet) { var search = new WhoSearch { MaxResultCount = WhoList.MaxResultCount, Faction = client.ActiveCharacter.Faction.Group, MinLevel = (byte)packet.ReadUInt32(), MaxLevel = (byte)packet.ReadUInt32(), Name = packet.ReadCString(), GuildName = packet.ReadCString(), RaceMask = (RaceMask2)packet.ReadUInt32(), ClassMask = (ClassMask2)packet.ReadUInt32() }; uint zoneCount = packet.ReadUInt32(); if (zoneCount > 0 && zoneCount <= 10) { for (int i = 0; i < zoneCount; i++) { search.Zones.Add((ZoneId)packet.ReadUInt32()); } } uint nameCount = packet.ReadUInt32(); if (nameCount > 0 && nameCount <= 10) { for (int i = 0; i < nameCount; i++) { search.Names.Add(packet.ReadCString().ToLower()); } } //Performs the search and retrieves matching characters var characters = search.RetrieveMatchedCharacters(); //Send the character list to the client SendWhoList(client, characters); }
/// <summary>Handles an incoming who list request</summary> /// <param name="client">the Session the incoming packet belongs to</param> /// <param name="packet">the full packet</param> public static void WhoListRequest(IRealmClient client, RealmPacketIn packet) { WhoSearch whoSearch1 = new WhoSearch(); whoSearch1.MaxResultCount = WhoList.MaxResultCount; whoSearch1.Faction = client.ActiveCharacter.Faction.Group; whoSearch1.MinLevel = (byte)packet.ReadUInt32(); whoSearch1.MaxLevel = (byte)packet.ReadUInt32(); whoSearch1.Name = packet.ReadCString(); whoSearch1.GuildName = packet.ReadCString(); whoSearch1.RaceMask = (RaceMask2)packet.ReadUInt32(); whoSearch1.ClassMask = (ClassMask2)packet.ReadUInt32(); WhoSearch whoSearch2 = whoSearch1; uint num1 = packet.ReadUInt32(); if (num1 > 0U && num1 <= 10U) { for (int index = 0; (long)index < (long)num1; ++index) { whoSearch2.Zones.Add((ZoneId)packet.ReadUInt32()); } } uint num2 = packet.ReadUInt32(); if (num2 > 0U && num2 <= 10U) { for (int index = 0; (long)index < (long)num2; ++index) { whoSearch2.Names.Add(packet.ReadCString().ToLower()); } } ICollection <Character> characters = whoSearch2.RetrieveMatchedCharacters(); SendWhoList(client, characters); }