122 lines
4.3 KiB
TypeScript
122 lines
4.3 KiB
TypeScript
|
||
import BaseModel from './BaseModel';
|
||
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
|
||
import { HeroSkin } from './Hero';
|
||
|
||
|
||
export class ResonanceEplaceStone {
|
||
@prop({ required: true })
|
||
id: number; // 孔的id
|
||
@prop({ required: true })
|
||
stone: number; // 装备的宝石id,未装备为0
|
||
}
|
||
export class ResonanceEplace {
|
||
@prop({ required: true })
|
||
id: number; // 装备栏id,id固定部位
|
||
@prop({ required: true })
|
||
equipId: number; // 装备表id
|
||
@prop({ required: true })
|
||
lv: number; // 强化等级
|
||
@prop({ required: true })
|
||
quality: number; // 品质
|
||
@prop({ required: true })
|
||
qualityStage: number; // 升品之前的小点
|
||
@prop({ required: true })
|
||
star: number; // 星级
|
||
@prop({ required: true })
|
||
starStage: number; // 升星级之前的小点
|
||
@prop({ required: true, type: ResonanceEplaceStone, _id: false })
|
||
stones: ResonanceEplaceStone[]; // 地玉石,初始的时候就有3个槽,是否解锁靠star判断
|
||
@prop({ required: true })
|
||
jewel: number; // 天晶石的seqId,具体状态去jewel表查
|
||
}
|
||
|
||
export class ResonanceConnection {
|
||
@prop({ required: true })
|
||
shipId: number; // 羁绊编号
|
||
@prop({ required: true })
|
||
level: number;
|
||
@prop({ required: true })
|
||
exp: number;
|
||
}
|
||
|
||
export class ResonanceTalent {
|
||
@prop({ required: true })
|
||
id: number; // 天赋表id
|
||
@prop({ required: true })
|
||
level: number; // 天赋等级
|
||
}
|
||
|
||
@index({ roleId: 1, position: 1, hid: 1 })
|
||
export default class Resonance extends BaseModel {
|
||
@prop({ required: true })
|
||
roleId: string;
|
||
|
||
@prop({ required: true })
|
||
position: number; // 上阵位置,前6(6是鸣主配在系统参数表)不存通过计算获得,已解锁未上阵仅有positon
|
||
|
||
@prop({ required: true })
|
||
hid: number; // 武将id
|
||
|
||
@prop({ required: true })
|
||
seqId: number; // 武将表自增id
|
||
|
||
@prop({ required: true })
|
||
lv: number; //武将等级
|
||
|
||
@prop({ required: true })
|
||
exp: number; //
|
||
|
||
@prop({ required: true })
|
||
jobStage: number; // 职阶
|
||
|
||
// @prop({ required: true, type: ResonanceTalent, _id: false })
|
||
// talent: ResonanceTalent[] // 天赋
|
||
|
||
// @prop({ required: true })
|
||
// usedTalentPoint: number; // 已使用的天赋点数
|
||
|
||
@prop({ required: true })
|
||
skinId: number; // 当前皮肤id,fashions表的heroId字段
|
||
|
||
@prop({ required: true, type: HeroSkin, default: [], _id: false })
|
||
skins: HeroSkin[]; // 皮肤
|
||
|
||
@prop({ required: true, type: ResonanceConnection, _id: false })
|
||
connections: ResonanceConnection[] // 羁绊
|
||
|
||
@prop({ required: true, type: ResonanceEplace, _id: false })
|
||
ePlace: ResonanceEplace[] // 所有装备栏
|
||
|
||
@prop({ required: true })
|
||
ce: number // 战力
|
||
|
||
public static async findByRoleId(roleId: string, lean = true) {
|
||
let result: ResonanceType[] = await ResonanceModel.find({ roleId }).lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async findByPosition(roleId: string, position: number, lean = true) {
|
||
let result: ResonanceType = await ResonanceModel.findOne({ roleId, position }).lean(lean);
|
||
return result
|
||
}
|
||
|
||
public static async findByPositionAndHid(roleId: string, position: number, hid: number, lean = true) {
|
||
let result: ResonanceType = await ResonanceModel.findOne({ roleId, position, hid }).lean(lean);
|
||
return result
|
||
}
|
||
|
||
public static async updateByPosition(roleId: string, position: number, param: ResonancePara, lean = true) {
|
||
let result: ResonanceType = await ResonanceModel.findOneAndUpdate({ roleId, position }, { $set: param }, { new: true, upsert: true }).lean(lean);
|
||
return result;
|
||
}
|
||
|
||
public static async deletePosition(roleId: string, position: number) {
|
||
let result = await ResonanceModel.deleteMany({ roleId, position });
|
||
return result;
|
||
}
|
||
}
|
||
|
||
export const ResonanceModel = getModelForClass(Resonance);
|
||
export interface ResonanceType extends Pick<DocumentType<Resonance>, keyof Resonance> { };
|
||
export type ResonancePara = Partial<ResonanceType>; // 将所有字段变成可选项
|