Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Tools (http://mangos.ytdb.ru/forumdisplay.php?f=22)
-   -   WoW Packet Viewer (http://mangos.ytdb.ru/showthread.php?t=4479)

TOM_RUS 18.05.2011 16:47

WoW Packet Viewer
 
Вложений: 2
Т.к. моя утилита по моему мнению недостаточно популярна, я решил создать данную тему :)

Проэкт на github (googlecode).

Скриншот:
http://ru-mangos.ru/attachment.php?a...3&d=1305724957

Возможности:
- парсинг пакетов любой сложности;
- возможность динамической компиляции парсеров / подгрузка уже скомпилированных сборок;
- простейший поиск по названию опкода;
- экспорт в текстовый формат (hexlike или распарсенный текст);
- ручной парсинг варден пакетов (только расшифрованных);

Пример простейшего парсера:
Код:

using WowTools.Core;

[Parser(OpCodes.SMSG_MOTD)]
class SMSG_MOTD : Parser
{
    public override void Parse()
    {
        For(ReadInt32("Lines count: {0}"), i => ReadCString("Line {0} text: {1}", i));
    }
}

Что-то более сложное:
Код:

using WowTools.Core;

[Parser(OpCodes.SMSG_CHAR_ENUM)]
class SMSG_CHAR_ENUM : Parser
{
    public override void Parse()
    {
        const int INVENTORY_SLOT_BAG_END = 23;

        For(ReadUInt8("Characters count: {0}"), i =>
            {
                ReadUInt64("Character {0} GUID: {1:X16}", i);
                ReadCString("Character {0} Name: {1}", i);
                ReadUInt8("Character {0} Race: {1}", i);
                ReadUInt8("Character {0} Class: {1}", i);
                ReadUInt8("Character {0} Gender: {1}", i);
                ReadUInt8("Character {0} Skin: {1}", i);
                ReadUInt8("Character {0} Face: {1}", i);
                ReadUInt8("Character {0} Hair Style: {1}", i);
                ReadUInt8("Character {0} Hair Color: {1}", i);
                ReadUInt8("Character {0} Facial Hair: {1}", i);
                ReadUInt8("Character {0} Level: {1}", i);
                ReadUInt32("Character {0} Zone: {1}", i);
                ReadUInt32("Character {0} Map: {1}", i);
                ReadSingle("Character {0} X: {1}", i);
                ReadSingle("Character {0} Y: {1}", i);
                ReadSingle("Character {0} Z: {1}", i);
                ReadUInt32("Character {0} Guild Id: {1}", i);
                ReadUInt32("Character {0} Flags: 0x{1:X8}", i);
                ReadUInt32("Character {0} Customize Flags: 0x{1:X8}", i);
                ReadUInt8("Character {0} First Login?: {1}", i);
                ReadUInt32("Character {0} Pet Display Id: {1}", i);
                ReadUInt32("Character {0} Pet Level: {1}", i);
                ReadUInt32("Character {0} Pet Family: {1}", i);

                For(INVENTORY_SLOT_BAG_END, j =>
                    {
                        ReadUInt32("Character {0} Item {1} Display Id: {2}", i, j);
                        ReadUInt8("Character {0} Item {1} Inventory Type: {2}", i, j);
                        ReadUInt32("Character {0} Item {1} Enchant Aura: {2}", i, j);
                    });
            });
    }
}

Для запуска требуется Microsoft .NET Framework 4.0.

Йоха 20.05.2011 15:31

Цитата:

ReadSingle("Character {0} Y: {1}", i);
а что за тип данных Single ?

Lordronn 20.05.2011 15:41

float

RomanRom2 20.05.2011 16:31

да, просто есть еще и double :) который 64бит (сингл - 32бит). не знаю, в си есть флоат 64х битный?

Йоха 20.05.2011 16:36

ну про float и double я знаю, а вот про сингл впервые слышу

TOM_RUS 20.05.2011 17:42

Цитата:

Сообщение от Йоха (Сообщение 22722)
ну про float и double я знаю, а вот про сингл впервые слышу

Single
Floating point
ReadSingle()

Chameleon 15.07.2011 14:45

Хорошая утилита. Я сделал форк на гитхабе с целью обновления для 4.2 и небольших изменений под себя.

Evgeniy 04.06.2013 16:33

Возможно обновить до версии пкт 3.1?


Текущее время: 22:22. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS