排行榜:修复一键领取

This commit is contained in:
luying
2021-05-08 19:42:24 +08:00
parent 78e3c26a7a
commit 082266493a
4 changed files with 39 additions and 17 deletions

View File

@@ -11,6 +11,7 @@ import { GeneralRankParamRole, GeneralRankParamBattle, RoleRankInfo } from "../.
import { gameData } from "../../../pubUtils/data";
import { addItems } from "../../../services/rewardService";
import { HeroModel, HeroUpdate } from "../../../db/Hero";
import { RewardInter } from "../../../pubUtils/interface";
export default function (app: Application) {
return new RoleHandler(app);
@@ -153,26 +154,47 @@ export class RoleHandler {
let { type, id } = msg;
let dicReward = gameData.generalRankReward.get(id);
if(!dicReward || dicReward.rankId != type) return resResult(STATUS.WRONG_PARMS);
let ids: number[] = [];
if(id == 0) {
gameData.generalRankReward.forEach((dic, id)=> {
if(dic.rankId == type) {
ids.push(id);
}
});
} else {
ids.push(id);
}
let rewards: RewardInter[] = [];
let canReceiveId: number[] = [];
let role = await RoleModel.findByRoleId(roleId, 'rankReceived');
let redisKey = RANK_TYPE_TO_KEY.get(type);
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = await r.getRankByRange();
let num = ranks.length > 0? ranks[0].num: 0;
if(num < dicReward.condition) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
for(let id of ids) {
let dicReward = gameData.generalRankReward.get(id);
if(!dicReward || dicReward.rankId != type) continue;
let redisKey = RANK_TYPE_TO_KEY.get(type);
let r = new Rank(redisKey, { serverId }, false, 1);
let ranks = await r.getRankByRange();
let num = ranks.length > 0? ranks[0].num: 0;
if(num < dicReward.condition) continue;
if(role.rankReceived.includes(id)) continue;
let reward = dicReward.reward;
rewards = rewards.concat(reward);
canReceiveId.push(id);
}
let role = await RoleModel.receiveRankReward(roleId, id);
if(!role) return resResult(STATUS.REWARD_HAS_RECEIVED);
let reward = dicReward.reward;
let goods = await addItems(roleId, roleName, sid, reward);
role = await RoleModel.receiveRankReward(roleId, ids);
if(canReceiveId.length <= 0) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
let received = role.rankReceived.filter(rewardId => {
let dic = gameData.generalRankReward.get(rewardId);
return dic && dic.rankId == type;
});
let goods = await addItems(roleId, roleName, sid, rewards);
return resResult(STATUS.SUCCESS, {
type: type,
received,