Тема: creaturecache.wdb
Показать сообщение отдельно
Старый 10.12.2013, 05:50   #9
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Как все красиво в кэше
в хендлере пакета идет вот так
Код:
        [Parser(Opcode.SMSG_CREATURE_QUERY_RESPONSE)]
        public static void HandleCreatureQueryResponse(Packet p)
        {
            var entry = p.ReadUInt32("Entry");
            var hasData = p.ReadBit("Has Data");

            var maleLen = new uint[4];
            var femaleLen = new uint[4];
            var subNameLen = 0u;
            var unk505Len = 0u;
            var iconNameLen = 0u;
            var questItemCount = 0u;
            if (hasData)
            {
                for (var i = 0; i < 4; ++i)
                {
                    maleLen[i] = p.ReadBits(11);
                    femaleLen[i] = p.ReadBits(11);
                }
                questItemCount = p.ReadBits(22);
                iconNameLen = p.ReadBits("Icon name size", 6);
                subNameLen = p.ReadBits("Sub name size", 11);
                unk505Len = p.ReadBits("unk505 len", 11);
                p.ReadBit("Is racial leader");
            }
            if (hasData)
            {
                p.ReadInt32("Type");
                p.ReadInt32("Kill Credit 1");
                p.ReadInt32("Model Id 4");
                p.ReadInt32("Model Id 3");

                for (var i = 0; i < questItemCount; ++i)
                    p.ReadInt32("Quest Item", i);

                p.ReadInt32("Expansion Unk");

                for (var i = 0; i < 4; ++i)
                {
                    if (femaleLen[i] > 1)
                        p.ReadCString("Name Female", i);
                    if (maleLen[i] > 1)
                        p.ReadCString("Name Male", i);
                }

                if (unk505Len > 1)
                    p.ReadCString("Unk505");

                p.ReadSingle("Mana Mod");
                p.ReadInt32("Model Id 1");
                if (iconNameLen > 1)
                    p.ReadCString("Icon Name");
                p.ReadInt32("Kill Credit 0");
                p.ReadInt32("Model Id 2");
                if (subNameLen > 1)
                    p.ReadCString("Subname");
                for (var i = 0; i < 2; ++i)
                    p.ReadUInt32("Type Flags", i);
                p.ReadSingle("Health Mod");
                p.ReadInt32("Family");
                p.ReadInt32("Rank");
                p.ReadInt32("Movement Id");
            }
        }
причем близы, если строка пустая, шлют либо 0 либо 1 рандомом, строки всегда null-terminated

Последний раз редактировалось Amaru; 10.12.2013 в 05:55.
Amaru вне форума   Ответить с цитированием