可以。**当前架构已经让小人具备“运行时知道自己现在该做什么,并能按时间和突发事件切换行为”的基础能力**。但这里的“知道”是数据驱动的决策状态,不是自然语言推理或长期自主规划。 ## 1. 能知道当前任务 ### 学生 学生每次决策时,会先从通用任务服务查询“与自己相关的最高优先级开放任务”: - `scripts/系统/学生任务适配器.lua:73`
- `scripts/系统/通用任务服务.lua:247`
任务可能是:
- 全体学生共享的校园活动;
- 只属于某个学生的紧急任务;
- 被阻塞、等待可用房间的任务。
学生最终会获得:
```lua
targetId -- 去哪里
targetReason -- 为什么去
status -- 当前状态
```
任务优先于普通日程和随机权重行为:
- `scripts/系统/学生AI.lua:78`
- `scripts/系统/学生AI.lua:87`
例如学生可以表现为:
```text
任务:早读
目标:验收教室1
原因:校园早读活动
状态:前往验收教室1
```
如果房间不存在或不可用,学生也会得到明确状态:
```text
状态:等待可用地点
原因:任务目标房间不可用
```
对应处理在 `scripts/系统/学生任务适配器.lua:42`。
### 工作人员
工作人员领取任务后,会把任务信息写入自身运行状态:
```lua
character.job
character.jobTarget
character.taskKind
character.taskPriority
character.taskPhase
character.behaviorState
character.currentTarget
```
对应代码在 `scripts/系统/人员移动.lua:23`。
因此保安、保洁、校医等工作人员在运行时可以知道:
- 当前工作是什么;
- 工作目标在哪里;
- 属于普通岗位、日程、统一任务还是紧急任务;
- 当前正在前往、工作、阻塞还是已经完成;
- 当前任务对应哪个日程阶段。
---
## 2. 能知道当前时间对应的日程
所有人员共享校园时间:
```lua
state.campus.time
```
日程服务会把当前分钟数解析成日程阶段:
- `scripts/系统/日程服务.lua:3`
- `scripts/系统/日程服务.lua:42`
例如:
```text
07:30 → 早读
07:50 → 升国旗/广播操
08:10 → 上课
11:50 → 午饭
12:40 → 午休
15:00 → 活动/体育
16:00 → 放学
```
学生通过当前阶段决定普通目标:
- `scripts/系统/学生AI.lua:99`
工作人员也会在决策时读取当前日程块:
- `scripts/小人/日程.lua:90`
- `scripts/小人/日程.lua:91`
校园主循环发现阶段变化后,会发布 `PHASE_CHANGED` 事件,使学生重新决策:
- `scripts/玩法/校园日常/init.lua:35`
- `scripts/玩法/校园日常/init.lua:41`
所以当前不是“小人保存一只自己的手表”,而是:
```text
校园统一时间
→ 日程服务解析当前阶段
→ 活动服务生成校园活动
→ 任务服务生成共享任务
→ 学生和工作人员重新选择行动
```
这已经足以支持上课、课间、午休、活动和放学等基础日常切换。
---
## 3. 能响应突发事件
### 学生突发事件
目前学生支持这些打断类型:
- 受伤;
- 流鼻血;
- 紧急如厕;
- 老师点名返课;
- 前往办公室接受教育。
定义位置:
- `scripts/系统/打断服务.lua:9`
触发后会:
1. 取消学生当前地点行为;
2. 登记个人紧急任务;
3. 根据能力寻找动态房间;
4. 清除原导航进度;
5. 切换目标和状态;
6. 发布学生目标变化事件。
主要代码在 `scripts/系统/打断服务.lua:23`。
例如:
```text
学生正在早读
→ 触发紧急如厕
→ 创建 priority=80 的个人紧急任务
→ 动态寻找具有 toilet 能力的厕所
→ 前往厕所
→ 到达后完成紧急任务
→ 重新读取仍然有效的共享早读任务
→ 返回教室
```
任务到达后的完成回写已经接通:
- 普通学生打断在到达目标时完成;
- 受伤、流鼻血任务在治疗结束时完成。
对应代码在 `scripts/系统/通用任务服务.lua:476`、`scripts/系统/通用任务服务.lua:495`。
### 工作人员突发事件
工作人员突发任务会登记为:
```lua
source = "emergency"
priority = 100
status = "assigned"
interruptMode = "replace_current"
```
对应代码在 `scripts/系统/通用任务服务.lua:406`。
当前已有案例包括:
- 保安响应可疑学生;
- 工作人员前往事件坐标;
- 观察阶段变化时取消旧响应;
- 工作完成后回写 `completed`;
- 随后恢复普通岗位任务。
工作人员的任务选择入口:
- `scripts/小人/日程.lua:90`
任务完成回写:
- `scripts/系统/人员移动.lua:143`
- `scripts/系统/工作人员任务适配器.lua:93`
因此工作人员已经能够形成:
```text
普通岗位
→ 发现突发事件
→ 暂停普通岗位
→ 前往事件地点
→ 处理事件
→ 完成任务
→ 返回普通岗位
```
---
## 4. 能根据职业领取适合自己的任务
已经有最小职业过滤:
- 保洁员可以领取未分配的清洁任务;
- 已分配的工作人员只能读取分配给自己的任务;
- 同一个清洁任务通过原子 `Assign` 避免多个保洁重复领取;
- 紧急任务直接指定执行人员。
对应代码:
- `scripts/系统/工作人员任务适配器.lua:14`
- `scripts/系统/工作人员任务适配器.lua:27`
- `scripts/系统/通用任务服务.lua:256`
已经通过运行探针验证:
```text
保洁发现厕所清洁任务
→ 原子认领
→ 前往动态厕所
→ 进入清洁工作
→ 完成任务
→ 回到巡回清洁
```
所以任务不是只显示在面板上,而是已经真正接入移动和工作执行链。
---
## 5. 当前能力边界
虽然基础闭环已经成立,但还不是完整的自主 NPC 系统。
### 已实现
- 知道当前校园时间对应的日程阶段;
- 知道当前应该去哪里;
- 知道任务名称、目标和状态;
- 能消费共享活动任务;
- 能消费个人紧急任务;
- 能按动态房间能力选择地点;
- 能处理目标房间不可用;
- 能被突发事件打断;
- 能到达、工作、完成和回写;
- 完成紧急任务后能重新回到普通活动或岗位;
- 保洁任务支持原子认领。
### 部分实现
#### 1. 优先级还没有完全统一比较
任务服务内部会按优先级排序:
- `scripts/系统/通用任务服务.lua:155`
但工作人员日程当前只要发现统一任务,就会直接返回:
- `scripts/小人/日程.lua:107`
这意味着:
```text
统一任务 priority=25
普通岗位 priority=30
```
目前仍可能因为“统一任务先返回”而执行 priority 25 的任务,并没有把所有普通岗位、日程任务和统一任务放在同一个比较器中。
也就是说,**优先级字段已经有了,但尚未完全成为跨系统的统一抢占规则**。
#### 2. 工作人员任务类型仍有限
目前工作人员统一任务主要接入了:
- 保洁清洁;
- 已指派紧急事件。
还没有完整接入:
- 教师授课任务;
- 体育老师带队;
- 食堂员工供餐;
- 校医主动巡诊;
- 保安定期巡逻与门禁任务的统一任务化。
#### 3. 房间删除后的生命周期还需补全
如果任务已经分配,但目标房间后来被删除或禁用,工作人员适配器会无法解析目标:
- `scripts/系统/工作人员任务适配器.lua:45`
- `scripts/系统/工作人员任务适配器.lua:73`
但目前还没有完整自动把这类任务统一回写为:
```text
blocked
cancelled
```
可能出现任务仍处于 `assigned`,但执行者已经无法获得有效目标的情况。这也是下一轮应补齐的明确边界。
#### 4. 没有长期计划和个人记忆
当前小人知道的是:
```text
现在几点
当前阶段是什么
当前最高优先级任务是什么
现在要去哪里
当前执行到哪一步
```
但还不知道:
- 今天后面还有哪些任务;
- 某个任务预计需要多久;
- 是否会与下一节课冲突;
- 自己过去执行过多少类似任务;
- 是否因为疲劳、关系或性格拒绝任务;
- 多个未来任务如何提前排序;
- 如何和其他小人协商、转交任务。
这需要后续增加“个人计划队列、需求状态、任务恢复和协作调度”,但当前阶段不必提前实现。
## 结论
**能,但属于“基础运行时认知与执行闭环”。**
当前小人已经可以回答四个核心问题:
```text
现在是什么时间?
当前校园处于什么阶段?
我现在应该做什么?
发生紧急事件后,我应该去哪里处理?
```
而且这些答案已经能够驱动导航、工作和完成回写,不只是 UI 文本。
尚未达到的是:
```text
对全天任务做长期规划
在多个普通任务和统一任务间进行完全一致的优先级竞争
处理所有职业
自动处理已分配任务目标失效
多人协作、转交和排队
```
因此,当前架构已经足够作为“小人自主日常行为系统”的骨架;下一项最有价值的完善不是继续添加特殊判断,而是补齐**工作人员任务目标失效后的 blocked/cancelled 回写,以及跨日程/岗位/统一任务的真正统一优先级比较**。


