From 39d6ed9ae6a58d510e9ca0f37703c7227d88b67a Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Thu, 8 Oct 2020 21:59:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A9=E6=A2=AF=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=A1=A8=EF=BC=9B=E6=9F=A5=E8=AF=A2=E5=A4=A9=E6=A2=AF=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/towerBattleHandler.ts | 27 +++++++++++++ shared/db/Role.ts | 3 ++ shared/db/SearchRecord.ts | 31 ++++++++++++++ shared/db/TowerRecord.ts | 40 +++++++++++++++++++ 4 files changed, 101 insertions(+) create mode 100644 game-server/app/servers/battle/handler/towerBattleHandler.ts create mode 100644 shared/db/SearchRecord.ts create mode 100644 shared/db/TowerRecord.ts 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);