<?php

/*
 * @author Harris Marfel <hrace009@gmail.com>
 * @link https://www.hrace009.com
 * @copyright Copyright (c) 2021.
 */

$PROTOCOL = [
    'code' => [
        'getUserRoles' => 3401,
        'getRole' => 8003,
        'putRole' => 8002,
        'getUser' => 3002,
        'getRoleStatus' => 3015,
        'putRoleStatus' => 3014,
        'getRoleBase' => 3013,
        'putRoleBase' => 3012,
        'getRoleInventory' => 3053,
        'putRoleInventory' => 3052,
        'getRoleEquipment' => 3017,
        'putRoleEquipment' => 3016,
        'getRoleStoreHouse' => 3027,
        'putRoleStoreHouse' => 3026,
        'getRoleTask' => 3019,
        'putRoleTask' => 3018,
        'sendMail' => 4214,
        'territoryWar' => 873,
        'worldChat' => 120,
        'forbidAcc' => 5035,
        'forbidRole' => 360,
        'muteAcc' => 362,
        'muteRole' => 356,
        'getRoleid' => 3033,
        'renameRole' => 3404,
        'getTerritory' => 863,
        'getRoleFriend' => 201,
        'AddFaction' => 4600,
        'DelFaction' => 4601,
        'getFactionInfo' => 4606,
        'getUserFaction' => 4607,
        'getFactionDetail' => 4608,
        'FactionUpgrade' => 4610,
        'GFactionFortressDetail' => 4404,
        'GetCashTotal' => 3058,
        'gmRestartServer' => 358,
        'gmRestartServerRe' => 359,
    ],
    'role' => [
        'base' => [
            'version' => 'byte',
            'id' => 'int',
            'name' => 'name',
            'race' => 'int',
            'cls' => 'int',
            'gender' => 'byte',
            'custom_data' => 'octets',
            'config_data' => 'octets',
            'custom_stamp' => 'int',
            'status' => 'byte',
            'delete_time' => 'int',
            'create_time' => 'int',
            'lastlogin_time' => 'int',
            'forbidcount' => 'cuint',
            'forbid' => [
                'type' => 'byte',
                'time' => 'int',
                'createtime' => 'int',
                'reason' => 'name',
            ],
            'help_states' => 'octets',
            'spouse' => 'int',
            'userid' => 'int',
            'cross_data' => 'octets',
            'reserved2' => 'byte',
            'reserved3' => 'byte',
            'reserved4' => 'byte',
        ],
        'status' => [
            'sversion' => 'byte',
            'level' => 'int',
            'level2' => 'int',
            'exp' => 'int',
            'sp' => 'int',
            'pp' => 'int',
            'hp' => 'int',
            'mp' => 'int',
            'posx' => 'float',
            'posy' => 'float',
            'posz' => 'float',
            'worldtag' => 'int',
            'invader_state' => 'int',
            'invader_time' => 'int',
            'pariah_time' => 'int',
            'reputation' => 'int',
            'custom_status' => 'octets',
            'filter_data' => 'octets',
            'charactermode' => 'octets',
            'instancekeylist' => 'octets',
            'dbltime_expire' => 'int',
            'dbltime_mode' => 'int',
            'dbltime_begin' => 'int',
            'dbltime_used' => 'int',
            'dbltime_max' => 'int',
            'time_used' => 'int',
            'dbltime_data' => 'octets',
            'storesize' => 'short',
            'petcorral' => 'octets',
            'property' => 'octets',
            'var_data' => 'octets',
            'skills' => 'octets',
            'storehousepasswd' => 'octets',
            'waypointlist' => 'octets',
            'coolingtime' => 'octets',
            'npc_relation' => 'octets',
            'multi_exp_ctrl' => 'octets',
            'storage_task' => 'octets',
            'faction_contrib' => 'octets',
            'force_data' => 'octets',
            'online_award' => 'octets',
            'profit_time_data' => 'octets',
            'country_data' => 'octets',
            'king_data' => 'octets',
            'meridian_data' => 'octets',
            'extraprop' => 'octets',
            'title_data' => 'octets',
            'reincarnation_data' => 'octets',
            'realm_data' => 'octets',
            'reserved2' => 'byte',
            'reserved3' => 'byte',
        ],
        'pocket' => [
            'icapacity' => 'int',
            'timestamp' => 'int',
            'money' => 'int',
            'invcount' => 'cuint',
            'inv' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
            'reserved6' => 'int',
            'reserved7' => 'int',
        ],
        'equipment' => [
            'eqpcount' => 'cuint',
            'eqp' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
        ],
        'storehouse' => [
            'capacity' => 'int',
            'money' => 'int',
            'storecount' => 'cuint',
            'store' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
            'size1' => 'byte',
            'size2' => 'byte',
            'dresscount' => 'cuint',
            'dress' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
            'materialcount' => 'cuint',
            'material' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
            'size3' => 'byte',
            'generalcardcount' => 'cuint',
            'generalcard' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
            'reserved' => 'short',
        ],
        'task' => [
            'task_data' => 'octets',
            'task_complete' => 'octets',
            'task_finishtime' => 'octets',
            'task_inventorycount' => 'cuint',
            'task_inventory' => [
                'id' => 'int',
                'pos' => 'int',
                'count' => 'int',
                'max_count' => 'int',
                'data' => 'octets',
                'proctype' => 'int',
                'expire_date' => 'int',
                'guid1' => 'int',
                'guid2' => 'int',
                'mask' => 'int',
            ],
        ],
    ],
    'octet' => [
        'var_data' => [
            'version' => 'lint',
            'pk_count' => 'lint',
            'pvp_cooldown' => 'lint',
            'pvp_flag' => 'byte',
            'dead_flag' => 'byte',
            'is_drop' => 'byte',
            'resurrect_state' => 'byte',
            'resurrect_exp_reduce' => 'float',
            'instance_hash_key1' => 'lint',
            'instance_hash_key2' => 'lint',
            'trashbox_size' => 'lint',
            'last_instance_timestamp' => 'lint',
            'last_instance_tag' => 'lint',
            'last_instance_pos' => [
                'x' => 'float',
                'y' => 'float',
                'z' => 'float',
            ],
            'dir' => 'lint',
            'resurrect_hp_factor' => 'float',
            'resurrect_mp_factor' => 'float',
        ],
        'property' => [
            'id' => 'lint',
            'hp' => 'lint',
            'mp' => 'lint',
            'damage_low' => 'lint',
            'damage_high' => 'lint',
            'damage_magic_low' => 'lint',
            'damage_magic_high' => 'lint',
            'defense' => 'lint',
            'resistance' => [
                1 => 'int',
                2 => 'int',
                3 => 'int',
                4 => 'int',
                5 => 'int',
            ],
            'attack' => 'lint',
            'armor' => 'lint',
            'attack_speed' => 'lint',
            'run_speed' => 'lint',
            'attack_degree' => 'lint',
            'defend_degree' => 'lint',
            'damage_reduce' => 'lint',
            'prayspeed' => 'lint',
            'crit_damage_bonus' => 'lint',
            'invisible_degree' => 'lint',
            'anti_invisible_degree' => 'lint',
        ],
        'force_data' => [
            'cur_force_id' => 'int',
            'forcecount' => 'cuint',
            'force' => [
                'force_id' => 'int',
                'reputation' => 'int',
                'contribution' => 'int',
            ],
        ],
        'faction_contrib' => [
            'consume_contrib' => 'lint',
            'exp_contrib' => 'lint',
            'cumulate_contrib' => 'lint',
        ],
        'title_data' => [
            'cur_title_id' => 'lshort',
            /*'titlecount' => 'cuint',
            'unk1' => 'lshort',
            'title' => array(
                'title_id' => 'short',
            ),*/
        ],
        'meridian_data' => [
            'lvl' => 'int',
            'life_dot' => 'int',
            'die_dot' => 'int',
            'free_up' => 'int',
            'paid_up' => 'int',
            'login_time' => 'int',
            'login_days' => 'int',
            'trigrams_map1' => 'int',
            'trigrams_map2' => 'int',
            'trigrams_map3' => 'int',
            'reserved1' => 'int',
            'reserved2' => 'int',
            'reserved3' => 'int',
            'reserved4' => 'int',
        ],
    ],
    'user' => [
        'roles' => [
            'count' => 'cuint',
            'roles' => [
                'id' => 'int',
                'name' => 'name',
            ],
        ],
        'info' => [
            'logicuid' => 'int',
            'rolelist' => 'int',
            'cash' => 'int',
            'money' => 'int',
            'cash_add' => 'int',
            'cash_buy' => 'int',
            'cash_sell' => 'int',
            'cash_used' => 'int',
            'add_serial' => 'int',
            'use_serial' => 'int',
            'exp_logcount' => 'cuint',
            'exg_log' => [
                'tid' => 'int',
                'time' => 'int',
                'result' => 'short',
                'volume' => 'short',
                'cost' => 'int',
            ],
            'addiction' => 'octets',
            'cash_password' => 'octets',
            'autolockcount' => 'cuint',
            'autolock' => [
                'key' => 'int',
                'value' => 'int',
            ],
            'status' => 'byte',
            'forbidcount' => 'cuint',
            'forbid' => [
                'type' => 'byte',
                'time' => 'int',
                'createtime' => 'int',
                'reason' => 'name',
            ],
            'reference' => 'octets',
            'consume_reward' => 'octets',
            'taskcounter' => 'octets',
            'cash_sysauction' => 'octets',
            'login_record' => 'octets',
            'mall_consumption' => 'octets',
            'reserved32' => 'short',
        ],
    ],
    'RoleList' => [
        'localsid' => 'int',
        'handler' => 'int',
        'userscount' => 'cuint',
        'users' => [
            'userid' => 'int',
            'roleid' => 'int',
            'linkid' => 'int',
            'localsid' => 'int',
            'gsid' => 'int',
            'status' => 'byte',
            'name' => 'name',
        ],
    ],
    'FriendList' => [
        'groupinfocount' => 'cuint',
        'groupinfo' => [
            'gid' => 'byte',
            'name' => 'name',
        ],
        'friendinfocount' => 'cuint',
        'friendinfo' => [
            'rid' => 'int',
            'cls' => 'byte',
            'gender' => 'byte',
            'name' => 'name',
        ],
    ],
    'FactionInfo' => [
        'fid' => 'int',
        'name' => 'name',
        'level' => 'byte',
        'master' => [
            'roleid' => 'int',
            'role' => 'byte',
        ],
        'membercount' => 'cuint',
        'member' => [
            'roleid' => 'int',
            'role' => 'byte',
        ],
        'announce' => 'name',
        'sysinfo' => 'octets',
    ],
    'FactionDetail' => [
        'fid' => 'int',
        'name' => 'name',
        'level' => 'byte',
        'master' => 'int',
        'announce' => 'name',
        'sysinfo' => 'octets',
        'membercount' => 'cuint',
        'member' => [
            'roleid' => 'int',
            'level' => 'byte',
            'occupation' => 'byte',
            'froleid' => 'byte',
            'login_day' => 'short',
            'online_status' => 'byte',
            'name' => 'name',
            'nickname' => 'name',
            'contrib' => 'int',
            'delayexpel' => 'byte',
            'expeltime' => 'int',
        ],
        'last_op_time' => 'int',
        'alliancecount' => 'cuint',
        'alliance' => [
            'fid' => 'int',
            'end_time' => 'int',
        ],
        'hostilecount' => 'cuint',
        'hostile' => [
            'fid' => 'int',
            'end_time' => 'int',
        ],
        'applycount' => 'cuint',
        'apply' => [
            'type' => 'int',
            'fid' => 'int',
            'end_time' => 'int',
        ],
    ],
    'RawRead' => [
        'handle' => 'octets',
        'Rawcount' => 'cuint',
        'Raw' => [
            'key' => 'octets',
            'value' => 'octets',
        ],
    ],
    'GTerritoryDetail' => [
        'Territorycount' => 'cuint',
        'Territory' => [
            'id' => 'short',
            'level' => 'short',
            'owner' => 'int',
            'occupy_time' => 'int',
            'challenger' => 'int',
            'deposit' => 'int',
            'cutoff_time' => 'int',
            'battle_time' => 'int',
            'bonus_time' => 'int',
            'color' => 'int',
            'status' => 'int',
            'timeout' => 'int',
            'maxbonus' => 'int',
            'challenge_time' => 'int',
            'challengerdetails' => 'octets',
            'reserved1' => 'byte',
            'reserved2' => 'byte',
            'reserved3' => 'byte',
        ],
    ],
    'FactionFortressDetail' => [
        'factionid' => 'int',
        'info' => [
            'level' => 'int',
            'exp' => 'int',
            'exp_today' => 'int',
            'exp_today_time' => 'int',
            'tech_point' => 'int',
            'technology' => 'octets',
            'material' => 'octets',
            'building' => 'octets',
            'common_value' => 'octets',
            'actived_spawner' => 'octets',
            'reserved11' => 'byte',
            'reserved12' => 'short',
            'reserved2' => 'int',
            'reserved3' => 'int',
        ],
        'info2' => [
            'health' => 'int',
            'offense_faction' => 'int',
            'offense_starttime' => 'int',
            'offense_endtime' => 'int',
            'challenge_listcount' => 'cuint',
            'challenge_list' => [
                'item' => 'int',
            ],
            'reserved1' => 'int',
            'reserved2' => 'int',
            'reserved3' => 'int',
        ],
        'reserved1' => 'int',
        'reserved2' => 'int',
        'reserved3' => 'int',
        'reserved4' => 'int',
        'reserved5' => 'int',
    ],
    'getUserFaction' => [
        'rid' => 'int',
        'name' => 'name',
        'fid' => 'int',
        'cls' => 'byte',
        'role' => 'byte',
        'delayexpel' => 'octets',
        'extend' => 'octets',
        'nickname' => 'name',
    ],
    'getCashTotal' => [
        'cash_total' => 'int',
        'cash_vip_score_add' => 'int',
        'cash_vip_level' => 'int',
    ],
];
