Skip to content

游戏执行流程

面向对象:服务器管理员(主控/GAME_ADMIN) | 前置条件:已完成游戏准备流程

概述

本文档涵盖一场逃走中游戏的完整执行生命周期:开始→运行中管理(暂停/恢复/倒计时冻结)→终止结算。


游戏状态一览

操作指令权限状态变化
开始/nfa basic startMASTER_ADMIN / CBIDLE → RUNNING/NORMAL
暂停/nfa basic pauseMASTER_ADMIN / CBNORMAL → PAUSED
恢复/nfa basic resumeMASTER_ADMIN / CBPAUSED → NORMAL
终止/nfa basic stopMASTER_ADMIN / CBRUNNING → IDLE(触发结算)
冻结倒计时/nfa rfm round countdown_freeze startMASTER_ADMIN / CBNORMAL → COUNTDOWN_FROZEN
解冻倒计时/nfa rfm round countdown_freeze stopMASTER_ADMIN / CBCOUNTDOWN_FROZEN → NORMAL

执行流程总览

mermaid
flowchart TD
    A["准备就绪"] -->|"/nfa basic start"| B["RUNNING/NORMAL<br/>倒计时运行中"]
    
    B -->|"团灭/超时/stop"| F["结算+清理"]
    B -->|"pause"| C["RUNNING/PAUSED<br/>完全冻结(禁止行动)"]
    B -->|"countdown_freeze"| D["RUNNING/FROZEN<br/>仅冻结倒计时(允许行动)"]
    
    C -->|"resume"| B
    D -->|"countdown_freeze stop"| B
    
    F --> G["IDLE<br/>可开始新一局"]

    subgraph Manage["运行中管理"]
        Coin["金币 add/sub/set/clear"]
        Res["复活 resurrect"]
        Ab["弃权 abstain"]
        Tr["叛节者 traitor set/clear"]
        Tw["标题打字机 titlewriter"]
        Pair["结对 pairing"]
    end

    B -.-> Manage

一、开始游戏

指令方式

/nfa basic start

中控面板方式

中控面板 → 游戏控制 → 设置总时长(默认 3600 秒 = 60 分钟)→ 点击"开始"

startGame() 内部流程

  1. 快照当前在线逃走者 UUID(锁定参战者名单)
  2. 清空警报列表
  3. 重置所有侦测方块
  4. 恢复逃走者状态(eliminated=false 等)
  5. 重置猎人回合数据
  6. 随机分配猎人出生点(如已设置)
  7. 红石触发器全部断电(复位到默认输出)
  8. 全服同步游戏状态与 HUD

二、运行中管理

2.1 暂停与恢复

适用场景:处理技术问题 / 调整游戏参数 / 等待断线玩家重连

暂停期间效果:

  • 倒计时冻结
  • 硬币停止发放
  • 玩家行动被阻止(伤害事件被拦截)
/nfa basic pause
/nfa basic resume

注意:暂停前会自动结算该时段已产生的金币,玩家不会损失。

2.2 倒计时冻结

与暂停的关键区别:冻结仅停止倒计时和硬币产出,玩家仍可自由移动。

典型场景:猎人装置复活环节(自动触发冻结)。

/nfa rfm round countdown_freeze start
/nfa rfm round countdown_freeze stop

2.3 金币管理

操作指令说明
调整产出率/nfa rfm coin rate <50|100|200|500>调整每秒金币产出
增加总币/nfa rfm coin add <玩家> <数量>增加跨局累计总币
减少总币/nfa rfm coin sub <玩家> <数量>减少总币
清零回合币/nfa rfm coin clear <玩家|all>仅清零本局回合币
设置总币/nfa rfm coin set <玩家> <数量>直接设置总币值

2.4 玩家状态管理

操作指令
复活逃走者/nfa rfm resurrect <玩家>
设为弃权/nfa rfm abstain <玩家>
设为叛节者/nfa rfm traitor set <玩家>

2.5 游戏内通知

  • 手动发送:中控面板 → 通知管理 → 选中通知 → 发送
  • 红石触发notice_sender 方块收到红石上升沿时自动发送
  • 手机推送:自动推送到目标玩家的逃走中 APP

2.6 特殊事件

事件指令
启动警报响铃/nfa rfm alarm start <分钟> <秒>
播放标题动画/nfa rfm titlewriter start <玩家> <文件ID> <组>
猎人装置复活/nfa rfm round resurrect_device start [目标数]
启用侦测/nfa rfm detect start

三、终止游戏

3.1 主动终止

/nfa basic stop

或中控面板 → 游戏控制 → 终止。

3.2 自动终止条件

条件触发效果
倒计时归零自动结算 → 清理
所有逃走者被淘汰(团灭)自动结算 → 清理
仅剩叛节者存活(叛节者胜利)自动结算 → 清理

3.3 结算流程

终止时按两阶段执行:

第一阶段 — 结算(settleRoundAndBroadcast()

  1. 读取每人本局回合币
  2. 应用结对调整(COIN 模式取双方较高值 / LIFE 模式双方相加)
  3. 回合币转为总币(addCoinsByMap
  4. 写入 JSON 结算备份(nfa_rfm/coin.json
  5. 全服广播结算排名

第二阶段 — 清理(executeGameEnd(): 6. 清理全部游戏状态,恢复至 IDLE


四、常用操作速查

场景操作
玩家断线重连自动恢复,无需手动操作
调整游戏时长暂停 → 中控面板重新设置 → 恢复
紧急停止/nfa basic stop
查看存活人数猎人/NPC 的 HUD 左上角
查看剩余时间猎人/NPC 的 HUD 左下角
停止警报/nfa rfm alarm stop
停止侦测/nfa rfm detect stop

注意事项

  1. start 前必须处于 IDLE:无法从 PAUSED 或 COUNTDOWN_FROZEN 直接开始新游戏
  2. stop 始终触发结算:主动终止也会走完整的结算流程
  3. PAUSED ≠ FROZEN:PAUSED 禁止玩家行动,FROZEN 仅暂停倒计时,玩家仍可移动
  4. 暂停前自动结算金币:该时段已产生的金币不会丢失
  5. HUD 仅猎人和工作人员可见:逃走者无法通过 HUD 看到倒计时和存活人数

相关文档