修复冒险完成后不回收奖励就进行炼金会丢失奖励的问题

This commit is contained in:
2025-10-31 10:30:29 +08:00
parent 4bddd4339f
commit 6f05ca98f1
2 changed files with 22 additions and 4 deletions

View File

@@ -122,6 +122,24 @@ WPSBotGame/
- 阻碍因素:无 - 阻碍因素:无
- 状态:成功 - 状态:成功
## 2025-10-31_10:27:59
- 已修改:
- games/alchemy.py修复冒险任务完成后自动删除状态导致奖励丢失的bug
- 更改:
1. **Bug修复**:修复冒险任务完成后奖励丢失问题
- **问题**:在 `_perform_alchemy` 中,当检测到冒险任务已完成时,代码会自动删除冒险状态(`self.db.delete_game_state`),但没有发放奖励,导致用户奖励丢失
- **修复**:移除自动删除逻辑,改为提示用户先使用 `.adventure` 回收奖励
- **修改前**:冒险完成后自动删除状态,允许炼金(导致奖励丢失)
- **修改后**:冒险完成后提示用户先回收奖励,不允许炼金,确保奖励只能通过 `.adventure` 命令回收
2. **行为变更**
- 冒险进行中:提示剩余时间,不允许炼金(保持不变)
- 冒险已完成:提示先回收奖励,不允许炼金(修复后)
- 用户使用 `.adventure`:发放奖励并删除状态(保持不变)
- 状态已删除:可以正常炼金(保持不变)
- 原因修复冒险任务完成后自动删除状态导致奖励丢失的严重bug确保用户必须先主动回收奖励才能继续其他操作
- 阻碍因素:无
- 状态:成功
# 详细实施记录 # 详细实施记录
## 文件修改清单 ## 文件修改清单
@@ -150,7 +168,7 @@ WPSBotGame/
- 使用 `get_game_state(0, user_id, 'adventure')` 查询状态 - 使用 `get_game_state(0, user_id, 'adventure')` 查询状态
- 如果存在状态: - 如果存在状态:
* 计算剩余时间 * 计算剩余时间
* 如果已完成:自动删除状态,允许继续 * 如果已完成:提示用户先使用 `.adventure` 回收奖励不允许炼金2025-10-31修复避免奖励丢失移除自动删除逻辑
* 如果未完成返回错误消息显示剩余时间X分Y秒 * 如果未完成返回错误消息显示剩余时间X分Y秒
- 异常处理:捕获状态数据异常,自动清理损坏状态 - 异常处理:捕获状态数据异常,自动清理损坏状态
@@ -206,7 +224,7 @@ state_data = {
### 游戏互斥机制 ### 游戏互斥机制
- 炼金前检查:查询冒险状态 - 炼金前检查:查询冒险状态
- 如果冒险进行中:返回错误,显示剩余时间 - 如果冒险进行中:返回错误,显示剩余时间
- 如果冒险已完成:自动清理状态,允许炼金 - 如果冒险已完成:提示用户先使用 `.adventure` 回收奖励,不允许炼金(修复后:确保奖励不会丢失)
- 状态异常:自动清理,允许继续操作 - 状态异常:自动清理,允许继续操作
# 最终审查 # 最终审查

View File

@@ -92,9 +92,9 @@ class AlchemyGame(BaseGame):
end_time = start_time + cost_time * 60 end_time = start_time + cost_time * 60
remaining_seconds = end_time - current_time remaining_seconds = end_time - current_time
# 如果冒险已完成,自动清理状态,允许炼金 # 如果冒险已完成,提示用户先回收奖励,不允许炼金
if remaining_seconds <= 0: if remaining_seconds <= 0:
self.db.delete_game_state(0, user_id, 'adventure') return f"❌ 你有待回收的冒险奖励!\n\n💡 请先使用 `.adventure` 回收冒险奖励后再进行炼金。"
else: else:
# 冒险未完成,返回错误提示 # 冒险未完成,返回错误提示
remaining_minutes = remaining_seconds // 60 remaining_minutes = remaining_seconds // 60