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

Любая версия GameDBd протокол

Тема в разделе 'PW Документация', создана пользователем Evgeniy, 22 дек 2013.

Статус темы:
Закрыта.
  1. TopicStarter Overlay

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

    Сообщения:
    113
    Лайки:
    120
    Репутация:
    0
    Команда:
    Ratio club
    GameDB daemon - один из демонов pw, его задача предоставлять внутриигровые данные (не относится к sql-данным аккаунта).
    GDB основан на встраиваемой базе данных Berkeley DB [1], что позволяет демону достаточно быстро оперировать данными.


    Протокол
    Общение с игровой базой осуществляется по строго определенному RPC-протоколу [2].
    Чтобы осуществить какую-либо операцию с игровой базой нужно знать опкод-пакета [3] и типы принимаемых аргументов, вызываемой функции. Тело RPC в pw выглядит следующим образом:
    Код:
    CUInt opcode;//opcode-процедуры (CUInt см. ниже)
    CUInt length;//количество байт, используемые для аргументов
    ...//аргументы
    
    Пример: Получить информацию о персонаже, зная его id (GetRoleData). Мы знаем что opcode этой операции = 8003, функция на входе получает sid и rid:
    Код:
    CUInt opcode = 8003;
    CUInt length = 8;
    Int32 sid = 1;
    Int32 rid = 1024;
    
    Зная опкоды и аргументы функций можно манипулировать данными игровой базы: от просмотра информации о персонаже/карты сражений, до внесения изменений в инвентарь и изменения списка друзей. Список разобранных протоколов участниками иследовательской ветви можно найти здесь
    Список опкодов v1.2.6
    Код:
    115 GetTaskDataRpc
    135 PutTaskDataRpc
    200 PutFriendList
    201 GetFriendList
    215 PutMessage
    216 GetMessage
    413 DBStockBalance
    414 DBStockTransaction
    415 DBStockLoad
    416 DBStockCommission
    417 DBStockCancel
    514 GetAddCashSN
    611 DBSellPoint
    612 DBSyncSellInfo
    613 DBSellTimeout
    614 DBSellCancel
    615 DBBuyPoint
    618 DBTransPointDeal
    810 DBAuctionOpen
    811 DBAuctionBid
    812 DBAuctionList
    813 DBAuctionGet
    814 DBAuctionTimeout
    815 DBAuctionClose
    863 DBBattleLoad
    864 DBBattleSet
    865 DBBattleChallenge
    868 DBBattleEnd
    871 DBBattleMail
    872 DBBattleBonus
    3001 PutUser
    3002 GetUser
    3003 DelUser
    3005 GetRole
    3006 DelRole
    3007 DBCreateRole
    3008 DBDeleteRole
    3009 DBUndoDeleteRole
    3012 PutRoleBase
    3013 GetRoleBase
    3014 PutRoleStatus
    3015 GetRoleStatus
    3016 PutRoleEquipment
    3017 GetRoleEquipment
    3018 PutRoleTask
    3019 GetRoleTask
    3020 TradeInventory
    3021 TradeSave
    3022 GetMoneyInventory
    3023 PutMoneyInventory
    3024 PutRole
    3025 GetRoleBaseStatus
    3026 PutRoleStorehouse
    3027 GetRoleStorehouse
    3030 PutRoleForbid
    3031 GetRoleForbid
    3032 GetUserRoles
    3033 GetRoleId
    3034 TransactionAcquire
    3035 TransactionAbort
    3036 TransactionCommit
    3043 ClearStorehousePasswd
    3044 RenameRole
    3047 CanChangeRolename
    3049 GetRoleInfo
    3050 PutRolePocket
    3051 GetRolePocket
    3100 DBSetCashPassword
    4047 PutSpouse
    4251 DBGetMailList
    4252 DBGetMail
    4253 DBGetMailAttach
    4254 DBSetMailAttr
    4255 DBSendMail
    4256 DBDeleteMail
    4600 AddFaction
    4601 DelFaction
    4602 AddMember
    4603 DelMember
    4604 UpdateUserFaction
    4605 UpdateFaction
    4606 GetFactionInfo
    4607 GetUserFaction
    4608 GetFactionDetail
    4609 DBVerifyMaster
    4610 DBFactionUpgrade
    4611 DBFactionPromote

    Типы данных используемых игровой базой:
    CUInt (Compact UInt) - особый китайский целочисленный без знаковый тип данных , не фиксированной длины, часто встречается в pw, чаще всего выступает размером чего-либо.
    Byte, Int16, Int32, UInt16, UInt32 - при общении с базой для целочисленных переменных она использует little-endian порядок байт [2]. Если же переменная является частью октета - то здесь напротив прямой порядок байт.
    Октеты - октеты (массив байт [3]) в gdb используются для хранения сериализованных другими демонами данными (напр. в GRoleStatus поле multi_exp_ctrl хранится в октетах, т.к. это тип сериализирован gs'ом, игровая база не знает о структуре этого типа). Тело октета выглядит так:
    Код:
    CUInt length; //в начале октета идет размер массива байт
    byte[length] data;//последовательность байт, в том количестве, что указанно в length
    Вектор - одномерный массив, индексация которого строго начинается с нуля [4]. В игровой базе ни раз встречается этот тип данных (прим. GRoleBase->Forbid). Здесь он выполняет роль массива для некоторых типов. Тело вектора:
    Код:
    CUint32 length;//Размер вектора
    T[length] data;//Массив этих типов 
    DateTime - время и дата хранятся в виде UNIX-timestamp (количество секунд прошедших с полуночи 1 января 1970 года [5]). Хранится время в UInt32 (прим. GRoleBase->create_time)
    TimeSpan - интервал времени, так же хранит количество секунд в UInt32 (прим. GRoleStatus->multi_exp_ctrl->enhance_time)
    Строки - строки в gdb сериализованны в виде октетов. Строки хранятся в Unicode'e
    Vorobey, DIABLO, DjonnyCeep и 10 другим нравится это.
Черновик сохранён Черновик удалён
Similar Threads
  1. Gibat

    Любая версия gamedbd

    Ответов:
    1
    Просмотров:
    2.157
  2. Strong
    Ответов:
    3
    Просмотров:
    4.079
  3. Fituchini
    Ответов:
    6
    Просмотров:
    1.470
  4. vasa199

    1.2.6 (1.3.4) GAMEDBD

    vasa199, 1 июн 2015, в разделе: PW Сервер
    Ответов:
    3
    Просмотров:
    1.829
  5. gosha1952
    Ответов:
    5
    Просмотров:
    2.075
Загрузка...
Статус темы:
Закрыта.

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