比赛回放时间线 (Series Replay)
获取逐回合的击杀日志回放时间线:包含武器与空间坐标的击杀事件、爆弹安放/拆除、复活记录以及存活视角朝向。
series.replay(series_id, game_id) 返回系列赛指定小局地图每一回合的击杀日志时间线(对应 vlr.gg 上的 logs 面板)。
函数签名
series.replay(
series_id: int,
game_id: int,
) -> ReplayData通过柯里化链式访问:
vlrdevapi.series(series_id).replay(game_id: int) -> ReplayData参数
Prop
Type
返回值 - ReplayData
Prop
Type
辅助方法 round(round_number)
ReplayData.round(n) 接受从 1 开始的回合号,返回对应的 ReplayRound 对象;若该回合无回放数据则返回 None。
ReplayRound 字段说明
Prop
Type
loadout_for(player) 辅助方法
ReplayRound.loadout_for(player) 接受不区分大小写的选手名称(例如 'Derke')或整数 player_id,返回该选手在该回合的 PlayerRoundLoadout,未找到则返回 None。
PlayerRoundLoadout
回合开始时单名选手的买枪阶段装备与经济快照。
Prop
Type
ReplayEvent
回合时间线中的单个事件。type 为 ReplayEventType 枚举(KILL、PLANT、DEFUSE、BOOM 或 RESURRECT;.value 给出小写字符串,.full_name 给出可读标签);derived: True 标记了 vlr.gg 原始日志未作为事件行记录的两种派生类型(爆弹引爆和复活)。
Prop
Type
ReplayActor / ReplayAlivePlayer
Prop
Type
ReplayPlayerRef
Prop
Type
示例
查看第 1 回合击杀日志流水
import vlrdevapi
replay = vlrdevapi.series.replay(series_id=754737, game_id=283288)
print(f"{replay.team1} 对阵 {replay.team2}(共 {replay.num_rounds} 回合)")
for ev in replay.round(1).events:
who = ev.actor.name if ev.actor else "-"
print(f"{ev.seq}. {ev.seconds}秒 {ev.type.full_name}: {who}", end="")
if ev.cause:
print(f" ({ev.cause})", end="")
if ev.victim:
print(f" -> {ev.victim.name}", end="")
print()追踪爆弹安放与引爆事件
import vlrdevapi
from vlrdevapi._series.replay.models import ReplayEventType
replay = vlrdevapi.series.replay(series_id=754737, game_id=283288)
for ev in replay.round(14).events:
if ev.type in (ReplayEventType.PLANT, ReplayEventType.DEFUSE, ReplayEventType.BOOM):
print(f"{ev.clock or '-'} {ev.type.full_name} 发生在 {ev.site} 包点,坐标 ({ev.pos_x}, {ev.pos_y})")柯里化链式访问
import vlrdevapi
series = vlrdevapi.series(754737)
replay = series.replay(game_id=283288)
round_1 = replay.round(1)
for ld in round_1.loadouts[:4]:
print(f"{ld.name} ({ld.agent}): {ld.weapon} + {ld.armor} (花费 ${ld.spent})")最后更新于