--- front: https://nie.res.netease.com/r/pic/20220408/06a1fb24-d76a-4d82-816c-96489966196c.png hard: 入门 time: 15分钟 --- # 竞技模式组件文档 竞技模式组件为MOD开发者提供统一的竞技模式开始与结算通知事件,通过调用相关API和监听固定事件,可以将必要的参数通过竞技组件通知webhttpserver进行分数结算。此外游戏过程中的逃跑惩罚也由竞技模式组件通知webhttpserver服务器。 ## MOD客户端接入 ### API - SetArenaGamePlayerReady - 说明 设置当前玩家准备完毕时调用 - 参数 无参数 - 示例 ```python import mod.client.extraClientApi as clientApi clientApi.SetArenaGamePlayerReady() ``` - 备注 MOD开发者必须调用此函数 - CancelArenaGamePlayerReady - 说明 设置玩家取消准备时调用 - 参数 无参数 - 示例 ```python import mod.client.extraClientApi as clientApi clientApi.CancelArenaGamePlayerReady() ``` - 备注 此接口为可选调用 ### 事件 - ClientArenaGameAllPlayerReadyEvent - 说明 当前游戏所有玩家准备完毕后,竞技组件向客户端发出的事件 - 参数 无参数 - 备注 MOD开发者可选择监听此事件切换游戏状态,也可以忽略由自定义的MOD服务端逻辑控制游戏状态切换 - ClientArenaGameFinishEvent - 说明 MOD开发者调用结束API后,竞技组件向客户端发出的结束事件 - 参数 游戏结果 ```python [ { "camp_id": 1, "result": 1, "score": 100, "uid": [ uid1 ] }, { "camp_id": 2, "result": 2, "score": 50, "uid": [ uid2 ] } ] ``` | 关键字 | 数据类型 | 说明 | | --- | --- | --- | | camp_id | int | 阵营,不区分默认选0,区分最多三个阵营1,2,3 | | result | int | 比赛胜负:0:平局,1:胜利,2:失败 | | score | int | 分数,不需要时传null | | uid | list string array | 玩家id列表 | - 备注 MOD开发者可选择监听此事件获取游戏结果,也可以由自定义事件从MOD服务端获取结果。在收到此事件后,5秒后竞技组件服务端会自动远程调用关闭当前游戏。 ## MOD服务端接入 ### API - SetArenaGameResult - 说明 当前游戏结束时调用,由开发者传入最后结果 - 参数 | 关键字 | 数据类型 | 说明 | | --- | --- | ---| | camp_id | int | 阵营,不区分默认选0,区分最多三个阵营1,2,3 | | result | int | 比赛胜负:0:平局,1:胜利,2:失败 | | score | int | 分数,不需要时传null | | uid | list string array | 玩家id列表 | - 示例 ```python resList = [ { "camp_id": 1, "result": 1, "score": 100, "uid": [ uid1 ] }, { "camp_id": 2, "result": 2, "score": 50, "uid": [ uid2 ] } ] serverApi.SetArenaGameResult(resList) ``` - 备注 - 分数设置相关: - 如果指定自定义的分数,则每项都需要设置`score`的分数。 - 如果使用排行系统默认设置的分数,则每项`score`的值需要设置为None。 - 如果设置`result`为2时,即设置为输时,分时需要传递扣去分数`score`正数而不是负数 - MOD开发者必须调用此函数,设置比赛结果。 ### 事件 - ServerArenaGameAllPlayerReadyEvent - 说明 当前游戏所有玩家准备完毕后,竞技组件向服务端发出的事件 - 参数 无参数 - 备注 MOD开发者可选择监听此事件切换游戏状态,也可以忽略由自定义的MOD服务端逻辑控制游戏状态切换 - ServerArenaGamePlayerReconnectSuccessEvent - 说明 玩家掉线后再次连入时,如果没有超时则触发该事件 - 参数 | 关键字 | 数据类型 | 说明 | | --- | --- | --- | | playerId | str | player的entityId | | uid | str | 玩家的uid | - 备注 MOD开发者可选择监听此事件决定玩家重连状态。 - ServerArenaGamePlayerReconnectFailedEvent - 说明 玩家掉线后再次连入时,超时则触发该事件 - 参数 | 关键字 | 数据类型 | 说明 | | --- | --- | --- | | playerId | str | player的entityId | | uid | str | 玩家的uid | - 备注 MOD开发者可选择监听此事件,玩家超时重连会被竞技组件发送消息强制退出该局游戏。 - ServerSetGameResultFailed - 说明 开发者设置有结果失败时触发该事件 - 参数 | 关键字 | 数据类型 | 说明 | | :--- | :--- | :--- | | rcode | int | 错误码 | | msg | str | 错误信息 | | detail | str | 错误原因 | - 备注 错误码含义和对应的详细信息如下: > **4**:参数为空,缺少某个参数 > > **12**:参数错误,具体见details > teams 必须为数组 > > ​ team 参数缺失 > > ​ result 超出范围 {发送的结果值} (0:平局,1:胜利,2:失败) > > ​ camp_id 超出范围 camp_id:{发送的camp_id} camp_num:{阵营数} (阵营数为0,camp_id只能为0,阵营数大于0,为num,camp_id范围[1,num]) > > ​ uid 必须为数组 > > ​ uid 不是房间成员 room_id:{房间id} user_id:{玩家id} > > **13**:操作失败,具体见details > > 房间找不到 {房间id} > > 找不到房间成员 {房间id} > > 找不到组件信息 {组件id} > > 匹配状态错误 room_id:{房间id} user_id:{玩家id} state:{匹配状态} (防止重复结算) > > 结算失败 > > **12028**:房间秘钥计算错误