# 武器解锁问题修复指南 ## 问题描述 当前关卡是第五关,但武器只解锁到第三关,按理说应该解锁到第四关的西瓜炸弹。 ## 问题原因 可能的原因包括: 1. 武器配置加载时序问题(已修复) 2. 存档数据中的maxUnlockedLevel与实际关卡进度不同步 3. 武器解锁逻辑在关卡完成时未正确触发 ## 修复方案 ### 方案1:使用浏览器控制台诊断 1. 打开游戏页面 2. 按F12打开开发者工具 3. 切换到Console(控制台)标签 4. 运行以下命令进行诊断: ```javascript // 诊断武器解锁问题 window.upgradeController?.diagnoseWeaponUnlockIssue(); ``` ### 方案2:强制同步武器解锁状态 如果诊断发现武器解锁状态不正确,运行以下命令修复: ```javascript // 强制同步武器解锁状态 window.upgradeController?.forceSyncWeaponUnlocks(); ``` ### 方案3:使用调试脚本 1. 在浏览器控制台中运行调试脚本(已创建debug_save_data.js) 2. 查看存档数据状态 3. 使用修复函数: ```javascript fixWeaponUnlocks(); ``` ### 方案4:手动修复存档数据 如果以上方案都不起作用,可以手动修复localStorage中的存档数据: ```javascript // 获取当前存档数据 const saveData = JSON.parse(localStorage.getItem('playerData')); // 检查maxUnlockedLevel console.log('当前最大解锁关卡:', saveData.maxUnlockedLevel); // 如果maxUnlockedLevel小于5,手动设置 if (saveData.maxUnlockedLevel < 5) { saveData.maxUnlockedLevel = 5; localStorage.setItem('playerData', JSON.stringify(saveData)); console.log('已更新最大解锁关卡为5'); } // 手动解锁西瓜炸弹 if (!saveData.inventory) saveData.inventory = { weapons: {} }; if (!saveData.inventory.weapons) saveData.inventory.weapons = {}; saveData.inventory.weapons['watermelon_bomb'] = { id: 'watermelon_bomb', level: 1, experience: 0, rarity: 'common', unlockTime: Date.now() }; localStorage.setItem('playerData', JSON.stringify(saveData)); console.log('已手动解锁西瓜炸弹'); // 刷新页面查看效果 location.reload(); ``` ## 代码修复内容 ### 1. 修复了异步加载顺序问题 - 将`loadWeaponsConfig()`改为异步等待 - 确保武器配置在初始化检查之前完全加载 ### 2. 增强了调试功能 - 添加了`diagnoseWeaponUnlockIssue()`方法用于问题诊断 - 改进了`forceSyncWeaponUnlocks()`方法的日志输出 - 将UpgradeController实例暴露到全局window对象 ### 3. 改进了初始化流程 ```typescript async start() { // 先加载武器配置 await this.loadWeaponsConfig(); // 加载关卡配置 await this.loadLevelConfigs(); // 初始化武器数据 this.initializeWeapons(); // 初始化时检查武器解锁状态 this.checkInitialWeaponUnlocks(); // 刷新UI this.refreshWeaponList(); this.upgradePanel.active = false; } ``` ## 预防措施 1. 确保关卡完成事件正确触发SaveDataManager.completeLevel() 2. 定期检查maxUnlockedLevel与实际游戏进度的一致性 3. 在游戏启动时进行武器解锁状态验证 ## 测试步骤 1. 重新启动游戏 2. 检查武器解锁状态是否正确 3. 完成一关后验证新武器是否自动解锁 4. 使用诊断工具确认数据一致性 如果问题仍然存在,请提供控制台输出的诊断信息以便进一步分析。