Skip to content

Safety Net

ZoyLuo edited this page Jun 5, 2026 · 1 revision

安全网 · Safety Net

无论上层怎么决策,AIBot 都有一张每游戏刻运行的安全网,保证 bot 不会轻易送命。这是它"像个活人"的关键。

每 tick 流水线

BotTickCoordinator 按固定顺序调度,任一层接管即短路本 tick(后续层不再执行):

① NavSafetyNet  →  ② StuckWatcher  →  ③ DangerWatcher  →  ④ GoalExecutor  →  ⑤ IdleCoordinator
   保命              防卡死              战斗/逃跑/避险        推进目标            无事自主

① NavSafetyNet —— 环境保命(最高优先级)

  • 窒息:卡在方块里 → 向上钻出地表(修"越救越深")。
  • 岩浆:站在 / 脚下是岩浆 → 立即逃离。
  • 溺水:水下且空气将尽 → 上浮换气;若被封顶无处换气 → 紧急传送到最近可呼吸落点。

② StuckWatcher —— 卡死监测

watchdog.stuckWindowTicks 窗口内,若位置、任务进度、背包总量都没变化,判定卡死并中止当前任务,交回上层重规划。

站桩类任务(挖矿 / 下挖)会通过 isWaiting() 主动豁免此监控,改由任务自带看门狗兜底——避免"正在干活"被误杀。见 Task System

③ DangerWatcher —— 威胁应对

  • 威胁检测:collectTopThreat 扫描周围敌对生物,带视线 / 方块阻隔判定(不会隔墙误判正在战斗)。
  • 战斗 or 逃跑:decideCombatOrEvade 按血量、敌人数量(combat.retreatHp / maxEnemiesToFight)决定迎战还是撤离。
  • 点亮黑暗:光照过低时放火把,从源头减少刷怪。
  • 困死撤离:maybeEscapeDarkTrap 在被怪围死等绝境时撤回地面;撤离后保留目标,稍后继续未完成的任务(不会"撤回就失忆")。

④ GoalExecutor —— 推进目标

无险情时,推进当前 Goal Engine 的下一步;步骤失败则重规划。

⑤ IdleCoordinator —— 自主生活

无目标、无任务时,bot 自行决定做点什么(整理、巡逻、待命),而不是呆站。

拟人化安全补强

  • 挖掘式移动熔断:MoveTask 一旦把 bot 挖进水下(溺水)或挖进怪堆(挨打),立即放弃当前移动,交安全网处理——绝不一路挖到淹死 / 被围殴致死。
  • 台阶式下挖:DescendToYTask / DigDownTask 永远斜向下挖、避开脚下的水 / 岩浆,绝不直挖脚下踩空。
  • 不瞬移、不兔子跳:行走只在落地且确有台阶 / 缺口时单跳一次。

延伸阅读:Architecture · Task System · [Configuration]

Clone this wiki locally