拍卖行:修复获取排品缺少演武的问题

This commit is contained in:
luying
2021-05-06 15:25:10 +08:00
parent f5654c402f
commit 2ef00e8179
6 changed files with 44 additions and 11 deletions

View File

@@ -1,6 +1,6 @@
import { Application, BackendSession } from 'pinus'; import { Application, BackendSession } from 'pinus';
import { resResult, genCode, getRandomByLen } from '../../../pubUtils/util'; 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 { BossInstanceModel } from '../../../db/BossInstance';
import { BattleRecordModel } from '../../../db/BattleRecord'; import { BattleRecordModel } from '../../../db/BattleRecord';
import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil'; import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil';
@@ -16,6 +16,7 @@ import { getBossByLv } from '../../../pubUtils/data';
import { lockData } from '../../../services/redLockService'; import { lockData } from '../../../services/redLockService';
import { pushGuildBossSucMsg } from '../../../services/chatService'; import { pushGuildBossSucMsg } from '../../../services/chatService';
import { checkTask } from '../../../services/taskService'; import { checkTask } from '../../../services/taskService';
import { genAuction } from '../../../services/auctionService';
export default function (app: Application) { export default function (app: Application) {
return new GuildHandler(app); return new GuildHandler(app);
@@ -105,7 +106,7 @@ export class GuildHandler {
async battleBoss(msg: {}, session: BackendSession) { async battleBoss(msg: {}, session: BackendSession) {
const roleId: string = session.get('roleId'); const roleId: string = session.get('roleId');
const roleName: string = session.get('roleName'); const roleName: string = session.get('roleName');
let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode job');
if (!userGuild) if (!userGuild)
return resResult(STATUS.WRONG_PARMS); return resResult(STATUS.WRONG_PARMS);
const { guildCode: code } = userGuild; const { guildCode: code } = userGuild;
@@ -129,7 +130,7 @@ export class GuildHandler {
const serverId:number = parseInt(session.get('serverId')); const serverId:number = parseInt(session.get('serverId'));
await addBossInstance(code, serverId, roleId); await addBossInstance(code, serverId, roleId);
if (!findWhere(ranks, {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 { } else {
await BossInstanceModel.updateRank(code, roleId); await BossInstanceModel.updateRank(code, roleId);
} }

View File

@@ -20,6 +20,7 @@ import { GuildActivityCityType, GuildActivityCityModel } from "../db/GuildActivi
import { DicCityActivity } from "../pubUtils/dictionary/DicCityActivity"; import { DicCityActivity } from "../pubUtils/dictionary/DicCityActivity";
import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./guildActivityObjService"; import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./guildActivityObjService";
import { Rank } from "./rankService"; import { Rank } from "./rankService";
import { BossInstanceModel } from "../db/BossInstance";
let gateActivityObj: GateActivityObject; let gateActivityObj: GateActivityObject;
let cityActivityObj: CityActivityObject; let cityActivityObj: CityActivityObject;
@@ -486,10 +487,19 @@ export async function autoDeclare(serverId: number) {
* @param sourceCode 活动唯一code * @param sourceCode 活动唯一code
*/ */
export async function participants(guildCode: string, sourceType: number, sourceCode: string) { export async function participants(guildCode: string, sourceType: number, sourceCode: string) {
let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode); if(sourceType == AUCTION_SOURCE.BOSS) {
if(!rec) return []; 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||[];
}
} }
/** /**

View File

@@ -8,11 +8,12 @@ import { pinus } from 'pinus';
import { STATUS } from '../consts/statusCode'; import { STATUS } from '../consts/statusCode';
import { deepCopy, resResult } from '../pubUtils/util'; import { deepCopy, resResult } from '../pubUtils/util';
import { BattleRecordModel } from '../db/BattleRecord'; import { BattleRecordModel } from '../db/BattleRecord';
import { getArmyBossRank } from '../pubUtils/data'; import { getArmyBossRank, gameData } from '../pubUtils/data';
import { getMailContent } from '../services/mailService'; import { getMailContent } from '../services/mailService';
import { pushMail } from '../pubUtils/interface'; 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 { GUILD_BOSS_STATUS } from '../consts/constModules/guildConst';
import { genAuction } from './auctionService';
/** /**
* 获得boss界面 * 获得boss界面
* @param bossInstance * @param bossInstance
@@ -102,7 +103,7 @@ export async function bossResult(code: string, serverId: number, dataName: strin
let res:any = await lockData(serverId, dataName, code);//加锁 let res:any = await lockData(serverId, dataName, code);//加锁
if (!!res.err) if (!!res.err)
return true; 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) { if (winSettled) {
res.releaseCallback();//解锁 res.releaseCallback();//解锁
await BossInstanceModel.recordRoleIdWhenCheck(code, roleId); await BossInstanceModel.recordRoleIdWhenCheck(code, roleId);
@@ -138,6 +139,12 @@ export async function bossResult(code: string, serverId: number, dataName: strin
pushMessage.forEach(({route, data, uids })=>{ pushMessage.forEach(({route, data, uids })=>{
pinus.app.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, { mails: 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; return true;
} }
/** /**

View File

@@ -1,6 +1,7 @@
import BaseModel from './BaseModel'; import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { nowSeconds } from '../pubUtils/timeUtil'; import { nowSeconds } from '../pubUtils/timeUtil';
import { genCode } from '../pubUtils/util';
class Rank { class Rank {
@prop({ required: true }) @prop({ required: true })
@@ -9,10 +10,15 @@ class Rank {
score: number; score: number;
@prop({ required: true }) @prop({ required: true })
time: number; time: number;
@prop({ required: true })
job: number;
} }
@index({ guildCode: 1 }) @index({ guildCode: 1 })
export default class BossInstance extends BaseModel { export default class BossInstance extends BaseModel {
@prop({ required: true })
code: string; // 这个boss本的唯一值
@prop({ required: true }) @prop({ required: true })
guildCode: string; 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) { 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; return bossInstance;
} }
//记录玩家boss通关后首次查看boss关卡 //记录玩家boss通关后首次查看boss关卡
@@ -100,6 +107,11 @@ export default class BossInstance extends BaseModel {
{ $pull:{ ranks: { roleId } }}, {new: true}).lean(lean); { $pull:{ ranks: { roleId } }}, {new: true}).lean(lean);
return guildTrain; 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); export const BossInstanceModel = getModelForClass(BossInstance);

View File

@@ -43,7 +43,7 @@ import { dicHeroRewads } from './dictionary/DicPvpHeroReward';
import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward'; import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward';
import { dicPvpBoxs } from './dictionary/DicPvpBox'; import { dicPvpBoxs } from './dictionary/DicPvpBox';
import { dicGuildAuth } from './dictionary/DicGuildAuth'; 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 { dicGuildActiveDayReward } from './dictionary/DicGuildActiveDayReward';
import { dicGuildActiveWeekReward } from './dictionary/DicGuildActiveWeekReward'; import { dicGuildActiveWeekReward } from './dictionary/DicGuildActiveWeekReward';
import { dicGuildActiveWays } from './dictionary/DicGuildActiveWays'; import { dicGuildActiveWays } from './dictionary/DicGuildActiveWays';
@@ -144,6 +144,7 @@ export const gameData = {
centerBase: dicCenterBase, centerBase: dicCenterBase,
equipProduceBase: dicEquipPriduceBase, equipProduceBase: dicEquipPriduceBase,
bossBase: dicBossBase, bossBase: dicBossBase,
bossBaseByBossLv: dicBossBaseByBossLv,
trainBase: dicTrainBase, trainBase: dicTrainBase,
donateBase: dicDonateBase, donateBase: dicDonateBase,
armyWishPool: dicWishPoolBase, armyWishPool: dicWishPoolBase,

View File

@@ -156,6 +156,7 @@ export const dicStructureConsume = new Map<number, Map<number, number>>(); //
export const dicCenterBase = new Map<number, DicCentreBase>(); // 中军大帐 export const dicCenterBase = new Map<number, DicCentreBase>(); // 中军大帐
export const dicEquipPriduceBase = new Map<number, DicEquipProduceBase>(); // 炼器堂 export const dicEquipPriduceBase = new Map<number, DicEquipProduceBase>(); // 炼器堂
export const dicBossBase = new Map<number, DicBossBase>(); // 演武台 export const dicBossBase = new Map<number, DicBossBase>(); // 演武台
export const dicBossBaseByBossLv = new Map<number, DicBossBase>(); // 演武台 boss等级=>dic
export const dicTrainBase = new Map<number, DicTrainBase>(); // 练兵场 export const dicTrainBase = new Map<number, DicTrainBase>(); // 练兵场
export const dicDonateBase = new Map<number, DicDonateBase>(); // 捐献所 export const dicDonateBase = new Map<number, DicDonateBase>(); // 捐献所
export const dicWishPoolBase = new Map<number, DicWishPoolBase>(); // 许愿池 export const dicWishPoolBase = new Map<number, DicWishPoolBase>(); // 许愿池
@@ -196,6 +197,7 @@ arrBoss.forEach(o => {
return { warId: parseInt(warArr[0]), bossHp: parseInt(warArr[1])} return { warId: parseInt(warArr[0]), bossHp: parseInt(warArr[1])}
}); });
dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys))); dicBossBase.set(o.level, _.pick(o, Object.keys(DicBossKeys)));
dicBossBaseByBossLv.set(o.bossLevel, _.pick(o, Object.keys(DicBossKeys)));
}); });
arrBoss = undefined; arrBoss = undefined;