From f38bcfd21047739bc98509712b25de74cc966502 Mon Sep 17 00:00:00 2001 From: chen Date: Thu, 10 Sep 2026 00:27:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Disciple=20=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=EF=BC=9A=E6=94=BE=E5=AE=BD=20=5Finit=20=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E5=BD=A2=E5=8F=82=E3=80=81=E6=98=BE=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E5=B0=8F=E5=A2=83=E7=95=8C=E4=B8=8A=E9=99=90=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _init 形参由 Dictionary[String, Variant] 放宽为 Dictionary: duplicate() 产物为普通字典,运行时类型校验导致 create() 失败 - SUB_MAX_BY_REALM 索引两处改用显式 int 声明,消除 Cannot infer 错误 - doc/弟子管理.md 补充修炼经验说明 --- doc/弟子管理.md | 8 +++++++- src/Data/Models/Disciple.gd | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/doc/弟子管理.md b/doc/弟子管理.md index 3fa9b2a..cab430b 100644 --- a/doc/弟子管理.md +++ b/doc/弟子管理.md @@ -115,4 +115,10 @@ func load_from_dict(d) -> void ```mermaid graph TD A[分配属性总量,按正正态分布] --> B[随机分配5种属性,属性之和为1] --> C[分配灵气利用率] -``` \ No newline at end of file +``` + +## 修炼说明 + +每个小境界修炼需要的经验 = 基础经验值 * 属性总量 + +经验获取量 = 基础经验 * 灵气吸收效率 diff --git a/src/Data/Models/Disciple.gd b/src/Data/Models/Disciple.gd index 50f86ad..2c70226 100644 --- a/src/Data/Models/Disciple.gd +++ b/src/Data/Models/Disciple.gd @@ -137,7 +137,7 @@ var total_amount: int: ## 构造:按 data 覆盖属性,数值属性经 RANGES 夹取;缺键保留字段默认值。 ## @param data: 键名与属性名一致,如 {"id": 1, "name": "玄真", "metal": 60} -func _init(data: Dictionary[String, Variant] = {}) -> void: +func _init(data: Dictionary = {}) -> void: if data.has("id"): id = int(data["id"]) if data.has("name"): @@ -187,12 +187,12 @@ func set_attr(key: String, value: int) -> bool: if key == "realm_level": # 大境界变化后,小境界不得超过新境界的上限(如落入凡人则强制 1) 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: set("sub_realm_level", max_sub) elif key == "sub_realm_level": # 小境界写入时按当前大境界上限夹取(凡人上限 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)) else: set(key, v)