新增菜园陷阱

This commit is contained in:
2025-11-15 17:06:12 +08:00
parent 3a5c0b2eda
commit 5d08fa0820
7 changed files with 660 additions and 3 deletions

View File

@@ -26,6 +26,22 @@ class GardenExtraReward(BaseModel):
allow_mutation = False
class GardenTrapDefinition(BaseModel):
"""陷阱物品定义"""
item_id: str
display_name: str
tier: str # common / rare / epic / legendary
description: str
trigger_rate: float = Field(..., ge=0.0, le=1.0, description="触发概率")
fine_points: int = Field(..., ge=0, description="罚金积分")
ban_hours: int = Field(..., ge=0, description="禁止偷盗时长(小时)")
durability: int = Field(..., ge=1, description="耐久度(可触发次数)")
trigger_message: str = Field(..., description="触发时发送给偷盗者的消息")
class Config:
allow_mutation = False
class GardenCropDefinition(BaseModel):
seed_id: str
fruit_id: str
@@ -382,6 +398,57 @@ GARDEN_MISC_ITEMS = {
}
}
# 陷阱物品定义
GARDEN_TRAPS: Tuple[GardenTrapDefinition, ...] = (
GardenTrapDefinition(
item_id="garden_trap_net",
display_name="防盗网",
tier="common",
description="基础防护陷阱50%概率触发,对偷盗者造成小额罚金并短时禁止偷盗。",
trigger_rate=0.5,
fine_points=1000,
ban_hours=12,
durability=1, # 普通陷阱1次使用
trigger_message="🕸️ 你触发了防盗网!被罚款 {fine} 分,并且在 {hours} 小时内无法继续偷盗。",
),
GardenTrapDefinition(
item_id="garden_trap_thorn",
display_name="荆棘陷阱",
tier="rare",
description="带刺的防护陷阱60%概率触发,造成中等罚金并禁止偷盗更长时间。",
trigger_rate=0.6,
fine_points=2500,
ban_hours=24,
durability=2, # 稀有陷阱2次使用
trigger_message="🌵 你踩到了荆棘陷阱!被罚款 {fine} 分,并且在 {hours} 小时内无法继续偷盗。",
),
GardenTrapDefinition(
item_id="garden_trap_magic",
display_name="魔法结界",
tier="epic",
description="强大的魔法防护70%概率触发,造成高额罚金并长时间禁止偷盗。",
trigger_rate=0.7,
fine_points=5000,
ban_hours=48,
durability=3, # 史诗陷阱4次使用
trigger_message="✨ 你触碰到了魔法结界!被罚款 {fine} 分,并且在 {hours} 小时内无法继续偷盗。",
),
GardenTrapDefinition(
item_id="garden_trap_legend",
display_name="传奇守护",
tier="legendary",
description="传说级的防护装置80%概率触发,造成巨额罚金并长期禁止偷盗。",
trigger_rate=0.8,
fine_points=10000,
ban_hours=72,
durability=4, # 传说陷阱4次使用
trigger_message="⚡ 你惊醒了传奇守护!被罚款 {fine} 分,并且在 {hours} 小时内无法继续偷盗。",
),
)
# 陷阱物品字典item_id -> GardenTrapDefinition
GARDEN_TRAPS_DICT: Dict[str, GardenTrapDefinition] = {trap.item_id: trap for trap in GARDEN_TRAPS}
def get_garden_db_models() -> List[DatabaseModel]:
return [
@@ -402,18 +469,32 @@ def get_garden_db_models() -> List[DatabaseModel]:
"remaining_fruit": "INTEGER NOT NULL",
"theft_users": "TEXT DEFAULT '[]'",
"scheduled_task_id": "INTEGER",
"trap_item_id": "TEXT",
"trap_config": "TEXT",
"trap_durability": "INTEGER DEFAULT 0",
"PRIMARY KEY (user_id, plot_index)": "",
},
),
DatabaseModel(
table_name="garden_theft_ban",
column_defs={
"user_id": "INTEGER NOT NULL",
"banned_until": "TEXT NOT NULL",
"PRIMARY KEY (user_id)": "",
},
),
]
__all__ = [
"GardenCropDefinition",
"GardenExtraReward",
"GardenTrapDefinition",
"GARDEN_CROPS",
"GARDEN_FRUITS",
"GARDEN_MISC_ITEMS",
"GARDEN_TRAPS",
"GARDEN_TRAPS_DICT",
"get_garden_db_models",
"load_crops_from_config",
"register_crop",