private byte[] ParsePlayerList(Packet packet) { var LocalIP = new byte[] { 127, 0, 0, 1 }; var LocalPort = ((uint)7171).GetBytes().Redim(2); var index = 2; switch (packet.ReadInt(2)) { case 0x0A: Output.Add("Error Received: ", packet.ReadString(3)); return null; case 0x0B: Output.Add("For your information: ", packet.ReadString(3)); return null; case 0x14: Output.Add("MOTD: ", packet.ReadString(3)); index += (3 + packet.ReadString(3).Length); break; case 0x1E: Output.Add("Patching Message: ", packet.ReadString(3)); return null; case 0x20: Output.Add("New Version: ", packet.ReadString(3)); return null; } if (packet.ReadInt(index) == 0x64) { var charCount = packet.ReadInt(index + 1); var addler = index; var result = packet.Data; for (var i = 0; i < charCount; i++) { addler += 2; var charName = packet.ReadString(addler); addler += charName.Length + 2; var serverName = packet.ReadString(addler); addler += serverName.Length + 2; var serverIP = packet.ReadBytes(addler, 4); result = result.Replace(LocalIP, addler); addler += 4; var serverPort = packet.ReadShort(addler); result = result.Replace(LocalPort, addler); chars.Add(new PlayerList(charName, serverName, serverIP, serverPort.ToInt32())); } return result; } return null; }
/// <summary> /// Fill Player List and Change the Server IP Address to Local. /// </summary> /// <param name="data">Player List Server Packet.</param> protected byte[] ParsePlayerList(byte[] data) { if (data == null) { return null; } var localIP = IPLocal.GetAddressBytes().Redim(4); var localPort = LocalPort.ToUInt32().GetBytes().Redim(2); var packet = new Packet() { Data = data, ConnectionSource = this }; PlayerList = new List<PlayerList>(); var index = 2; switch (packet.ReadInt(2)) { case 0x0A: Output.Add("Error Received: ", packet.ReadString(3)); return null; case 0x0B: Output.Add("For your information: ", packet.ReadString(3)); return null; case 0x14: Output.Add("MOTD: ", packet.ReadString(3)); index += (3 + packet.ReadString(3).Length); break; case 0x1E: Output.Add("Patching Message: ", packet.ReadString(3)); return null; case 0x20: Output.Add("New Version: ", packet.ReadString(3)); return null; } if (packet.ReadInt(index) == 0x64) { var charCount = packet.ReadInt(index + 1); var addler = index; var result = packet.Data; for (var i = 0; i < charCount; i++) { addler += 2; var charName = packet.ReadString(addler); addler += charName.Length + 2; var serverName = packet.ReadString(addler); addler += serverName.Length + 2; var serverIP = packet.ReadBytes(addler, 4); result = result.Replace(localIP, addler); addler += 4; var serverPort = packet.ReadShort(addler); result = result.Replace(localPort, addler); PlayerList.Add(new PlayerList(charName, serverName, serverIP, serverPort.ToInt32())); } return result; } return null; }