|
|
@@ -905,7 +905,7 @@ export class SaveDataManager {
|
|
|
/**
|
|
|
* 从JSON配置文件获取关卡奖励数据
|
|
|
*/
|
|
|
- public async getLevelRewardsFromConfig(levelId: number): Promise<{coins: number, diamonds: number} | null> {
|
|
|
+ public async getLevelRewardsFromConfig(levelId: number): Promise<{money: number, diamonds: number} | null> {
|
|
|
try {
|
|
|
// 由于不支持动态导入,改为直接导入
|
|
|
const configManager = LevelConfigManager.getInstance();
|
|
|
@@ -919,7 +919,7 @@ export class SaveDataManager {
|
|
|
if (levelConfig && levelConfig.levelSettings && (levelConfig.levelSettings as any).rewards) {
|
|
|
const rewards = (levelConfig.levelSettings as any).rewards;
|
|
|
return {
|
|
|
- coins: rewards.coins || 0,
|
|
|
+ money: rewards.coins || 0,
|
|
|
diamonds: rewards.diamonds || 0
|
|
|
};
|
|
|
}
|
|
|
@@ -937,7 +937,7 @@ export class SaveDataManager {
|
|
|
const jsonData = asset.json;
|
|
|
if (jsonData && jsonData.rewards) {
|
|
|
resolve({
|
|
|
- coins: jsonData.rewards.coins || 0,
|
|
|
+ money: jsonData.rewards.coins || 0,
|
|
|
diamonds: jsonData.rewards.diamonds || 0
|
|
|
});
|
|
|
} else {
|
|
|
@@ -964,9 +964,9 @@ export class SaveDataManager {
|
|
|
|
|
|
if (configRewards) {
|
|
|
// 使用JSON配置中的奖励数据
|
|
|
- if (configRewards.coins > 0) {
|
|
|
- this.addMoney(configRewards.coins, `level_${levelId}_complete`);
|
|
|
- actualCoins = configRewards.coins;
|
|
|
+ if (configRewards.money > 0) {
|
|
|
+ this.addMoney(configRewards.money, `level_${levelId}_complete`);
|
|
|
+ actualCoins = configRewards.money;
|
|
|
}
|
|
|
if (configRewards.diamonds > 0) {
|
|
|
this.addDiamonds(configRewards.diamonds, `level_${levelId}_complete`);
|
|
|
@@ -987,32 +987,41 @@ export class SaveDataManager {
|
|
|
* 根据波数比例给予失败奖励
|
|
|
*/
|
|
|
public async giveFailureRewards(levelId: number, completedWaves: number, totalWaves: number): Promise<void> {
|
|
|
- if (completedWaves <= 0 || totalWaves <= 0) {
|
|
|
- // 重置最近奖励为0
|
|
|
+ console.log(`[SaveDataManager] 计算失败奖励 - 关卡: ${levelId}, 完成波数: ${completedWaves}/${totalWaves}`);
|
|
|
+
|
|
|
+ if (totalWaves <= 0) {
|
|
|
+ console.warn('[SaveDataManager] 总波数无效,重置奖励为0');
|
|
|
this.lastRewards = {money: 0, diamonds: 0};
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // 即使completedWaves为0,也给予最低奖励(10%的基础奖励)
|
|
|
+ const minRewardRatio = 0.1; // 最低奖励比例
|
|
|
+ const actualCompletedWaves = Math.max(completedWaves, 0);
|
|
|
+ const waveRatio = Math.max(minRewardRatio, actualCompletedWaves / totalWaves);
|
|
|
+
|
|
|
+ console.log(`[SaveDataManager] 波数完成情况: ${actualCompletedWaves}/${totalWaves} = ${(waveRatio * 100).toFixed(1)}%`);
|
|
|
+
|
|
|
// 获取完整奖励数据
|
|
|
const configRewards = await this.getLevelRewardsFromConfig(levelId);
|
|
|
|
|
|
- // 计算波数完成比例
|
|
|
- const waveRatio = Math.min(completedWaves / totalWaves, 1.0);
|
|
|
-
|
|
|
let actualCoins = 0;
|
|
|
let actualDiamonds = 0;
|
|
|
|
|
|
if (configRewards) {
|
|
|
// 基于JSON配置计算比例奖励(取整)
|
|
|
- const partialCoins = Math.floor(configRewards.coins * waveRatio);
|
|
|
+ const partialCoins = Math.floor(configRewards.money * waveRatio);
|
|
|
const partialDiamonds = Math.floor(configRewards.diamonds * waveRatio);
|
|
|
|
|
|
+ console.log(`[SaveDataManager] 基于配置计算奖励 - 原始金币: ${configRewards.money}, 原始钻石: ${configRewards.diamonds}`);
|
|
|
+ console.log(`[SaveDataManager] 计算出的失败奖励 - 金币: ${partialCoins}, 钻石: ${partialDiamonds}`);
|
|
|
+
|
|
|
if (partialCoins > 0) {
|
|
|
- this.addMoney(partialCoins, `level_${levelId}_partial_${completedWaves}/${totalWaves}`);
|
|
|
+ this.addMoney(partialCoins, `level_${levelId}_partial_${actualCompletedWaves}/${totalWaves}`);
|
|
|
actualCoins = partialCoins;
|
|
|
}
|
|
|
if (partialDiamonds > 0) {
|
|
|
- this.addDiamonds(partialDiamonds, `level_${levelId}_partial_${completedWaves}/${totalWaves}`);
|
|
|
+ this.addDiamonds(partialDiamonds, `level_${levelId}_partial_${actualCompletedWaves}/${totalWaves}`);
|
|
|
actualDiamonds = partialDiamonds;
|
|
|
}
|
|
|
} else {
|
|
|
@@ -1020,12 +1029,16 @@ export class SaveDataManager {
|
|
|
const baseCoins = levelId * 50;
|
|
|
const partialCoins = Math.floor(baseCoins * waveRatio);
|
|
|
|
|
|
+ console.log(`[SaveDataManager] 使用默认计算 - 基础金币: ${baseCoins}, 计算出的失败奖励: ${partialCoins}`);
|
|
|
+
|
|
|
if (partialCoins > 0) {
|
|
|
- this.addMoney(partialCoins, `level_${levelId}_partial_${completedWaves}/${totalWaves}`);
|
|
|
+ this.addMoney(partialCoins, `level_${levelId}_partial_${actualCompletedWaves}/${totalWaves}`);
|
|
|
actualCoins = partialCoins;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ console.log(`[SaveDataManager] 最终失败奖励 - 金币: ${actualCoins}, 钻石: ${actualDiamonds}`);
|
|
|
+
|
|
|
// 存储最近的奖励记录
|
|
|
this.lastRewards = {money: actualCoins, diamonds: actualDiamonds};
|
|
|
}
|