✨ feat(副将): 设置副将
This commit is contained in:
@@ -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 },
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 } } });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user