1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

1.4.4 попытка разобрать хекс игровой базы (список кланов)

Тема в разделе 'PW Вопросник', создана пользователем wsok, 15 фев 2015.

  1. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Код:
    function ParseGuildPacket(Data: DByteArray): GuildInfo;
    var Offset, PacketLength, Count, i: Cardinal;
    begin
      Offset := 0;
      DecodeCUInt(Data, Offset);
      if CheckPacketLength(Data, Offset, PacketLength) then begin //внутри функции читается длина пакета
        Inc(Offset, 8); //Сдвиг позиции чтения на 8 байт вперёд
        Result.ID := ReadUInt32(Data, true, Offset);
        Result.Name := ReadWideString(Data, Offset);
        Result.LVL := ReadByte(Data, Offset);
        Result.MasterID := ReadUInt32(Data, true, Offset);
        Result.Desc := StringReplace(ReadWideString(Data, Offset), '_', ' ', [rfReplaceAll, rfIgnoreCase]);
        Count := ReadUInt16(Data, true, Offset);
        SetLength(Result.Guildsmen, Count);
        if Count > 0 then for i := 0 to Count - 1 do begin
          Result.Guildsmen[i].ID := ReadUInt32(Data, true, Offset);
          Result.Guildsmen[i].Level := ReadByte(Data, Offset);
          Result.Guildsmen[i].Cls := ReadByte(Data, Offset);
          Result.Guildsmen[i].Rank := ReadByte(Data, Offset);
          Inc(Offset, 3); //Сдвиг позиции чтения на 3 байта вперёд
          Result.Guildsmen[i].Name := ReadWideString(Data, Offset);
          Result.Guildsmen[i].Title := ReadWideString(Data, Offset);
          Inc(Offset, 4); //Сдвиг позиции чтения на 4 байта вперёд
        end;
      end;
    end;
    
    Не углублялся в данные, которые пропускал при чтении. Работает, не трогаю.
    При вызове функции ReadWideString в начале читается длина строки в CUInt.
  2. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    в общем чуточку начал понимать, теперь волнует метод поиска нужной записи по ключу, уже мозг сломал...

    Код:
    $bdname = 'factioninfo';
    $bdlen = pack("n*", strlen($bdname)+32768);
    $data = pack('N', -1) . $bdlen . $bdname.pack('N', 1);
        $Socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
        $Data = cuint(3055).cuint(strlen($data)).$data;
    в общем как бы пытаюсь найти клан с айди 1... но эффекта нет...
    --- добавлено: 17 фев 2015 в 19:58 ---
    ну или так

    Код:
    $sendpacket = new WritePacket();
    $sendpacket -> WriteUInt32(-1);
    $sendpacket -> WriteUString("factioninfo"); // table
    $sendpacket -> WriteOctets(""); // handler
    $sendpacket -> WriteOctets(""); // key
    $sendpacket -> Pack(3055);
    все равно непонятно как пользоваться поиском через ключ
    Последнее редактирование модератором: 25 фев 2015
  3. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Ответ содержится в вопросе - достаточно указать ключ в параметрах запроса.
  4. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    указывал, например искал по 1024, т.е. по ид мастера клана, но толку не было, все равно показывал 3 клана (т.е. их всего 3 на сервере)
  5. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    Получай весь буфер и парси его в MySQL. А то, что нужно уже доставай оттуда.
  6. JonMagon Программист Пользователи Open Source Contributor

    Сообщения:
    805
    Лайки:
    809
    Пол:
    Мужской
    Репутация:
    5
    Страна:
    Germany Germany
    Также непонятно, чем является ключ. ID записи или ID номера клана, а может вообще другое?
    wsok нравится это.
  7. vieraw Пользователи

    Сообщения:
    54
    Лайки:
    27
    Репутация:
    0
    Если не ошибаюсь, то ключ для FactionInfo является id клана, для других таблиц другие ключи.
    JonMagon нравится это.
  8. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    практически во всех таблицах ключ - это id нужного ресурса (персонаж, клан, аккаунт и т.д.), но т.к. в качестве key пакету нужен октет - формировать его нужно по всем правилам - cuint длинна октета, а дальше сами данные (id).
    Например:
    WriteByte(4); - размер инта
    WriteUInt(FactionID); - тело октета
    Последнее редактирование: 17 фев 2015
    JonMagon и wsok нравится это.
  9. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    тогда HANDLE чем является и формируется тоже как октет кея?
  10. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Тип параметра Handle (как и всех остальных) известен из структуры - дальше постарайся побольше разбираться сам, а не сразу задавать вопросы.
    Последнее редактирование: 19 фев 2015
  11. Merfy Пользователи

    Сообщения:
    367
    Лайки:
    189
    Пол:
    Мужской
    Репутация:
    -1
    Команда:
    mmo-dev.com
    пжлст не отвечайте wsok, он вроде взрослый адекватный мужик, но спрашивает такую есрись, что даже школьники из 2/б/ делают фейспалм
    10000 и int 3 нравится это.
Черновик сохранён Черновик удалён
Similar Threads
  1. chetoss
    Ответов:
    40
    Просмотров:
    13.395
  2. New-X
    Ответов:
    5
    Просмотров:
    1.747
  3. wsok
    Ответов:
    21
    Просмотров:
    2.901
  4. Dimka))))
    Ответов:
    14
    Просмотров:
    2.377
  5. Roymike
    Ответов:
    32
    Просмотров:
    4.810
Загрузка...

Поделиться этой страницей