From 5a8eb6cbd85716105208769a8d7b7f67614d44e2 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Thu, 13 Nov 2025 23:15:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=81=B7=E8=8F=9C=E5=90=8E?= =?UTF-8?q?=E6=94=B6=E8=8E=B7=E6=9E=9C=E5=AE=9E=E6=95=B0=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .tasks/2025-11-13_1_garden-steal-bug.md | 29 +++++++++++++++++++ .../WPSGardenSystem/garden_plugin_steal.py | 1 + Plugins/WPSGardenSystem/garden_service.py | 10 +++++-- 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 .tasks/2025-11-13_1_garden-steal-bug.md diff --git a/.tasks/2025-11-13_1_garden-steal-bug.md b/.tasks/2025-11-13_1_garden-steal-bug.md new file mode 100644 index 0000000..5fa3473 --- /dev/null +++ b/.tasks/2025-11-13_1_garden-steal-bug.md @@ -0,0 +1,29 @@ +# 背景 +文件名: 2025-11-13_1_garden-steal-bug.md +创建于: 2025-11-13_22:02:46 +创建者: ASUS +主分支: main +任务分支: (未创建) +Yolo模式: Off + +# 任务描述 +当前菜园系统偷取后完全不会减少收获时的果实数量, 找到这个bug的解决方案 + +# 项目概览 +WPSBot 项目的菜园系统及相关偷取逻辑。 + +# 分析 +在 `garden_service.py` 中,`steal` 会把 `remaining_fruit` 减 1 并更新数据库。 +但 `harvest` 在结算时仍直接使用 `plot["base_yield"]` 作为产量,并在结算后删除地块记录,完全忽略了被偷后更新过的 `remaining_fruit`。 +因此,偷取行为不会影响最终收获数量,符合报告的问题表现。 + +# 提议的解决方案 +- 在 `GardenService.harvest` 中使用 `remaining_fruit` 作为实际收获量,确保偷取后的剩余数量被正确结算。 +- 保留 `base_yield` 仅用于偷取阈值等初始参数,避免改动其它逻辑。 + +# 当前执行步骤:"5. 待用户验证" + +# 任务进度 +- 2025-11-13_23:05:44|已修改:Plugins/WPSGardenSystem/garden_service.py|将收获逻辑切换为使用 `remaining_fruit` 作为产量,并保留初始产量信息|原因:确保偷取后剩余数在收获时生效|阻碍因素:无|状态:未确认 + +# 最终审查 diff --git a/Plugins/WPSGardenSystem/garden_plugin_steal.py b/Plugins/WPSGardenSystem/garden_plugin_steal.py index ea33904..2352e41 100644 --- a/Plugins/WPSGardenSystem/garden_plugin_steal.py +++ b/Plugins/WPSGardenSystem/garden_plugin_steal.py @@ -55,6 +55,7 @@ class WPSGardenSteal(WPSGardenBase): super().wake_up() self.register_plugin("steal") self.register_plugin("偷取") + self.register_plugin("偷菜") async def callback(self, message: str, chat_id: int, user_id: int) -> Optional[str]: payload = self.parse_message_after_at(message).strip() diff --git a/Plugins/WPSGardenSystem/garden_service.py b/Plugins/WPSGardenSystem/garden_service.py index ceda423..63d5f92 100644 --- a/Plugins/WPSGardenSystem/garden_service.py +++ b/Plugins/WPSGardenSystem/garden_service.py @@ -187,7 +187,10 @@ class GardenService: crop = GARDEN_CROPS.get(plot["seed_id"]) if not crop: raise ValueError("未知作物") - base_yield = int(plot["base_yield"]) + initial_yield = int(plot["base_yield"]) + remaining_fruit = int(plot["remaining_fruit"]) + if remaining_fruit < 0: + remaining_fruit = 0 extra_reward = None if crop.extra_reward: base_rate = crop.extra_reward.base_rate @@ -199,7 +202,7 @@ class GardenService: if crop.extra_reward.kind == "points": data = crop.extra_reward.payload max_points = min( - data.get("max", base_yield * crop.seed_price), + data.get("max", initial_yield * crop.seed_price), crop.seed_price * self._config.sale_multiplier, ) min_points = data.get("min", 0) @@ -219,9 +222,10 @@ class GardenService: } result = { "crop": crop, - "base_yield": base_yield, + "base_yield": remaining_fruit, "extra": extra_reward, } + result["initial_yield"] = initial_yield cursor = self._db.conn.cursor() cursor.execute( "DELETE FROM garden_plots WHERE user_id = ? AND plot_index = ?",