✨ feat(共鸣系统): 新增
This commit is contained in:
@@ -362,6 +362,20 @@ export default class Hero extends BaseModel {
|
||||
const result = await HeroModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async bulkWriteUpdate(updateArr: HeroUpdate[]) {
|
||||
if (updateArr.length == 0) return;
|
||||
await HeroModel.bulkWrite(updateArr.map((param) => {
|
||||
const { roleId, hid } = param;
|
||||
return { updateOne: { filter: { roleId, hid }, update: { $set: param }, upsert: true } }
|
||||
}))
|
||||
}
|
||||
|
||||
public static async getHidCountByRoleId(roleId:string){
|
||||
let result: number = await HeroModel.countDocuments({roleId});
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const HeroModel = getModelForClass(Hero);
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
|
||||
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>; // 将所有字段变成可选项
|
||||
@@ -0,0 +1,114 @@
|
||||
|
||||
import BaseModel from './BaseModel';
|
||||
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
|
||||
import { HeroSkin } from './Hero';
|
||||
|
||||
|
||||
export class ResonanceHistoryEplaceStone {
|
||||
@prop({ required: true })
|
||||
id: number; // 孔的id
|
||||
@prop({ required: true })
|
||||
stone: number; // 装备的宝石id,未装备为0
|
||||
}
|
||||
export class ResonanceHistoryEplace {
|
||||
@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: ResonanceHistoryEplaceStone, _id: false })
|
||||
stones: ResonanceHistoryEplaceStone[]; // 地玉石,初始的时候就有3个槽,是否解锁靠star判断
|
||||
@prop({ required: true })
|
||||
jewel: number; // 天晶石的seqId,具体状态去jewel表查
|
||||
}
|
||||
|
||||
export class ResonanceHistoryConnection {
|
||||
@prop({ required: true })
|
||||
shipId: number; // 羁绊编号
|
||||
@prop({ required: true })
|
||||
level: number;
|
||||
@prop({ required: true })
|
||||
exp: number;
|
||||
}
|
||||
|
||||
@index({ roleId: 1, position: 1, hid: 1, time: 1 })
|
||||
export default class ResonanceHistory 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 })
|
||||
skinId: number; // 当前皮肤id,fashions表的heroId字段
|
||||
|
||||
@prop({ required: true, type: HeroSkin, default: [], _id: false })
|
||||
skins: HeroSkin[]; // 皮肤
|
||||
|
||||
@prop({ required: true, type: ResonanceHistoryConnection, _id: false })
|
||||
connections: ResonanceHistoryConnection[] // 羁绊
|
||||
|
||||
@prop({ required: true, type: ResonanceHistoryEplace, _id: false })
|
||||
ePlace: ResonanceHistoryEplace[] // 所有装备栏
|
||||
|
||||
@prop({ required: true })
|
||||
ce: number // 战力
|
||||
|
||||
@prop({ required: true, default: () => new Date() })
|
||||
time: Date;
|
||||
|
||||
// public static async findByRoleId(roleId: string, lean = true) {
|
||||
// let result: ResonanceHistoryType[] = await ResonanceHistoryModel.find({ roleId }).select({ '_id': -1 }).lean(lean);
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// public static async findByPosition(roleId: string, position: number, lean = true) {
|
||||
// let result: ResonanceHistoryType = await ResonanceHistoryModel.findOne({ roleId, position }).select({ '_id': -1 }).lean(lean);
|
||||
// return result
|
||||
// }
|
||||
|
||||
// public static async findByPositionAndHid(roleId: string, position: number, hid: number, lean = true) {
|
||||
// let result: ResonanceHistoryType = await ResonanceHistoryModel.findOne({ roleId, position, hid }).select({ '_id': -1 }).lean(lean);
|
||||
// return result
|
||||
// }
|
||||
|
||||
public static async updateByPosition(roleId: string, position: number, param: ResonanceHistoryPara, lean = true) {
|
||||
delete param._id;
|
||||
let result: ResonanceHistoryType = await ResonanceHistoryModel.findOneAndUpdate({ roleId, position }, { $set: param }, { new: true, upsert: true }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
// public static async deletePosition(roleId: string, position: number) {
|
||||
// let result = await ResonanceHistoryModel.deleteMany({ roleId, position });
|
||||
// return result;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
export const ResonanceHistoryModel = getModelForClass(ResonanceHistory);
|
||||
export interface ResonanceHistoryType extends Pick<DocumentType<ResonanceHistory>, keyof ResonanceHistory> { };
|
||||
export type ResonanceHistoryPara = Partial<ResonanceHistoryType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user