装备:获得天晶石&合成装备
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user