Skip to content

回放文件格式说明

1. 总体格式

replay文件是json格式,里面存储一个list,list的第一项是一个存储了0-3号玩家出生点位置的list,之后的每一项都是一个存储了一个大回合所有行为的list,list的最后一项是一个score_dict。

对于每个大回合对应的list,其每一项为每个小回合对应所有消息的list,该list可能为空。

replay_example.json给出了一个包含各种情况的replay文件示例。

: score_dict的格式如下(玩家id:得分,分高的赢):

{
  "0": 4,
  "1": 3,
  "2": 2,
  "3": 1
}

2. 消息格式

对于每个消息,其总体格式为,

{
    "type" : <str:消息类型>,
    "playerid": <int:玩家序号>  //序号从0开始,根据消息类型,可能不存在这一项
    ...  //其他消息
}

对坐标有如下规定: 以行数为x,列数为y,规定逃生舱z=0,出生点位于z=1,余下一层z=2。并且以z=0层x-y平面的中心点为原点。用(x,y,z)表示某一点的坐标。

图示如下:

avatar

玩家相关

  • 移动

    {
        "type" : "move",
        "playerid": 1,
        "pos": [1,1,1]
    }
    

  • 闪现

    {
      "type": "flink",
      "playerid": 1,
      "pos": [1, 1, 1]
    }
    

  • detect

    {
      "type": "detect",
      "playerid": 1,
      "tar_pos": [1,1,1]
    }
    

  • 道具更新

    {
         "type": "tool_update",
         "playerid": 1,
         "tools": { 
             "LandMine": 1, //现在持有可用的道具数量
             "Spine": 0,
             "Alert": 0,
             "Sticky": 0,   
             "Kit": 1
         }
    }
    

  • 攻击

    {
         "type": "attack",
         "playerid": 0,
         "attack": [[-1,-1,1], [-1,0,1]]  //[起点坐标,终点坐标]
    }
    
    NOTE: 攻击后必然接血量更新消息,空大不合法。

  • 血量更新

    {
          "type": "hp_update",
          "playerid": 3,
          "hp": 160  //现在的血量
    }
    

  • 放置陷阱

    {
         "type": "place_trap",
         "playerid": 0,
         "pos": [-1,-1,1],
         "trap_type": "LandMine"
    }
    
    NOTE: 陷阱放置行为不再接tool_update消息,请播放器组自行update

  • 使用血包

    {
          "type": "kit",
          "playerid": 0,
          "hp": 185 //使用过后的血量
    }
    

  • 不使用血包的治疗

    {
        "type": "cure",
        "playerid": 0,
        "hp": 160  //使用过后的血量
    }
    

  • 死亡

    {
          "type": "died",
          "playerid": 1,
          "box": [3,0,1]     //如果没这一项,说明原来此位置就有一个掉落池了
    }
    

  • 复活

    {
          "type": "regenerate",
          "playerid":1,
          "pos": [3,-3,1]  //复活位置
    }
    

  • 启动钥匙机

    {
          "type": "keymachine",
          "playerid": 0,
          "pos": [-3,3,1]
    }
    
    NOTE: 一般来说,启动钥匙机的下一回合必然出现获得钥匙消息

  • 获得钥匙

    {
          "type": "getkey",
          "playerid": 0,
          "keyid": [3]   //所取得的钥匙编号list
    }
    

  • 与逃生舱交互

    {
           "type": "escape_capsule",
           "playerid": 0,
           "to_escape": true,    //为true为打开逃生舱,否则为中断逃生倒计时
    }
    

  • 逃生

    {
                    "type": "escaped",
                    "playerid": 0
    }
    

  • ai异常

    {
      "type": "ai_error",
      "playerid": 1,
      "error_log": "Run_error"  // AI的错误信息,从judger那里传过来的
    }
    

场景相关

  • 道具检视

    {
          "type": "inspect",
          "pos": [-1,-1,1],  //物资点位置
          "playerid": 1,
          "interprops": "Materials", //物资点类型,Box 或者 Materials
     }
    
    NOTE: 对于Box,必然后接getkey,对于Material,必然后接tool update

  • 陷阱触发

    {
          "type": "map_update",
          "args": ["trap_trigger", [-1,-1,1], "LandMine"]  // 后两项为位置和陷阱类型
    }
    

  • 陷阱destroy

    {
          "type": "map_update",
          "args": ["trap_destroy", [-1,-1,1], "LandMine"]  // 后两项为位置和陷阱类型
    }
    

  • Box消失

    {
          "type": "map_update",
          "args": ["box_disappear", [-1,-1,1]]  // 后一项为位置
    }