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

Любая версия Как достать информацию по персонажу

Тема в разделе 'PW Web', создана пользователем Vorobey, 20 фев 2018.

  1. TopicStarter Overlay

    Vorobey Пользователи

    Сообщения:
    13
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Albania Albania
    Всем привет!
    Знаю немного php, и начал интересоваться как взаимодействует сайт-сервер, и немного запутался, а точнее - не понимаю связь пакетов, шифраций...

    Вот например, я хочу достать максимум информации по персонажу, как это реализовать, имея просто ид персонажа?

    Нашел "пример работы с пакетами"
    http://pwdev.ru/index.php?title=Примеры_работы_с_пакетами

    Там вначале страницы генерируется запрос как я понимаю
    PHP:
    $GetRoleBase = new WritePacket();
    $GetRoleBase -> WriteUInt32(-1); // always 
    $GetRoleBase -> WriteUInt32(1024); // roleid
    $GetRoleBase -> Pack(0xBC5); // opcode
    Данные преобразуются с помощью WriteUInt32
    PHP:
    public function WriteUInt32($value)
    {
        
    $this -> request .= pack("N"$value);
    }
    И самое последнее и самое интересное, это "опкод".
    PHP:
    $GetRoleBase -> Pack(0xBC5); // opcode
    Это я так понимаю "команда" серверу, что я хочу взять инфу о персонаже? Именно: 0xBC5 этот код?...
    Если да, то где можно взять список этих опкодов?

    Спасибо за любые ответы
  2. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Никаких "шифраций" тут нет, просто формируются пакеты по определенной структуре (она зависит от типа пакета, который отправляется, и на каждый тип пакета - своя структура ответа).
    Структура пакетов на геймдб практически всегда такого вида:
    Код:
    CUInt PacketID;
    int queryid; // тут обычно отправляют число 2147483648
    CUInt PacketLength;
    дальше идут параметры по структуре запроса этого пакета

    Ответ приходит в таком виде:
    Код:
    CUInt PacketID;
    CUInt PacketLenght;
    int localsid;
    int retcode;
    дальше идут параметры по структуре ответа этого пакета
    Структуры пакетов, а также их айди вытягивают через gdb и отладочную информацию в нужном сервисе. Примеры формирования запросов и обработки ответов есть на форуме.
    Penelope, Vorobey и san4e3 нравится это.
  3. lukacho B L A C K    L I S T Пользователи

    Сообщения:
    537
    Лайки:
    156
    Пол:
    Мужской
    Репутация:
    -1
    Команда:
    XXXX
    Страна:
    Georgia Georgia
    Пакет GetRoleData всю информацию которую только можно получить о персонаже.
    http://mmorpg-devs.ru/attachments/packets-zip.4191/
    Vorobey нравится это.
  4. Mr.Fleks Модератор Команда форума Модератор Old school Пользователи

    Сообщения:
    722
    Лайки:
    368
    Пол:
    Мужской
    Репутация:
    11
    Тоже интересно более подробнее узнать, так-как ленив разбираться в google
    В основном брал код с морга и тыкал пальцем в небо перебирая опкоды и прочее
    Иногда тыкал несколько часов, получалось, но как изначально составить правильный запрос не знаю

    Когда пытался получить первый ник персонажа каждого аккаунта:
    2018-02-20_20-59-05.png

    Честно за ответ спасибо, но вплоть своего не профессионализма на уме только " Смотришь в книгу - видишь фигу "
    Но этот очередной пинок может кто-то поймет :)
    Vorobey нравится это.
  5. TopicStarter Overlay

    Vorobey Пользователи

    Сообщения:
    13
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Albania Albania
    Немного начинаю понимать, но все-же на примере было бы понятнее.

    Взял для примера пакет для просмотра информации о игроке
    0x1F43 http://pwdev.ru/index.php?title=GetRoleDataRes
    Вот пример кода, который работает
    PHP:
    include 'ReadPacket.php';

    $GetRoleData = new WritePacket();
    $GetRoleData -> WriteUInt32(-1); // always
    $GetRoleData -> WriteUInt32(1024); // roleid
    $GetRoleData -> Pack(0x1F43); // opcode
    if (!$GetRoleData -> Send("localhost"29400)) // send to gamedbd
        
    return;

    $GetRoleData_Re = new ReadPacket($GetRoleData);
    $GetRoleData_Re -> ReadPacketInfo();
    $GetRoleData_Re -> ReadUInt32(); // -1
    $GetRoleData_Re -> ReadUInt32(); // retcode

    $GRoleData['base']['version']            = $GetRoleData_Re -> ReadUByte();
    $GRoleData['base']['id']                = $GetRoleData_Re -> ReadUInt32();
    $GRoleData['base']['name']                = $GetRoleData_Re -> ReadUString();
    $GRoleData['base']['race']                = $GetRoleData_Re -> ReadUInt32();

    var_dump($GRoleData);
    И выдаёт мне результат:

    Все вроде-бы хорошо, но мне не понятно откуда узнать, какие данные передать, и какие я получу...

    PHP:
    $GetRoleData = new WritePacket();
    $GetRoleData -> WriteUInt32(-1); // что это за параметр, и почему он первый
    $GetRoleData -> WriteUInt32(1024); // Этот второй
    $GetRoleData -> Pack(0x1F43); // opcode
    PHP:

    $GetRoleData_Re 
    = new ReadPacket($GetRoleData);
    $GetRoleData_Re -> ReadPacketInfo();
    $GetRoleData_Re -> ReadUInt32(); // -1
    $GetRoleData_Re -> ReadUInt32(); // retcode

    $GRoleData['base']['version']            = $GetRoleData_Re -> ReadUByte();// где узнать список послеодовательностей полей, которые приходят в $GetRoleData_Re
    $GRoleData['base']['id']                = $GetRoleData_Re -> ReadUInt32();
    $GRoleData['base']['name']                = $GetRoleData_Re -> ReadUString();
    $GRoleData['base']['race']                = $GetRoleData_Re -> ReadUInt32();
    Спасибо
    --- добавлено: 20 фев 2018 в 22:25 ---
    Вот например на pwdev нашел пакет, который по идее отправляет анонс.
    http://pwdev.ru/index.php?title=OnlineAnnounce
    • Тип: пакет (ProtocolType)
    • Сервис: gdeliveryd
    • Опкод: 0x4
    Тип данных Название
    int userid
    int localsid
    int remain_time
    byte zoneid
    int free_time_left
    int free_time_end
    int creatime
    byte referrer_flag
    byte passwd_flag
    byte usbbind
    byte accountinfo_flag


    Как мне его использовать, имея такой шаблон?
    PHP:
    $GetRoleData = new WritePacket();
    $GetRoleData -> WriteUInt32(-1); // always
    $GetRoleData -> WriteUInt32(1024); // roleid
    $GetRoleData -> Pack(0x1F43); // opcode
    Это было бы отличным примером, спасибо
    Последнее редактирование модератором: 14 апр 2018
  6. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Ну во первых - для деливери немного другой шаблон будет, и там есть один важный нюанс - после коннекта к деливери надо первым делом принять пакет, а только потом уже делать отправку своего и получение ответа. А по поводу примера - чем не нравится пример с RoleBase, который выше? Я уже написал чем и откуда тянуть структуры все, если все разжевать и поискать за тебя - ничему так не научишься. Тут уже надо пробовать делать самому и изучать информацию, это самый правильный подход, чтобы научиться.
    Penelope и Mr.Fleks нравится это.
  7. lukacho B L A C K    L I S T Пользователи

    Сообщения:
    537
    Лайки:
    156
    Пол:
    Мужской
    Репутация:
    -1
    Команда:
    XXXX
    Страна:
    Georgia Georgia
    Ну на pwdev для каждого пакета есть инфа,что нужно отправить и что отправляет сервер отправителю.
    [​IMG] [​IMG] [​IMG]
    Ну и даже если не трогать pwdev,все структуры есть в ядре.Открываем ядро в ida pro и делаем следующее File->Produce File->Create C Header File
    После чего открываем gs.h и находим следующее:[​IMG]
    Далее ищем в файле "RoleData"и приходим к той же структуре: [​IMG]
    Penelope и Vorobey нравится это.
  8. Mr.Fleks Модератор Команда форума Модератор Old school Пользователи

    Сообщения:
    722
    Лайки:
    368
    Пол:
    Мужской
    Репутация:
    11
    Структуру вытянуть не составляет труда, а вот правильно составить запрос, чтобы получить нужный ответ это совсем другое.
    Примерное понятие работы с соктетами тоже немного понял, но все же, если не составит труда объяснить:
    Такие понятие как Res и Arg, а собственно что должно быть в начале, а что на выходе ( Как я понимаю Arg принимает Res отвечает)
    Что такое CallID, как описано выше типа пакета, но о чем это говорит? Для не опытного в данной каше... ниочем ну или переводчик который говорит что это вызов\запрос ID
    и прочие нюансы, которые сочтешь предоставить публике. Лично мне интересно данное направление, но некоторые нюансы связанные с нашей сферой не везде опишут и требуется помощь всевышнего, который познал искусство ДЗЕН
    Лично когда я в тупике, я не сочту выходом бежать на морг и писать вопросик, пробегусь по скайпу, попрошу помощь, никто не знает или не отвечают? Значит придется отложить и вернуться через месяц другой со свежей головой
  9. alexdnepro Эксперт AngeliCore Пользователи Open Source Contributor White List

    Сообщения:
    754
    Лайки:
    1.313
    Пол:
    Мужской
    Репутация:
    6
    Не везде есть приставки Arg и Res, а там где есть да - одна структура для запроса, другая - для ответа
    Это список всех пакетов, который поддерживает сервис с их айди. Из названия пакета можно примерно понять, для чего он нужен, дальше по этому названию нужно искать структуру самого пакета, она не всегда называется точно так же, да и поиск там регистрозависимый, но это дело практики. И как уже писал выше, некоторые структуры из 2-х частей. Включаем логику и копаем структуры. Приведу простой пример: нам нужен пакет GetRoleStatus, нашли его опкод, в параметрах у него по логике должен быть RoleID, а в ответе структура GRoleStatus, аналогично с GetRoleBase. Удачного копания сервисов)
    Penelope, Vorobey и Mr.Fleks нравится это.
  10. TopicStarter Overlay

    Vorobey Пользователи

    Сообщения:
    13
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Albania Albania
  11. lukacho B L A C K    L I S T Пользователи

    Сообщения:
    537
    Лайки:
    156
    Пол:
    Мужской
    Репутация:
    -1
    Команда:
    XXXX
    Страна:
    Georgia Georgia
    Естественно на сервере.Они должны быть и в exe но из него ничего полезного не извлечь.
    Файл на сервере home/gamed/gs
    Mr.Fleks нравится это.
  12. JonMagon Программист Пользователи Open Source Contributor

    Сообщения:
    805
    Лайки:
    809
    Пол:
    Мужской
    Репутация:
    5
    Страна:
    Germany Germany
    Denis-root и Penelope нравится это.
  13. LuisAzevedo Пользователи

    Сообщения:
    13
    Лайки:
    9
    Репутация:
    0
    Anyone here can consider post how to find out what octet use in packets that needs an octet? Such as exp bonus and similar.
  14. lukacho B L A C K    L I S T Пользователи

    Сообщения:
    537
    Лайки:
    156
    Пол:
    Мужской
    Репутация:
    -1
    Команда:
    XXXX
    Страна:
    Georgia Georgia
    Logic.
  15. LuisAzevedo Пользователи

    Сообщения:
    13
    Лайки:
    9
    Репутация:
    0
Черновик сохранён Черновик удалён
Similar Threads
  1. rdsmedia
    Ответов:
    3
    Просмотров:
    1.261
  2. Стас Назаренко
    Ответов:
    4
    Просмотров:
    1.849
  3. #define
    Ответов:
    9
    Просмотров:
    12.652
  4. MrMiZ
    Ответов:
    7
    Просмотров:
    2.075
  5. Hopewake.
    Ответов:
    7
    Просмотров:
    1.450
Загрузка...

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