public RawPacket Serialize(Packet packet) { PacketReflectionInfo info; if (!_info.TryGetValue(packet.OpCode, out info)) { return(null); } byte[] data; using (TeraBinaryWriter writer = new TeraBinaryWriter()) { writer.Position = 2; writer.Write(Tables.Game.NameToOpCode[packet.OpCode]); foreach (FieldInfo field in info.Fields) { writer.Write(field.FieldType, field.GetValue(packet)); } writer.Position = 0; writer.Write((ushort)writer.Length); data = new byte[writer.Length]; writer.Position = 0; ((MemoryStream)writer.Stream).Read(data, 0, writer.Length); } return(new RawPacket(data, packet.OpCode[0] == 'C' ? PacketDirection.ClientToServer : PacketDirection.ServerToClient)); }