From f30d4858e430016f76f03cd296708314277719e3 Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 20 Nov 2020 18:00:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=98=E5=A2=83=E4=BF=9D=E5=AD=98=E9=A6=96?= =?UTF-8?q?=E9=80=9A=E6=AD=A6=E5=B0=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/dungeonBattleHandler.ts | 3 ++- .../battle/handler/normalBattleHandler.ts | 1 + shared/db/Role.ts | 21 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/game-server/app/servers/battle/handler/dungeonBattleHandler.ts b/game-server/app/servers/battle/handler/dungeonBattleHandler.ts index f83745db2..3b34b89d2 100644 --- a/game-server/app/servers/battle/handler/dungeonBattleHandler.ts +++ b/game-server/app/servers/battle/handler/dungeonBattleHandler.ts @@ -15,7 +15,7 @@ export class DungeonBattleHandler { // 获取关卡列表 async getData(msg: { }, session: BackendSession) { let roleId = session.get('roleId'); - let { dungeonCnt = 0, dungeonBuyCnt = 0, dungeonRefTime } = await RoleModel.findByRoleId(roleId); + let { dungeonCnt = 0, dungeonBuyCnt = 0, dungeonRefTime, dungeonHeroes=[] } = await RoleModel.findByRoleId(roleId); let curTime = new Date(); if(shouldRefresh(dungeonRefTime, curTime, DUNGEON_CONST.REFRESH_TIME)) { dungeonCnt = 0; dungeonBuyCnt = 0; @@ -24,6 +24,7 @@ export class DungeonBattleHandler { let nextCostGold = calculateNum(GOLD_COST_RATIO.DUNGRON_BUY_NUM, {num: dungeonBuyCnt + 1 }, 50); return resResult(STATUS.SUCCESS, { nextCostGold, + dungeonHeroes, battleCount: DUNGEON_CONST.MAX_CNT + dungeonBuyCnt - dungeonCnt, buyCount: DUNGEON_CONST.MAX_BUY_CNT - dungeonBuyCnt }); diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index dba25cf70..278bdeb66 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -212,6 +212,7 @@ export class NormalBattleHandler { } } else if (warInfo.warType == WAR_TYPE.MYSTERY || warInfo.warType == WAR_TYPE.MYSTERY_ELITE) { let checkResult = await checkDungeonAndIncrease(roleId, 1, false); + await RoleModel.saveDungeonHero(roleId, battleId, heroes, isSuccess); if(checkResult.status == -1) { return checkResult.resResult; } diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 1e6b709ab..4025838d7 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -12,6 +12,13 @@ class TopHero { ce: number; // 战力 } + +class DungeonHero { + @prop({ required: true }) + battleId: number; // 关卡id + @prop({ required: true, type: Number, default:[] }) + heroes: Array; // 武将id +} /** * 角色字段接口 */ @@ -152,6 +159,8 @@ export default class Role extends BaseModel { dungeonBuyCnt: number; // 秘境购买次数 @prop({ required: true, default: new Date() }) dungeonRefTime: Date; // 秘境刷新时间 + @prop({ required: true, type: DungeonHero, default: [] }) + dungeonHeroes: Array; // 秘境首通使用的武将 public static async findByUid(uid: number, serverId: number, lean = true) { const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean); @@ -373,6 +382,18 @@ export default class Role extends BaseModel { }, 0); await RoleModel.findOneAndUpdate({roleId}, { topFive, topFiveCe, $inc: {ce: distance} }).lean(lean); } + + // 保存秘境首通队伍 + public static async saveDungeonHero(roleId: string, battleId: number, heroes: Array, isSuccess: boolean) { + if(isSuccess) { + const role = await Role.findByRoleId(roleId); + let {dungeonHeroes} = role; + let hasHero = dungeonHeroes&&dungeonHeroes.find(cur => cur.battleId == battleId); + if(!dungeonHeroes || !hasHero) { + await RoleModel.findOneAndUpdate({roleId}, {$push:{dungeonHeroes: {battleId, heroes}}}) + } + } + } } export const RoleModel = getModelForClass(Role);