From 2ef00e8179768485529d6565c81bda688f94a392 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 6 May 2021 15:25:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=8D=E5=8D=96=E8=A1=8C=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=8E=B7=E5=8F=96=E6=8E=92=E5=93=81=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E6=BC=94=E6=AD=A6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/battle/handler/guildBossHandler.ts | 7 ++++--- game-server/app/services/guildActivityService.ts | 16 +++++++++++++--- game-server/app/services/guildBossService.ts | 13 ++++++++++--- shared/db/BossInstance.ts | 14 +++++++++++++- shared/pubUtils/data.ts | 3 ++- shared/pubUtils/dictionary/DicStructure.ts | 2 ++ 6 files changed, 44 insertions(+), 11 deletions(-) diff --git a/game-server/app/servers/battle/handler/guildBossHandler.ts b/game-server/app/servers/battle/handler/guildBossHandler.ts index 78ccb6e46..ebb7cf0a4 100644 --- a/game-server/app/servers/battle/handler/guildBossHandler.ts +++ b/game-server/app/servers/battle/handler/guildBossHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession } from 'pinus'; import { resResult, genCode, getRandomByLen } from '../../../pubUtils/util'; -import { STATUS, TASK_TYPE } from '../../../consts'; +import { STATUS, TASK_TYPE, AUCTION_SOURCE } from '../../../consts'; import { BossInstanceModel } from '../../../db/BossInstance'; import { BattleRecordModel } from '../../../db/BattleRecord'; import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil'; @@ -16,6 +16,7 @@ import { getBossByLv } from '../../../pubUtils/data'; import { lockData } from '../../../services/redLockService'; import { pushGuildBossSucMsg } from '../../../services/chatService'; import { checkTask } from '../../../services/taskService'; +import { genAuction } from '../../../services/auctionService'; export default function (app: Application) { return new GuildHandler(app); @@ -105,7 +106,7 @@ export class GuildHandler { async battleBoss(msg: {}, session: BackendSession) { const roleId: string = session.get('roleId'); const roleName: string = session.get('roleName'); - let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); + let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode job'); if (!userGuild) return resResult(STATUS.WRONG_PARMS); const { guildCode: code } = userGuild; @@ -129,7 +130,7 @@ export class GuildHandler { const serverId:number = parseInt(session.get('serverId')); await addBossInstance(code, serverId, roleId); if (!findWhere(ranks, {roleId})) { - await BossInstanceModel.pushRanks(code, {roleId, score: 0, time: nowSeconds()}); + await BossInstanceModel.pushRanks(code, {roleId, score: 0, time: nowSeconds(), job: userGuild.job}); } else { await BossInstanceModel.updateRank(code, roleId); } diff --git a/game-server/app/services/guildActivityService.ts b/game-server/app/services/guildActivityService.ts index e743162ae..ca23b9771 100644 --- a/game-server/app/services/guildActivityService.ts +++ b/game-server/app/services/guildActivityService.ts @@ -20,6 +20,7 @@ import { GuildActivityCityType, GuildActivityCityModel } from "../db/GuildActivi import { DicCityActivity } from "../pubUtils/dictionary/DicCityActivity"; import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./guildActivityObjService"; import { Rank } from "./rankService"; +import { BossInstanceModel } from "../db/BossInstance"; let gateActivityObj: GateActivityObject; let cityActivityObj: CityActivityObject; @@ -486,10 +487,19 @@ export async function autoDeclare(serverId: number) { * @param sourceCode 活动唯一code */ export async function participants(guildCode: string, sourceType: number, sourceCode: string) { - let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode); - if(!rec) return []; + if(sourceType == AUCTION_SOURCE.BOSS) { + let rec = await BossInstanceModel.findBySourceCode(guildCode, sourceCode); + if(!rec) return []; - return rec.members||[]; + return rec.ranks.map(cur => { + return { roleId: cur.roleId, job: cur.job } + }); + } else { + let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode); + if(!rec) return []; + + return rec.members||[]; + } } /** diff --git a/game-server/app/services/guildBossService.ts b/game-server/app/services/guildBossService.ts index 7df212034..02293902e 100644 --- a/game-server/app/services/guildBossService.ts +++ b/game-server/app/services/guildBossService.ts @@ -8,11 +8,12 @@ import { pinus } from 'pinus'; import { STATUS } from '../consts/statusCode'; import { deepCopy, resResult } from '../pubUtils/util'; import { BattleRecordModel } from '../db/BattleRecord'; -import { getArmyBossRank } from '../pubUtils/data'; +import { getArmyBossRank, gameData } from '../pubUtils/data'; import { getMailContent } from '../services/mailService'; import { pushMail } from '../pubUtils/interface'; -import { MAIL_TYPE } from '../consts'; +import { MAIL_TYPE, AUCTION_SOURCE } from '../consts'; import { GUILD_BOSS_STATUS } from '../consts/constModules/guildConst'; +import { genAuction } from './auctionService'; /** * 获得boss界面 * @param bossInstance @@ -102,7 +103,7 @@ export async function bossResult(code: string, serverId: number, dataName: strin let res:any = await lockData(serverId, dataName, code);//加锁 if (!!res.err) return true; - let {winSettled, ranks, num, warId, bossHp, bossLv} = await BossInstanceModel.findBossInstance(code);//锁定关卡信息 + let {winSettled, ranks, num, warId, bossHp, bossLv, code: bossCode } = await BossInstanceModel.findBossInstance(code);//锁定关卡信息 if (winSettled) { res.releaseCallback();//解锁 await BossInstanceModel.recordRoleIdWhenCheck(code, roleId); @@ -138,6 +139,12 @@ export async function bossResult(code: string, serverId: number, dataName: strin pushMessage.forEach(({route, data, uids })=>{ pinus.app.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, { mails: data }), uids); }); + // 加入拍卖行 + let dicBossBase = gameData.bossBaseByBossLv.get(bossLv); + if(dicBossBase) { + await genAuction(code, AUCTION_SOURCE.BOSS, bossCode, serverId, dicBossBase.reward); + } + return true; } /** diff --git a/shared/db/BossInstance.ts b/shared/db/BossInstance.ts index c9e59ed54..53c05e0d8 100644 --- a/shared/db/BossInstance.ts +++ b/shared/db/BossInstance.ts @@ -1,6 +1,7 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { nowSeconds } from '../pubUtils/timeUtil'; +import { genCode } from '../pubUtils/util'; class Rank { @prop({ required: true }) @@ -9,10 +10,15 @@ class Rank { score: number; @prop({ required: true }) time: number; + @prop({ required: true }) + job: number; } @index({ guildCode: 1 }) export default class BossInstance extends BaseModel { + @prop({ required: true }) + code: string; // 这个boss本的唯一值 + @prop({ required: true }) guildCode: string; @@ -61,7 +67,8 @@ export default class BossInstance extends BaseModel { } public static async openBossInstance(guildCode: string, bossHp: number, warId: number, bossLv: number, lean = true) { - const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode },{ranks:[], time: nowSeconds(), bossHp, bossLv, warId, $inc: { num: 1 }}, {new: true, upsert: true}).lean(lean); + let code = genCode(10); + const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode },{ $setOnInsert: { code }, ranks:[], time: nowSeconds(), bossHp, bossLv, warId, $inc: { num: 1 }}, {new: true, upsert: true}).lean(lean); return bossInstance; } //记录玩家boss通关后首次查看boss关卡 @@ -100,6 +107,11 @@ export default class BossInstance extends BaseModel { { $pull:{ ranks: { roleId } }}, {new: true}).lean(lean); return guildTrain; } + + public static async findBySourceCode(guildCode: string, sourceCode: string) { + const rec = await BossInstanceModel.findOne({ guildCode, code: sourceCode }).select('ranks').lean(); + return rec; + } } export const BossInstanceModel = getModelForClass(BossInstance); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 2618c4e09..cbb477946 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -43,7 +43,7 @@ import { dicHeroRewads } from './dictionary/DicPvpHeroReward'; import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward'; import { dicPvpBoxs } from './dictionary/DicPvpBox'; import { dicGuildAuth } from './dictionary/DicGuildAuth'; -import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume } from "./dictionary/DicStructure"; +import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume, dicBossBaseByBossLv } from "./dictionary/DicStructure"; import { dicGuildActiveDayReward } from './dictionary/DicGuildActiveDayReward'; import { dicGuildActiveWeekReward } from './dictionary/DicGuildActiveWeekReward'; import { dicGuildActiveWays } from './dictionary/DicGuildActiveWays'; @@ -144,6 +144,7 @@ export const gameData = { centerBase: dicCenterBase, equipProduceBase: dicEquipPriduceBase, bossBase: dicBossBase, + bossBaseByBossLv: dicBossBaseByBossLv, trainBase: dicTrainBase, donateBase: dicDonateBase, armyWishPool: dicWishPoolBase, diff --git a/shared/pubUtils/dictionary/DicStructure.ts b/shared/pubUtils/dictionary/DicStructure.ts index 27e468ff0..342c14be9 100644 --- a/shared/pubUtils/dictionary/DicStructure.ts +++ b/shared/pubUtils/dictionary/DicStructure.ts @@ -156,6 +156,7 @@ export const dicStructureConsume = new Map>(); // export const dicCenterBase = new Map(); // 中军大帐 export const dicEquipPriduceBase = new Map(); // 炼器堂 export const dicBossBase = new Map(); // 演武台 +export const dicBossBaseByBossLv = new Map(); // 演武台 boss等级=>dic export const dicTrainBase = new Map(); // 练兵场 export const dicDonateBase = new Map(); // 捐献所 export const dicWishPoolBase = new Map(); // 许愿池 @@ -196,6 +197,7 @@ arrBoss.forEach(o => { return { warId: parseInt(warArr[0]), bossHp: parseInt(warArr[1])} }); dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys))); + dicBossBaseByBossLv.set(o.bossLevel, _.pick(o, Object.keys(DicBossKeys))); }); arrBoss = undefined;