初步加入天梯接口
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user