将果酒替换为果实炼金的产物

This commit is contained in:
2025-11-10 01:44:42 +08:00
parent cdb3433b8a
commit 5eed9afd11
3 changed files with 67 additions and 3 deletions

View File

@@ -82,5 +82,12 @@ Yolo模式: Off
- 阻碍因素:无 - 阻碍因素:无
- 状态:未确认 - 状态:未确认
2025-11-10_01:30:57
- 已修改Plugins/WPSGardenSystem/garden_models.py Plugins/WPSGardenSystem/garden_plugin_base.py
- 更改:新增果酒物品定义并注册背包与商店模式,炼金成功产物改为果酒,成功率统一 75%。
- 原因:取消高亏损的“果实→种子”配方,为后续系统提供果酒物品。
- 阻碍因素:无
- 状态:未确认
# 最终审查 # 最终审查
(待补充) (待补充)

View File

@@ -33,6 +33,8 @@ class GardenCropDefinition(BaseModel):
base_yield: int base_yield: int
extra_reward: GardenExtraReward extra_reward: GardenExtraReward
extra_item_id: str | None = None extra_item_id: str | None = None
wine_item_id: str | None = None
wine_tier: str | None = None
class Config: class Config:
allow_mutation = False allow_mutation = False
@@ -60,6 +62,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = (
seed_price=30, seed_price=30,
base_yield=4, base_yield=4,
extra_reward=GardenExtraReward(kind="points", payload={"min": 10, "max": 120}, base_rate=0.6), extra_reward=GardenExtraReward(kind="points", payload={"min": 10, "max": 120}, base_rate=0.6),
wine_item_id="garden_wine_mint",
wine_tier="rare",
), ),
GardenCropDefinition( GardenCropDefinition(
seed_id="garden_seed_basil", seed_id="garden_seed_basil",
@@ -70,6 +74,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = (
seed_price=36, seed_price=36,
base_yield=5, base_yield=5,
extra_reward=GardenExtraReward(kind="points", payload={"min": 15, "max": 150}, base_rate=0.55), extra_reward=GardenExtraReward(kind="points", payload={"min": 15, "max": 150}, base_rate=0.55),
wine_item_id="garden_wine_basil",
wine_tier="rare",
), ),
GardenCropDefinition( GardenCropDefinition(
seed_id="garden_seed_sage", seed_id="garden_seed_sage",
@@ -80,6 +86,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = (
seed_price=42, seed_price=42,
base_yield=5, base_yield=5,
extra_reward=GardenExtraReward(kind="points", payload={"min": 20, "max": 180}, base_rate=0.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( GardenCropDefinition(
seed_id="garden_seed_rosemary", seed_id="garden_seed_rosemary",
@@ -90,6 +98,8 @@ COMMON_HERB_CROPS: Tuple[GardenCropDefinition, ...] = (
seed_price=50, seed_price=50,
base_yield=6, base_yield=6,
extra_reward=GardenExtraReward(kind="points", payload={"min": 30, "max": 220}, base_rate=0.45), 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, base_yield=3,
extra_reward=GardenExtraReward(kind="item", payload={"min": 2, "max": 6}, base_rate=0.5), extra_reward=GardenExtraReward(kind="item", payload={"min": 2, "max": 6}, base_rate=0.5),
extra_item_id="garden_wood_ginkgo", extra_item_id="garden_wood_ginkgo",
wine_item_id="garden_wine_ginkgo",
wine_tier="epic",
), ),
GardenCropDefinition( GardenCropDefinition(
seed_id="garden_seed_sakura", seed_id="garden_seed_sakura",
@@ -115,6 +127,8 @@ RARE_TREE_CROPS: Tuple[GardenCropDefinition, ...] = (
base_yield=3, base_yield=3,
extra_reward=GardenExtraReward(kind="item", payload={"min": 3, "max": 8}, base_rate=0.45), extra_reward=GardenExtraReward(kind="item", payload={"min": 3, "max": 8}, base_rate=0.45),
extra_item_id="garden_wood_sakura", extra_item_id="garden_wood_sakura",
wine_item_id="garden_wine_sakura",
wine_tier="epic",
), ),
GardenCropDefinition( GardenCropDefinition(
seed_id="garden_seed_maple", seed_id="garden_seed_maple",
@@ -126,6 +140,8 @@ RARE_TREE_CROPS: Tuple[GardenCropDefinition, ...] = (
base_yield=4, base_yield=4,
extra_reward=GardenExtraReward(kind="item", payload={"min": 4, "max": 10}, base_rate=0.4), extra_reward=GardenExtraReward(kind="item", payload={"min": 4, "max": 10}, base_rate=0.4),
extra_item_id="garden_wood_maple", extra_item_id="garden_wood_maple",
wine_item_id="garden_wine_maple",
wine_tier="epic",
), ),
) )

View File

@@ -70,13 +70,35 @@ class WPSGardenBase(WPSAPI):
self._safe_register_item(backpack, crop.fruit_id, fruit_name, tier) 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: if crop.extra_reward and crop.extra_reward.kind == "item" and crop.extra_item_id:
wood_name = f"{crop.display_name}的木材" 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( self._safe_register_mode(
store, store,
crop, crop,
limit_amount=service.config.seed_store_limit, 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) self._safe_register_recipe(alchemy, crop)
for item_id, meta in GARDEN_MISC_ITEMS.items(): for item_id, meta in GARDEN_MISC_ITEMS.items():
@@ -121,16 +143,35 @@ class WPSGardenBase(WPSAPI):
except Exception: except Exception:
pass 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( def _safe_register_recipe(
self, self,
alchemy: WPSAlchemyGame, alchemy: WPSAlchemyGame,
crop: GardenCropDefinition, crop: GardenCropDefinition,
) -> None: ) -> None:
try: 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( alchemy.register_recipe(
(crop.fruit_id, crop.fruit_id, crop.fruit_id), (crop.fruit_id, crop.fruit_id, crop.fruit_id),
crop.seed_id, crop.wine_item_id,
"garden_item_rot_fruit", "garden_item_rot_fruit",
success_rate, success_rate,
) )