7. 服务端消息

7.1. 消息格式

客户端与服务端通过 WebSocket 通讯,传输内容为 JSON 格式的字符串,Muddery 服务端传输给客户端的消息格式如下:

{
    消息类型: 数据
}

或:

[
    {
        消息类型: 数据
    },
    {
        消息类型: 数据
    },
    ...
    {
        消息类型: 数据
    }
]

消息可以是一个key/value对,也可以是一个key/value对的列表。 如果是列表格式的消息,必须按列表中的次序逐个处理消息。

Muddery 向客户端发送的全部消息如下:


7.2. 文本类消息

服务器发给客户端的文本信息,通常需要显示给用户看。

7.2.1. msg

向客户端发送普通信息,信息中会带有富文本标记,如设置文字颜色的标记等。客户端接收到消息后需要在界面上显示消息内容。

{
    "msg": <(str)文本信息>
}

7.2.2. alert

向客户端发送警告信息,需要用弹窗提醒用户。信息中会带有富文本标记,如设置文字颜色的标记等。

{
    "alert": <(str)文本信息>
}

7.2.3. out

向客户端发送普通文本信息,客户端接收到消息后需要在界面上显示消息内容。

{
    "out": <(str)文本信息>
}

7.2.4. err

向客户端发送报错的文本信息,客户端接收到消息后需要在界面上显示消息内容。

{
    "err": <(str)文本信息>
}

7.2.5. sys

向客户端发送系统的文本信息,客户端接收到消息后需要在界面上显示消息内容。

{
    "sys": <(str)文本信息>
}

7.2.6. debug

向客户端发送调试信息,在调试模式下客户端接收到消息后需要在界面上显示消息内容。

{
    "debug": <(str)文本信息>
}

7.2.7. prompt

向客户端发送文本提示信息,客户端接收到消息后需要在界面的相应位置上上显示消息内容。

{
    "prompt": <(str)文本信息>
}

7.3. 客户端设置类消息

与客户端设置有关的数据,客户端初次连接到服务器时,服务器会将这些消息发送给客户端。

7.3.1. game_name

设置游戏名称。

{
    "game_name": <(str)游戏名称>
}

7.3.2. conn_screen

设置欢迎界面的信息。

{
    "conn_screen": <(str)欢迎文字>
}

7.3.3. min_honour_level

设置玩家可以参与荣誉战斗的最低等级。

{
    "min_honour_level": <(int)等级>
}

7.3.4. equipment_pos

设置角色可以穿戴装备的位置。

{
    "equipment_pos": [
        {
            "key": <(str)位置的key>,
            "name": <(str)位置的名字>,
            "desc": <(str)位置的描述信息>
        },
        ...
    ]
}

7.4. 账号设置类消息

用户进行登入、登出、管理账号等操作时,服务器返回给客户端的消息。

7.4.1. login

通知客户端用户已成功登录。

{
    "login": {
        "name": <(str)用户名>,
        "id": <(str)账号的id>
    }
}

7.4.2. logout

通知客户端用户已经登出。

{
    "logout": true
}

7.4.3. pw_changed

通知客户端账号的密码已修改。

{
    "pw_changed": true
}

7.4.4. max_char

玩家可以创建的最大角色数量。

{
    "max_char": <(int)最大角色数量>
}

7.4.5. char_all

当前账号中的所有角色信息。

{
    "char_all": [
        {
            "name": <(str)角色的名字>,
            "id": <(str)角色的ID>
        },
        ...
    ]
}

7.4.6. char_created

通知客户端角色已创建。

{
    "char_created": true
}

7.4.7. char_deleted

通知客户端角色已删除。

{
    "char_deleted": true
}

7.4.8. puppet

玩家登入角色,返回角色的信息。

{
    "puppet": {
        "id": <(int)角色的id>,
        "name": <(str)角色的名字>,
        "icon": <(str)角色的图标>,
        "is_staff": <(bool)是否是管理员>,
        "allow_commands": <(bool)是否允许直接输入文本命令>     // 需要客户端开启调试模式
    }
}

7.4.9. unpuppet

通知客户端用户已退出当前角色。

{
    "unpuppet": true
}

7.5. 角色状态消息

和玩家角色状态相关的数据。

7.5.1. status

玩家角色的最新状态,当角色状态变化时会发送给客户端。

{
    "status": {
        <(str)属性的Key>: {
            "name": <(str)属性的名字>,
            "value": <(any)属性值>
        },
        ...
    }
}

7.5.2. equipments

装备信息,玩家角色初次登录或装备发生变化时,会将装备信息发送给客户端。

{
    "equipments": {
        <(str)装备位置的key>: {
            "key": <(str)装备的key>,
            "name": <(str)装备的名字>,
            "desc": <(str)装备的描述信息>,
            "icon": <(str)装备的图标>,
        },
        ...
    ]
}

7.5.3. inventory

背包信息,玩家角色初次登录或背包发生变化时,会将背包信息发送给客户端。

{
    "inventory": [
        {
            "name": <(str)物品的名字>,
            "desc": <(str)物品的描述信息>,
            "icon": <(str)物品的图标>,
            "number": <(int)物品的数量>,
            "level": <(int)物品的等级>,
            "position": <(int)物品在背包中的位置>,
            "can_remove": <(bool)物品数量为0时是否可以从物品栏去除>
        },
        ...
    ]
}

7.5.4. skills

技能信息,玩家角色初次登录或技能发生变化时,会将技能信息发送给客户端。

{
    "skills": [
        {
            "key": <(str)技能的key>,
            "name": <(str)技能的名字>,
            "desc": <(str)技能的描述信息>,
            "icon": <(str)技能的图标>,
            "passive": <(bool)是否是被动技能>,
            "cd_remain": <(float)技能的cd时间>  // 单位为秒
        }
    ]
}

7.5.5. quests

任务信息,玩家角色初次登录或任务发生变化时,会将任务信息发送给客户端。

{
    "quests": [
        {
            "key": <(str)任务的key>,
            "name": <(str)任务的名字>,
            "desc": <(str)任务的描述信息>,
            "icon": <(str)任务的图标>,
            "cmds": [  // 任务的相关命令
                {
                    "name": <(str)命令显示的名字>,
                    "cmd": <(str)命令的key>,
                    "args": <(any)命令参数>,   // 执行命令时会将参数原样发送到服务器
                    "confirm": <(str)提示确认信息> // 非空则执行命令前需要显示确认框,玩家确认后才能执行
                },
                ...
            ],
            "objectives": [    // 任务的目标
                {
                    "target": <(str)目标的类型>,  // 如获取、击杀、到达等
                    "object": <(str)目标的名字>,  // 如获取物品的名字、击杀对象的名字、到达房间的名字等
                    "accomplished": <(int)目前已完成的数量>,
                    "total": <(int)需要达到的数量>
                },
                ...
            ]
        }
    ]
}

7.6. 环境信息

玩家当前所在环境的信息。

7.6.1. look_around

角色当前所在房间内角色(即所有玩家角色和NPC)的信息,当玩家进入房间,或房间内的角色发生变化时会发送给客户端。

{
    "look_around": {
        "players": [   // 房间内所有玩家角色的信息
            {
                "id": <(int)角色的id>,
                "key": <(str)角色的key>,
                "name": <(str)角色的名字>,
                "icon": <(str)角色的图标>
            },
            ...
        ],
        "npcs": [  // 房间内所有NPC的信息
            {
                "id": <(int)角色的id>,
                "key": <(str)角色的key>,
                "name": <(str)角色的名字>,
                "icon": <(str)角色的图标>
            },
            ...
        ]
    }
}

7.6.2. obj_moved_in

通知客户端,有角色进入了玩家当前所在的房间。

{
    "obj_moved_in": {
        "type": <(str)角色的类型>,  // "players"或"npcs"
        "id": <(int)角色的id>,
        "name": <(str)角色的名字>,
        "icon": <(str)角色的图标>
    }
}

7.6.3. obj_moved_out

通知客户端,有角色离开了玩家当前所在的房间。

{
    "obj_moved_out": {
        "type": <(str)角色的类型>,  // "players"或"npcs"
        "id": <(int)角色的id>,
        "name": <(str)角色的名字>
    }
}

7.7. 查看物体

玩家查看物体返回的信息。

7.7.1. look_obj

查看物体返回的物体信息。

{
    "look_obj": {
        "key": <(str)物体的key>,
        "name": <(str)物体的名字>,
        "desc": <(str)物体的描述信息>,
        "icon": <(str)物体的图标>,
        "cmds": [  // 可用于物体的命令
            {
                "name": <(str)命令显示的名字>,
                "cmd": <(str)命令的key>,
                "args": <(any)命令参数>,      // 执行命令时会将参数原样发送到服务器
                "confirm": <(str)提示确认信息>   // 非空则执行命令前需要显示确认框,玩家确认后才能执行
            },
            ...
        ]
    }
}

7.7.2. skill_info

查看技能返回的技能信息。

{
    "skill_info": {
        "key": <(str)技能的key>,
        "name": <(str)技能的名字>,
        "desc": <(str)技能的描述信息>,
        "icon": <(str)技能的图标>,
        "cmds": [  // 可用于技能的命令
            {
                "name": <(str)命令显示的名字>,
                "cmd": <(str)命令的key>,
                "args": <(any)命令参数>,      // 执行命令时会将参数原样发送到服务器
                "confirm": <(str)提示确认信息>   // 非空则执行命令前需要显示确认框,玩家确认后才能执行
            },
            ...
        ]
    }
}

7.7.3. quest_info

查看任务返回的任务信息。

{
    "quest_info": {
        "key": <(str)任务的key>,
        "name": <(str)任务的名字>,
        "desc": <(str)任务的描述信息>,
        "icon": <(str)任务的图标>,
        "cmds": [  // 可用于任务的命令
            {
                "name": <(str)命令显示的名字>,
                "cmd": <(str)命令的key>,
                "args": <(any)命令参数>,      // 执行命令时会将参数原样发送到服务器
                "confirm": <(str)提示确认信息>   // 非空则执行命令前需要显示确认框,玩家确认后才能执行
            },
            ...
        ],
        "objectives": [    // 任务的目标
            {
                "target": <(str)目标的类型>,    // 如获取、击杀、到达等
                "object": <(str)目标的名字>,    // 如获取物品的名字、击杀对象的名字、到达房间的名字等
                "accomplished": <(int)目前已完成的数量>,
                "total": <(int)需要达到的数量>
            },
            ...
        ]
    }
}

7.7.4. inventory_obj

查看背包物品返回的物品信息。

{
    "inventory_obj": {
        "key": <(str)物品的key>,
        "name": <(str)物品的名字>,
        "desc": <(str)物品的描述信息>,
        "icon": <(str)物品的图标>,
        "number": <(int)物品的数量>,
        "position": <(int)物品在背包中的位置>,
        "can_remove": <(bool)物品数量为0时是否可以从物品栏去除>,
        "cmds": [  // 可用于物品的命令
            {
                "name": <(str)命令显示的名字>,
                "cmd": <(str)命令的key>,
                "args": <(any)命令参数>,      // 执行命令时会将参数原样发送到服务器
                "confirm": <(str)提示确认信息>   // 非空则执行命令前需要显示确认框,玩家确认后才能执行
            },
            ...
        ]
    }
}

7.7.5. equipments_obj

查看装备返回的装备信息。

{
    "equipments_obj": {
        "key": <(str)装备的key>,
        "name": <(str)装备的名字>,
        "desc": <(str)装备的描述信息>,
        "icon": <(str)装备的图标>,
        "cmds": [  // 可用于装备的命令
            {
                "name": <(str)命令显示的名字>,
                "cmd": <(str)命令的key>,
                "args": <(any)命令参数>,      // 执行命令时会将参数原样发送到服务器
                "confirm": <(str)提示确认信息>   // 非空则执行命令前需要显示确认框,玩家确认后才能执行
            },
            ...
        ]
    }
}

7.8. 交互类消息

玩家角色与其他对象交互时,服务器返回给客户端的消息。

7.8.1. dialogue

对话信息,角色与NPC对话或者触发对话事件时,服务端将对话内容传送给客户端,客户端收到后需要显示对话。

{
    "dialogue": {
        "target": {    // 对话的对象
            "id": <(int)对象的id>,
            "name": <(str)对象的名字>,
            "icon": <(str)对象的图标>
        }
        "dialogues": [ // 对话
            {
                "key": <(str)对话的key>,
                "content": <(str)对话内容>
            },
            ...
        ]
    ]
}

7.8.2. shop

玩家打开商店,返回商店的描述信息和商品列表。需要指定购买商品的货币,货币可以是任何一种其他物品。一次可以购买number个物品,并支付price个货币。

{
    "shop": {
        "key": <(str)商店的key>,
        "name": <(str)商店的名字>,
        "desc": <(str)商店的描述信息>,
        "icon": <(str)商店的图标>,
        "cmds": [  // 可用于商店的命令
            {
                "name": <(str)命令显示的名字>,
                "cmd": <(str)命令的key>,
                "args": <(any)命令参数>,      // 执行命令时会将参数原样发送到服务器
                "confirm": <(str)提示确认信息>   // 非空则执行命令前需要显示确认框,玩家确认后才能执行
            },
            ...
        ],
        "goods": [     // 商店出售的商品
            {
                "index": <(int)商品编号>,
                "obj": <(str)物品的key>,
                "level": <(str)物品的等级>,
                "name": <(str)物品的名字>,
                "desc": <(str)物品的描述信息>,
                "number": <(int)一次购买的物品数量>,
                "price": <(int)购买物品所需的货币数量>,
                "unit": <(str)购买物品所需货币的key>,
                "icon": <(str)物品的图标>,
            },
            ...
        ]
    }
}

7.8.3. get_objects

获得物品,玩家角色拾取物品时,将所获得物品的信息传送给客户端。

{
    "get_objects": [
        {
            "key": <(str)物品的key>,
            "name": <(str)物品的名字>,
            "icon": <(str)物品的图标>,
            "number": <(int)获得物品的数量>,
            "reject": <(str)无法获得物品的原因>,    // 非空表示无法获得该物品
        },
        ...
    ]
}

7.8.4. get_exp

通知客户端玩家获得了经验。

{
    "get_exp": {
        "exp": <(int)获得的经验值>
    }
}

7.8.5. skill_cd

设置技能cd,玩家角色技能施放后,服务端会将该技能新的cd时间传送给客户端。

{
    "skill_cd": {
        "skill": <(str)技能的key>,
        "cd": <(float)技能的cd>,  // 单位为秒
        "gcd": <(float)技能的公共cd>    // 单位为秒
    }
}

7.8.6. skill_cast

施放技能的结果,玩家角色施放技能后,服务端将施放技能的结果返回给客户端。

{
    "skill_cast": {
        "skill": <(str)技能的key>,
        "main_type": <(str)技能的主类型>,    // 用于区分攻击技能、恢复技能、控制技能等
        "sub_type": <(str)技能的副类型>,     // 用于区分攻击技能、恢复技能、控制技能等
        "caller": <(int)技能施放者的id>,
        "target": <(int)技能目标的id>,
        "status": {    // 受技能影响的角色状态变化情况
            <(int)角色的id>: {
                <(str)属性的key>: <(any)属性的值>,
                ...
            },
            ...
        },
        "cast": <(str)技能动作的描述文字>,
        "result": <(str)技能结果的描述文字>
    }
}

7.9. 战斗信息

与战斗有关的信息。

7.9.1. joined_combat

玩家角色进入战斗时发送给客户端,通知玩家已进入战斗,客户端需要切换到战斗界面。

{
    "joined_combat": true
}

7.9.2. combat_info

将战斗信息发送给客户端,包括战斗的背景描述、参战队伍等,在战斗开始时发送给客户端。

{
    "combat_info": {
        "desc": <(str)战斗的描述信息>,
        "timeout": <(int)战斗时长限制>,    // 单位为秒, 为0则没有时长限制
        "characters": [    // 参与战斗的角色
            {
                "id": <(int>角色的id>,
                "key": <(str)角色的key>,
                "name": <(str)角色的名字>,
                "desc": <(str)角色的描述信息>,
                "icon": <(str)角色的图标>,
                "team": <(int)所属队伍的编号> // 同属一个队伍的角色,队伍编号相同
            }
        ]
    }
}

7.9.3. combat_status

传送战斗中各个角色的状态属性,在战斗开始时发送给客户端。

{
    "combat_status": {
        <(int)角色的id>: {
            <(str)属性的key>: <(any)属性的值>,
            ...
        },
        ...
    }
}

7.9.4. combat_commands

战斗中可用的技能,在战斗开始时发送给客户端。

{
    "combat_commands": [
        {
            "key": <(str)技能的key>,
            "name": <(str)技能的名字>,
            "icon": <(str)技能的图标>
        },
        ...
    ]
}

7.9.5. combat_finish

战斗结束时发送给客户端,通知客户端战斗已结束,告知战斗的结果。

{
    "combat_finish": {
        "type": <(str)战斗的类型>,  // "NORMAL"普通战斗或"HONOUR"荣誉战斗>,
        "result": <(str)战斗结果>, // "COMBAT_WIN"胜利、"COMBAT_LOSE"失败、
                                  // "COMBAT_DRAW"平局或"COMBAT_ESCAPED"逃离战斗
        "rewards": {
            "exp": <(int)获得经验>,
            "loots": [ // 获得物品
                {
                    "object_key": <(str)物品的key>,
                    "level": <(int)物品的等级>,
                    "name": <(str)物品的名字>,
                    "icon": <(str)物品的图标>,
                    "number": <(int)获得物品的数量>,
                    "reject": <(str)无法获得物品的原因>,    // 非空表示无法获得该物品
                },
                ...
           ]
       }
   }
}

7.10. 频道消息

聊天频道的设置和消息。

7.10.1. channels

设置当前可用的聊天频道。

{
    "channels": {
        <(str)频道的id>: {
            "type": <(str)频道的类型>,  // "CHANNEL"公共频道
            "name": <(str)频道的名字>
        },
        ...
    }
}

7.10.2. conversation

传送玩家之间聊天的内容。

{
    "conversation": {
        "type": <(str)聊天的类型>,  // "PRIVATE"私聊、"LOCAL"本地、"CHANNEL"公共频道
        "channel": <(str)聊天频道的名字>,
        "from_id": <(str)说话者的id>,
        "from_name": <(str)说话者的名字>,
        "msg": <(str)聊天的内容>
    }
}

7.11. 地图信息

玩家所在地图的信息。

7.11.1. current_location

玩家当前所在的位置。当玩家移动位置或者状态发生变化时,会把玩家的最新位置传输到客户端。

{
    "current_location": {
        "area": <(str)玩家所在区域的key>,
        "room": <(str)玩家所在房间的key>
    }
}

7.11.2. reveal_maps

传送地图信息。

{
    <(str)区域的key>: {
        "key": <(str)区域的key>,
        "name": <(str)区域的名字>,
        "desc": <(str)区域的描述信息>,
        "icon": <(str)区域的图标>,
        "background": <(str>区域地图的图片>,
        "rooms": {              // 区域中的房间
            <(str)房间的key>: {
                "key": <(str)房间的key>,
                "name": <(str)房间的名字>,
                "desc": <(str)房间的描述信息>,
                "icon": <(str)房间的图标>,
                "peaceful": <(bool)是否是和平房间>,   // 和平房间内不允许玩家PK
                "background": <(str)房间的背景图片>,
                "pos": <(any)房间的位置信息>, // 通常是房间的坐标
                "objects": [    // 房间里位置不会移动的物体
                    {
                        "key": <(str)物体的key>,
                        "name": <(str)物体的名字>,
                        "desc": <(str)物体的描述信息>,
                        "icon": <(str)物体的图标>
                    },
                    ...
                ],
                "exits": [      // 房间的出口
                    {
                        "key": <(str)出口的key>,
                        "name": <(str)出口的名字>,
                        "desc": <(str)出口的描述信息>,
                        "icon": <(str)出口的图标>,
                        "from": <(str)出口所在房间的key>,
                        "to": <(str)出口所在房间的key>
                    },
                    ...
                ],
            },
            ...
        }
    },
    ...
}

7.12. 荣誉信息

玩家PVP荣誉的信息。

7.12.1. rankings

玩家的荣誉排名。

{
    "rankings": [
        {
            "name": <(str)玩家的名字>,
            "id": <(int)玩家的id>,
            "ranking": <(int)玩家的荣誉排名>,
            "honour": <(int)玩家的荣誉值>
        },
        ...
    ]
}

7.12.2. in_combat_queue

玩家已加入对战排队中。

{
    "in_combat_queue": true
}

7.12.3. left_combat_queue

玩家已离开对战排队。

{
    "left_combat_queue": true
}

7.12.4. prepare_match

准备进入对战。匹配到对战对手后,会给玩家一定的时间准备进入战斗。

{
    "prepare_match": <(int)准备时间>   // 单位为秒
}

7.12.5. match_rejected

匹配的一方已拒绝对战。

{
    "match_rejected": <(int)拒绝方的id>    // 可以是玩家自己的id也可以是对手的id
}