125 lines
6.0 KiB
Markdown
125 lines
6.0 KiB
Markdown
# 弟子属性设计
|
||
|
||
本文件定义弟子(Disciple)的属性体系、境界规则与派生逻辑,是 `src/Data/Models/Disciple.gd` 的实现依据。关联:`doc/弟子管理.md`(模块设计)、`doc/模块联动.md`(联动规范)、`doc/Roadmap.md`(P1 核心循环)。
|
||
|
||
## 1. 属性列表(权威定义)
|
||
|
||
| 名称 | 范围 | 说明 |
|
||
|:---|:---|:---|
|
||
| metal | [0, 100] | 金属性值 |
|
||
| wood | [0, 100] | 木属性值 |
|
||
| water | [0, 100] | 水属性值 |
|
||
| fire | [0, 100] | 火属性值 |
|
||
| earth | [0, 100] | 土属性值 |
|
||
| efficiency | [1, 100] | 灵气吸收效率,决定修炼速度,隐藏属性 |
|
||
| realm_level | [0, 5] | 大境界,凡人、练气、筑基、金丹、元婴、化神 |
|
||
| sub_realm_level | [1, 13] | 凡人只有一个小境界;练气 13 个小境界,其他各有前、中、后、大圆满四个小境界 |
|
||
| cultivation_exp | [0, 2147483647] | 修炼经验 |
|
||
| farming_exp | [0, 2147483647] | 耕作技能经验 |
|
||
| farming_level | [0, 10] | 耕作技能等级 |
|
||
| herb_exp | [0, 2147483647] | 药草耕作技能经验 |
|
||
| herb_level | [0, 10] | 药草耕作技能等级 |
|
||
| alchemy_exp | [0, 2147483647] | 炼丹技能经验 |
|
||
| alchemy_level | [0, 10] | 炼丹技能等级 |
|
||
| loyalty | [0, 100] | 忠诚度 |
|
||
|
||
> 字段说明:`id` 只读,由管理器分配;`name` 普通字符串。原设计中的 `is_mortal`、`cultivation_skill`、`alchemy_skill` 单值字段由下述规则取代,不单独存字段。
|
||
|
||
## 2. 境界体系
|
||
|
||
大境界 `realm_level` 与显示名、小境界 `sub_realm_level` 数量:
|
||
|
||
| realm | 名称 | sub 范围 | 小境界显示 |
|
||
| --- | --- | --- | --- |
|
||
| 0 | 凡人 | 固定 1 | 凡人 |
|
||
| 1 | 练气 | 1~13 | 练气X层(1~13 层) |
|
||
| 2 | 筑基 | 1~4 | 筑基前期 / 中期 / 后期 / 大圆满 |
|
||
| 3 | 金丹 | 1~4 | 金丹前期 / 中期 / 后期 / 大圆满 |
|
||
| 4 | 元婴 | 1~4 | 元婴前期 / 中期 / 后期 / 大圆满 |
|
||
| 5 | 化神 | 1~4 | 化神前期 / 中期 / 后期 / 大圆满 |
|
||
|
||
## 3. 灵根(五行推导,不存字段)
|
||
|
||
有灵根的凡人才能修炼破境。**任一五行属性 ≥ 阈值(占位 20,待调参)即具灵根**:
|
||
|
||
- 有灵根 → 可修炼:凡人期积累修炼经验,满后破境入练气
|
||
- 无灵根 → 终生为凡,永不涨修炼经验(且大境界 0)
|
||
|
||
派生:`has_spiritual_root()`;凡俗判定 `is_mortal() = (realm_level == 0) 且 无灵根`。
|
||
|
||
## 4. 经验规则
|
||
|
||
### 4.1 修炼经验(cultivation_exp)
|
||
|
||
- 每个小境界有经验上限(曲线表配置,见 §5)
|
||
- **跨小境界**:经验满自动突破 sub+1,溢出部分**继承**到下一个小境界
|
||
- **跨大境界**:sub 到顶(练气 13 / 其他 4)再满,realm+1 且 sub=1,溢出部分**清零**
|
||
- 化神大圆满封顶,不再获得修炼经验
|
||
- 突破自动进行(回合结算时处理),暂不设额外条件
|
||
|
||
### 4.2 技能经验(farming / herb_farming / alchemy 三套相同规则)
|
||
|
||
- 每跨一级,溢出的经验**继承**到下一级,直到升满(10 级)为止
|
||
- 满级后继续获得的经验**不再累积**(经验不会提升)
|
||
- 每个等级所需经验由配置文件给出(曲线表,见 §5)
|
||
|
||
### 4.3 效率的作用
|
||
|
||
`efficiency` 决定修炼速度(隐藏属性),不直接改变经验上限;具体月收益公式由管理器结算实现,数值待调参。
|
||
|
||
## 5. 经验曲线表(放 Disciple.gd 内部 const,占位待调参)
|
||
|
||
> 存储决策:曲线表先以常量写在 `Disciple.gd` 内部,自包含易调;静态内容层方案(CSV/Resource)落地后再迁移。
|
||
|
||
### 5.1 修炼曲线 CULTIVATION_EXP_CAPS
|
||
|
||
键为 `"{realm}_{sub}"`,共 30 条(凡人 1 + 练气 13 + 筑基/金丹/元婴/化神 各 4)。凡人期条目(`0_1`)供有灵根凡人积累经验破境用;化神大圆满(`5_4`)无上限(哨兵)。
|
||
|
||
```
|
||
{"0_1": 100, "1_1": 100, "1_2": 110, ... 占位递增,待调参}
|
||
```
|
||
|
||
### 5.2 技能曲线 SKILL_EXP_CAPS
|
||
|
||
10 条,表示 level N → N+1 所需经验(N = 0~9)。三套技能暂共用一张表,将来可拆分。
|
||
|
||
```
|
||
[100, 120, 140, ...] 占位,待调参
|
||
```
|
||
|
||
## 6. 读写与派生接口(数据类 API)
|
||
|
||
数值属性读写统一走键名接口(RANGES 为合法键与夹取范围的唯一权威):
|
||
|
||
```gdscript
|
||
func has_attr(key: String) -> bool # key 是否为登记表中的数值属性
|
||
func get_attr(key: String) -> int # 读数值属性(未知键 push_error 返回 0)
|
||
func set_attr(key: String, value: int) -> bool # 写数值属性(夹取 + 境界/小境界联动约束)
|
||
```
|
||
|
||
> 说明:`id` 只读语义(由 `create()` 分配),`name` 为字符串不入 RANGES;两者直接字段访问。`total_amount` 为只读属性(实时由五行之和计算)。
|
||
|
||
派生只读方法(境界体系相关,实现时见 §2):
|
||
|
||
| 方法 | 逻辑 |
|
||
| --- | --- |
|
||
| `total_amount`(只读属性) | 五行之和(实时派生) |
|
||
| `has_spiritual_root() -> bool` | 任一五行 ≥ 灵根阈值 |
|
||
| `can_cultivate() -> bool` | 有灵根 且 未满级 |
|
||
| `is_mortal() -> bool` | realm 0 且无灵根 |
|
||
| `sub_realm_max() -> int` | 当前大境界的小境界上限(查 SUB_MAX_BY_REALM) |
|
||
| `exp_cap() -> int` | 当前 (realm, sub) 修炼经验上限(查曲线);满级返哨兵 |
|
||
| `realm_name() -> String` | 完整显示名:凡人 / 练气5层 / 筑基后期 / 化神大圆满 |
|
||
|
||
> 状态迁移(突破、升级、经验增减)属领域操作,归 DiscipleManager(见 `doc/弟子管理.md`),数据类只提供纯查询。
|
||
|
||
## 7. 夹取与写入约束
|
||
|
||
- `RANGES` 常量表为 17 个属性的合法范围唯一权威,`create()` 与管理器 `set_attr()` 共用
|
||
- 属性全部普通字段(每属性 1 行声明),不带 setter 样板;夹取收口在两处写入口
|
||
- 直接写字段不夹取,依赖 `doc/弟子管理.md` "修改只走管理器"纪律
|
||
|
||
## 8. 变更记录
|
||
|
||
- 2026-09-07:确立属性列表、境界体系(0~5 + sub)、灵根五行推导、经验曲线表结构;本文档由与 opencode 的讨论结论整理(本文件前身为占位草稿)
|