diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts new file mode 100644 index 000000000..3eb87cfbc --- /dev/null +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -0,0 +1,27 @@ +import { TowerRecordModel } from './../../../../../shared/db/TowerRecord'; +import { Application, BackendSession } from 'pinus'; +import Role from '../../../db/Role'; + +export default function(app: Application) { + return new TowerBattleHandler(app); +} + +export class TowerBattleHandler { + constructor(private app: Application) { + } + + async getStatus(msg: {}, session: BackendSession) { + let roleId = session.get('roleId'); + let { towerLv } = await Role.findByRoleId(roleId); + let towerRec = await TowerRecordModel.getRecordByLv(roleId, towerLv); + let data = towerRec ? { + curLv: towerLv, + usedHeroes: towerRec.heroes, + progress: towerRec.warStatus + } : '天梯记录异常'; + return { + code: 200, + data + } + } +} \ No newline at end of file diff --git a/shared/db/Role.ts b/shared/db/Role.ts index 4e808ad22..2e81938cd 100644 --- a/shared/db/Role.ts +++ b/shared/db/Role.ts @@ -91,6 +91,9 @@ export default class Role extends BaseModel { @prop({ required: true }) loginTime: Date; // 更新 / 登录时间 + @prop({ required: true, default: 1 }) + towerLv: number; // 天梯当前层数 + public static async findByUid(uid: number, serverId: number, lean = true) { const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean); return role; diff --git a/shared/db/SearchRecord.ts b/shared/db/SearchRecord.ts new file mode 100644 index 000000000..2862de057 --- /dev/null +++ b/shared/db/SearchRecord.ts @@ -0,0 +1,31 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +class SearchTask { + @prop({ required: true }) + id: number; // 任务表中的唯一 Id + @prop({ required: true }) + taskCode: string; // 服务器生成的任务唯一标识 + @prop({ required: true }) + startTime: Date; // 任务派遣开始时间 + @prop({ required: true }) + status: number; // 派遣任务当前状态,0-可派遣,1-已派遣,2-已完成,3-已领取 + @prop({ required: true, default: [] }) + heroes: Array // 派遣武将 hid +} + +/** + * 派遣任务记录表 + */ +@index({ roleId: 1, type: 1 }) + +export default class SearchRecord extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true }) + batchCode: string; // 本批派遣任务唯一标识 + @prop({ required: true, default: [] }) + tasks: Array; +} + +export const SearchRecordModel = getModelForClass(SearchRecord); diff --git a/shared/db/TowerRecord.ts b/shared/db/TowerRecord.ts new file mode 100644 index 000000000..a9710aa52 --- /dev/null +++ b/shared/db/TowerRecord.ts @@ -0,0 +1,40 @@ +import BaseModel from './BaseModel'; +import { index, getModelForClass, prop } from '@typegoose/typegoose'; + +class WarStatus { + @prop({ required: true }) + warId: number; // 策划表中战斗编号 + @prop({ required: true }) + battleCode: string; // 服务器生成的战斗唯一标识 + @prop({ required: true }) + status: boolean; // 是否通过,true-通过,false-未通过 +} + +/** + * 天梯记录表 + */ +@index({ roleId: 1, lv: 1 }) + +export default class TowerRecord extends BaseModel { + @prop({ required: true }) + roleId: string; // 角色 id + @prop({ required: true, default: 1 }) + lv: number; // 天梯层数 + @prop({ required: true, default: [] }) + heroes: Array; // 本层已使用武将 + @prop({ required: true, default: [] }) + warStatus: Array; + @prop({ required: true, default: 0 }) + speedUpCnt: number; // 加速总次数 + @prop({ required: true, default: 0 }) + speedUpTime: number; // 加速总时长 + @prop({ required: true }) + hangUpTime: Date; // 挂机开始时间 + + public static async getRecordByLv(roleId: string, lv: number, lean = true) { + const rec = await TowerRecordModel.findOne({roleId, lv}).lean(lean); + return rec; + } +} + +export const TowerRecordModel = getModelForClass(TowerRecord);