static void DeserializeObject(WORLDMSG msgID, BinReader data) { string str = data.ReadString(); Type type = dbTypes.GetType(str); if (type == null) { throw new Exception("Failed to deserialize " + str + ": type == null"); } uint ObjectID = data.ReadUInt32(); DBObject obj = GetDBObject(type, ObjectID); if (obj != null) { obj.Deserialize(data); // we will probably never deserialized an existing object Console.WriteLine("woooah! WorldServer deserialized a " + str + " that already exists. Notify something!"); } else { obj = (DBObject)Activator.CreateInstance(type); obj.Deserialize(data); AddDBObject(obj); } if (type == typeof(DBCharacter)) { int n = data.ReadInt32(); DBCharacter c = (DBCharacter)obj; if (n > 0) { c.Items = new DBItem[n]; for (int i = 0; i < n; i++) { ObjectID = data.ReadUInt32(); DBItem item = (DBItem)GetDBObject(typeof(DBItem), ObjectID); if (item == null) { item = new DBItem(); item.Deserialize(data); AddDBObject(item); } else { item.Deserialize(data); } item.Template = (DBItemTemplate)GetDBObject(typeof(DBItemTemplate), item.TemplateID); if (item.Template == null) { Console.WriteLine("Missing Item Template " + item.TemplateID); } c.Items[i] = item; } } else { c.Items = null; } } }