装备:获得天晶石&合成装备

This commit is contained in:
luying
2022-02-15 18:46:56 +08:00
parent ecc55b3063
commit 465cc15e43
30 changed files with 506 additions and 283 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ export default class Equip extends BaseModel {
let equip = await this.createEquip(equipInfo);
result.push(equip);
}
await RoleModel.increaseEquip(roleId, result.length);
await RoleModel.increaseJewel(roleId, result.length);
return result;
}
+22 -11
View File
@@ -82,19 +82,35 @@ export class EPlace {
@prop({ required: true })
id: number;
@prop({ required: true })
lv: number;
equipId: number;
@prop({ required: true })
quality: number;
lv: number = 0;
@prop({ required: true })
qualityStage: number;
quality: number = 0;
@prop({ required: true })
star: number;
qualityStage: number = 0;
@prop({ required: true })
starStage: number;
star: number = 0;
@prop({ required: true })
starStage: number = 0;
@prop({ required: true, type: Stone, _id: false })
stones: Stone[];
@prop({ required: true })
jewel: number;
jewel: number = 0;
private getInitialStone () {
let result: Stone[] = [];
for(let id = 1; id <= 3; id++) {
result.push({ id, stone: 0 });
}
return result;
}
constructor(id: number, equipId: number) {
this.id = id;
this.equipId = equipId;
this.stones = this.getInitialStone();
}
}
@index({ roleId: 1, hid: 1 })
@@ -207,11 +223,6 @@ export default class Hero extends BaseModel {
return hero;
}
public static async findByHidAndRoleWithEquip(hid: number, roleId: string, lean = true) {
const hero: HeroType = await HeroModel.findOne({ hid, roleId }).populate('ePlace.equip').lean(lean);
return hero;
}
public static async addEquip(roleId: string, hid: number, ePlaceId: number, equipId: string) {
const hero: HeroType = await HeroModel.findOneAndUpdate(
{ roleId, hid, 'ePlace.id': ePlaceId },
+54 -11
View File
@@ -3,6 +3,10 @@ import { index, getModelForClass, prop, DocumentType, modelOptions } from '@type
// import { COUNTER } from '../consts';
// import { CounterModel } from './Counter';
import { SearchJewelParam } from '../domain/backEndField/search';
import { RoleModel } from './Role';
import { CounterModel } from './Counter';
import { COUNTER } from '../consts';
import { HeroModel } from './Hero';
export class RandSe {
@prop({ required: true })
@@ -12,13 +16,23 @@ export class RandSe {
@prop({ required: true })
rand: number; // 随机属性内需要随机的值
@prop({ required: true })
locked: boolean; // 洗炼是否锁定
locked: boolean = false; // 洗炼是否锁定
@prop({ required: false, default: false })
quenched: boolean = false; // 是否淬炼了
constructor(id: number, seid: number, rand: number) {
this.id = id;
this.seid = seid;
this.rand = rand;
}
}
@index({ roleId: 1, hid: 1, id: 1 })
@index({ seqId: 1 })
@modelOptions({ schemaOptions: { id: false } })
export default class Equip extends BaseModel {
export default class Jewel extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@@ -36,18 +50,11 @@ export default class Equip extends BaseModel {
@prop({ required: false, default: 0 })
ePlaceId: number; // 武将装备的部位
@prop({ required: false, default: 0 })
quenchId: number; // 选择淬炼的那一条,未选择时为0
@prop({ required: false, default: 0 })
quenchCnt: number; // 淬火成功次数,到了保底就绝对成功
@prop({ required: false, type: RandSe, default: [], _id: false })
randSe: RandSe[]; // 强化随机属性
@prop({ required: false, type: RandSe, default: [], _id: false })
previewRandSe: RandSe[]; // 强化随机属性预览
public static async findbyRole(roleId: string, lean = true) {
const jewels: JewelType[] = await JewelModel.find({ roleId }).lean(lean);
return jewels;
@@ -58,6 +65,42 @@ export default class Equip extends BaseModel {
return jewel;
}
public static async findbySeqIds(seqIds: number[], select?: string ) {
const jewel: JewelType[] = await JewelModel.find({ seqId: { $in: seqIds } }).select(select).lean();
return jewel;
}
public static async createJewel(jewelInfo: jewelUpdate) {
const seqId = await CounterModel.getNewCounter(COUNTER.JEWEL_ID);
const doc = new JewelModel();
const update = Object.assign(doc.toJSON(), seqId, jewelInfo);
const jewel: JewelType = await JewelModel.findOneAndUpdate({ seqId }, update, { upsert: true, new: true }).lean();
if (jewelInfo.hid > 0) {
await HeroModel.findOneAndUpdate(
{ roleId: jewelInfo.roleId, hid: jewelInfo.hid, 'ePlace.id': jewelInfo.ePlaceId },
{ $set: { 'ePlace.$.jewel': seqId } },
{ new: true }).lean();
}
return jewel;
}
public static async createJewels(roleId: string, jewelInfos: jewelUpdate[]) {
let result: JewelType[] = [];
for(let jewelInfo of jewelInfos) {
let jewel = await this.createJewel(jewelInfo);
result.push(jewel);
}
await RoleModel.increaseJewel(roleId, result.length);
return result;
}
public static async deleteBySeqIds(roleId: string, seqIds: number[]) {
let jewels = await JewelModel.findbySeqIds(seqIds);
await JewelModel.deleteMany({ roleId, seqId: { $in: seqIds } });
await RoleModel.increaseJewel(roleId, -1 * seqIds.length);
return jewels;
}
public static async deleteAccount(roleId: string) {
let result = await JewelModel.deleteMany({ roleId });
@@ -96,9 +139,9 @@ export default class Equip extends BaseModel {
}
}
export const JewelModel = getModelForClass(Equip);
export const JewelModel = getModelForClass(Jewel);
export interface JewelType extends Pick<DocumentType<Equip>, keyof Equip> {
export interface JewelType extends Pick<DocumentType<Jewel>, keyof Jewel> {
id: number;
};
export type jewelUpdate = Partial<JewelType>; // 将所有字段变成可选项
+3 -4
View File
@@ -215,7 +215,7 @@ export default class Role extends BaseModel {
@prop({ required: true, default: [] })
payRecord: PayRecord[]; // 支付记录
@prop({ required: true, default: 0 })
equipCount: number; // 装备数量
jewelCount: number; // 装备数量
@prop({ required: true, default: 0 })
coin: number; // 总铜钱
@@ -710,12 +710,11 @@ export default class Role extends BaseModel {
}
// 装备上限
public static async increaseEquip(roleId: string, count: number) {
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { equipCount: count } }, { new: true }).lean();
public static async increaseJewel(roleId: string, count: number) {
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { jewelCount: count } }, { new: true }).lean();
return role;
}
// 支付记录
public static async increaseTotalPay(roleId: string, price: number) {
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { totalPay: price } }, { new: true }).lean();