Files
spellforge/docs_dev
joywayer 5889b3c1e5 fix(shop): 可售属性排除未接线项,修正路线图「零代码」表述
get_sellable_attrs() 此前只看 attributes.json 是否有 shop 段,不看 PlayerStats
是否真的实现了该属性。运行时实测:给一个合成属性加 shop 段(不改任何代码)会被列出、
可买、扣钱、购买计数增加,但 get_attr_value 永远读到 0.00——玩家买到的是空气,
且 _at_soft_cap 因为 0.0 < soft 永远不封顶,变相无限花钱买无效果。

PlayerStats 新增 has_attr(attr_id) 谓词(查 _attr_effective,只有 _recompute_attrs
真正算过的属性才算数,不是查 _attr_def 有没有这一节);get_sellable_attrs 用它做
第二道过滤。诊断特意拆进独立函数 _report_unwired_shop_attrs 才调用 push_error+assert——
实测 assert(false) 在本项目运行环境下会让「当前函数」提前返回声明类型的默认值:若诊断写
在收集循环里,一旦命中就会让 get_sellable_attrs 本身连同已收集好的合法属性一起返回空数组,
比原来的「静默卖空气」更糟(整个货架消失);拆成独立函数调用后,中断只发生在诊断函数
自己的调用帧内,调用方(get_sellable_attrs)仍会正常继续并返回过滤后的正确列表。
已注入未接线属性验证:4 个合法属性照常出现,注入项被排除,无一致性问题。

顺带订正路线图 docs_dev/plans/2026-07-23-missing-features-roadmap.md 里「加 shop 段
即可上架、零代码」的表述——该结论只在属性已先接入 PlayerStats 框架(player_stats.gd
的裸字段 + _recompute_attrs 分支 + _attr_effective 条目,以及 attribute_tab.gd 的
ATTR_ORDER)之后才成立,E3-① 延后的 7 个属性都还没有这一步;同时记录商店属性子面板
当前坐标最多容纳 6 行的限制,供后续实现者提前规划。
2026-08-03 12:51:13 +08:00
..

docs_dev —— 开发过程 / 归档文档

本目录存放开发过程中产生的计划、追踪与历史归档类文档,与 docs/(面向产品的设计规范与架构参考)区分开。

产品文档索引见 ../docs/README.md

文档 类型 内容简述
doc_code_audit_2026-07-20.md 审计 文档 vs 代码交叉审计:三大结构性分歧、更优/偏离/未实现分类清单、潜在 bug、文档内部矛盾(2026-07-20
2026-07-23-native-migration-notes.md 笔记 / 迁移备忘 ① GDScript 陷阱:PackedArray 返回值是活引用别名,复用缓冲会被重入覆写(query_circle 优化翻车教训);② C#/C++ 激活期接缝一致性项:SpatialGridCs 常量对齐(已修)、EnemyManager 原型字典需 C# 侧自建原生数组(待办·迁移期)
development_plan.md 计划 / 追踪 S0–S6 骨架垂直切片开发计划、技术风险登记表、各切片验收与出口检查、P-S* 任务勾选
certification_checklist.md 计划 / 追踪 Steam / Nintendo Switch 平台发行认证清单,映射到对应切片,含状态列
archived_cocos_architecture_draft.md 归档(已废弃) 早期基于 Cocos Creator 3.x / TypeScript 的架构草案。项目已迁移至 Godot 4.6,权威架构见 ../docs/technical/architecture_design.md

说明:这些文档中以文件名(如 architecture_design.md §4.5)方式引用的权威架构/实现文档,均位于 ../docs/technical/ 下。