排行榜:修复一键领取
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user