127 lines
6.0 KiB
TypeScript
127 lines
6.0 KiB
TypeScript
import BaseModel from './BaseModel';
|
||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||
import { EXPEDITION_WAR_RECORD_STATUS } from '../consts';
|
||
|
||
class Enemies {
|
||
@prop({ required: true })
|
||
actorId: number; // 敌人id
|
||
@prop({ required: false })
|
||
actorName: string; // 敌人名
|
||
@prop({ required: false })
|
||
dataId: number; // 战场中唯一指向武将的代码
|
||
@prop({ required: false })
|
||
relation: number; // 角色属于我方还是地方
|
||
@prop({ required: false })
|
||
outIndex: number; // 程序将信息存入数组顺序
|
||
@prop({ required: false })
|
||
x: number; // 战场x坐标
|
||
@prop({ required: false })
|
||
y: number; // 战场y坐标
|
||
@prop({ required: false })
|
||
direction: number; // 朝向
|
||
@prop({ required: false })
|
||
var: number; // 变量
|
||
@prop({ required: false })
|
||
lv: number; // 角色等级
|
||
@prop({ required: false })
|
||
hide: number; // 是否隐藏
|
||
@prop({ required: false })
|
||
initial_ai: number; // AI类型
|
||
@prop({ required: true })
|
||
attribute: {hp: number, atk: number, matk: number, def: number, mdef: number, agi: number, luk: number, speed: number, hit: number, cri: number, flee: number, antCri: number, damageIncrease: number, damageDecrease: number, defIgnore: number, bloodSuck: number, ap: number}; // 属性
|
||
@prop({ required: false })
|
||
skill: string; // 技能
|
||
@prop({ required: false })
|
||
seid: string; // 技能
|
||
@prop({ required: false })
|
||
star: number; // 角色星级
|
||
@prop({ required: false })
|
||
spine: string; // S动画
|
||
|
||
}
|
||
|
||
class EnemiesCurHPAP {
|
||
@prop({ required: true })
|
||
dataId: number; // 战场中唯一指向武将的代码
|
||
@prop({ required: true })
|
||
hp: number; // 生命
|
||
@prop({ required: true })
|
||
ap: number; // 怒气
|
||
}
|
||
|
||
/**
|
||
* 远征记录
|
||
*/
|
||
@index({ expeditionCode: 1, expeditionId: 1 })
|
||
|
||
export default class ExpeditionWarRecord extends BaseModel {
|
||
@prop({ required: true, default: '' })
|
||
roleId: string; // 角色 id
|
||
@prop({ required: true, default: '' })
|
||
expeditionCode: string; // 远征的唯一标识
|
||
@prop({ required: true, default: 0 })
|
||
expeditionId: number; // 远征序号
|
||
@prop({ required: true, default: 0 })
|
||
battleId: number; // 相关关卡id
|
||
@prop({ required: true, default: '' })
|
||
battleCode: string; // 关联关卡唯一值
|
||
@prop({ required: true, default: 0 })
|
||
battleStatus: number; // 是否通过, -1-已生成 0-可挑战 1-成功 2-挑战失败
|
||
@prop({ required: true, default: 0 })
|
||
enemyFrom: number; // 敌军数据来源:1-配表的敌军队,2-玩家
|
||
@prop({ required: true, default: '' })
|
||
enemyId: string; // 敌军队伍id或玩家id
|
||
@prop({ required: true, type: Enemies, default: [], _id: false })
|
||
enemies: Array<Enemies>; // 敌军数据
|
||
@prop({ required: true, type: EnemiesCurHPAP, default: [], _id: false })
|
||
enemiesCurHpAp: Array<EnemiesCurHPAP>; // 敌军数据
|
||
@prop({ required: true, default: 0 })
|
||
ce: number; // 敌军战力
|
||
|
||
public static async getRecordByCode(expeditionCode: string, lean = true) {
|
||
const result: ExpeditionWarRecordType[] = await ExpeditionWarRecordModel.find({ expeditionCode, battleStatus: {$gte: EXPEDITION_WAR_RECORD_STATUS.WAITING} }).select('expeditionId battleId battleCode battleStatus ce').sort({expeditionId: 1}).lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async getRecordByCodeAndId(expeditionCode: string, expeditionId: number, lean = true) {
|
||
const result: ExpeditionWarRecordType = await ExpeditionWarRecordModel.findOne({ expeditionCode, expeditionId }).select('expeditionId battleId battleCode battleStatus enemyFrom enemies enemiesCurHpAp ce').lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async saveRecord(expeditionCode: string, expeditionId: number, params: {roleId: string, battleId: number, enemyFrom: number, enemyId: string, enemies: Array<any>, battleStatus: number}, lean = true) {
|
||
const doc = new ExpeditionWarRecordModel();
|
||
const update = Object.assign(doc.toJSON(), params, {expeditionCode, expeditionId});
|
||
const result: ExpeditionWarRecordType = await ExpeditionWarRecordModel.findOneAndUpdate({ expeditionCode, expeditionId }, update, {new: true, upsert: true}).select('expeditionId battleId battleCode battleStatus enemyFrom enemies enemiesCurHpAp ce').lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async updateStatus(expeditionCode: string, expeditionId: number, battleStatus: number, lean = true) {
|
||
const result: ExpeditionWarRecordType = await ExpeditionWarRecordModel.findOneAndUpdate({ expeditionCode, expeditionId }, {battleStatus}, {new: true}).lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async updateBattleCode(expeditionCode: string, expeditionId: number, battleStatus: number, battleCode: string, lean = true) {
|
||
const result: ExpeditionWarRecordType = await ExpeditionWarRecordModel.findOneAndUpdate({ expeditionCode, expeditionId }, {battleStatus, battleCode}, {new: true}).lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async updateEnemiesStatus(expeditionCode: string, expeditionId: number, battleStatus: number, enemies: Array<{dataId: number, hp: number, ap: number}>, lean = true) {
|
||
|
||
const result: ExpeditionWarRecordType = await ExpeditionWarRecordModel.findOneAndUpdate(
|
||
{expeditionCode, expeditionId},
|
||
{$set: {battleStatus}, enemiesCurHpAp: enemies},
|
||
{new: true}
|
||
).lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async deleteAccount(roleId: string) {
|
||
let result = await ExpeditionWarRecordModel.deleteMany({roleId});
|
||
return result;
|
||
}
|
||
}
|
||
|
||
export const ExpeditionWarRecordModel = getModelForClass(ExpeditionWarRecord);
|
||
|
||
export interface ExpeditionWarRecordType extends Pick<DocumentType<ExpeditionWarRecord>, keyof ExpeditionWarRecord>{};
|