Files
SectSimulator/doc/design/弟子系统设计.md
T

167 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 弟子系统设计(D3:生成 + 入宗分流)
> 对应开发计划表 D3(8/5)。本文档只描述设计,不包含代码。
> 状态:设计稿,待审阅通过后实现
---
## 一、数据模型(Disciple
弟子用一条数据记录表示,不挂在场景树上。
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | int | 唯一编号,由 DiscipleManager 自增分配 |
| `name` | String | 随机生成的姓名 |
| `age` | int | 入宗年龄(12~18 |
| `aptitude` | 枚举 Aptitude | 资质(入宗分流结果) |
| `roots` | 枚举数组 SpiritRoot | 灵根列表(普通弟子 1~3 根,互不重复) |
| `is_heavenly` | bool | 天灵根标记(稀有灵根,见枚举二) |
| `realm_index` | int | 大境界索引(0=练气),D5 修炼系统推进 |
| `sub_realm_index` | int | 小境界索引(练气层数-1),D5 修炼系统推进 |
### 枚举一:资质四类(Aptitude
| 值 | 名称 | 修炼速度倍率 | 说明 |
|----|------|-------------|------|
| 0 | 下品 | 0.6x | 根基平庸 |
| 1 | 中品 | 1.0x | 资质平平 |
| 2 | 上品 | 1.5x | 天赋尚可 |
| 3 | 天骄 | 2.0x | 万中无一 |
> 倍率由 D5 修炼循环使用,此处只定义不消费。
### 枚举二:灵根五行(SpiritRoot
金、木、水、火、土 五种。灵根数量影响修炼速度(根数越少越快),元素种类影响日后生产效率匹配(D6 建筑/职能系统使用),此处只生成不消费。
### 特殊灵根:天灵根
稀有灵根,独立于五行枚举之外,用 `is_heavenly` 标记:
| 项目 | 设定 |
|------|------|
| 生成概率 | 3%(远低于四类资质中"天骄"的 5%,天灵根可叠加于任意资质之上) |
| 灵根构成 | 仅一系灵根(五行之一),纯净单灵根 |
| 修炼速度 | 在资质倍率基础上**额外 +50%**(乘法叠加,D5 修炼循环消费) |
| 地位 | 宗门争抢的种子弟子,日后可挂靠特殊培养事件(W8 预留) |
> 天灵根与资质是两个独立维度:资质定天赋底子,天灵根是稀缺加成,二者随机独立。
### 境界字段说明
新弟子统一为练气一层(realm_index=0, sub_realm_index=0)。境界显示文本规则:
- 练气期:练气 N 层
- 筑基及以上:大境界 + 初/中/后/圆满
境界的成长、突破门槛、寿元计算全部留给 D5 修炼循环,D3 只负责初始状态。
---
## 二、生成规则(随机性)
### 1. 姓名
- 姓氏池:24 个常用修仙风单姓(林、苏、叶、萧、顾、沈、楚、白……)
- 名用字池:24 个(清、玄、墨、尘、风、澜、霜、珏……)
- 规则:随机 1 个姓 + 1~2 个字(50% 概率双字名)
- 不保证唯一(同名弟子可共存,以 id 区分)
### 2. 年龄
12~18 岁均匀随机。寿元消耗、大限判断留给 D5。
### 3. 灵根
- 普通弟子:数量 1~3 根均匀随机,元素从五行中随机抽取、互不重复
- 天灵根:3% 概率判定为天灵根,灵根数量固定 1 根,修炼速度额外 +50%
- 含义:单灵根修炼最快,三灵根最慢(对应修仙世界观)
### 4. 资质(入宗分流)
按权重表掷骰:
| 资质 | 权重 | 概率 |
|------|------|------|
| 下品 | 45 | 45% |
| 中品 | 35 | 35% |
| 上品 | 15 | 15% |
| 天骄 | 5 | 5% |
> 概率说明:开发阶段固定此分布,后期根据游戏难度测试调整权重即可,不改代码结构。
---
## 三、入宗分流
"入宗分流"的含义:**按资质将弟子分为四类**,这是生成时的一次性判定,不是持续运行的机制。四类资质弟子日后可能享受不同的培养路线(D4+ 扩展),本期只完成分类本身。
### 招募机制:定时自动招募
招募**不是玩家点击按钮随时进行**,而是按游戏时间自动进行:
- 间隔:每 **30 游戏日**1 个月)自动招募一名弟子
- 驱动:监听 `TimeSystem.day_passed` 信号倒计时,满 30 天触发一次
- 期间玩家无需任何操作,挂机即可收弟子(与挂机修炼节奏一致)
- 间隔常量可调(后期按宗门声望/规模动态调整,本期固定)
### 招募流程(文字时序)
1. DiscipleManager 倒计时归零(每 30 游戏日)
2. 生成一名弟子(先判天灵根 3% → 生成灵根 → 按权重掷资质 → 组名字)
3. 弟子加入宗门名录
4. 名录变化信号发出(供 UI 后续刷新,D4 列表 UI 消费)
5. 控制台打印该弟子完整信息(姓名/年龄/资质/灵根/境界)—— 本期验收方式
---
## 四、DiscipleManager 接口
| 接口 | 签名 | 说明 |
|------|------|------|
| `recruit()` | 返回新弟子 | 生成 + 分流 + 入名录,发信号(内部由定时器调用,也允许调试手动调用) |
| `remove_disciple(d)` | 入参弟子 | 移出名录,发信号(逐出/陨落) |
| `reset()` | 无 | 清空名录、ID 归零、招募倒计时复位(新游戏开局) |
| 信号 `disciples_changed` | 无参数 | 名录增删/重置时发出 |
内部私有方法(不对外):生成姓名、生成灵根(含天灵根判定)、掷资质。
内部定时机制:
- 字段 `_days_until_recruit`:距下次招募的剩余游戏天数,初始 30
- 监听 `TimeSystem.day_passed`,每日减 1,归零 → 招募一名 → 重置为 30
存放位置:`src/Character/`(与数据模型同目录),注册为 Autoload 单例,供全局访问。
---
## 五、UI 接入点
- 本期**不加任何按钮**:招募完全自动,顶栏无需改动
- 弟子信息通过控制台打印展示(验收方式)
- 名录的可视化列表属于 D4(弟子列表 UI),届时由 `disciples_changed` 信号驱动
---
## 六、与后续任务衔接
| 后续任务 | 衔接方式 |
|----------|----------|
| D4 弟子列表 UI | 监听 `disciples_changed` 信号 + 遍历 `disciples` 数组 |
| D5 修炼循环 | 消费 `aptitude` 倍率与 `realm_index/sub_realm_index` 字段 |
| D6 建筑/职能系统 | 消费 `roots` 元素与生产效率匹配 |
| D8 存档接入 | Disciple 数据模型为纯数据,可直接序列化 |
---
## 七、验收清单(D3 交付标准)
- [ ] 项目能正常启动,无脚本报错
- [ ] 进入游戏后**无需操作**,每 30 游戏日(挂机约 15 秒 @1x)自动招募一名弟子
- [ ] 控制台每次招募打印弟子完整信息(姓名/年龄/资质/灵根/境界)
- [ ] 连续观察多个游戏月,每次生成不同弟子,名录持续增长
- [ ] 资质四类均可能出现(多次招募后抽样观察分布)
- [ ] 多次招募后能观察到天灵根弟子(约 3% 概率,控制台有标记)
- [ ] 返回主菜单再进入,名录已清空(reset 生效)