diff --git a/game-server/app/servers/role/handler/rankHandler.ts b/game-server/app/servers/role/handler/rankHandler.ts index 450e927cc..5045b0000 100644 --- a/game-server/app/servers/role/handler/rankHandler.ts +++ b/game-server/app/servers/role/handler/rankHandler.ts @@ -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, diff --git a/shared/db/Role.ts b/shared/db/Role.ts index dfda633e3..265f0b5af 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -1,4 +1,4 @@ -import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE, TIME_OUTPUT_TYPE } from './../consts'; +import { HANG_UP_CONSTS, ROLE_TERAPH, ROLE_SELECT, ABI_TYPE } from './../consts'; import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose'; import User from './User'; @@ -641,8 +641,8 @@ export default class Role extends BaseModel { return roles[Math.floor(roles.length / 2)] } - public static async receiveRankReward(roleId: string, id: number) { - const role: RoleType = await RoleModel.findOneAndUpdate({ roleId, rankReceived: { $nin: [id] } }, { $push: { rankReceived: id } }, { new: true }).lean(); + public static async receiveRankReward(roleId: string, ids: number[]) { + const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { rankReceived: { $each: ids } } }, { new: true }).lean(); return role; } } diff --git a/shared/domain/activityField/thirtyDaysField.ts b/shared/domain/activityField/thirtyDaysField.ts index 1a8195498..9cac862c3 100644 --- a/shared/domain/activityField/thirtyDaysField.ts +++ b/shared/domain/activityField/thirtyDaysField.ts @@ -1,4 +1,4 @@ -import { TASK_TYPE, ACTIVITY_RESOURCES_TYPE, ACTIVITY_TYPE } from '../../consts'; +import { ACTIVITY_RESOURCES_TYPE } from '../../consts'; import { ActivityModelType } from '../../db/Activity'; import { ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays'; import { ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward'; diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index c0e6a23e0..569016745 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -4,7 +4,7 @@ import { HeroModel, HeroType } from '../db/Hero'; import fs = require('fs'); import path = require('path'); -import { HERO_CE_RATIO, ABI_STAGE, GACHA_TO_FLOOR, TIME_OUTPUT_TYPE, REFRESH_TIME } from '../consts'; +import { HERO_CE_RATIO, ABI_STAGE, GACHA_TO_FLOOR, REFRESH_TIME } from '../consts'; import { findIndex } from 'underscore'; import { getTimeFunM } from './timeUtil';