/** * 武器解锁修复验证脚本 * 用于测试关卡完成后武器是否正确解锁 */ console.log('=== 武器解锁修复验证脚本 ==='); // 获取必要的管理器实例 function getManagers() { const gameManagerNode = cc.find('GameManager'); const gameManager = gameManagerNode ? gameManagerNode.getComponent('GameManager') : null; const saveDataManager = window.SaveDataManager ? window.SaveDataManager.getInstance() : null; const upgradeControllerNode = cc.find('Canvas/UpgradeUI'); const upgradeController = upgradeControllerNode ? upgradeControllerNode.getComponent('UpgradeController') : null; return { gameManager, saveDataManager, upgradeController }; } // 检查当前状态 function checkCurrentStatus() { console.log('\n=== 当前状态检查 ==='); const { saveDataManager, upgradeController } = getManagers(); if (!saveDataManager) { console.error('SaveDataManager未找到'); return; } const currentLevel = saveDataManager.getCurrentLevel(); const maxUnlockedLevel = saveDataManager.getMaxUnlockedLevel(); const money = saveDataManager.getMoney(); const diamonds = saveDataManager.getDiamonds(); console.log(`当前关卡: ${currentLevel}`); console.log(`最大解锁关卡: ${maxUnlockedLevel}`); console.log(`金钱: ${money}`); console.log(`钻石: ${diamonds}`); // 检查武器解锁状态 if (upgradeController && upgradeController.getWeaponUnlockStatus) { const weaponStatus = upgradeController.getWeaponUnlockStatus(); console.log('\n=== 武器解锁状态 ==='); console.log(`总武器数: ${weaponStatus.summary.total}`); console.log(`已解锁: ${weaponStatus.summary.unlocked}`); console.log(`应该解锁: ${weaponStatus.summary.shouldBeUnlocked}`); console.log(`需要更新: ${weaponStatus.summary.needsUpdate}`); if (weaponStatus.summary.needsUpdate > 0) { console.warn('⚠️ 发现武器解锁状态不一致!'); weaponStatus.weapons.forEach(weapon => { if (weapon.needsUpdate) { console.warn(` - ${weapon.name}: 应该解锁但未解锁 (需要关卡${weapon.requiredLevel})`); } }); } else { console.log('✅ 武器解锁状态正常'); } } } // 模拟关卡完成测试 function simulateLevelComplete(targetLevel) { console.log(`\n=== 模拟关卡${targetLevel}完成测试 ===`); const { saveDataManager, upgradeController } = getManagers(); if (!saveDataManager) { console.error('SaveDataManager未找到'); return; } // 记录修复前状态 const beforeMaxLevel = saveDataManager.getMaxUnlockedLevel(); console.log(`修复前最大解锁关卡: ${beforeMaxLevel}`); // 模拟GameEnd.ts中的修复逻辑 console.log('执行修复后的关卡完成逻辑...'); // 1. 先调用completeLevel更新maxUnlockedLevel saveDataManager.completeLevel(targetLevel, 0, 60); // 模拟60秒游戏时长 console.log('✅ 已调用completeLevel更新maxUnlockedLevel'); // 2. 然后给予奖励 saveDataManager.giveCompletionRewards(targetLevel).then(() => { console.log('✅ 已给予完成奖励'); // 3. 检查maxUnlockedLevel是否正确更新 const afterMaxLevel = saveDataManager.getMaxUnlockedLevel(); console.log(`修复后最大解锁关卡: ${afterMaxLevel}`); if (afterMaxLevel > beforeMaxLevel) { console.log('✅ maxUnlockedLevel正确更新'); // 4. 触发GAME_SUCCESS事件,让UpgradeController检查武器解锁 console.log('触发GAME_SUCCESS事件...'); const EventBus = window.EventBus || cc.EventBus; if (EventBus) { EventBus.getInstance().emit('GAME_SUCCESS'); console.log('✅ 已触发GAME_SUCCESS事件'); // 5. 检查武器是否正确解锁 setTimeout(() => { if (upgradeController && upgradeController.getWeaponUnlockStatus) { const weaponStatus = upgradeController.getWeaponUnlockStatus(); console.log('\n=== 武器解锁结果检查 ==='); const newlyUnlocked = weaponStatus.weapons.filter(w => w.requiredLevel <= afterMaxLevel && w.isCurrentlyUnlocked ); console.log(`应该解锁的武器数量: ${weaponStatus.summary.shouldBeUnlocked}`); console.log(`实际解锁的武器数量: ${weaponStatus.summary.unlocked}`); if (weaponStatus.summary.needsUpdate === 0) { console.log('🎉 武器解锁修复成功!所有武器状态正确'); } else { console.error('❌ 武器解锁仍有问题,需要进一步检查'); } // 显示详细的武器状态 weaponStatus.weapons.forEach(weapon => { const status = weapon.isCurrentlyUnlocked ? '✅已解锁' : weapon.shouldBeUnlocked ? '❌应解锁' : '⏳未达成'; console.log(` ${weapon.name}: ${status} (需要关卡${weapon.requiredLevel})`); }); } }, 100); } else { console.error('EventBus未找到,无法触发事件'); } } else { console.error('❌ maxUnlockedLevel未正确更新'); } }).catch(error => { console.error('给予奖励时出错:', error); }); } // 强制同步武器解锁状态 function forceSyncWeapons() { console.log('\n=== 强制同步武器解锁状态 ==='); const { upgradeController } = getManagers(); if (upgradeController && upgradeController.forceSyncWeaponUnlocks) { const result = upgradeController.forceSyncWeaponUnlocks(); if (result) { console.log('✅ 武器解锁状态强制同步完成'); } else { console.error('❌ 武器解锁状态同步失败'); } } else { console.error('UpgradeController或forceSyncWeaponUnlocks方法未找到'); } } // 诊断武器解锁问题 function diagnoseWeaponUnlock() { console.log('\n=== 武器解锁问题诊断 ==='); const { upgradeController } = getManagers(); if (upgradeController && upgradeController.diagnoseWeaponUnlockIssue) { upgradeController.diagnoseWeaponUnlockIssue(); } else { console.error('UpgradeController或diagnoseWeaponUnlockIssue方法未找到'); } } // 主测试函数 function runWeaponUnlockTest() { console.log('开始武器解锁修复验证测试...'); // 1. 检查当前状态 checkCurrentStatus(); // 2. 诊断问题 diagnoseWeaponUnlock(); // 3. 模拟关卡完成(测试关卡2,应该解锁尖胡萝卜) setTimeout(() => { simulateLevelComplete(2); }, 1000); } // 导出测试函数到全局 window.weaponUnlockTest = { runTest: runWeaponUnlockTest, checkStatus: checkCurrentStatus, simulateComplete: simulateLevelComplete, forceSync: forceSyncWeapons, diagnose: diagnoseWeaponUnlock }; console.log('\n=== 测试函数已准备就绪 ==='); console.log('使用方法:'); console.log('1. window.weaponUnlockTest.runTest() - 运行完整测试'); console.log('2. window.weaponUnlockTest.checkStatus() - 检查当前状态'); console.log('3. window.weaponUnlockTest.simulateComplete(2) - 模拟完成关卡2'); console.log('4. window.weaponUnlockTest.forceSync() - 强制同步武器状态'); console.log('5. window.weaponUnlockTest.diagnose() - 诊断武器解锁问题'); // 自动运行测试 if (typeof window !== 'undefined') { setTimeout(() => { runWeaponUnlockTest(); }, 2000); }