From 61445caad7186ba2335a2aebc6f7f1cf9f844d3e Mon Sep 17 00:00:00 2001 From: Joywayer Date: Fri, 31 Jul 2026 11:32:01 +0800 Subject: [PATCH] =?UTF-8?q?docs(plan):=20Task4=20=E8=A1=A5=E4=B8=A4?= =?UTF-8?q?=E6=9D=A1=E7=BA=A6=E6=9D=9F=E2=80=94=E2=80=94=E4=B8=8D=E5=81=9A?= =?UTF-8?q?=E7=83=AD=E9=87=8D=E8=BD=BD=20+=20inverse=20=E7=9A=84=20hard=20?= =?UTF-8?q?=E8=AF=AD=E4=B9=89=E7=9B=B8=E5=8F=8D=E9=9C=80=E5=9C=A8=20UI=20?= =?UTF-8?q?=E4=BD=93=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit remove_modifiers_from 在无命中时提前返回,不是强制重新同步原语,故热重载不能 指望它;本页与其它设计器页一致,保存后提示重启生效即可。 inverse 下 hard 是下限、0 表示钳到 0,与 hybrid/add_int 的「0 = 不钳制」相反, 设计师填 0 期待「不限制」会得到相反结果,提示文案需体现。 Co-Authored-By: Claude Opus 5 --- docs_dev/plans/2026-07-31-player-attributes.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs_dev/plans/2026-07-31-player-attributes.md b/docs_dev/plans/2026-07-31-player-attributes.md index e320ed3..9089d63 100644 --- a/docs_dev/plans/2026-07-31-player-attributes.md +++ b/docs_dev/plans/2026-07-31-player-attributes.md @@ -454,6 +454,10 @@ EOF - Modify: `addons/game_designer/designer_panel.gd`(`_init()` 里 `_add_tab` 注册) > 按 CLAUDE.md「新增分页 3 步」:`@tool extends VBoxContainer` 标签脚本(复用 `designer_ui.gd`)→ `designer_panel.gd` 的 `_init()` 里 `_add_tab(...)` → 对应加载。控件一律经 `UI.spin/opt/btn/header/status_label/load_json/save_json` 创建,**不要**自建裸控件。标签「中文 English」双语序。`combine` 下拉**存 key 不存显示串**。 +> +> **不要做热重载**(Task 2 评审前瞻提醒):本页只编辑并保存 JSON,**不**尝试让运行中的 `PlayerStats` 立即生效 —— 与其它设计器页一致(保存后提示「重启 F5 生效」)。若日后真要加热重载,注意 `remove_modifiers_from` **不是**强制重新同步的原语(无命中时提前返回),必须自己调 `_load_attr_definitions()` + `_recompute_attrs()`。 +> +> **`inverse` 的 `hard` 语义与其它两种相反**(Task 1 实现者发现):`hybrid`/`add_int` 下 `hard=0` 表示「不钳制」,而 `inverse` 下 `hard` 是**下限**、`0` 表示「钳到 0」。设计器里编辑 `hard` 时应在提示文案中体现这个差异,否则设计师给 `inverse` 属性填 0 期待「不限制」会得到相反结果。 - [ ] **Step 1: 实现 `attribute_tab.gd`**