Пример #1
0
        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;
                }
            }
        }