public Packet Deserialize(RawPacket packet) { PacketReflectionInfo info; if (!_info.TryGetValue(Tables.Game.OpCodeToName[packet.OpCode], out info)) { return(null); } object obj = Activator.CreateInstance(info.Type); using (TeraBinaryReader reader = new TeraBinaryReader(packet.GetPayloadData())) { foreach (FieldInfo field in info.Fields) { field.SetValue(obj, reader.Read(field.FieldType)); } } return((Packet)obj); }