镇念塔调整

This commit is contained in:
luying
2020-11-04 20:12:54 +08:00
parent 4effd85f2a
commit 6020037aa6
17 changed files with 844 additions and 511 deletions

View File

@@ -2,6 +2,12 @@ import { HANG_UP_CONSTS } from './../consts/consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
class Goods {
@prop({ required: true })
gid: number; // 物品id
@prop({ required: false })
count: number; // 这次挂机没来得及领取的
}
/**
* 挂机记录表
*/
@@ -26,6 +32,9 @@ export default class HangUpRecord extends BaseModel {
@prop({ required: false })
endTime: Date; // 结束挂机的时间
@prop({ required: true, default: [], type: Goods })
notReceivedGoods: Array<Goods>
@prop({ required: true, default: false })
received: boolean; // 是否已经领取true-领取false-未领取
@@ -42,11 +51,17 @@ export default class HangUpRecord extends BaseModel {
return rec;
}
public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, lean = true) {
await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true}).lean(lean);
public static async getLastRec(roleId: string, lean = true) {
const rec = await HangUpRecordModel.findOne({roleId, received: true}).sort({endTime: -1}).lean(lean);
return rec;
}
public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, needReceiveGoods: Array<{gid:number, count: number}>, lean = true) {
await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true, notReceivedGoods: needReceiveGoods}).lean(lean);
const recDoc = new HangUpRecordModel();
const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: endTime});
const newRec = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: endLv}, update, {upsert: true, new: true}).lean(lean);
delete update._id;
const newRec = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: endLv, received: false}, update, {upsert: true, new: true}).lean(lean);
return newRec;
}

View File

@@ -2,6 +2,19 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
class Goods {
@prop({ required: true })
gid: number; // 物品id
@prop({ required: false })
count: number; // 这次挂机没来得及领取的
}
class NotReceivedGoods {
@prop({ required: true })
cnt: number; // 加速的次数
@prop({ required: true, default: [], type: Goods })
goods: Array<Goods>; // 这次挂机没来得及领取的
}
/**
* 挂机记录表
*/
@@ -18,9 +31,25 @@ export default class HangUpSpdUpRec extends BaseModel {
@prop({required: true, default: 1})
lv: number; // 天梯层数
public static async updateRec(roleId, roleName, multi, lv, lean = true ) {
@prop({ required: true, default: [], type: NotReceivedGoods })
notReceivedGoodsList: Array<NotReceivedGoods>
public static async getSpdUpRec(roleId, lv, lean = true ) {
let rec = await HangUpSpdUpRecModel.findOne({roleId, lv}).lean(lean);
return rec;
}
public static async updateRec(roleId, roleName, multi, lv, needReceiveGoods: Array<{gid:number, count: number}>, lean = true ) {
if (multi <= 0) return null;
let rec = await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$inc: {cnt: multi}}, {upsert: true, new: true}).lean(lean);
if(rec && needReceiveGoods.length > 0) {
let {cnt} = rec;
let goods = [{
cnt: cnt,
goods: needReceiveGoods
}];
await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$push: {notReceivedGoodsList: {$each: goods}}}, {upsert: true, new: true}).lean(lean);
}
return rec;
}

View File

@@ -159,10 +159,10 @@ export default class Role extends BaseModel {
public static async hangUpSpdUp(roleId: string, cnt: number, curTime: Date, lean = true) {
if (cnt < 0) return null;
const result = await RoleModel.findOneAndUpdate({roleId}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
const lastSpdUpTime = result?result.lastSpdUpTime: curTime;
const result = await RoleModel.findOne({roleId}).lean(lean);
const lastSpdUpTime = result?.lastSpdUpTime;
let role = null;
if (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT) {
if (!lastSpdUpTime || (shouldRefresh(lastSpdUpTime, curTime, HANG_UP_CONSTS.REFRESH_TIME, 1) && cnt <= HANG_UP_CONSTS.MAX_SPD_UP_CNT)) {
role = await RoleModel.findOneAndUpdate({roleId}, {hangUpSpdUpCnt: HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt, lastSpdUpTime: curTime}, {new: true}).lean(lean);
} else {
role = await RoleModel.findOneAndUpdate({roleId, hangUpSpdUpCnt: {$gte: cnt}}, {$inc: {hangUpSpdUpCnt: -cnt}, lastSpdUpTime: curTime}, {new: true}).lean(lean);
@@ -221,6 +221,11 @@ try {
return result;
}
public static async costGold(roleId: string, cnt: number, lean = true) {
let result = await RoleModel.findOneAndUpdate({roleId, gold: {$gte: cnt}}, { $inc: { gold: -cnt, totalCost: cnt } }, { "new": true}).lean(lean);
return result;
}
public static async pushWarStar(roleId: string, battleId: number, warType: number, star: number, lean = true) {
let result = await RoleModel.findOneAndUpdate({roleId}, { $addToSet: { warStar: {id: battleId, warType, star }} }, { "new": true, "upsert": true}).lean(lean);
return result;

View File

@@ -35,8 +35,9 @@ export default class TowerRecord extends BaseModel {
public static async createRecord(towerInfo: {roleId: string, lv: number, warStatus: Array<WarStatus>}, lean = true) {
const recDoc = new TowerRecordModel();
const update = Object.assign(towerInfo, recDoc.toJSON());
const update = Object.assign(recDoc.toJSON(), towerInfo );
const { roleId, lv } = towerInfo;
console.log(JSON.stringify(towerInfo))
let rec = await TowerRecordModel.findOneAndUpdate({roleId, lv}, {$set: update}, {upsert: true, new: true}).lean(lean);
return rec;
}
@@ -51,12 +52,23 @@ export default class TowerRecord extends BaseModel {
* @param lean
*/
public static async updateRecord(roleId: string, lv: number, battleCode: string, warId: number, heroes: Array<number>, inc: number, lean = true) {
const rec = await TowerRecordModel.findOneAndUpdate(
{roleId, lv, 'warStatus.warId': warId},
{$set: {'warStatus.$.status': true, 'warStatus.$.battleCode': battleCode, passed: inc === 1 ? true : false}, $push: {heroes: {$each: heroes}}},
{new: true, upsert: true}
).lean(lean);
return rec;
let tower = await TowerRecordModel.findOne({roleId, lv, 'warStatus.warId': warId});
if(tower) {
const rec = await TowerRecordModel.findOneAndUpdate(
{roleId, lv, 'warStatus.warId': warId},
{$set: {'warStatus.$.status': true, 'warStatus.$.battleCode': battleCode, passed: inc === 1 ? true : false}, $push: {heroes: {$each: heroes}}},
{new: true, upsert: true}
).lean(lean);
return rec;
} else {
let warStatus = [{warId, status: true,battleCode, passed: inc === 1 ? true : false}];
const rec = await TowerRecordModel.findOneAndUpdate(
{roleId, lv},
{ $push: {heroes: {$each: heroes}, warStatus: {$each: warStatus}}},
{new: true, upsert: true}
).lean(lean);
return rec;
}
}