修复 Disciple 模型:放宽 _init 字典形参、显式化小境界上限类型推断

- _init 形参由 Dictionary[String, Variant] 放宽为 Dictionary:
  duplicate() 产物为普通字典,运行时类型校验导致 create() 失败
- SUB_MAX_BY_REALM 索引两处改用显式 int 声明,消除 Cannot infer 错误
- doc/弟子管理.md 补充修炼经验说明
This commit is contained in:
2026-09-10 00:27:36 +08:00
parent 2dbbe48f96
commit f38bcfd210
2 changed files with 10 additions and 4 deletions
+6
View File
@@ -116,3 +116,9 @@ func load_from_dict(d) -> void
graph TD graph TD
A[分配属性总量,按正正态分布] --> B[随机分配5种属性,属性之和为1] --> C[分配灵气利用率] A[分配属性总量,按正正态分布] --> B[随机分配5种属性,属性之和为1] --> C[分配灵气利用率]
``` ```
## 修炼说明
每个小境界修炼需要的经验 = 基础经验值 * 属性总量
经验获取量 = 基础经验 * 灵气吸收效率
+3 -3
View File
@@ -137,7 +137,7 @@ var total_amount: int:
## 构造:按 data 覆盖属性,数值属性经 RANGES 夹取;缺键保留字段默认值。 ## 构造:按 data 覆盖属性,数值属性经 RANGES 夹取;缺键保留字段默认值。
## @param data: 键名与属性名一致,如 {"id": 1, "name": "玄真", "metal": 60} ## @param data: 键名与属性名一致,如 {"id": 1, "name": "玄真", "metal": 60}
func _init(data: Dictionary[String, Variant] = {}) -> void: func _init(data: Dictionary = {}) -> void:
if data.has("id"): if data.has("id"):
id = int(data["id"]) id = int(data["id"])
if data.has("name"): if data.has("name"):
@@ -187,12 +187,12 @@ func set_attr(key: String, value: int) -> bool:
if key == "realm_level": if key == "realm_level":
# 大境界变化后,小境界不得超过新境界的上限(如落入凡人则强制 1) # 大境界变化后,小境界不得超过新境界的上限(如落入凡人则强制 1)
set("realm_level", v) set("realm_level", v)
var max_sub := SUB_MAX_BY_REALM[v] var max_sub : int = SUB_MAX_BY_REALM[v]
if int(get("sub_realm_level")) > max_sub: if int(get("sub_realm_level")) > max_sub:
set("sub_realm_level", max_sub) set("sub_realm_level", max_sub)
elif key == "sub_realm_level": elif key == "sub_realm_level":
# 小境界写入时按当前大境界上限夹取(凡人上限 1 / 练气 13 / 其余 4) # 小境界写入时按当前大境界上限夹取(凡人上限 1 / 练气 13 / 其余 4)
var max_sub := SUB_MAX_BY_REALM[int(get("realm_level"))] var max_sub : int = SUB_MAX_BY_REALM[int(get("realm_level"))]
set("sub_realm_level", clampi(v, 1, max_sub)) set("sub_realm_level", clampi(v, 1, max_sub))
else: else:
set(key, v) set(key, v)