feat(副将): 设置副将

This commit is contained in:
luying
2022-12-08 15:36:55 +08:00
parent bdbac4b085
commit b684307818
12 changed files with 92 additions and 8 deletions
+18
View File
@@ -163,6 +163,12 @@ export default class Hero extends BaseModel {
@prop({ required: true, type: Reward, default: [], _id: false })
consumes: Reward[]; // 武将装备引用数组
@prop({ required: true, default: 0 })
subHid: number; // 副将
@prop({ required: true, default: 0 })
subActorId: number; // 副将
public static async findByRole(roleId: string, sort: { field: string, sortBy: number }[] = [], select?: string, getters = false) {
let sortParam = {};
for (let { field, sortBy } of sort) {
@@ -205,6 +211,18 @@ export default class Hero extends BaseModel {
return hero;
}
public static async findSubHero(roleId: string, subHid: number) {
const hero: HeroType = await HeroModel.findOne({ roleId, subHid }).lean();
return hero;
}
// 设置副将
public static async setSubHero(roleId: string, hid: number, subSkinId: number, subActorId: number) {
const preHero = subActorId > 0? await HeroModel.findOneAndUpdate({ roleId, subActorId }, { $set: { subActorId: 0, subHid: 0 } }, { new: true }).lean(): null;
const curHero: HeroType = await HeroModel.findOneAndUpdate({ roleId, hid }, { $set: { subHid: subSkinId, subActorId } }, { new: true }).lean();
return { preHid: preHero?.hid||0, curHero };
}
public static async addEquip(roleId: string, hid: number, ePlaceId: number, equipId: string) {
const hero: HeroType = await HeroModel.findOneAndUpdate(
{ roleId, hid, 'ePlace.id': ePlaceId },
+7 -3
View File
@@ -56,7 +56,7 @@ export default class LadderMatch extends BaseModel {
public static async findByRoleIdAndInclude(roleId: string) {
const result: LadderMatchType = await LadderMatchModel.findOne({ roleId })
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job subHid')
.lean();
return result;
}
@@ -78,7 +78,7 @@ export default class LadderMatch extends BaseModel {
public static async updateByRoleIdAndInclude(roleId: string, params: LadderUpdateInter) {
const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ roleId }, { $set: params}, { new: true })
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job subHid')
.lean();
return defense;
}
@@ -98,7 +98,7 @@ export default class LadderMatch extends BaseModel {
public static async lock(serverId: number, roleId: string, rank: number) {
const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ serverId, roleId, rank, locked: 0 }, { $set: { locked: 1 }}, { new: true })
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv skins job subHid')
.lean();
return defense;
}
@@ -154,6 +154,10 @@ export default class LadderMatch extends BaseModel {
{ arrayFilters: [{"t.actorId": hid}] }).lean();
return rec
}
public static async removeBySub(roleId: string, subHid: number) {
await LadderMatchModel.updateMany({ roleId, hasDefense: true }, { $pull: { 'defense.heroes': { actorId: subHid } } });
}
}
export const LadderMatchModel = getModelForClass(LadderMatch);
+5
View File
@@ -189,6 +189,11 @@ export default class PvpDefense extends BaseModel {
public static async resetDefense() {
await PvpDefenseModel.updateMany({}, { $set: { hasDefense: false, defense: null } });
}
public static async removeBySub(roleId: string, subHid: number) {
await PvpDefenseModel.updateMany({ roleId, hasDefense: true }, { $pull: { 'defense.heroes': { actorId: subHid } } });
await PvpDefenseModel.updateMany({ roleId, 'attack.heroes': { $exists: true } }, { $pull: { 'attack.heroes': { actorId: subHid } } });
}
}
export const PvpDefenseModel = getModelForClass(PvpDefense);
+4
View File
@@ -26,6 +26,10 @@ export default class PvpSaveData extends BaseModel {
const result: PvpSaveDataType[] = await PvpSaveDataModel.find({ roleId }).lean();
return result;
}
public static async removeBySub(roleId: string, subHid: number) {
await PvpSaveDataModel.updateMany({ roleId }, { $pull: { heroes: { actorId: subHid } } });
}
}