diff --git a/game-server/app/servers/battle/handler/rougeHandler.ts b/game-server/app/servers/battle/handler/rougeHandler.ts index 7a076b297..30cd943e3 100644 --- a/game-server/app/servers/battle/handler/rougeHandler.ts +++ b/game-server/app/servers/battle/handler/rougeHandler.ts @@ -1193,7 +1193,7 @@ export class RougeHandler { let sid: string = session.get('sid'); let roleName: string = session.get('roleName'); let { index } = msg; - const lastMaxLv = await RougelikeRecordModel.getLastMaxLv(roleId); + const lastMaxLv = await RougelikeExtendModel.getLastMaxLv(roleId); const rougeScoreRewardByLvData = gameData.rougeScoreRewardByLv.get(lastMaxLv); if (!rougeScoreRewardByLvData) return resResult(STATUS.DIC_DATA_NOT_FOUND); let dicScore = rougeScoreRewardByLvData.get(index); diff --git a/game-server/app/services/battle/rougeService.ts b/game-server/app/services/battle/rougeService.ts index bb439cc9b..23bdc68ba 100644 --- a/game-server/app/services/battle/rougeService.ts +++ b/game-server/app/services/battle/rougeService.ts @@ -41,7 +41,7 @@ export async function getRougeData(roleId: string) { const dbExtends = await RougelikeExtendModel.findByRoleId(roleId); const limitIds = dbExtends.map(cur => cur.limitId); - const lastMaxLv = await RougelikeRecordModel.getLastMaxLv(roleId); + const lastMaxLv = await RougelikeExtendModel.getLastMaxLv(roleId); return { isPlaying, gameCode, weeklyScore: dbScore?.score || 0, receivedScore: dbScore?.received || [], ...techData, collections, limitIds, takeoutRewardCnt: dbScore?.takeoutRewardCnt, lastMaxLv } } @@ -923,12 +923,12 @@ export function getAuthorTypeCardNum(authorType: number, cards: Card[]) { } export async function repaireSendScoreReward() { - let refTime = new Date(getZeroPointOfTimeD(Date.now() - 86400000, SHOP_REFRESH_TYPE.WEEKLY).getTime() - (86400000 * 7)); + let refTime = new Date(getZeroPointOfTimeD(Date.now(), SHOP_REFRESH_TYPE.WEEKLY).getTime() - (86400000 * 7)); let allRewards = await RougelikeScoreModel.findByRefTime(refTime); let updateArr: RougelikeScorePara[] = []; const roleIds = allRewards.map(cur => { return cur.roleId }); - const lastMaxLvMap = await RougelikeRecordModel.getLastMaxLvMap(roleIds); + const lastMaxLvMap = await RougelikeExtendModel.getLastMaxLvMap(roleIds); for (let { roleId, received, score, receiveNum } of allRewards) { if (!lastMaxLvMap.has(roleId)) continue; let goods: RewardInter[] = []; diff --git a/shared/db/RougelikeExtend.ts b/shared/db/RougelikeExtend.ts index 31dd9b34e..51af9ea60 100644 --- a/shared/db/RougelikeExtend.ts +++ b/shared/db/RougelikeExtend.ts @@ -1,3 +1,6 @@ +import { SHOP_REFRESH_TYPE } from '../consts/constModules/sysConst'; +import { gameData } from '../pubUtils/data'; +import { getZeroPointOfTimeD } from '../pubUtils/timeUtil'; import BaseModel from './BaseModel'; import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose'; @@ -21,14 +24,13 @@ export default class RougelikeExtend extends BaseModel { @prop({ required: true, default: 0 }) limitId: number; // 前置试炼id,只会是已通关 - @prop({ required: true, type: RewardInter, default: 0, _id: false}) + @prop({ required: true, type: RewardInter, default: 0, _id: false }) firstReward: RewardInter[]; //首通奖励 @prop({ required: true, default: '' }) gameCode: string; - public static async update(roleId: string, limitId: number, firstReward: RewardInter[], gameCode: string, lean = true) { const result: RougelikeExtendType = await RougelikeExtendModel.findOneAndUpdate({ roleId, limitId }, { firstReward, gameCode }, { new: true, upsert: true }).lean(lean); return result; @@ -43,7 +45,30 @@ export default class RougelikeExtend extends BaseModel { const result: RougelikeExtendType = await RougelikeExtendModel.findOne({ roleId, limitId }).lean(lean); return result; } - + + public static async getLastMaxLv(roleId: string) { + let endTime = getZeroPointOfTimeD(Date.now(), SHOP_REFRESH_TYPE.WEEKLY); + const result: RougelikeExtendType[] = await RougelikeExtendModel.find({ roleId, createdAt: { $lt: endTime } }).lean(true); + let lastMaxLv = 1; + for (const { limitId } of result) { + const dicData = gameData.rougeTypeGradeById.get(limitId); + lastMaxLv = Math.max(lastMaxLv, dicData.gradeIndex); + } + return lastMaxLv; + } + + public static async getLastMaxLvMap(roleIds: string[]) { + let endTime = new Date(getZeroPointOfTimeD(Date.now(), SHOP_REFRESH_TYPE.WEEKLY).getTime() - 86400000 * 7); + const result: RougelikeExtendType[] = await RougelikeExtendModel.find({ roleId: { $in: roleIds }, createdAt: { $lt: endTime } }).lean(true); + let lastMaxLvMap = new Map(); + for (const { roleId, limitId } of result) { + if (!limitId) continue; + let tempLv = lastMaxLvMap.has(roleId) ? lastMaxLvMap.get(roleId) : 1; + const dicData = gameData.rougeTypeGradeById.get(limitId); + lastMaxLvMap.set(roleId, Math.max(tempLv, dicData.gradeIndex)); + } + return lastMaxLvMap; + } } export const RougelikeExtendModel = getModelForClass(RougelikeExtend); diff --git a/shared/db/RougelikeRecord.ts b/shared/db/RougelikeRecord.ts index 068165a88..76d9c1ee8 100644 --- a/shared/db/RougelikeRecord.ts +++ b/shared/db/RougelikeRecord.ts @@ -105,30 +105,6 @@ export default class RougelikeRecord extends BaseModel { return result; } - public static async getLastMaxLv(roleId: string) { - let endTime = getZeroPointOfTimeD(Date.now() - 86400000, SHOP_REFRESH_TYPE.WEEKLY); - let startTime = new Date(endTime.getTime() - (86400000 * 7)); - const result: RougelikeRecordType[] = await RougelikeRecordModel.find({ roleId, updatedAt: { $gt: startTime, $lt: endTime } }).lean(true); - let lastMaxLv = 1; - for (const { grade = 1 } of result) { - lastMaxLv = Math.max(lastMaxLv, grade); - } - return lastMaxLv; - } - - public static async getLastMaxLvMap(roleIds: string[]) { - let endTime = getZeroPointOfTimeD(Date.now() - 86400000, SHOP_REFRESH_TYPE.WEEKLY); - let startTime = new Date(endTime.getTime() - (86400000 * 7)); - const result: RougelikeRecordType[] = await RougelikeRecordModel.find({ roleId: { $in: roleIds }, updatedAt: { $gt: startTime, $lt: endTime } }).lean(true); - let lastMaxLvMap = new Map(); - for (const { roleId, grade } of result) { - if (!grade) continue; - let tempLv = lastMaxLvMap.has(roleId) ? lastMaxLvMap.get(roleId) : 1; - lastMaxLvMap.set(roleId, Math.max(tempLv, grade)); - } - return lastMaxLvMap; - } - }; export const RougelikeRecordModel = getModelForClass(RougelikeRecord); export interface RougelikeRecordType extends Pick, keyof RougelikeRecord> { };