• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Мануал Опкоды пакетов и их структура

WindOfChange

Пляшущий с бубном
VIP
Участник Новогоднего Фонда 2023
Победитель в номинации 2023
Победитель в номинации 2022
Сообщения
73
Розыгрыши
0
Решения
2
Репутация
60
Реакции
21
Баллы
263
WindOfChange добавил(а) новый ресурс:

Опкоды пакетов и их структура - Поможет разобраться, что такое опкод пакета и найти его структуру

Периодически новички интересуются структурами пакетов, и как их найти, для этого подготовил эту статью.
Есть 2 типа пакетов, старые и новые. В последнее время корейцы начали делать только новые пакеты, но бывает, что и редактируют старые. Старые пакеты зашиты в engine.dll и без реверса на них не посмотреть. В данном посте рассмотрим только "новые пакеты"

Все новые пакеты зашиты в интерфейсе. Для ессенса это InterfaceClassic.u.
В классах:

UIPacket.uc (структура пакета)
UIProtocol.uc (опкод...

Узнать больше об этом ресурсе...
 

Он давно писал пример как отправлять данные в клиент с сервера...
C-подобный:
static function bool Decode_PaybackRewardItem(out _PaybackRewardItem packet)
{
    if(! DecodeInt(packet.nClassID))
    {
        return false;
    }
    if(! DecodeInt(packet.nAmount))
    {
        return false;
    }
    return true;
}

static function bool Decode_PaybackRewardSet(out _PaybackRewardSet packet)
{
    local int i, nSize;

    if(! DecodeInt(nSize))
    {
        return false;
    }
    packet.vItemList.Length = nSize;

    for(i = 0; i < packet.vItemList.Length; i++)
    {
        if(! Decode_PaybackRewardItem(packet.vItemList[i]))
        {
            return false;
        }
    }
    if(! DecodeChar(packet.cSetIndex))
    {
        return false;
    }
    if(! DecodeInt(packet.nRequirement))
    {
        return false;
    }
    if(! DecodeChar(packet.cReceived))
    {
        return false;
    }
    return true;
}

static function bool Decode_S_EX_PAYBACK_LIST(out _S_EX_PAYBACK_LIST packet)
{
    local int i, nSize;

    if(! DecodeInt(nSize))
    {
        return false;
    }
    packet.vRewardSet.Length = nSize;

    for (i = 0; i < packet.vRewardSet.Length; i++)
    {
        if(! Decode_PaybackRewardSet(packet.vRewardSet[i]))
        {
            return false;
        }
    }
    if(! DecodeChar(packet.cEventIDType))
    {
        return false;
    }
    if(! DecodeInt(packet.nEndDatetime))
    {
        return false;
    }
    if(! DecodeInt(packet.nConsumedItemclassID))
    {
        return false;
    }
    if(! DecodeInt(packet.nUserConsumption))
    {
        return false;
    }
    return true;
}

Java:
@Override
    public boolean write(PacketWriter packet)
    {
        OutgoingPackets.EX_PAYBACK_LIST.writeId(packet);
        packet.writeD(3); // колличество строк // string size //nSize
        for (int i = 1; i < 4; i++)
        {
            //заполняем строку //fill the string
            //start _PaybackRewardSet
            packet.writeD(3); // колличество предметов в строке // item count in field (max 3)//i
            for (int j = 1; j < 4; j++)

            //start _PaybackRewardItem
            //заполняем предметы //fill the items
            {
                packet.writeD(57); // предмет // item id
                packet.writeD(1); // количество // count
            }
            //закончили заполнять предметы // item fill end
            //end _PaybackRewardItem

            packet.writeC(i); // cSetIndex
            packet.writeD(5); // сколько нужно потратить // how much you need //nRequirement
            packet.writeC(0x00); //получена ли награда // check reward receiving ( 0x00 - no, 0x01 - yes ) //cReceived

            //закончили заполнять строку // end string fill
            //end _PaybackRewardSet
        }
        packet.writeC(_EventID);    //cEventIDType
        packet.writeD(10);  //nEndDatetime
        packet.writeD(91663);  //Итем, который должен светиться вверху // display item //nConsumedItemclassID
        packet.writeD(7);  //Сколько всего было потрачено итемов // summary item spend //nUserConsumption
        return true;
    }
1723662274519.png
 
Назад
Сверху Снизу