演武台:鼓舞,次数限制,掉落修改,结构修改
This commit is contained in:
@@ -20,10 +20,6 @@ class Record {
|
||||
@prop({ required: false })
|
||||
pos?: number; // pvp位置
|
||||
@prop({ required: false })
|
||||
recordNum?: number;
|
||||
@prop({ required: false })
|
||||
bossHp?: number;
|
||||
@prop({ required: false })
|
||||
trainId?:number;
|
||||
@prop({ required: false })
|
||||
trainLv?:number;
|
||||
@@ -33,6 +29,12 @@ class Record {
|
||||
guildCode?: string;
|
||||
@prop({ required: false })
|
||||
difficulty?: number;
|
||||
@prop({ required: false })
|
||||
bossInstanceCode?: string;
|
||||
@prop({ required: false })
|
||||
bossHp?: number;
|
||||
@prop({ required: false })
|
||||
bossDamage?: number; // boss本造成的伤害
|
||||
}
|
||||
|
||||
export default class BattleRecord extends BaseModel {
|
||||
@@ -57,6 +59,8 @@ export default class BattleRecord extends BaseModel {
|
||||
@prop({ required: true, _id: false })
|
||||
record: Record; // 使用的武将等记录
|
||||
|
||||
|
||||
|
||||
public static async getBattleRecordByCode(battleCode: string, lean = true) {
|
||||
const result: BattleRecordType = await BattleRecordModel.findOne({ battleCode }).lean(lean);
|
||||
return result;
|
||||
@@ -81,6 +85,14 @@ export default class BattleRecord extends BaseModel {
|
||||
let result = await BattleRecordModel.deleteMany({ roleId });
|
||||
return result || {};
|
||||
}
|
||||
|
||||
public static async incBossDamage(battleCode: string, damage: number, bossHp: number) {
|
||||
if(bossHp < 0) { // 最后一击,被扣到负了
|
||||
damage += bossHp;
|
||||
}
|
||||
let result: BattleRecordType = await BattleRecordModel.findOneAndUpdate({ battleCode }, { $inc: { 'record.bossDamage': damage } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const BattleRecordModel = getModelForClass(BattleRecord);
|
||||
|
||||
+45
-37
@@ -1,7 +1,8 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { getZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { GUILD_BOSS_STATUS } from '../consts';
|
||||
|
||||
class Rank {
|
||||
@prop({ required: true })
|
||||
@@ -34,71 +35,73 @@ export default class BossInstance extends BaseModel {
|
||||
@prop({ required: true, type: Rank, default:[]})
|
||||
ranks:Array<Rank>;
|
||||
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: nowSeconds })
|
||||
startTime: number;
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
num: number; //重置次数
|
||||
@prop({ required: true, default: 0 })
|
||||
killTime: number;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
encourageCnt: number; // 鼓舞次数
|
||||
|
||||
@prop({ required: true, default:[], type: String, _id: false})
|
||||
roleIdRecords: Array<string>; //记录提示过胜利boss关的玩家
|
||||
|
||||
@prop({ required: true })
|
||||
winWarId: number; //记录上一次通关的关卡,boss被压制成功后,首次点开boss界面会提示文字,boss已被压制
|
||||
status: GUILD_BOSS_STATUS; // 状态 1:等待团长开启,2:今日已开启,且boss通关,3:开启中
|
||||
|
||||
@prop({ required: true })
|
||||
winBossLv: number; //记录上一次通关的boss等级
|
||||
|
||||
@prop({ required: true })
|
||||
winTime: number; //记录上一次通关的时间
|
||||
|
||||
@prop({ required: true, default: 0})
|
||||
winNum: number; //记录上一次重置次数
|
||||
|
||||
@prop({ required: true, type: Rank, default:[]})
|
||||
recordRanks:Array<Rank>;//上一场排名信息
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
winSettled: boolean; //胜利是否结算过
|
||||
|
||||
public static async findBossInstance(guildCode: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOne({ guildCode }).lean(lean);
|
||||
public static async findByCode(code: string) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOne({ code }).lean();
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async openBossInstance(guildCode: string, bossHp: number, warId: number, bossLv: number, lean = true) {
|
||||
public static async findBossInstance(guildCode: string) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOne({ guildCode, status: GUILD_BOSS_STATUS.OPEN }).lean();
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async findLastOverBossInstance(guildCode: string) {
|
||||
let today = getZeroPoint();
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOne({ guildCode, status: GUILD_BOSS_STATUS.CLEAR, killTime: { $gt: today } }).sort({ _id: -1 }).lean();
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async openBossInstance(guildCode: string, bossHp: number, warId: number, bossLv: number) {
|
||||
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);
|
||||
let doc = new BossInstanceModel();
|
||||
let update = Object.assign(doc.toJSON(), { guildCode, bossHp, bossLv, warId });
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code },{ $set: update }, {new: true, upsert: true}).lean();
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
//记录玩家boss通关后首次查看boss关卡
|
||||
public static async recordRoleIdWhenCheck(guildCode: string, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $push:{ roleIdRecords: roleId } }, { new: true }).lean(lean);
|
||||
public static async recordRoleIdWhenCheck(code: string, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code }, { $push:{ roleIdRecords: roleId } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async pushRecordRanks(guildCode: string, recordRank: Rank, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $push:{ recordRanks: recordRank } }, { new: true }).lean(lean);
|
||||
public static async pushRecordRanks(code: string, recordRank: Rank, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code }, { $push:{ recordRanks: recordRank } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async pushRanks(guildCode: string, rank: Rank, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $push:{ ranks: rank } }, { new: true }).lean(lean);
|
||||
public static async pushRanks(code: string, rank: Rank, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code }, { $push:{ ranks: rank } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async updateBossInstance(guildCode: string, update:BossInstanceTypeParam, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode }, { $set:update }, { new: true }).lean(lean);
|
||||
public static async updateBossInstance(code: string, update:BossInstanceTypeParam, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code }, { $set:update }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async updateBossHp(guildCode: string, hp: number, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode, 'ranks.roleId': roleId, bossHp: { $gte: hp } }, { $inc: { bossHp: - hp ,'ranks.$.score': hp}, }, { new: true }).lean(lean);
|
||||
public static async updateBossHp(code: string, hp: number, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code, 'ranks.roleId': roleId, bossHp: { $gte: hp } }, { $inc: { bossHp: - hp ,'ranks.$.score': hp}, }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
public static async updateRank(guildCode: string, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ guildCode, 'ranks.roleId': roleId }, { $set:{ 'ranks.$.time': nowSeconds() } }, { new: true }).lean(lean);
|
||||
public static async updateRank(code: string, roleId: string, lean = true) {
|
||||
const bossInstance: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code, 'ranks.roleId': roleId }, { $set:{ 'ranks.$.time': nowSeconds() } }, { new: true }).lean(lean);
|
||||
return bossInstance;
|
||||
}
|
||||
|
||||
@@ -109,9 +112,14 @@ export default class BossInstance extends BaseModel {
|
||||
}
|
||||
|
||||
public static async findBySourceCode(guildCode: string, sourceCode: string) {
|
||||
const rec = await BossInstanceModel.findOne({ guildCode, code: sourceCode }).select('ranks').lean();
|
||||
const rec: BossInstanceType = await BossInstanceModel.findOne({ guildCode, code: sourceCode }).select('ranks').lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async encourage(code: string, count: number, maxCount: number) {
|
||||
const rec: BossInstanceType = await BossInstanceModel.findOneAndUpdate({ code, encourageCnt: { $lte: maxCount - count } }, { $inc: { encourageCnt: count } }).lean();
|
||||
return rec
|
||||
}
|
||||
}
|
||||
|
||||
export const BossInstanceModel = getModelForClass(BossInstance);
|
||||
|
||||
+10
-2
@@ -103,6 +103,12 @@ export default class Guild extends BaseModel {
|
||||
@prop({ required: true, default: () => { return getZeroPoint(SHOP_REFRESH_TYPE.WEEKLY) } })
|
||||
resetTrainTime: number;//上次刷新挑战训练场次数的时间
|
||||
|
||||
@prop({ required: true, default: getZeroPoint })
|
||||
refOpenBossTime: Date; // 开启boss本刷新时间
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
openBossCnt: number; // 开启boss本次数
|
||||
|
||||
public static async createGuild(params: { name: string, icon: number, notice: string }, role: RoleType, serverId: number) {
|
||||
const doc = new GuildModel();
|
||||
const update = Object.assign(doc.toJSON(), params, { leader: role._id, members: [role.roleId], guildCe: role.ce, serverId, lvUpdateTime: nowSeconds() });
|
||||
@@ -162,8 +168,10 @@ export default class Guild extends BaseModel {
|
||||
return guildList;
|
||||
}
|
||||
|
||||
public static async findByCode(code: string, serverId: number, select?: string) {
|
||||
const result: GuildType = await GuildModel.findOne({ code, status: GUILD_STATUS.RUNNING, serverId })
|
||||
public static async findByCode(code: string, serverId?: number, select?: string) {
|
||||
let condition: any = { code, status: GUILD_STATUS.RUNNING };
|
||||
if(serverId) condition.serverId = serverId;
|
||||
const result: GuildType = await GuildModel.findOne(condition)
|
||||
.select(select)
|
||||
.populate('leader', {roleId: 1, roleName: 1, frame: 1, head: 1, spine: 1, lv: 1, quitTime: 1, ce: 1, title: 1, _id: 0}, 'Role')
|
||||
.lean({ getters: true, virtuals: true });
|
||||
|
||||
+11
-2
@@ -91,6 +91,15 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
wishDntCnt: number;//今天许愿池捐献次数
|
||||
|
||||
@prop({ required: true, default: new Date(), select: false })
|
||||
refBossTime: Date;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
encourageCnt: number; //今天鼓舞次数
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
bossChallengeCnt: number;//今天挑战演舞台次数
|
||||
|
||||
public static async getMyGuild(roleId: string, select?: string) {
|
||||
|
||||
const myGuild: UserGuildType = await UserGuildModel.findOne({ roleId, status: USER_GUILD_STATUS.ON })
|
||||
@@ -118,12 +127,12 @@ export default class UserGuild extends BaseModel {
|
||||
|
||||
public static async createUserGuild(guildCode: string, role: RoleType, isLeader: boolean) {
|
||||
const lastGuild = await UserGuildModel.findMyLastGuild(role.roleId);
|
||||
let { receiveBoxs = [], donateCnt = 0, receivedActive = [] } = lastGuild||{};
|
||||
let { receiveBoxs = [], donateCnt = 0, receivedActive = [], encourageCnt = 0, bossChallengeCnt = 0 } = lastGuild||{};
|
||||
|
||||
const doc = new UserGuildModel();
|
||||
let job = isLeader? GUILD_JOB.DAJIANGJUN: GUILD_JOB.SHIBING;
|
||||
let auth = isLeader? GUILD_AUTH.LEADER: GUILD_AUTH.MEMBER;
|
||||
const update = Object.assign(doc.toJSON(), { guildCode, roleId: role.roleId, role: role._id, job, auth, receiveBoxs, donateCnt, receivedActive });
|
||||
const update = Object.assign(doc.toJSON(), { guildCode, roleId: role.roleId, role: role._id, job, auth, receiveBoxs, donateCnt, receivedActive, encourageCnt, bossChallengeCnt });
|
||||
delete update._id;
|
||||
const result: UserGuildType = await UserGuildModel.findOneAndUpdate({ roleId: role.roleId, guildCode, status: USER_GUILD_STATUS.ON }, update, { upsert: true, new: true })
|
||||
.select('activeDaily activeRecord activeWeekly activeUpdateTime job auth receivedActive guildCode')
|
||||
|
||||
Reference in New Issue
Block a user