feat(共鸣系统): 新增

This commit is contained in:
zhangxk
2023-10-09 15:11:54 +08:00
parent cd87b9e74c
commit 53a0b0f340
18 changed files with 1195 additions and 14 deletions
+14
View File
@@ -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);
+122
View File
@@ -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; // 装备栏idid固定部位
@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; // 当前皮肤idfashions表的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>; // 将所有字段变成可选项
+114
View File
@@ -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; // 装备栏idid固定部位
@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; // 当前皮肤idfashions表的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>; // 将所有字段变成可选项