镇念塔:支持多层碾压

This commit is contained in:
luying
2022-09-19 15:15:16 +08:00
parent fafa9c2818
commit a830ae040e
5 changed files with 86 additions and 44 deletions

View File

@@ -404,6 +404,11 @@ export default class Role extends BaseModel {
return role;
}
public static async setTowerLv(roleId: string, towerLv: number, newWarStar: WarStar[] = []) {
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $set: { towerLv }, $push: { warStar: { $each: newWarStar }}, towerUpTime: new Date() }, { new: true }).lean({ getters: true, virtuals: true });
return role;
}
public static async receiveTowerBox(roleId: string, ids: number[] = []) {
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { towerReceived: { $each: ids }} }, { new: true }).lean();
return role;

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { gameData } from '../pubUtils/data';
class WarStatus {
export class WarStatus {
@prop({ required: true })
warId: number; // 策划表中战斗编号
@prop({ required: false })
@@ -21,6 +21,8 @@ export default class TowerRecord extends BaseModel {
roleId: string; // 角色 id
@prop({ required: true, default: 1 })
lv: number; // 天梯层数
@prop({ required: true, default: 0 })
skipFrom: number; // 从哪层跳过来的天梯层数
@prop({ required: true, default: [], type: Number })
heroes: Array<number>; // 本层已使用武将
@prop({ required: true, type: WarStatus, default: [], _id: false })
@@ -34,13 +36,13 @@ export default class TowerRecord extends BaseModel {
@prop({ required: true, default: false })
passed: boolean; // 此层是否通过true-通过false-未通过
public static async createRecord(towerInfo: {roleId: string, lv: number, warStatus: Array<WarStatus>}, lean = true) {
public static async createRecord(towerInfo: {roleId: string, lv: number, warStatus: Array<WarStatus>}) {
const recDoc = new TowerRecordModel();
const update = Object.assign(recDoc.toJSON(), towerInfo );
delete update._id;
const { roleId, lv } = towerInfo;
// console.log(JSON.stringify(towerInfo))
let rec: TowerRecordType = await TowerRecordModel.findOneAndUpdate({roleId, lv}, {$set: update}, {upsert: true, new: true}).lean(lean);
let rec: TowerRecordType = await TowerRecordModel.findOneAndUpdate({roleId, lv}, {$set: update}, {upsert: true, new: true}).lean();
return rec;
}
@@ -74,10 +76,16 @@ export default class TowerRecord extends BaseModel {
}
// 跳过当前层
public static async skipTower(roleId: string, curLv: number, heroes: number[]) {
let rec: TowerRecordType = await TowerRecordModel.findOneAndUpdate({ roleId, lv: curLv, 'warStatus.status': false }, {
$set: { 'warStatus.$.status': true, heroes, passed: true },
}, { new: true }).lean()
public static async skipTower(roleId: string, fromLv: number, curLv: number, warStatus: WarStatus[]) {
console.log('######## skipTower', roleId, fromLv, curLv)
await TowerRecordModel.findOneAndUpdate({ roleId, lv: fromLv }, { $set: { passed: true } }, { new: true });
const recDoc = new TowerRecordModel();
const update = Object.assign(recDoc.toJSON(), { roleId, lv: curLv, skipFrom: fromLv, passed: true, warStatus } );
delete update._id;
let rec: TowerRecordType = await TowerRecordModel.findOneAndUpdate({ roleId, lv: curLv }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
return rec;
}