# 竞技模式组件文档

竞技模式组件为MOD开发者提供统一的竞技模式开始与结算通知事件,通过调用相关API和监听固定事件,可以将必要的参数通过竞技组件通知webhttpserver进行分数结算。此外游戏过程中的逃跑惩罚也由竞技模式组件通知webhttpserver服务器。

# MOD客户端接入

# API

  • SetArenaGamePlayerReady

    • 说明

      设置当前玩家准备完毕时调用

    • 参数

      无参数

    • 示例

      import mod.client.extraClientApi as clientApi
      clientApi.SetArenaGamePlayerReady()
      
    • 备注

      MOD开发者必须调用此函数

  • CancelArenaGamePlayerReady

    • 说明

      设置玩家取消准备时调用

    • 参数

      无参数

    • 示例

      import mod.client.extraClientApi as clientApi
      clientApi.CancelArenaGamePlayerReady()
      
    • 备注

      此接口为可选调用

# 事件

  • ClientArenaGameAllPlayerReadyEvent

    • 说明 当前游戏所有玩家准备完毕后,竞技组件向客户端发出的事件

    • 参数

      无参数

    • 备注

      MOD开发者可选择监听此事件切换游戏状态,也可以忽略由自定义的MOD服务端逻辑控制游戏状态切换

  • ClientArenaGameFinishEvent

    • 说明

      MOD开发者调用结束API后,竞技组件向客户端发出的结束事件

    • 参数

      游戏结果

    [
    	{
    		"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列表
    • 示例

      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:房间秘钥计算错误