docs: 弟子系统设计更新为弹窗招募机制+配置系统

This commit is contained in:
2026-08-06 00:14:01 +08:00
parent a3cbd738ad
commit c5c7c57799
+51 -24
View File
@@ -97,22 +97,24 @@
"入宗分流"的含义:**按资质将弟子分为四类**,这是生成时的一次性判定,不是持续运行的机制。四类资质弟子日后可能享受不同的培养路线(D4+ 扩展),本期只完成分类本身。
### 招募机制:定时自动招募
### 招募机制:定时弹窗招募
招募**不是玩家点击按钮随时进行**,而是按游戏时间自动进行
招募**不是玩家随时点按钮**,而是"生成候选 → 暂停时间 → 弹窗选择"
- 间隔:每 **30 游戏日**1 个月)自动招募一名弟子
- 驱动:监听 `TimeSystem.day_passed` 信号倒计时,满 30 天触发一次
- 期间玩家无需任何操作,挂机即可收弟子(与挂机修炼节奏一致
- 间隔常量可调(后期按宗门声望/规模动态调整,本期固定)
- **开局招募**:新游戏开始,生成 **5 名候选**,暂停时间弹窗,**必须选满 3 名**才能确定
- **定期招募**:每满间隔(配置文件 `recruit_interval_years`,默认 0.1 年 = 36 天)生成 **3 名候选**,暂停时间弹窗
- **选择方式**:每个候选独立勾选"入宗",可全部接受、可全部拒绝(定期招募可 0~3 个
- **结算**:点"确定" → 勾选的入宗、未勾选的拒绝 → 关闭弹窗 → **恢复时间**
- 所有参数(候选数、必选数、间隔)来自 `resources/game_config.cfg`,改配置即改难度
### 招募流程(文字时序)
1. DiscipleManager 倒计时归零(每 30 游戏日
2. 生成一名弟子(先判天灵根 3% → 生成灵根 → 按权重掷资质 → 组名字)
3. 弟子加入宗门名录
4. 名录变化信号发出(供 UI 后续刷新,D4 列表 UI 消费
5. 控制台打印该弟子完整信息(姓名/年龄/资质/灵根/境界)—— 本期验收方式
1. 开局(MainGame 调用 `start_new_game()`)或倒计时归零(`_on_day_passed`
2. 生成候选弟子(先判天灵根 3% → 生成灵根 → 按权重掷资质 → 组名字),进入候选池
3. `applicants_generated(is_opening)` 信号发出 → 弹窗显示候选列表
4. 玩家勾选(开局模式:确定按钮在选满 3 名前禁用
5. 点"确定" → `finish_recruitment(selected)` 结算 → 恢复时间
6. 控制台打印每位入宗弟子完整信息(姓名/年龄/资质/灵根/境界)—— 本期验收方式
---
@@ -120,26 +122,49 @@
| 接口 | 签名 | 说明 |
|------|------|------|
| `recruit()` | 返回新弟子 | 生成 + 分流 + 入名录,发信号(内部由定时器调用,也允许调试手动调用) |
| `remove_disciple(d)` | 入参弟子 | 移出名录,发信号(逐出/陨落) |
| `reset()` | 无 | 清空名录、ID 归零、招募倒计时复位(新游戏开局) |
| `start_new_game()` | 无 | 清空全部数据 → 开局候选(配置数量)→ 暂停时间 |
| `generate_applicants(count, is_opening)` | 返回无 | 清空候选池 → 生成 count 名候选 → 发信号 |
| `accept_applicant(d)` | 入参候选 | 分配 ID,候选池 → 名录,发信号,控制台打印 |
| `reject_applicant(d)` | 入参候选 | 从候选池移除 |
| `finish_recruitment(selected)` | 入参选中列表 | 结算:selected 内的入宗,其余全部拒绝 |
| `remove_disciple(d)` | 入参弟子 | 移出名录(逐出/陨落) |
| `reset()` | 无 | 清空名录与候选池、ID 与倒计时复位 |
| 信号 `disciples_changed` | 无参数 | 名录增删/重置时发出 |
| 信号 `applicants_generated(is_opening)` | bool | 候选生成时发出(弹窗监听) |
内部私有方法(不对外):生成姓名、生成灵根(含天灵根判定)、掷资质。
内部私有方法(不对外):生成姓名、生成灵根(含天灵根判定)、掷资质、创建候选、间隔换算
内部定时机制:
- 字段 `_days_until_recruit`:距下次招募的剩余游戏天数,初始 30
- 监听 `TimeSystem.day_passed`,每日减 1,归零 → 招募一名 → 重置为 30
- 字段 `_days_until_recruit`:距下次定期招募的剩余游戏天数
- 间隔 = `GameConfig.recruit_interval_years` × 360 天(TimeSystem 常量换算)
- 监听 `TimeSystem.day_passed`,每日减 1,归零 → 生成候选 → `TimeSystem.set_paused(true)`(弹窗期间时间冻结)
存放位置:`src/Character/`(与数据模型同目录),注册为 Autoload 单例,供全局访问。
## 四·五、配置系统(GameConfig
所有可调参数集中在 `resources/game_config.cfg`,由 `src/Core/GameConfig.gd`Autoload,声明在 DiscipleManager 之前)启动时读取,缺项回退代码默认值。
```ini
[recruitment]
opening_applicant_count=5 ; 开局候选人数
opening_pick_count=3 ; 开局必须选满数
recruit_interval_years=0.1 ; 定期招募间隔(游戏年)
recruit_applicant_count=3 ; 定期弹窗候选人数
```
> 以后所有可调参数(天赋权重、价格、境界门槛等)统一加到这里。
---
## 五、UI 接入点
- 本期**不加任何按钮**:招募完全自动,顶栏无需改动
- 弟子信息通过控制台打印展示(验收方式)
- **RecruitPanel**`src/UI/Panels/RecruitPanel/`):弹窗场景,挂在 MainGame 下(默认隐藏)
- 监听 `applicants_generated` 信号自动弹出
- 每个候选一行:姓名/年龄/资质(天灵根标记)/灵根/境界 + "入宗"勾选框
- 底部:全部接受 / 全部拒绝 / 确定
- 开局模式确定按钮在选满 3 名前禁用;确定后关闭弹窗并恢复时间
- 名录的可视化列表属于 D4(弟子列表 UI),届时由 `disciples_changed` 信号驱动
---
@@ -158,9 +183,11 @@
## 七、验收清单(D3 交付标准)
- [ ] 项目能正常启动,无脚本报错
- [ ] 进入游戏后**无需操作**,每 30 游戏日(挂机约 15 秒 @1x)自动招募一名弟子
- [ ] 控制台每次招募打印弟子完整信息(姓名/年龄/资质/灵根/境界)
- [ ] 连续观察多个游戏月,每次生成不同弟子,名录持续增长
- [ ] 资质四类均可能出现(多次招募后抽样观察分布)
- [ ] 多次招募后能观察到天灵根弟子(约 3% 概率,控制台有标记)
- [ ] **开局**:进入游戏即暂停,弹出"弟子入宗(开局招募)",显示 5 名候选
- [ ] 开局模式确定按钮在选满 3 名前不可用;选满后可确定
- [ ] 确定后:勾选的 3 名入宗(控制台打印),时间恢复推进
- [ ] **定期**:每 36 游戏日(0.1 年 @1x ≈ 18 秒)再次暂停弹窗,显示 3 名候选
- [ ] 定期模式可勾选 0~3 名,全部拒绝也可确定;时间正常恢复
- [ ] 多次招募后能观察到天灵根弟子(约 3% 概率,弹窗/控制台有标记)
- [ ] 修改 `game_config.cfg``opening_applicant_count` 等参数,重启后开局候选数随之变化
- [ ] 返回主菜单再进入,名录已清空(reset 生效)