1.修复一些bug2.冒险现在可以放弃

This commit is contained in:
2025-11-10 21:03:18 +08:00
parent 40f754e57b
commit 092ef58f23
8 changed files with 301 additions and 33 deletions

View File

@@ -48,9 +48,11 @@ class WPSCombatAdventure(WPSCombatBase):
# 默认视为继续冒险,支持直接命令 `继续冒险`
return await self._handle_continue_adventure(chat_id, user_id, [])
# 判断是开始新冒险还是继续
# 判断是开始新冒险、继续或结束
command = tokens[0].lower()
if command in ["放弃", "停止"]:
return await self._handle_finish_adventure(chat_id, user_id)
if command in ["开始", "start"]:
# 开始新冒险第1阶段
food_items = tokens[1:] if len(tokens) > 1 else []
@@ -85,6 +87,56 @@ class WPSCombatAdventure(WPSCombatBase):
return await self.send_markdown_message(msg, chat_id, user_id)
async def _handle_finish_adventure(
self,
chat_id: int,
user_id: int
) -> Optional[str]:
"""处理结束冒险(不再继续)"""
service = self.service()
status = service.get_player_status(user_id)
if status.get("current_adventure_id"):
_success, msg = service.abort_current_adventure(user_id)
return await self.send_markdown_message(msg, chat_id, user_id)
last_record = service.get_last_adventure_record(user_id)
if not last_record:
return await self.send_markdown_message(
" 你尚未开始冒险,可使用 `冒险 开始`。",
chat_id,
user_id
)
record_status = last_record["status"]
stage = last_record["stage"]
if record_status == "success":
return await self.send_markdown_message(
(
f"✅ 第 {stage} 阶段冒险已完成并发放奖励。\n"
"若不再继续,冒险链已自然结束;未来可随时使用 `冒险 开始` 重新开启。"
),
chat_id,
user_id
)
if record_status == "failed":
return await self.send_markdown_message(
"❌ 最近一次冒险失败,奖励已结算且需要治疗或重新开始。",
chat_id,
user_id
)
if record_status == "abandoned":
return await self.send_markdown_message(
" 上一次冒险已放弃,无需额外操作。如需重新开启,请使用 `冒险 开始`。",
chat_id,
user_id
)
return await self.send_markdown_message(
f" 最近一次冒险状态为 {record_status},无需执行放弃指令。",
chat_id,
user_id
)
async def _handle_continue_adventure(
self,
chat_id: int,
@@ -105,37 +157,35 @@ class WPSCombatAdventure(WPSCombatBase):
user_id
)
# 查找最近一次冒险结果
from PWF.CoreModules.database import get_db
db = get_db()
cursor = db.conn.cursor()
cursor.execute(
"""
SELECT stage, status FROM combat_adventure_records
WHERE user_id = ?
ORDER BY adventure_id DESC
LIMIT 1
""",
(user_id,)
)
row = cursor.fetchone()
if not row:
last_record = service.get_last_adventure_record(user_id)
if not last_record:
return await self.send_markdown_message(
"❌ 你还没有完成任何冒险,请使用 `冒险 开始 [食物...]` 开始第1阶段",
chat_id,
user_id
)
if row["status"] != "success":
if last_record["status"] == "failed":
return await self.send_markdown_message(
"❌ 最近一次冒险失败,冒险已结束。请先使用 `冒险 开始 [食物...]` 重新从第1阶段开始",
chat_id,
user_id
)
if last_record["status"] == "abandoned":
return await self.send_markdown_message(
"⚠️ 最近一次冒险已被你放弃需要重新从第1阶段开始",
chat_id,
user_id
)
if last_record["status"] != "success":
return await self.send_markdown_message(
f"❌ 最近一次冒险状态为 {last_record['status']},无法继续。请使用 `冒险 开始 [食物...]` 重新冒险",
chat_id,
user_id
)
# 下一阶段
next_stage = row["stage"] + 1
next_stage = last_record["stage"] + 1
success, msg, adventure_id = service.start_adventure(
user_id=user_id,
@@ -165,21 +215,87 @@ class WPSCombatAdventure(WPSCombatBase):
return """# 🗺️ 冒险系统
**命令格式:**
- `冒险 开始 [食物1] [食物2] ...`开始第1阶段冒险
- `继续冒险 [食物1] [食物2] ...`:继续下一阶段
- `继续冒险 [食物1] [食物2] ...` 或 `冒险 继续 ...`:继续下一阶段
- `冒险 放弃`:结束当前冒险链(阶段奖励已结算)
- `停止冒险` / `放弃冒险`:在冒险进行中立即终止当前阶段(无奖励)
**说明:**
- 每个阶段耗时翻倍15min → 30min → 60min...
- 食物果酒是可选的可提供buff加成时间缩减、收益提升等
- 不提供食物也可以冒险只是没有buff加成
- 成功率受装备强度和运势影响
- 失败会受伤需消耗100积分治疗
- 成功后可选择继续或停止
- 阶段结束时立即判定成功/失败并发放奖励
- 完成后可选择继续下一阶段或直接放弃
- 冒险失败会受伤,需消耗100积分治疗
**示例:**
- `冒险 开始`不使用食物开始第1阶段
- `冒险 开始 薄荷果酒`使用1个薄荷果酒时间缩减10%
- `继续冒险 银杏果酒 银杏果酒`使用2个银杏果酒时间缩减20%
- `继续冒险 银杏果酒`:继续下一阶段并使用银杏果酒
- `冒险 放弃`:冒险阶段已结算但不再继续
"""
__all__ = ["WPSCombatAdventure"]
class WPSCombatAdventureAbort(WPSCombatBase):
"""冒险放弃指令插件"""
def is_enable_plugin(self) -> bool:
return True
def wake_up(self) -> None:
super().wake_up()
logger.Log(
"Info",
f"{ConsoleFrontColor.GREEN}WPSCombatAdventureAbort 插件已加载{ConsoleFrontColor.RESET}"
)
self.register_plugin("停止冒险")
self.register_plugin("放弃冒险")
self.register_plugin("abort_adventure")
async def callback(self, message: str, chat_id: int, user_id: int) -> Optional[str]:
"""直接放弃当前冒险"""
service = self.service()
status = service.get_player_status(user_id)
if status.get("current_adventure_id"):
_success, msg = service.abort_current_adventure(user_id)
return await self.send_markdown_message(msg, chat_id, user_id)
last_record = service.get_last_adventure_record(user_id)
if not last_record:
return await self.send_markdown_message(
" 你尚未开始冒险,可使用 `冒险 开始`。",
chat_id,
user_id
)
record_status = last_record["status"]
stage = last_record["stage"]
if record_status == "success":
return await self.send_markdown_message(
(
f"✅ 第 {stage} 阶段冒险已完成并发放奖励。\n"
"若不再继续,冒险链已自然结束;未来可随时使用 `冒险 开始` 重新开启。"
),
chat_id,
user_id
)
if record_status == "failed":
return await self.send_markdown_message(
"❌ 最近一次冒险失败,奖励已结算且需要治疗或重新开始。",
chat_id,
user_id
)
if record_status == "abandoned":
return await self.send_markdown_message(
" 上一次冒险已放弃,无需额外操作。如需重新开启,请使用 `冒险 开始`。",
chat_id,
user_id
)
return await self.send_markdown_message(
f" 最近一次冒险状态为 {record_status},无需执行放弃指令。",
chat_id,
user_id
)
__all__ = ["WPSCombatAdventure", "WPSCombatAdventureAbort"]