From 56d7eefdc8d707e98cd2389c9bd1f0b4d45fc4b0 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Mon, 3 Aug 2026 12:50:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(shop):=20=E6=96=B0=E5=B1=80=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E6=8E=A5=E7=BA=BF=20ShopManager.reset()=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B4=AD=E4=B9=B0=E8=AE=B0=E5=BD=95=E8=B7=A8?= =?UTF-8?q?=E5=B1=80=E6=AE=8B=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 之后才不会把两处清理搅乱。 --- scripts/domain/combat/combat_manager.gd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/domain/combat/combat_manager.gd b/scripts/domain/combat/combat_manager.gd index 88a5775..9398e8b 100644 --- a/scripts/domain/combat/combat_manager.gd +++ b/scripts/domain/combat/combat_manager.gd @@ -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()