初步加入天梯接口

This commit is contained in:
liangtongchuan
2020-10-12 23:42:53 +08:00
parent 77c2b0b35a
commit d4a6ad42d1
10 changed files with 395 additions and 13 deletions
+7 -1
View File
@@ -60,4 +60,10 @@ export const EVENT_TYPE = {
BATTLE: 3 // 战斗
};
export const EVENT_START_BATTLE = 101;
export const EVENT_START_BATTLE = 101;
export const HANG_UP_CONSTS = {
ENABLE_LV: 2,
UNIT_TIME: 10 * 60 * 1000,
MAX_TIME: 12 * 60 * 60 * 1000
}
+54
View File
@@ -0,0 +1,54 @@
import { HANG_UP_CONSTS } from './../consts/consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
/**
* 挂机记录表
*/
@index({ roleId: 1, endLv: 1 })
export default class HangUpRecord extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色名
@prop({ required: true, default: 0 })
speedUpTime: number; // 加速时长
@prop({ required: true, default: 1 })
startLv: number; // 开始挂机时的天梯层数,收益使用当前层数 -1 计算,即用户已经通过的最高层
@prop({ required: true })
startTime: Date; // 开始挂机的时间
@prop({ required: false })
endLv: number; // 结束挂机时的层数
@prop({ required: false })
endTime: Date; // 结束挂机的时间
@prop({ required: true, default: false })
received: boolean; // 是否已经领取,true-领取,false-未领取
public static async initRecord(roleId: string, roleName: string, lean = true) {
const curTime = new Date();
const recDoc = new HangUpRecordModel();
const update = Object.assign({roleId, roleName, startTime: curTime}, recDoc.toJSON());
const rec = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: HANG_UP_CONSTS.ENABLE_LV}, update, {upsert: true, new: true}).lean(lean);
return rec;
}
public static async getCurRec(roleId: string, lean = true) {
const rec = await HangUpRecordModel.findOne({roleId, received: false}).lean(lean);
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);
const recDoc = new HangUpRecordModel();
const update = Object.assign({roleId, roleName, startTime: endTime}, recDoc.toJSON());
const newRec = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: endLv}, update, {upsert: true, new: true}).lean(lean);
return newRec;
}
}
export const HangUpRecordModel = getModelForClass(HangUpRecord);
+7
View File
@@ -96,6 +96,9 @@ export default class Role extends BaseModel {
@prop({ required: true })
eventStatus: number; // 奇遇开启状态, 0-未开启 1-开启了第一场事件 2-完全开启
// @prop({ required: false })
// hangUpTime: Date; // 当前挂机开始时间
public static async findByUid(uid: number, serverId: number, lean = true) {
const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean);
@@ -131,6 +134,10 @@ export default class Role extends BaseModel {
public static async setEventStatus(roleId: string, eventStatus: number, lean = true) {
const role = await RoleModel.findOneAndUpdate({ roleId }, { eventStatus }).lean(lean);
}
public static async towerLvUp(roleId: string, lean = true) {
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}}).lean(lean);
return role;
}
}
+41 -2
View File
@@ -1,11 +1,13 @@
import { RoleModel } from './Role';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
import { stringify } from 'querystring';
class WarStatus {
@prop({ required: true })
warId: number; // 策划表中战斗编号
@prop({ required: true })
battleCode: string; // 服务器生成的战斗唯一标识
@prop({ required: false })
battleCode?: string; // 服务器生成的战斗唯一标识
@prop({ required: true })
status: boolean; // 是否通过,true-通过,false-未通过
}
@@ -30,11 +32,48 @@ export default class TowerRecord extends BaseModel {
speedUpTime: number; // 加速总时长
@prop({ required: true })
hangUpTime: Date; // 挂机开始时间
@prop({ required: true, default: false })
passed: boolean; // 此层是否通过,true-通过,false-未通过
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 { roleId, lv } = towerInfo;
let rec = await TowerRecordModel.findOneAndUpdate({roleId, lv}, update, {upsert: true, new: true}).lean(lean);
return rec;
}
/**
* 更新天梯记录
* @param roleId 角色 Id
* @param battleCode 服务器生成的战斗唯一标识
* @param warId 策划表中的战斗 Id
* @param heroes 使用的英雄列表
* @param inc 升级的层数
* @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;
}
public static async getRecordByLv(roleId: string, lv: number, lean = true) {
const rec = await TowerRecordModel.findOne({roleId, lv}).lean(lean);
return rec;
}
public static async resetRecordByLv(roleId: string, lv: number, lean = true) {
const rec = await TowerRecordModel.findOneAndUpdate(
{roleId, lv, passed: false},
{$set: {'warStatus.$.status': false, 'warStatus.$.battleCode': '', heroes: []}},
{new: true}).lean(lean);
return rec;
}
}
export const TowerRecordModel = getModelForClass(TowerRecord);