| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- /**
- * 武器解锁修复验证脚本
- * 用于测试关卡完成后武器是否正确解锁
- */
- 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);
- }
|