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 }) job: 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, keyof Resonance> { }; export type ResonancePara = Partial; // 将所有字段变成可选项