🐞 fix(军团): 练兵场等级奖励跨军团领取重复问题

This commit is contained in:
luying
2023-04-17 18:14:06 +08:00
parent cd15438f86
commit 3eb472030f
5 changed files with 244 additions and 108 deletions
@@ -4,7 +4,7 @@ import { DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON, STATUS, TASK_TYPE, TRAIN_REWARD_T
import { GuildTrainModel } from '../../../db/GuildTrain';
import { BattleRecordModel } from '../../../db/BattleRecord';
import { nowSeconds, getTimeFun, getZeroPoint } from '../../../pubUtils/timeUtil';
import { refreshTrain, getGuildTrainInfo, unlockTrain, getGuildTrainRewards, getGuildTrainInstance, getTrainBoxRewardsResult, resetTrain, getTrainBoxRewardsResultWithoutAlreadyGeted } from '../../../services/guildTrainService';
import { refreshTrain, getGuildTrainInfo, unlockTrain, getGuildTrainRewards, getGuildTrainInstance, getTrainBoxRewardsResult, resetTrain, getTrainBoxRewardsResultWithoutAlreadyGeted, checkGuildTrainReward, transTrainReward } from '../../../services/guildTrainService';
import { findIndex, findWhere } from 'underscore'
import { lockData } from '../../../services/redLockService';
import { GUILD_REPORT_NUM, GUILD_POINT_WAYS } from '../../../consts/constModules/guildConst';
@@ -348,16 +348,15 @@ export class GuildTrainHandler {
let guildTrain = await GuildTrainModel.findTrainByTrainIdNotLock(code, trainId);
if (!guildTrain || !guildTrain.isComplete)
return resResult(STATUS.GUILD_TRAIN_IS_NOT_COMPLETE);
let { jinjieReward } = getArmyTrainJuDian(trainId);
if (userGuild.trainRewards.indexOf(trainId) != -1)
let { jinjieReward, trainLv } = getArmyTrainJuDian(trainId);
if (!checkGuildTrainReward(userGuild.trainRewards, trainId))
return resResult(STATUS.GUILD_TRAIN_QUALITY_REWARD_IS_GOT);
userGuild = await UserGuildModel.receiveTrainRewards(roleId, trainId);
if (!userGuild) {
return resResult(STATUS.INTERNAL_ERR);
}
let goods = await addItems(roleId, roleName, sid, jinjieReward, ITEM_CHANGE_REASON.TRAIN_LV_REWARD);
let { trainRewards } = userGuild;
return resResult(STATUS.SUCCESS, { trainRewards, goods });
return resResult(STATUS.SUCCESS, { trainRewards: transTrainReward(userGuild.trainRewards, trainLv), goods });
}
//购买挑战次数
+30 -2
View File
@@ -137,7 +137,7 @@ export function getGuildTrainInfo (guildTrain: GuildTrainType, roleId: string,
// myRank = {roleId: rankRoleId, score, rankLv: index+1};
// return {roleId: rankRoleId, score, rankLv: index+1};
// });
let { trainInstances: instances } = getArmyTrainJuDian(trainId);
let { trainInstances: instances, trainLv } = getArmyTrainJuDian(trainId);
let resTrainInstances = trainInstances.map(({hid, progress, endTime})=>{
let instance = findWhere(instances, { hid });
let isComplete = false;
@@ -147,7 +147,7 @@ export function getGuildTrainInfo (guildTrain: GuildTrainType, roleId: string,
});
let resGuildTrain = {trainId, isComplete, trainInstances: resTrainInstances, myRank: 0, ranks: [] };
return { guildTrain: resGuildTrain, trainCount, trainRewards};
return { guildTrain: resGuildTrain, trainCount, trainRewards: transTrainReward(trainRewards, trainLv)};
}
/**
* 解锁试炼trainId
@@ -291,4 +291,32 @@ export async function getGuildTrainInstance(roleId: string, guild: GuildType, us
result.buyTrainCount = buyTrainCount || 0;
result.trainLv = trainLv;
return result;
}
/**
* 检查某trainId是否可以领取
* @param trainRewards 玩家记录中已经领取过了的试炼奖励id
* @param trainId 玩家将要领取的试炼奖励id
*/
export function checkGuildTrainReward(trainRewards: number[], trainId: number) {
let dicJudian = getArmyTrainJuDian(trainId);
if(!dicJudian) return false;
let sameIndexOfcurTrain = gameData.trainIdByIndex.get(dicJudian.index)||new Map();
for(let [_lv, trainId] of sameIndexOfcurTrain) {
if(trainRewards.indexOf(trainId) != -1) return false; // 领取过
}
return true
}
/**
* 将玩家已经领取过的记录按照当前军团等级转换
* @param lv 等级
* @param trainRewards 玩家领取记录
*/
export function transTrainReward(trainRewards: number[], lv: number) {
return trainRewards.map(trainId => {
let dicJudian = getArmyTrainJuDian(trainId);
let dicNewTrain = gameData.trainIdByIndex.get(dicJudian?.index)||new Map();
return dicNewTrain?.get(lv)||0
})
}