拍卖行:修复获取排品缺少演武的问题
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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||[];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user