排行榜:修复一键领取
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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user