排行榜:修复一键领取
This commit is contained in:
@@ -11,6 +11,7 @@ import { GeneralRankParamRole, GeneralRankParamBattle, RoleRankInfo } from "../.
|
|||||||
import { gameData } from "../../../pubUtils/data";
|
import { gameData } from "../../../pubUtils/data";
|
||||||
import { addItems } from "../../../services/rewardService";
|
import { addItems } from "../../../services/rewardService";
|
||||||
import { HeroModel, HeroUpdate } from "../../../db/Hero";
|
import { HeroModel, HeroUpdate } from "../../../db/Hero";
|
||||||
|
import { RewardInter } from "../../../pubUtils/interface";
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
return new RoleHandler(app);
|
return new RoleHandler(app);
|
||||||
@@ -153,26 +154,47 @@ export class RoleHandler {
|
|||||||
|
|
||||||
let { type, id } = msg;
|
let { type, id } = msg;
|
||||||
|
|
||||||
let dicReward = gameData.generalRankReward.get(id);
|
let ids: number[] = [];
|
||||||
if(!dicReward || dicReward.rankId != type) return resResult(STATUS.WRONG_PARMS);
|
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);
|
for(let id of ids) {
|
||||||
let r = new Rank(redisKey, { serverId }, false, 1);
|
let dicReward = gameData.generalRankReward.get(id);
|
||||||
let ranks = await r.getRankByRange();
|
if(!dicReward || dicReward.rankId != type) continue;
|
||||||
let num = ranks.length > 0? ranks[0].num: 0;
|
|
||||||
if(num < dicReward.condition) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
|
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);
|
role = await RoleModel.receiveRankReward(roleId, ids);
|
||||||
if(!role) return resResult(STATUS.REWARD_HAS_RECEIVED);
|
if(canReceiveId.length <= 0) return resResult(STATUS.REWARD_CONDITION_NOT_REACH);
|
||||||
|
|
||||||
let reward = dicReward.reward;
|
|
||||||
let goods = await addItems(roleId, roleName, sid, reward);
|
|
||||||
|
|
||||||
let received = role.rankReceived.filter(rewardId => {
|
let received = role.rankReceived.filter(rewardId => {
|
||||||
let dic = gameData.generalRankReward.get(rewardId);
|
let dic = gameData.generalRankReward.get(rewardId);
|
||||||
return dic && dic.rankId == type;
|
return dic && dic.rankId == type;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let goods = await addItems(roleId, roleName, sid, rewards);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
type: type,
|
type: type,
|
||||||
received,
|
received,
|
||||||
|
|||||||
+3
-3
@@ -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 BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
||||||
import User from './User';
|
import User from './User';
|
||||||
@@ -641,8 +641,8 @@ export default class Role extends BaseModel {
|
|||||||
return roles[Math.floor(roles.length / 2)]
|
return roles[Math.floor(roles.length / 2)]
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async receiveRankReward(roleId: string, id: number) {
|
public static async receiveRankReward(roleId: string, ids: number[]) {
|
||||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId, rankReceived: { $nin: [id] } }, { $push: { rankReceived: id } }, { new: true }).lean();
|
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { rankReceived: { $each: ids } } }, { new: true }).lean();
|
||||||
return role;
|
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 { ActivityModelType } from '../../db/Activity';
|
||||||
import { ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays';
|
import { ActivityThirtyDaysModelType } from '../../db/ActivityThirtyDays';
|
||||||
import { ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward';
|
import { ActivityThirtyDaysPointRewardModelType } from '../../db/ActivityThirtyDaysPointReward';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { HeroModel, HeroType } from '../db/Hero';
|
|||||||
|
|
||||||
import fs = require('fs');
|
import fs = require('fs');
|
||||||
import path = require('path');
|
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 { findIndex } from 'underscore';
|
||||||
import { getTimeFunM } from './timeUtil';
|
import { getTimeFunM } from './timeUtil';
|
||||||
|
|||||||
Reference in New Issue
Block a user