🐞 fix(军团): 练兵场等级奖励跨军团领取重复问题
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
|
||||
//购买挑战次数
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user