diff --git a/.tasks/2025-11-09_1_garden-system.md b/.tasks/2025-11-09_1_garden-system.md index 4f6622a..4b23d2e 100644 --- a/.tasks/2025-11-09_1_garden-system.md +++ b/.tasks/2025-11-09_1_garden-system.md @@ -82,5 +82,12 @@ Yolo模式: Off - 阻碍因素:无 - 状态:未确认 +2025-11-10_01:30:57 +- 已修改:Plugins/WPSGardenSystem/garden_models.py Plugins/WPSGardenSystem/garden_plugin_base.py +- 更改:新增果酒物品定义并注册背包与商店模式,炼金成功产物改为果酒,成功率统一 75%。 +- 原因:取消高亏损的“果实→种子”配方,为后续系统提供果酒物品。 +- 阻碍因素:无 +- 状态:未确认 + # 最终审查 (待补充) diff --git a/Plugins/WPSGardenSystem/garden_models.py b/Plugins/WPSGardenSystem/garden_models.py index d6117a0..ba6866b 100644 --- a/Plugins/WPSGardenSystem/garden_models.py +++ b/Plugins/WPSGardenSystem/garden_models.py @@ -33,6 +33,8 @@ class GardenCropDefinition(BaseModel): base_yield: int extra_reward: GardenExtraReward extra_item_id: str | None = None + wine_item_id: str | None = None + wine_tier: str | None = None class Config: allow_mutation = False @@ -60,6 +62,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = ( seed_price=30, base_yield=4, extra_reward=GardenExtraReward(kind="points", payload={"min": 10, "max": 120}, base_rate=0.6), + wine_item_id="garden_wine_mint", + wine_tier="rare", ), GardenCropDefinition( seed_id="garden_seed_basil", @@ -70,6 +74,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = ( seed_price=36, base_yield=5, extra_reward=GardenExtraReward(kind="points", payload={"min": 15, "max": 150}, base_rate=0.55), + wine_item_id="garden_wine_basil", + wine_tier="rare", ), GardenCropDefinition( seed_id="garden_seed_sage", @@ -80,6 +86,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = ( seed_price=42, base_yield=5, extra_reward=GardenExtraReward(kind="points", payload={"min": 20, "max": 180}, base_rate=0.5), + wine_item_id="garden_wine_sage", + wine_tier="rare", ), GardenCropDefinition( seed_id="garden_seed_rosemary", @@ -90,6 +98,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = ( seed_price=50, base_yield=6, extra_reward=GardenExtraReward(kind="points", payload={"min": 30, "max": 220}, base_rate=0.45), + wine_item_id="garden_wine_rosemary", + wine_tier="rare", ), ) @@ -104,6 +114,8 @@ RARE_TREE_CROPS: Tuple[GardenCropDefinition, ...] = ( base_yield=3, extra_reward=GardenExtraReward(kind="item", payload={"min": 2, "max": 6}, base_rate=0.5), extra_item_id="garden_wood_ginkgo", + wine_item_id="garden_wine_ginkgo", + wine_tier="epic", ), GardenCropDefinition( seed_id="garden_seed_sakura", @@ -115,6 +127,8 @@ RARE_TREE_CROPS: Tuple[GardenCropDefinition, ...] = ( base_yield=3, extra_reward=GardenExtraReward(kind="item", payload={"min": 3, "max": 8}, base_rate=0.45), extra_item_id="garden_wood_sakura", + wine_item_id="garden_wine_sakura", + wine_tier="epic", ), GardenCropDefinition( seed_id="garden_seed_maple", @@ -126,6 +140,8 @@ RARE_TREE_CROPS: Tuple[GardenCropDefinition, ...] = ( base_yield=4, extra_reward=GardenExtraReward(kind="item", payload={"min": 4, "max": 10}, base_rate=0.4), extra_item_id="garden_wood_maple", + wine_item_id="garden_wine_maple", + wine_tier="epic", ), ) diff --git a/Plugins/WPSGardenSystem/garden_plugin_base.py b/Plugins/WPSGardenSystem/garden_plugin_base.py index 0a9587a..ddb83da 100644 --- a/Plugins/WPSGardenSystem/garden_plugin_base.py +++ b/Plugins/WPSGardenSystem/garden_plugin_base.py @@ -70,13 +70,35 @@ class WPSGardenBase(WPSAPI): self._safe_register_item(backpack, crop.fruit_id, fruit_name, tier) if crop.extra_reward and crop.extra_reward.kind == "item" and crop.extra_item_id: wood_name = f"{crop.display_name}的木材" - self._safe_register_item(backpack, crop.extra_item_id, wood_name, BackpackItemTier.RARE) + self._safe_register_item( + backpack, + crop.extra_item_id, + wood_name, + BackpackItemTier.RARE, + ) + if crop.wine_item_id and crop.wine_tier: + wine_tier = getattr(BackpackItemTier, crop.wine_tier.upper(), BackpackItemTier.RARE) + wine_name = f"{crop.display_name}的果酒" + self._safe_register_item( + backpack, + crop.wine_item_id, + wine_name, + wine_tier, + ) self._safe_register_mode( store, crop, limit_amount=service.config.seed_store_limit, ) + if crop.wine_item_id and crop.wine_tier: + wine_price = crop.seed_price * service.config.sale_multiplier * 5 + self._safe_register_wine_mode( + store, + crop.wine_item_id, + wine_price, + limit_amount=service.config.seed_store_limit, + ) self._safe_register_recipe(alchemy, crop) for item_id, meta in GARDEN_MISC_ITEMS.items(): @@ -121,16 +143,35 @@ class WPSGardenBase(WPSAPI): except Exception: pass + def _safe_register_wine_mode( + self, + store: WPSStoreSystem, + item_id: str, + price: int, + *, + limit_amount: int, + ) -> None: + try: + store.register_mode( + item_id=item_id, + price=price, + limit_amount=limit_amount, + ) + except Exception: + pass + def _safe_register_recipe( self, alchemy: WPSAlchemyGame, crop: GardenCropDefinition, ) -> None: try: - success_rate = 0.75 if crop.tier == "common" else 0.6 + if not crop.wine_item_id: + return + success_rate = 0.75 alchemy.register_recipe( (crop.fruit_id, crop.fruit_id, crop.fruit_id), - crop.seed_id, + crop.wine_item_id, "garden_item_rot_fruit", success_rate, )