用两个阈值做稳定的应急状态
把持续条件、状态记忆与恢复条件组合成简单状态机
先写两种状态和转换条件
战车有巡航与应急两种状态,生命低于 50% 进入应急,修复到 80% 才退出,两个不同阈值留出缓冲区,避免生命在临界值附近波动时反复切换
巡航 / Cruise
└─ HP < 50% → 应急 / Emergency
应急 / Emergency
└─ HP ≥ 80% → 巡航 / Cruise进入条件只在需要时成立
not memory.emergency 让已经进入应急的单位不再重复执行进入动作,动作同时更新状态和速度,并发出一条可观察消息
[hiddenAction_enterEmergency]
autoTrigger: if self.hp < self.maxHp * 0.5 and not memory.emergency
setUnitMemory: emergency=true
setUnitStats: movespeed=1.2
showMessageToPlayer: 应急模式开启 / Emergency mode enabled恢复路径要单独写清楚
退出动作要求已经在应急状态且生命达到八成,恢复基础移动速度,不能只改布尔值却忘记还原之前修改的属性
[hiddenAction_leaveEmergency]
autoTrigger: if self.hp >= self.maxHp * 0.8 and memory.emergency
setUnitMemory: emergency=false
setUnitStats: movespeed=0.7
showMessageToPlayer: 已恢复巡航 / Cruise mode restored测试完整循环与边界
依次观察 51%、49%、60%、81% 的生命状态,期望只在 49% 附近进入一次、81% 附近退出一次,再连续做两轮,检查消息、速度和弹种是否都恢复
动手练习
增加一张状态转换表,列出每次转换必须修改和恢复的所有数值