fix(shop): 新局启动接线 ShopManager.reset(),修复购买记录跨局残留

ShopManager.reset() 此前从未被任何地方调用(grep 零命中):PlayerStats.reset_for_run()
只清 _modifiers,_attr_purchases 不清,两份状态跨局错开——新局价格从已购价起算、
UI 显示「已购 N 次」却生效值是基准值,且买任意一件属性会把整份旧 _attr_purchases
重新套用回 PlayerStats(复现:hp_max 购买 2 次后重开局,加成消失但计数还在;
再买一次 hp_max 后旧的两次加成随之复活)。在 start_game() 内 PlayerStats.reset_for_run()
之后调用 ShopManager.reset()——顺序不能反,reset() 会撤销 shop_c 加成,须晚于
reset_for_run() 清空 _modifiers 之后才不会把两处清理搅乱。
This commit is contained in:
2026-08-03 12:50:56 +08:00
parent 7c8c1ec564
commit 56d7eefdc8
+5
View File
@@ -39,6 +39,11 @@ func _ready() -> void:
## 开始新局
func start_game() -> void:
PlayerStats.reset_for_run()
# ShopManager.reset() 必须晚于 reset_for_run():它会撤销 shop_c 加成(remove_modifiers_from
# 经 _apply_attr_purchases),若先于 reset_for_run 调用,reset_for_run 清空 _modifiers 时
# 不会同步清 _attr_purchases,两份状态就此错开——新的一局会显示「已购 N 次」却生效值是基准值,
# 且下次购买会把整份旧 _attr_purchases 重新套用回 PlayerStats(复现过程见本轮评审 Finding 1)。
ShopManager.reset()
WaveManager.reset()
BulletManager.reset()
EnemyManager.reset()