[MANUAL] Описание протоколов Lineage 2

Тема в разделе "Установка и настройка (Setup and configuration)", создана пользователем root, 24 авг 2014.

  1. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    1. Общие сведения:
    Каждый пакет состоит из размера пакета (2 байта), типа пакета(1 байт) и блока параметров(переменная длина). В дополнение к этому, в пакетах сервера авторизации, в конце добавляется контрольная сумма и дополняется нулями так, чтобы размер пакета был кратен 8-ми байтам. Контрольная сумма может быть рассчитана следующей функцией:
    Код:
    unsigned long checksum( unsigned char *packet, int count ){
       long chksum = 0L;
       for( int i = 0; i < count; i += 4 ) chksum ^= *((unsigned long *)&raw);
       return chksum;
    };
    Протокол Lineage использует 6 разных типов данных:
    char – может принимать значение от -128 до 127. Имеет длину 1 байт
    short – может принимать значение от -32768 до 32767. Имеет длину 2 байта
    int – может принимать значение от -2147483648 до 2147483647. Имеет длину 4 байта
    int64 – может принимать значение от -9223372036854775808 до 9223372036854775807. Имеет длину 8 байт.
    float – может принимать значение от 2.22507e-308 до 1.79769e+308. Имеет длину 8 байт
    string – текстовая строка в юникоде(UTF8). Каждая буква представлена двумя байтами, первый байтом код буквы, а второй –
    номер кодовой таблицы. Индикатором конца строки служит символ с кодом 0.

    Примечание: Для тех кто незнаком с принципом хранения данных в памяти ПК уточню, байты идут в обратном порядке. Т.е. если нам нужно записать
    в пакет число 10 представленное типом int, то мы должны:

    1) перевести его в шестнадцатеричную систему счисления – получим 00 00 00 0a
    2) обратить порядок байт в слове – получаем 0a 00 00 00

    Пакеты сервера авторизации шифруются по алгоритму Blowfish. Стандартный ключ по умолчанию в 4-х хрониках:
    5F 3B 35 2E 5D 39 34 2D 33 31 3D 3D 2D 25 78 54 21 5E 5B 24. К концу ключа прибавляется символ с кодом 0. В Interlude тип шифрования был изменен - пакет
    Init содержит динамический Blowfish ключ случайно генерируемый для каждого клиента. Этот пакет сначала шифруется по алгоритму XOR(ключ генерируется
    случайным образом и помещается в конце пакета), а потом шифруется по алгоритму Blowfish, статическим ключом. По умолчанию статический ключ -
    6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C. Все последующие пакеты будут шифроваться динамическим Blowfish ключом. Пакет LoginRequest дополнительно
    шифруется по алгоритму RSA. Ключ состоит из следующих частей: B = 1024, E = 65537, N = передается в пакете Init. Вместе эти 3 части составляют целый RSA
    ключ. Байты N в пакете зашифрованы функцией:
    Код:
    void scrambleMod( char *n ){
          typedef unsigned char byte;
          int i;
          for( i=0; i<4; i++ ) {
                byte temp = n[0x00 + i];
                n[0x00 + i] = n[0x4d + i];
                n[0x4d + i] = temp;
          };
          // step 2 xor first 0x40 bytes with last 0x40 bytes
          for( i=0; i<0x40; i++ ) {
                n = (byte)(n ^ n[0x40 + i]);
          };
          // step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
          for( i=0; i<4; i++ ) {
                n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
          };
          // step 4 xor last 0x40 bytes with first 0x40 bytes
          for( i=0; i<0x40; i++ ) {
                n[0x40 + i] = (byte)(n[0x40 + i] ^ n);
          };
    };
    Для расшифровки можно воспользоваться следующей функцией:
    Код:
    void unscrambleMod( char *n ){
          typedef unsigned char byte;
          int i;
          // step 4 xor last 0x40 bytes with first 0x40 bytes
          for( i=0; i<0x40; i++ ) {
                n[0x40 + i] = (byte)(n[0x40 + i] ^ n);
          };
          // step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
          for( i=0; i<4; i++ ) {
                n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
          };
          // step 2 xor first 0x40 bytes with last 0x40 bytes
          for( i=0; i<0x40; i++ ) {
                n = (byte)(n ^ n[0x40 + i]);
          };
          for( i=0; i<4; i++ ) {
                byte temp = n[0x00 + i];
                n[0x00 + i] = n[0x4d + i];
                n[0x4d + i] = temp;
          };
    };
    Также есть сервера использующие старый протокол авторизации(ревизия 785a) который не шифрует пакет Init, а остальные шифрует Blowfishключом длинной 21 байт. При этом пакет LoginRequest шифруется только по алгоритму Blowfish, без дополнительного шифрования RSA.
    Для шифрования пакетов гейм сервера используется алгоритм XOR. Ключ XOR генерируется случайно и передается клиенту в пакете CryptInit. Функции
    шифрования и дешифрации приведены ниже:
    Код:
    /* Декодирует данные */
    void decrypt( unsigned char *data, unsigned int len, unsigned char *Key )
    {
            int temp = 0;
            for( unsigned int i = 0; i < len; ++i ) {
                   int temp2 = data & 0xff;
                   data = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
                   temp = temp2;
            };
            int old = Key[8] & 0xff;
            old |= (Key[9] << 0x08) & 0xff00;
            old |= (Key[10] << 0x10) & 0xff0000;
            old |= (Key[11] << 0x18) & 0xff000000;
            old += len;
            Key[8] = old &0xff;
            Key[9] = (old >> 0x08) & 0xff;
            Key[10] = (old >> 0x10) & 0xff;
            Key[11] = (old >> 0x18) & 0xff;
    };
    /* Кодирует данные */
    void encrypt( unsigned char *data, unsigned int len, unsigned char *Key )
    {
            int temp = 0;
            for( unsigned int i = 0; i < len; i++) {
                   int temp2 = data & 0xff;
                   data = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
                   temp = data;
            };
            int old = Key[8] & 0xff;
            old |= (Key[9] << 0x08) & 0xff00;
            old |= (Key[10] << 0x10) & 0xff0000;
            old |= (Key[11] << 0x18) & 0xff000000;
            old += len;
            Key[8] = old &0xff;
            Key[9] = (old >> 0x08) & 0xff;
            Key[10] = (old >> 0x10) & 0xff;
            Key[11] = (old >> 0x18) & 0xff;
    };
    С каждым кодированным/декодированным пакетом ключ изменяется на длину пакета, поэтому нужно использовать два отдельных экземпляра ключа – один для
    шифрования исходящих пакетов, второй для расшифровки входящих.
    Все пакеты шифруются начиная с 3-го байта, т.е. размер пакета никогда не шифруется.

    Порядок авторизации на логин сервере:

    • Во первых сразу замечу что существует две ревизии протокола использующиеся на данный момент(может и больше но мне о них не известно) - c621 и 785a.
    • Отличие их в том что в c621 используется дополнительное шифрование и авторизация GameGuard. Пакеты Init и RequestAuthLogin также отличаются.
    • Определить версию можно по размеру пакета Init, для ревизии 785a он составляет 11 байт, для c621 – 170.

    1. Сразу после установки соединения сервер отправляет клиенту пакет Init
    2. В ответ на него клиент отправляет пакет RequestGGAuth(в ревизии протокола 785a этот пакет не высылается)
    3. Сервер отвечает на него пакетом GGAuth (в ревизии протокола 785a этот пакет не высылается)
    4. Если сервер ответил, что авторизация прошла успешно, то клиент высылает пакет RequestAuthLogin, содержащий логин и пароль.
    5. Проверка логина и пароля, в случае неудачи, сервер высылает пакет LoginFail содержащий причину неудачи, инатче высылается пакет LoginOk, содержащий session key #1.
    6. Далее клиент запрашивает список серверов пакетом RequestServerList
    7. В ответ на этот пакет сервер высылает клиенту ServerList, в нем содержиться список серверов и их IP адреса с номерами портов.
    8. После выбора game-сервера, и нажатия на ОК, клиент отсылает пакет RequestServerLogin
    9. Сервер авторизации выполняет проверки на максимальное количество игроков, доступность сервера и т.п., если все проверки пройдены, то высылает пакет PlayOk,содержащий session key #2, этот ключь генерируется из текущего времени системы в мс, номера сокета и еще всякой лабуды. После этого клиент отключается от логин сервера и подключается к гейм серверу.
    Порядок авторизации на гейм сервере:

    1. После установки соединения, клиент высылает пакет ProtocolVersion, содержащий версию протокола.
    2. Сервер высылает пакет CryptInit, содержащий XOR ключ которым будут шифроваться все следующие пакеты.
    3. Клиент высылает пакет AuthLogin выбраному серверу, содержащий session key #1, session key #2 и логин. При несовпадении с теми ключами и логином, что храняться на сервере авторизации клиент отключается.
    4. Сервер высылает пакет CharList, содержащий список всех чаров на аккаунте.
    5. Тут идет процесс создания/удаления и выбора чара, после того как чар выбран и нажата кнопка Start, клиент отправляет пакет CharacterSelected
    6. Клиент отправляет 2 пакета - RequestQuestList и RequestExManorList
    7. Сервер высылает пакет ExSendManorList
    8. Сервер высылает пакет QuestList
    9. Клиент отправляет пакет EnterWorld
    10. Сервер отправляет пакет UserInfo, который также служит сигналом окончания загрузки.
    11. Все мы в игре. Сервер с периодичностью 60 секунд высылает пакет NetPingRequest, на который клиент должен ответить пакетом NetPing
    В описании пакетов будут встречаться ObjectID и ItemID, ItemID это идентификатор типа предмета, например у авадон робы он 2406. А ObjectID это
    уникальный идентификатор самого предмета в игре. Например у двух чаров есть авадон роба, ItemID робы у каждого из них будет одинаковый - 2406, тогда
    как ObjectID будет уникальным.
     
  2. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    Пакеты от клиетна серверу (Login Server)

    2. Пакеты от клиетна серверу (Login Server):

    RequestAuthLogin

    Назначение: запрашивает авторизацию на логин сервере
    Формат для ревизии 0x785a:
    Код:
    00XX XX XX XX 00        // строка содержащая логин. Имеет длинну 14 байт и храниться в формате ASCII а не UNICODE !!!
    XX XX XX XX 00        // строка содержащая пароль. Имеет длинну 16 байт и храниться в формате ASCII а не UNICODE !!!
    08            // маркер конца секции логин/пароль
    00 00 00 00        // не используется
    00 00 00 00        // не используется
    Формат для ревизии 0xc621:
    Код:
    0000 00 00 00 ...        // Начало массива из 128 байт содержащих логин и пароль, и шифрующихся по алгоритму RSA
    ... (байты 94-107)    // строка содержащая логин. Имеет длинну 14 байт и храниться в формате ASCII а не UNICODE !!!
    ... (байты 108-124)    // строка содержащая пароль. Имеет длинну 16 байт и храниться в формате ASCII а не UNICODE !!!
    ... 00 00 00 00        // не используется. Конец массива
    Примечание: Некоторые сервера сверяют логин и пароль как массивы данных а не как строки, т.е. сверяются байты содержащиеся за символом с кодом0(признаком конца строки) поэтому убедитесь что неиспользуемые байты переменных где храняться логин и пароль содержат нули.

    RequestServerLogin


    Назначение: запрашивает подключение к гейм серверу
    Формат:
    Код:
    02
    XX XX XX XX        // SessionKey1 первая часть
    XX XX XX XX        // SessionKey1 вторая часть
    XX            // номер сервера
    RequestServerList

    Назначение: запрашивает список game серверов
    Формат:
    Код:
    05
    XX XX XX XX        // SessionKey1 часть 1
    XX XX XX XX        // SessionKey1 часть 2
    04 00 00 00        // хз
    RequestGGAuth


    Назначение: запрашивает Game Guard авторизицию
    Формат:
    Код:
    07
    XX XX XX XX        // ID сессии
    XX XX XX XX        // неизвестно
    XX XX XX XX        // неизвестно
    XX XX XX XX        // неизвестно
    XX XX XX XX        // неизвестно
    3. Пакеты от сервера клиенту (Login Server)

    Init

    Назначение: передает клиенту номер сессии и номер соединения, в случае ревизии c621 передается также модуль RSA ключа, и динамический токен
    (Используеться в Interlude, но по идее возможно и в более старых версиях хроник)
    Формат для ревизии протокола 0x785a:
    Код:
    00
    XX XX XX XX    // ID сессии
    XX XX XX XX    // Версия протокола 0x785a
    Формат для ревизии протокола 0xc621:
    Код:
    00
    XX XX XX XX    // ID сессии
    XX XX XX XX    // Версия протокола 0xc621
    XX XX XX XX ...    // 128 байт публичного ключа, которым в последствии клиент шифрует пакет RequestAuthLogin
    29 DD 95 4E     // \
    77 C3 9C FC     // | хз что
    97 AD B6 20     // |
    07 BD E0 F7     // /
    XX XX XX XX ... // 16 байт blowfish ключа которым шифруются все последующие пакеты
    00
    XX XX XX XX    // контрольная сумма пакета
    Пакет для Interlude содержит дополнительные 4 байта:
    Код:
    XX XX XX XX    // XOR ключ которым зашифрован пакет
    LoginFail

    Назначение: сообщает о неудачной попытке подключения к логин серверу
    Формат:
    Код:
    01
    XX XX XX XX    // причина неудачи:
            // 0x01 - системная ошибка
            // 0x02 - неправельный пароль
            // 0x03 - логин или пароль неверен
            // 0x04 - доступ запрещен
            // 0x05 - информация на аккаунте неверна(хз, наверно имеется ввиду ошибка в БД)
            // 0x07 - аккаунт уже используется
            // 0x09 - аккаунт забанен
            // 0x10 - на сервере идут сервисные работы
            // 0x12 - срок действия истек
            // 0x13 - на аккаунте не осталось больше времени (видимо NCSoft собирается или собиралось заморочить и почасовую оплату :)
    AccountKicked

    Назначение: сообщает клиенту, что аккаунт заблокирован
    Формат:
    Код:
    02
    XX XX XX XX    // причина неудачи:
            // 0x01 - data stealer
            // 0x08 - generic violation
            // 0x10 - прошло 7 дней (для trial акков ?)
            // 0x20 - Аккаунт забанен
    LoginOk
    Назначение: высылается в подтсверждение на пакет RequestAuthLogin, в случае успешной проверки логина и пароля.
    Формат:
    Код:
    03
    XX XX XX XX    // SessionKey1 первая часть
    XX XX XX XX    // SessionKey1 вторая часть
    00 00 00 00
    00 00 00 00
    EA 03 00 00
    00 00 00 00
    00 00 00 00
    02 00 00 00
    XX XX XX XX ... // массив из 16 байт, назначение неизвестно
    ServerList


    Назначение: передает клиенту список серверов и их состояние
    Формат:
    Код:
    04
    XX        // количество серверов в списке
    00        // неиспользуется или зарезервировано
    
    
    // Следующий блок повторяется для каждлого сервера в списке
    XX        // ID сервера
    XX XX XX XX    // IP аддрес гейм сервера
    XX XX XX XX    // порт сервера
    XX        // возрастной лимит
    XX        // PVP сервер: 00 - нет, 01 - да
    XX XX        // количество игроков онлайн
    XX XX        // максимальное количество игроков
    XX        // тестовый сервер: 00 - нет, 01 - да
    // Конец повторяющегося блока
    PlayFail

    Назначение: ответ на запрос авторизации на game-сервере
    Формат:
    Код:
    06
    XX XX XX XX    // причина отказа
            // 0x00000003 - Пароль не подходит к аккаунту
            // 0x00000004 - Access failed. Please try agen later
            // 0x0000000f - Слишком много пользователей
    PlayOk

    Назначение: ответ на запрос авторизации на game-сервере
    Формат:
    Код:
    07
    XX XX XX XX    // SessionKey2 первая часть
    XX XX XX XX    // SessionKey2 вторая часть
    GGAuth

    Назначение: ответ на запрос GameGuard авторизации
    Формат:
    Код:
    0B
    XX XX XX XX    // ответ:
            // 0x0B - Пропустить авторизацию
     
  3. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    Пакеты от сервера клиенту (Game Server)

    4. Пакеты от сервера клиенту (Game Server):

    CryptInit


    Назначение: передает клиенту ключ шифрования(XOR)
    Формат:
    Код:
    00
    01         // неизветсно
    XX XX XX XX ...    // Массив длинной 16 байт - ключ XOR
    01 00 00 00    // неизветсно
    01 00 00 00    // неизветсно
    MoveToLocation

    Назначение: сообщает клиенту что чар переместился
    Формат:
    Код:
    01
    XX XX XX XX    // ID объекта
    XX XX XX XX    // Точка назначения X
    XX XX XX XX    // Точка назначения Y
    XX XX XX XX    // Точка назначения Z
    XX XX XX XX    // Текущее положение X
    XX XX XX XX    // Текущее положение Y
    XX XX XX XX    // Текущее положение Z
    UserInfo


    Назначение: сообщает клиенту статы персоонажа
    Формат:
    Код:
    04
    XX XX XX XX           // координата x местоположения чара
    XX XX XX XX           // координата y местоположения чара
    XX XX XX XX           // координата z местоположения чара
    XX XX XX XX           // угол поворота головы
    XX XX XX XX           // ObjectID чара
    XX XX XX XX 00 00      // строка с именем чара
    XX XX XX XX           // идентификатор рассы
    XX XX XX XX           // пол чара 0 - Male  1 - female
    XX XX XX XX           // идентификатор класса
    XX XX XX XX           // уровень
    XX XX XX XX           // Exp
    XX XX XX XX           // STR
    XX XX XX XX          // DEX
    XX XX XX XX          // CON
    XX XX XX XX           // INT
    XX XX XX XX           // WIT
    XX XX XX XX           // MEN
    XX XX XX XX          // Максимальное HP
    XX XX XX XX           // Текущее HP
    XX XX XX XX           // Максимальное MP
    XX XX XX XX           // Текущее MP
    XX XX XX XX           // SP
    XX XX XX XX           // Текущий вес загрузки
    XX XX XX XX           // Максимальный вес загрузки
    28 00 00 00           // неизвестно
    XX XX XX XX           // ObjectID Underware
    XX XX XX XX           // ObjectID Rear
    XX XX XX XX          // ObjectID Left rear
    XX XX XX XX           // ObjectID Neckless
    XX XX XX XX          // ObjectID Right ring
    XX XX XX XX           // ObjectID Left ring
    XX XX XX XX           // ObjectID Helmate
    XX XX XX XX           // ObjectID Right hand
    XX XX XX XX           // ObjectID Left hand
    XX XX XX XX           // ObjectID Gloves
    XX XX XX XX           // ObjectID Main armor
    XX XX XX XX           // ObjectID Leggings
    XX XX XX XX           // ObjectID Boots
    XX XX XX XX           // ObjectID Back
    XX XX XX XX           // ObjectID Left right hand
    XX XX XX XX           // ObjectID Hair
    XX XX XX XX           // ObjectID Face
    XX XX XX XX           // ItemID Underware
    XX XX XX XX           // ItemID Rear
    XX XX XX XX           // ItemID Left rear
    XX XX XX XX           // ItemID Neckless
    XX XX XX XX           // ItemID Right ring
    XX XX XX XX           // ItemID Left ring
    XX XX XX XX           // ItemID Helmate
    XX XX XX XX           // ItemID Right hand
    XX XX XX XX           // ItemID Left hand
    XX XX XX XX           // ItemID Gloves
    XX XX XX XX           // ItemID Main armor
    XX XX XX XX           // ItemID Leggings
    XX XX XX XX           // ItemID Boots
    XX XX XX XX           // ItemID Back
    XX XX XX XX          // ItemID Left right hand
    XX XX XX XX          // ItemID Hair
    XX XX XX XX         // ItemID Face
    ...             // массив из 136 нулей, назначение неизвестно
    XX XX XX XX         // PAtk
    XX XX XX XX         // PAtk speed
    XX XX XX XX          // PDef
    XX XX XX XX          // Evasion
    XX XX XX XX         // Accuracy
    XX XX XX XX         // Critical
    XX XX XX XX          // MAtk
    XX XX XX XX         // CastSpeed
    XX XX XX XX          // Atk speed (?)
    XX XX XX XX          // MDef
    XX XX XX XX         // Состояние ПВП (0=нефлагнутый 1=флагнутый)
    XX XX XX XX         // Карма
    XX XX XX XX         // скорость бега
    XX XX XX XX         // скорость шага
    XX XX XX XX        // скорость плаванья с включеным режимом бега
    XX XX XX XX         // скорость плаванья с включеным режимом ходьбы
    XX XX XX XX         // _flRunSpd
    XX XX XX XX           // _flWalkSpd
    XX XX XX XX         // Скорость полета с включеным режимом бега
    XX XX XX XX           // Скорость полета с включеным режимом ходьбы
    XX XX XX XX XX XX XX XX // Move x (тип float)
    XX XX XX XX XX XX XX XX // Atk speed x (тип float)
    XX XX XX XX XX XX XX XX // Радиус чара - по этой величине сервер проверяет столкнивение с другими объектами (тип float)
    XX XX XX XX XX XX XX XX // Высота чара - по этой величине сервер проверяет столкнивение с другими объектами (тип float)
    XX XX XX XX           // Стиль прически
    XX XX XX XX           // Цвет волос
    XX XX XX XX           // Тип лица
    XX XX XX XX           // уровень доступа (0 - обычный чар, 1 и выше - ГМ)
    XX XX XX XX 00 00      // строка с титулом чара
    XX XX XX XX           // идентификатор клана
    XX XX XX XX           // идентификатор значка клана
    XX XX XX XX           // идентификатор альянса
    XX XX XX XX           // идентификатор значка альянса
    XX XX XX XX           // флаги осады
    XX XX XX XX           // 0=нет 1=на страйдере 2=на виверне
    XX XX XX XX           // тип магазина(Private Store Type)
    XX XX XX XX           // может ли чар крафтить вещи ? (0=нет, 1=да)
    XX XX XX XX           // Количество PK
    XX XX XX XX           // Количество PVP
    XX XX            // Количество зассамоненых кубиков
    
    // Данный блок повторяется в зафисимости от количества кубиков
    XX XX            // ID кубика
    // конец повторяющегося блока
    
    XX            // 1-find party members?
    XX XX XX XX           // Набор флагов состояния персоонажа(Abnormal effect)
    00            //
    XX XX XX XX           // Клановые привилегии
    XX XX            // Количество оставшихся рекомендаций
    XX XX            // Количество очков рекомендаций у персоонажа
    00 00 00 00        //
    XX XX XX XX        // Размер инвентаря(максимальное кол-во предметов)
    XX XX XX XX        // ID класса персоонажа
    XX XX XX XX        // Эффект вокруг игрока (Effect arround player)
    XX XX XX XX        // Максимальное CP
    XX XX XX XX        // CP
    XX            // Уровень заточки
    XX            // Круг указывающий на команду, вокруг игрока (0=нету, 1=синий, 1=красный)
    XX XX XX XX        // ID большой иконки клана(используется на клановых щитах)
    XX            // Нублес ?
    XX            // Геройство ?
    XX            // Рыбачим ?
    XX XX XX XX        // Fish x
    XX XX XX XX        // Fish y
    XX XX XX XX        // Fish z
    XX XX XX XX        // Цвет имени в формате RGB(0x00RRGGBB, где R-уровень красного, G-зеленого, а B-синего цвета)
    XX            // Бег включен ?
    XX XX XX XX        // Clan class
    00 00 00 00        //
    XX XX XX XX        // Цвет титула в формате RGB(0x00RRGGBB, где R-уровень красного, G-зеленого, а B-синего цвета)
    XX XX XX XX        // Уровень проклятого оружия
    StatusUpdate

    Назначение: сообщает клиенту об изменении статов объекта
    Формат:
    Код:
    0E
    XX XX XX XX    // ID объекта у которого изменились статы
    XX XX XX XX    // количество статов в списке
    
    // Следующий блок повторяется столько раз, сколько статов в списке
    XX XX XX XX    // идентификатор стата, может принимать следующие значения:
            // 0x00000001 - Уровень
            // 0x00000002 - Exp
            // 0x00000003 - STR
            // 0x00000004 - DEX
            // 0x00000005 - CON
            // 0x00000006 - INT
            // 0x00000007 - WIT
            // 0x00000008 - MEN
            // 0x00000009 - Текущее HP
            // 0x0000000a - Максимальное HP
            // 0x0000000b - Текущее MP
            // 0x0000000c - Максимальное MP
            // 0x0000000d - SP
            // 0x0000000e - Текущий уровень переносимого веса
            // 0x0000000f - Максимальный уровень переносимого веса
            // 0x00000010 - ?
            // 0x00000011 - PAtk
            // 0x00000012 - Patk Speed
            // 0x00000013 - PDef
            // 0x00000014 - Evasion
            // 0x00000015 - Accuracy
            // 0x00000016 - Critical
            // 0x00000017 - MAtk
            // 0x00000018 - Cast speed
            // 0x00000019 - MDef
            // 0x0000001a - Флаг PVP
            // 0x0000001b - Карма
            // 0x00000021 - Текущее CP
            // 0x00000022 - Максимальное CP
    XX XX XX XX    // Новое значение стата
    // конец повторяющегося блока
    Примечание: Чтобы клиент обновил статы, нужно отправить как минимум 2 параметра(проверялось на клиенте Interlude)

    AuthLoginFail

    Назначение: сообщает клиенту game-сервер отверг запрос на подключение
    Формат:
    Код:
    14        // и/или 12 ???
    XX XX XX XX    // Причина:
            // 0x00 - Текста нет
            // 0x01 - Системная ошибка
            // 0x02 - Пароль не соответствует аккаунту (причем тут тут game server ??? ему пароль даже не высылается Oo)
            // 0x03 - Пароль не соответствует аккаунту (опять 25, корейцы млин)
            // 0x04 - Попытка доступа неудачна, попробуйте позже.
            // 0x05 - Неверный аккаунт, свяжитесь с службой поддержки
            // 0x06 - Попытка доступа неудачна, попробуйте позже.(что-то у них многовато кодов на одну ошибку)
            // 0x07 - Аккаунт уже используется(это вроде тоже логин сервер проверять должен)
            // 0x08 - Попытка доступа неудачна, попробуйте позже.
            // 0x09 - Попытка доступа неудачна, попробуйте позже.
            // 0x10 - Попытка доступа неудачна, попробуйте позже.
    CharList

    Назначение: содержит список всех чаров на аккаунте
    Формат:
    Код:
    13
    XX XX XX XX        // Количество чаров на аккаунте
    
                // <<<<< Следующий блок повторяется столько раз, сколько чаров на акке.
    XX XX XX XX 00 00    // строка содержащее ник чара
    XX XX XX XX        // ID чара
    XX XX XX XX    00 00    // строка с логином
    XX XX XX XX        // ID чара
    XX XX XX XX        // SessionID
    XX XX XX XX        // ID клана
    00 00 00 00        // неизвестно
    XX XX XX XX        // пол (0x00 - мужчина, 0х01 - женщина
    XX XX XX XX        // расса
    XX XX XX XX        // класс
    XX XX XX XX        // активный.(?)
    XX XX XX XX        // X - не используется
    XX XX XX XX        // Y - не используется
    XX XX XX XX        // Z - не используется
    XX XX XX XX XX XX XX XX    // текущее HP (число храниться в формате double)
    XX XX XX XX XX XX XX XX    // текущее МP (число храниться в формате double)
    XX XX XX XX        // SP
    XX XX XX XX XX XX XX XX    // EXP (тип __int64)
    XX XX XX XX        // уровень
    XX XX XX XX        // карма
    XX XX XX XX ...        // массив из 36 нулей, назначение неизвестно
    XX XX XX XX        // ItemObjectID Under
    XX XX XX XX        // ItemObjectID REar
    XX XX XX XX        // ItemObjectID LEar
    XX XX XX XX        // ItemObjectID Neck
    XX XX XX XX        // ItemObjectID RFinger
    XX XX XX XX        // ItemObjectID LFinger
    XX XX XX XX        // ItemObjectID Head
    XX XX XX XX        // ItemObjectID RHand
    XX XX XX XX        // ItemObjectID LHand
    XX XX XX XX        // ItemObjectID Gloves
    XX XX XX XX        // ItemObjectID Chest
    XX XX XX XX        // ItemObjectID Legs
    XX XX XX XX        // ItemObjectID Feet
    XX XX XX XX        // ItemObjectID Back
    XX XX XX XX        // ItemObjectID LRHand
    XX XX XX XX        // ItemObjectID Hair
    XX XX XX XX        // ItemID Under
    XX XX XX XX        // ItemID REar
    XX XX XX XX        // ItemID LEar
    XX XX XX XX        // ItemID Neck
    XX XX XX XX        // ItemID RFinger
    XX XX XX XX        // ItemID LFinger
    XX XX XX XX        // ItemID Head
    XX XX XX XX        // ItemID RHand
    XX XX XX XX        // ItemID LHand
    XX XX XX XX        // ItemID Gloves
    XX XX XX XX        // ItemID Chest
    XX XX XX XX        // ItemID Legs
    XX XX XX XX        // ItemID Feet
    XX XX XX XX        // ItemID Back
    XX XX XX XX        // ItemID LRHand
    XX XX XX XX        // ItemID Hair
    XX XX XX XX        // прическа
    XX XX XX XX        // цвет волос
    XX XX XX XX        // тип лица
    XX XX XX XX XX XX XX XX    // максимальное HP (число храниться в формате double)
    XX XX XX XX XX XX XX XX    // максимальное МP (число храниться в формате double)
    XX XX XX XX        // время до удаления чара в секундах. Если 0, то чар не поставлен на удаление
    XX XX XX XX        // ID класса(базового ?)
    XX XX XX XX        // используется клиентом для определения чара которым последний раз заходили, у него тут 1, у остальных - 0
    XX            // уровень заточки пушки
    XX XX XX XX        // augmentation id
    CharCreateOk

    Назначение: сообщает клиенту что создание чара успешно завершено
    Формат:
    Код:
    19
    01
    CharCreateFail

    Назначение: сообщает клиенту что попытка создания чара завершилась неудачей
    Формат:
    Код:
    1A
    XX XX XX XX    // Причина:
            // Creation Failed
            // Слишком много чаров на акке
            // Имя чара уже существует
            // Имя слишком длинное или содержит запрещенные символы
    CharDeleteOk

    Назначение: сообщает клиенту что удаление чара прошло успешно
    Формат:
    Код:
    23
    CharDeleteFail

    Назначение: сообщает клиенту что удаление чара завершилось неудачей
    Формат:
    Код:
    24
    ActionFailed

    Назначение: уведомляет клиента что его последний запрос не может быть удовлетворен
    Формат:
    Код:
    25
    ChangeWaitType

    Назначение: сообщает клиенту что чар изменил wait тип(незнаю как это лучше на русский перевести :-/ Короче по параметрам понятоно что это такое)
    Формат:
    Код:
    2F
    XX XX XX XX    // ID чара
    XX XX XX XX    // wait тип:
            // 00 - сидеть
            // 01 - стоять
            // 02 - fake death
            // 03 - отменить fake death
    XX XX XX XX    // X
    XX XX XX XX    // Y
    XX XX XX XX    // Z
    TeleportToLocation

    Назначение: сообщает клиенту что чар телепортировался
    Формат:
    Код:
    38
    XX XX XX XX    // ID чара
    XX XX XX XX    // X
    XX XX XX XX    // Y
    XX XX XX XX    // Z
    ChangeMoveType

    Назначение: сообщает клиенту что чар изменил тип перемещения
    Формат:
    Код:
    3E
    XX XX XX XX    // ID чара
    XX XX XX XX    // 00 - хотьба, 01 - бег
    00 00 00 00    // C2
    LogoutOK

    Назначение: сообщает клиенту что разрешение покинуть игру дано. Служит ответом на пакет клиента Logout
    Формат:
    Код:
    7E
    QuestList

    Назначение: сообщает клиенту список квестов и квестовых предметов
    Формат:
    Код:
    80
    XX XX        // Количество квестов
    
    // Этот блок повторяется столько раз, сколько взятых квестов у чара
    XX XX XX XX    // ID квеста
    00 00 00 00    // число показывающее стадию выполнения, на которой находится квест
    // конец повторяющегося блока
    
    XX XX        // Количество квестовых предметов
    
    // Этот блок повторяется столько раз, сколько квестовых предметов у чара
    XX XX XX XX    // ItemID предмета
    XX XX XX XX    // ObjectID предмета
    XX XX XX XX    // Количество предметов этого типа
    05 00 00 00    // неизвестно
    // конец повторяющегося блока
    ServerSocketClose

    Назначение: сообщает клиенту что сервер закрывает подключение
    Формат:
    Код:
    AF
    00 00 00 00    //
    NetPingRequest

    Назначение: пингует клиента. Примерно раз в минуту, если клиент не ответил на этот пакет, пакетом NetPing, клиент отключаеться.
    Формат:
    Код:
    D3
    XX XX XX XX    // идентификатор пинга. Вроде как генерируется случайно
    ChairSit

    Назначение: сообщает клиенту что чар сел
    Формат:
    Код:
    E1
    XX XX XX XX    // ID объекта
    XX XX XX XX    // Static object ID
    ExSendManorList

    Назначение: сообщает клиенту зоны манора
    Формат:
    Код:
    FE
    1B 00
    XX XX XX XX    // Количество зон манора
    
    // Следующий блок повторяется столько раз, сколько зон манора
    XX XX XX XX        // ID зоны манора
    XX XX XX XX 00 00    // Строка содержащая название зоны манора
    // конец повторяющегося блока
     
  4. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    Пакеты от клиетна серверу (Game Server)

    5. Пакеты от клиетна серверу (Game Server):

    ProtocolVersion

    Назначение: передает версию протокола используемого клиентом серверу
    Формат:
    Код:
    00
    XX XX XX XX        // Версия протокола
    MoveBackwardToLocation

    Назначение: запрос на перемещение чара
    Формат:01
    XX XX XX XX // Координата X точки назначения
    XX XX XX XX // Координата Y точки назначения
    XX XX XX XX // Координата Z точки назначения
    XX XX XX XX // Координата X текущего положения чара
    XX XX XX XX // Координата Y текущего положения чара
    XX XX XX XX // Координата Z текущего положения чара
    XX XX XX XX // 00 - для движения используеться клавиатура, 01 - для движения используется мышь[/CODE]Say

    Назначение: отправляет сообщение другим игрокам
    Формат:
    Код:
    02
    XX XX XX XX 00 00    // Cтрока сообщения
    XX XX XX XX        // Тип сообщение
                // 0x00 - ALL
                // 0x01 - SHOUT ( ! )
                // 0x02 - TELL ( " )
                // 0x03 - PARTY ( # )
                // 0x04 - CLAN ( @ )
                // 0x05 - GM
                // 0x06 - PETITION_PLAYER
                // 0x07 - PETITION_GM
                // 0x08 - TRADE ( + )
                // 0x09 - ALLIANCE ( $ )
                // 0x0A - ANNOUNCEMENT
                // 0x0F - PARTYROOM_ALL ( желтый )
                // 0x10 - PARTYROOM_COMMANDER ( синий )
                // 0x11 - Голос героя
    XX XX XX XX 00 00    // Для приватных сообщений. Содержит ник чара которому предназначено сообщение.
    EnterWorld

    Назначение: пакет, который отсылается клиентом когда клиент закончил загрузку мира
    Формат:
    Код:
    03
    Action

    Назначение: пакет, который отсылается клиентом при клике мышью по НПЦ или другому чару
    Формат:
    Код:
    04
    XX XX XX XX        // ID объекта
    XX XX XX XX        // Координата X положения чара
    XX XX XX XX        // Координата Y положения чара
    XX XX XX XX        // Координата Z положения чара
    XX            // 00 - просто клик, 01 - клик с зажатым шифтом
    AuthRequest

    Назначение: запрос авторизации на game сервере
    Формат:
    Код:
    08
    XX XX XX XX        // SessionKey2 часть 2(дается логин сервером)
    XX XX XX XX        // SessionKey2 часть 1(дается логин сервером)
    XX XX XX XX        // SessionKey1 часть 2(дается логин сервером)
    XX XX XX XX        // SessionKey1 часть 1(дается логин сервером)
    Logout

    Назначение: запрашивает у сервера разрешение на выход из игры
    Формат:
    Код:
    09
    AttackRequest

    Назначение: запрос на атаку
    Формат:
    Код:
    0A
    XX XX XX XX        // ID того, кого собираемся атаковать
    XX XX XX XX        // X координата позиции чара
    XX XX XX XX        // Y координата позиции чара
    XX XX XX XX        // Z координата позиции чара
    XX XX XX XX        // 0 - Ctrl не нажат, 1 - Ctrl нажат
    CharacterCreate

    Назначение: запрос на создание чара
    Формат:
    Код:
    0B
    XX XX XX XX 00 00    // Строка с именем чара
    XX XX XX XX        // Расса
    XX XX XX XX        // Пол
    XX XX XX XX        // Класс
    XX XX XX XX        // INT
    XX XX XX XX        // STR
    XX XX XX XX        // CON
    XX XX XX XX        // MEN
    XX XX XX XX        // DEX
    XX XX XX XX        // WIT
    XX XX XX XX        // Стиль волос
    XX XX XX XX        // Цвет волос
    XX XX XX XX        // Тип лица
    CharacterDelete

    Назначение: ставит чара на удаление
    Формат:
    Код:
    0C
    XX XX XX XX        // Номер слота с чаром
    CharacterSelected

    Назначение: выбирает чара. Отсылается при клике на чара в меню выбора чара.
    Формат:
    Код:
    0D
    XX XX XX XX        // Номер слота с чаром
    RequestItemList

    Назначение: запросить список вещей находящихся в инвентаре.(клиент открывает инвентарь, когда сервер высылает этот список)
    Формат:
    Код:
    0F
    RequestUnEquipItem

    Назначение: Снимает эквип с чара
    Формат:
    Код:
    11
    XX XX XX XX        // Номер слота
    RequestDropItem

    Назначение: запрос за дроп итема. Отправляется клиентом, при попытке выбросить из инвентаря какую-либо вещь
    Формат:
    Код:
    12
    XX XX XX XX        // ID итема который хотим выбросить
    XX XX XX XX        // количество итемов которое мы хотим выбросить
    XX XX XX XX        // X кордината места в которое выбрасываем итем
    XX XX XX XX        // Y кордината места в которое выбрасываем итем
    XX XX XX XX        // Z кордината места в которое выбрасываем итем
    UseItem

    Назначение: запрос на использование итема
    Формат:
    Код:
    14
    XX XX XX XX        // ID объекта
    TradeRequest

    Назначение: запрос торговлю.
    Формат:
    Код:
    15
    XX XX XX XX        // ID объекта с которым хотим торговать
    AddTradeItem

    Назначение: добавляет итем в трейд лист.
    Формат:
    Код:
    16
    XX XX XX XX        // ID трейда
    XX XX XX XX        // ID объекта
    XX XX XX XX        // количество
    TradeDone

    Назначение: запрос на завершение торговли.
    Формат:
    Код:
    17
    XX XX XX XX        // 0 - отменить сделку, 1 - подтвердить сделку
    RequestSocialAction

    Назначение: вызывает анимацию социальных действий вроде смеха и т.п.
    Формат:
    Код:
    1B
    XX XX XX XX        // Номер экшина
                // 0x02 - Greeting
                // 0x03 - Victory
                // 0x04 - Advance
                // 0x05 - No
                // 0x06 - Yes
                // 0x07 - Bow
                // 0x08 - Unaware
                // 0x09 - Social Waiting
                // 0x0A - Laugh
                // 0x0B - Applaud
                // 0x0C - Dance
                // 0x0D - Sorrow
                // 0x0F - Анимация как при lvl-up
                // 0x10 - Анимация героев
    ChangeMoveType

    Назначение: включает/выключает бег
    Формат:
    Код:
    1C
    XX XX XX XX        // 0 - бег выключен, 1 - бег включен
    ChangeWaitType

    Назначение: сесть/встать
    Формат:
    Код:
    1D
    XX XX XX XX        // 0 - сесть, 1 - встать
    RequestTargetCanceld

    Назначение: Отменяет таргет
    Формат:
    Код:
    1D
    RequestSellItem

    Назначение: Запрос на продажу вещей
    Формат:
    Код:
    1E
    XX XX XX XX        // ID списка покупок (list id)
    XX XX XX XX        // количество вещей которые нужно продать
    
    // <<< Блок повторяется столько раз, сколько разных вещей нужно купить
    XX XX XX XX        // ObjectID предмета который нужно продать
    XX XX XX XX        // ItemID предмета который нужно продать
    XX XX XX XX        // количество предметов которые нужно продать
    // конец повторяющегося блока
    RequestBuyItem

    Назначение: Запрос на покупку вещей
    Формат:
    Код:
    1F
    XX XX XX XX        // ID сиска покупок
    XX XX XX XX        // количество вещей которые нужно купить
    
    // <<< Блок повторяется столько раз, сколько разных вещей нужно купить
    XX XX XX XX        // ID предмета который нужно купить
    XX XX XX XX        // количество предметов которые нужно купить
    ...
    RequestBypassToServer

    Назначение: передает "bypass"(содержаться в HTML) команду серверу.
    Формат:
    Код:
    21
    XX XX XX XX 00 00    // строка с коммандой
    RequestJoinPledge

    Назначение: отправляет чару предложение вступить в клан.
    Формат:
    Код:
    24
    XX XX XX XX        // ID чара, которому высылается предложение
    RequestAnswerJoinPledge

    Назначение: ответ на предложение о вступлении в клан
    Формат:
    Код:
    25
    XX XX XX XX        // ответ: 00 - нет, 01 - да
    RequestWithdrawalPledge

    Назначение: выйти из клана
    Формат:
    Код:
    26
    RequestOustPledgeMember

    Назначение: удалить чара из клана
    Формат:
    Код:
    27
    XX XX XX XX 00 00    // строка с именем чара
    RequestJoinParty

    Назначение: предложить вступить в пати
    Формат:
    Код:
    29
    XX XX XX XX 00 00    // ник чара, которому отсылается предложение
    XX XX XX XX        // тип распределения предметов:
                // 0x00 - дроп получает подобравший его чар, споил - достается спойлеру
                // 0x01 - дроп распределяется случайным образом, споил - достается спойлеру
                // 0x02 - дроп и споил, распределяется случайным образом
                // 0x03 - дроп дается чарам по очереди, споил - достается спойлеру
                // 0x04 - дроп и споил, дается чарам по очереди
    RequestAnswerJoinParty

    Назначение: ответ на предложение вступить в пати
    Формат:
    Код:
    2A
    XX XX XX XX        // ответ: 00 - нет, 01 - да
    RequestWithDrawalParty

    Назначение: выйти из пати
    Формат:
    Код:
    2B
    RequestOustPartyMember

    Назначение: удалить чара из пати
    Формат:
    Код:
    2C
    XX XX XX XX 00 00    // строка с именем чара которого следует удалить
    RequestMagicSkillUse

    Назначение: использовать магический скилл
    Формат:
    Код:
    2F
    XX XX XX XX        // ID скилла
    XX XX XX XX        // состояние CTRL : 00 - отпущен, 01 - нажат
    XX XX XX XX        // состояние SHIFT: 00 - отпущен, 01 - нажат
    Appearing

    Назначение: Запрашивает возрождение чара после смерти. Вызывается после пакетов RequestRestartPoint и ValidatePosition
    Формат:
    Код:
    30
    RequestShortCutReg

    Назначение: Регестрирует ярлык на панеле быстрого доступа.
    Формат:
    Код:
    33
    XX XX XX XX        // Тип ярлыка
                // 0x01 - итем
                // 0x02 - скилл
                // 0x03 - действие
                // 0x04 - макрос
    XX XX XX XX        // идентификатор объекта выносимого на панель
    XX XX XX XX        // номер слота
    XX XX XX XX        // номер закладки
    XX XX XX XX        // неизвестно
    RequestShortCutDel

    Назначение: Удаляет ярлык с панели быстрого доступа.
    Формат:
    Код:
    35
    XX XX XX XX        // номер слота
    XX XX XX XX        // номер закладки
    Say2

    Назначение: отправляет сообщение другим игрокам
    Формат:
    Код:
    38
    XX XX XX XX 00 00    // Cтрока сообщения
    XX XX XX XX        // Тип сообщение
                // 0x00 - ALL
                // 0x01 - SHOUT ( ! )
                // 0x02 - TELL ( " )
                // 0x03 - PARTY ( # )
                // 0x04 - CLAN ( @ )
                // 0x05 - GM
                // 0x06 - PETITION_PLAYER
                // 0x07 - PETITION_GM
                // 0x08 - TRADE ( + )
                // 0x09 - ALLIANCE ( $ )
                // 0x0A - ANNOUNCEMENT
                // 0x0F - PARTYROOM_ALL ( желтый )
                // 0x10 - PARTYROOM_COMMANDER ( синий )
                // 0x11 - Голос героя
    XX XX XX XX 00 00    // Для приватных сообщений. Содержит ник чара которому предназначено сообщение.
    RequestPledgeMemberList

    Назначение: запросить список членов клана
    Формат:
    Код:
    3C
    RequestSkillList

    Назначение: запрашивает список изученных скилов
    Формат:
    Код:
    3F
    AnswerTradeRequest

    Назначение: ответ на трейд
    Формат:
    Код:
    40
    XX XX XX XX        // Ответ на трейд:  00 - отклонить, 01 - подтвердить
    RequestActionUse

    Назначение: выполняет действие
    Формат:
    Код:
    45
    XX XX XX XX        // Action ID (список не полный, экшинов там дофига)
                // 0x00 - Сесть/встать
                // 0x01 - Идти/бежать
                // 0x19 - Ансаммонить пета
                // 0x33 - General manufacture
                // 0x38 - Зазезть/слезть с страйдера (вирна ???)
    XX XX XX XX        // 00 - CTRL не нажат, 01 - CTRL нажат
    XX            // 01 - SHIFT не нажат, 01 - SHIFT нажат
    RequestRestart

    Назначение: возвращает в меню выбора чара
    Формат:
    Код:
    46
    ValidatePosition

    Назначение: вызывает перезагрузку данных, НПЦ, других игроков и прочее. Фактически вызывает телепортацию в текущие координаты игрока.
    Формат:
    Код:
    48
    XX XX XX XX        // X
    XX XX XX XX        // Y
    XX XX XX XX        // Z
    XX XX XX XX        // Направление взгляда
    XX XX XX XX        // ???
    StartRotating

    Назначение: Включает вращение чара вокруг своей оси
    Формат:
    Код:
    4A
    XX XX XX XX        // Угол (принимает значения от 0 до 65535)
    XX XX XX XX        // сторона ( 01 00 00 00 - вращение вправо, FF FF FF FF - вращение влево )
    FinishRotating

    Назначение: прекращает вращение чара вокруг своей оси
    Формат:
    Код:
    4B
    XX XX XX XX        // Неизвестно
    XX XX XX XX        // Неизвестно
    RequestStartPledgeWar

    Назначение: начать кланвар
    Формат:
    Код:
    4D
    XX XX XX XX 00 00    // строка с названием клана, которому объявляется кланвар
    RequestStartPledgeWar

    Назначение: закончить клан вар
    Формат:
    Код:
    4F
    XX XX XX XX 00 00    // строка с названием клана
    RequestGiveNickName

    Назначение: устанавить титул.
    Формат:
    Код:
    55
    XX XX XX XX 00 00    // строка содержащая ник чара которому требуется установить титул
    XX XX XX XX 00 00    // строка содержащая титул
    RequestEnchantItem

    Назначение: запрашивает энчат интема.
    Формат:
    Код:
    58
    XX XX XX XX        // ID итема который хотим заэнчатить
    RequestDestroyItem

    Назначение: запрос на уничтожение итема
    Формат:
    Код:
    59
    XX XX XX XX        // ID итема
    XX XX XX XX        // количество итемов?
    RequestFriendInvite

    Назначение: занести чара в френд лист
    Формат:
    Код:
    5E
    XX XX XX XX 00 00    // строка с именем чара, которого следует добавить
    RequestAnswerFriendInvite

    Назначение: ответ на предложение добавления в список друзей
    Формат:
    Код:
    5F
    XX XX XX XX        // 00 - нет, 01 - да
    RequestFriendList

    Назначение: запрос френдлиста
    Формат:
    Код:
    60
    RequestFriendDel

    Назначение: запрос на удаление чара из френд листа
    Формат:
    Код:
    61
    XX XX XX XX 00 00     // строка с именем чара, которого следует удалить
    CharacterRestore

    Назначение: отменяет удаление чара
    Формат:
    Код:
    62
    XX XX XX XX        // номер слота с чаром
    RequestQuestList

    Назначение: запросить список квестов
    Формат:
    Код:
    63
    RequestQuestAbort

    Назначение: прервать выполнение квеста
    Формат:
    Код:
    64
    XX XX XX XX        // ID квеста
    CharacterRestore

    Назначение: запрос информации о клане
    Формат:
    Код:
    66
    XX XX XX XX        // ID клана
    RequestPledgeCrest

    Назначение: устанавливает иконку клана
    Формат:
    Код:
    68
    XX XX XX XX        // ID иконки
    RequestRide

    Назначение: залезть/слезть на страйдера/вирна
    Формат:
    Код:
    6A
    XX XX XX XX        // 0 - слезть, 1 - залезть
    XX XX XX XX        // 1 - страйдер, 2 - вивирен
    RequestAquireSkillInfo

    Назначение: запрос информации о скилле
    Формат:
    Код:
    6B
    XX XX XX XX        // ID скилла
    XX XX XX XX        // уровень скилла
    RequestAquireSkill

    Назначение: запрос на изучение скилла
    Формат:
    Код:
    6C
    XX XX XX XX        // ID скилла
    XX XX XX XX        // уровень скилла
    RequestRestartPoint

    Назначение: запрашивает рестарт после смерти чара
    Формат:
    Код:
    6D
    XX XX XX XX        // точка в которую будет возвращен игрок
                // 0x00 - Город
                // 0x01 - Клан холл
                // 0x02 - Замок
                // 0x03 - Флаг (при осаде замка)
                // 0x04 - Ресс на месте на котором умер игрок, используется на фестивале
    RequestGMCommand

    Назначение: отсылает запрос на GM комманду
    Формат:
    Код:
    6E
    XX XX XX XX 00 00    // строка с именем чара - цели
    XX XX XX XX        // идентификатор комманды
                // 0x01 - статус игрока
                // 0x02 - клан игрока
                // 0x03 - скилы игрока
                // 0x04 - квесты игрока
                // 0x05 - инвентарь игрока
                // 0x06 - вархаус игрока
    XX XX XX XX        // неизвестно
    RequestPartyMatchConfig

    Назначение: открыть окно поиска пати
    Формат:
    Код:
    6F
    XX XX XX XX        // автомтическая регистрация: 00 - нет, 01 - да
    XX XX XX XX        // показывать уровень: 00 - нет, 01 - да
    XX XX XX XX        // показывать класс: 00 - нет, 01 - да
    RequestPartyMatchList

    Назначение: запросить список чаров ищущих пати
    Формат:
    Код:
    70
    XX XX XX XX        // статус может быть 1 и 3. Что значит наверняка, я не знаю.
    RequestPartyMatchDetail

    Назначение: запросить подробную информуцию о чаре ищущем пати
    Формат:
    Код:
    71
    XX XX XX XX        // ID чара
    RequestCrystallizeItem

    Назначение: запрос на кристализацию итема
    Формат:
    Код:
    72
    XX XX XX XX        // ID итема который нужно кристализовать
    XX XX XX XX        // количество итемов, которые нужно кристализовать
    SetPrivateStoreMsgSell

    Назначение: устанавливает сообщение на продажу для PrivateStore
    Формат:
    Код:
    77
    XX XX XX XX 00 00    // строка с сообщением
    RequestGmList

    Назначение: запрос списка GMов
    Формат:
    Код:
    81
    RequestJoinAlly

    Назначение: предложить вступить в альянс
    Формат:
    Код:
    82
    XX XX XX XX        // ID лидера клана, который приглашает в алли
    RequestAnswerJoinAlly

    Назначение: ответ на предложение вступления в альянс
    Формат:
    Код:
    83
    XX XX XX XX        // ответ: 00 - нет, 01 - да
    AllyLeave

    Назначение: покинуть альянс
    Формат:
    Код:
    84
    XX XX XX XX 00 00    // строка с названием клана
    AllyDismiss

    Назначение: запрос на роспуск альянса
    Формат:
    Код:
    85
    XX XX XX XX 00 00    // строка с именем клана
    RequestAllyCrest

    Назначение: запрос на установку иконки альянса
    Формат:
    Код:
    88
    XX XX XX XX        // ID иконки
    RequestChangePetName

    Назначение: меняет имя пета
    Формат:
    Код:
    89
    XX XX XX XX 00 00    // строка с новым именем пита
    RequestPetUseItem

    Назначение: команда питу использовать итем
    Формат:
    Код:
    8A
    XX XX XX XX        // ID объекта которых нужно использовать
    RequestGiveItemToPet

    Назначение: переместить итем из своего инвентаря в инвентарь пита
    Формат:
    Код:
    8B
    XX XX XX XX        // ID итема
    XX XX XX XX        // количество
    RequestGetItemFromPet

    Назначение: переместить итем из инвентаря пита к себе в инвентарь
    Формат:
    Код:
    8С
    XX XX XX XX        // ID итема
    XX XX XX XX        // количество
    XX XX XX XX        // фиг его знает. В большинстве случаев - 0
    RequestAllyInfo

    Назначение: запрос информации об альянсе.
    Формат:
    Код:
    8E
    RequestPetGetItem

    Назначение: команда питу поднять итем.
    Формат:
    Код:
    8F
    XX XX XX XX        // ID который надлежит поднять
    SetPrivateStoreMsgBuy

    Назначение: устанавливает сообщение на покупку для PrivateStore
    Формат:
    Код:
    94
    XX XX XX XX 00 00    // строка с сообщением
    RequestStartAllianceWar

    Назначение: объявить алли вар
    Формат:
    Код:
    98
    XX XX XX XX 00 00    // строка с именем альянса
    RequestStopAllianceWar

    Назначение: запрос о прекращении алли вар'а
    Формат:
    Код:
    9A
    XX XX XX XX 00 00    // строка с именем альянса
    RequestBlock

    Назначение: запрос операции над черным списком
    Формат:
    Код:
    A0
    XX XX XX XX        // тип запроса:
                // 0x00 - добавить чара в игнор
                // 0x01 - удалить чара из игнора
                // 0x02 - вывесли список чаров занесенных в игнор
                // 0x03 - игнор всех
                // 0x04 - отменить игнор всех
    XX XX XX XX 00 00    // строка с именем чара которого надо занести в игнор
    RequestSiegeAttackerList

    Назначение: запрашивает список записаных на осаду замка атакующих кланов
    Формат:
    Код:
    A2
    XX XX XX XX        // ID замка
    RequestJoinSiege

    Назначение: добавить/удалить клан в список осады замка
    Формат:
    Код:
    A4
    XX XX XX XX        // ID замка
    XX XX XX XX        // 00 - присоедениться к защитникам, 01 - присоедениться к атакующим
    XX XX XX XX        // 00 - удалить клан из списка, 01 - добавить клан в список
    RequestRecipeBookOpen

    Назначение: открыть книгу рецептов
    Формат:
    Код:
    NetPing

    Назначение: Отвечает на пакет сервера RequestNetPing
    Формат:
    Код:
    A8
    XX XX XX XX        // Это число берется из пакета RequestNetPing, отправляемого сервером
    XX XX XX XX        // Пинг
    RequestRecipeBookOpen

    Назначение: открыть книгу рецептов
    Формат:
    Код:
    RequestEvaluate

    Назначение: запрос на рекомендацию игрока
    Формат:
    Код:
    B9
    XX XX XX XX        // ID цели
    RequestHennaList

    Назначение: запросить список доступных татуировок
    Формат:
    Код:
    BA
    XX XX XX XX        // неизвестно
    RequestHennaItemInfo

    Назначение: получить информацию о татуировке
    Формат:
    Код:
    BB
    XX XX XX XX        // ID татуировки
    RequestHennaEquip

    Назначение: запрос на нанесение татуировки
    Формат:
    Код:
    BС
    XX XX XX XX        // ID татуировки которую нужно нанести
    RequestMakeMacro

    Назначение: запрос на создание макроса
    Формат:
    Код:
    С1
    XX XX XX XX        // ID макроса
    XX XX XX XX 00 00    // строка содержащая имя макроса
    XX XX XX XX 00 00    // строка с описанием макроса
    XX XX XX XX 00 00    // строка с текстом на иконке
    XX            // ID иконки
    XX            // количество строк
    
    // <<<<< Следующий блок повторяется столько раз, сколько строк в макросе.
    XX            // строка
    XX            // тип
    XX            // ID скилла
    XX            // ID ярлыка на панели
    XX XX XX XX 00 00    // имя команды
    // конец повторяющегося блока
    RequestDeleteMacro

    Назначение: запрос на удаление макроса
    Формат:
    Код:
    C2
    XX XX XX XX        // ID макроса
    RequestAutoSoulShot

    Назначение: включает/выключает использование AutoSS
    Формат:
    Код:
    CF
    XX XX XX XX        // идентификатор итема
    XX XX XX XX        // 1 - включить : 0 - выключить
    RequestExEnchantSkillInfo

    Назначение: запросить информацию о заточке скила
    Формат:
    Код:
    D0
    06
    00
    XX XX XX XX        // ID скила
    XX XX XX XX        // уровень скила
    RequestExEnchantSkill

    Назначение: запросить заточку скила
    Формат:
    Код:
    D0
    07
    00
    XX XX XX XX        // ID скила
    XX XX XX XX        // уровень скила
    RequestExManorList

    Назначение: запросить заточку скила
    Формат:
    Код:
    D0
    08
    00
    RequestExPledgeCrestLarge

    Назначение: запросить данные изображения большой иконки клана(те что размещаються на вещах клана типа щитов) клана
    Формат:
    Код:
    D0
    10
    XX XX XX XX        // ID иконки
    RequestExSetPledgeCrestLarge

    Назначение: отправить данные изображения большой иконки клана(те что размещаються на вещах клана типа щитов) на сервер
    Формат:
    Код:
    D0
    11
    XX XX XX XX        // размер данных
    
    // <<<<< Следующий блок повторяется столько раз, сколько байт в данных изображения
    XX            // данные изображения
    // конец повторяющегося блока
    RequestChangePartyLeader

    Назначение: передает лидерство в пати
    Формат:
    Код:
    EE
    XX XX XX XX 00 00    // строка с именем чара, которому передается лидерство