pvp: 修复重复对手bug
This commit is contained in:
@@ -140,7 +140,7 @@ export default class PvpDefense extends BaseModel {
|
||||
}
|
||||
|
||||
public static async updateCe(roleId: string, hid: number, defCe: number, lean = true) {
|
||||
const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId, 'heroes.actorId': hid }, { $set: { defCe } }).lean(lean);
|
||||
const rec: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId, 'heroes.actorId': hid }, { $inc: { defCe } }).lean(lean);
|
||||
return rec
|
||||
}
|
||||
|
||||
@@ -157,8 +157,8 @@ export default class PvpDefense extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByTeamLv(min: number, max: number) {
|
||||
const result: PvpDefenseType[] = await PvpDefenseModel.find({ pLv: { $gte: min, $lte: max } })
|
||||
public static async findByTeamLv(seasonNum: number, min: number, max: number) {
|
||||
const result: PvpDefenseType[] = await PvpDefenseModel.find({ seasonNum, pLv: { $gte: min, $lte: max } })
|
||||
.populate('role', 'head frame spine topLineupCe roleId roleName lv globalCeAttr')
|
||||
.populate('heroes.hero')
|
||||
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine rankLv pLv title lv defCe heroes')
|
||||
|
||||
@@ -43,7 +43,7 @@ export async function calPlayerCeAndSave(type: number, roleId: string, originHer
|
||||
let { topLineup, topLineupCe } = await calculatetopLineup(role, originHero.hid, heroCe, originHero._id); // 计算更新最强五人战力
|
||||
role = await RoleModel.updateRoleInfo(roleId, { ce: role.ce + incCe, topLineup, topLineupCe });
|
||||
|
||||
await PvpDefenseModel.updateCe(roleId, originHero.hid, heroCe); // 更新pvp防守阵战力
|
||||
await PvpDefenseModel.updateCe(roleId, originHero.hid, incCe); // 更新pvp防守阵战力
|
||||
let guild = await GuildModel.updateCe(roleId, incCe); // 公会更新战力
|
||||
|
||||
let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>();
|
||||
@@ -66,6 +66,7 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
|
||||
let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>();
|
||||
|
||||
let roleCe = 0; // 总战力加成
|
||||
let allIncCe = 0;
|
||||
for (let hero of heros) {
|
||||
let { attr: heroAttrs } = hero;
|
||||
let newAttr = new Attribute();
|
||||
@@ -73,9 +74,12 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
|
||||
let heroCe = newAttr.calCe(); // 计算最终战力
|
||||
|
||||
let incHeroCe = heroCe - hero.ce;
|
||||
allIncCe += incHeroCe;
|
||||
roleCe += heroCe;
|
||||
pushHeros.push({ hid: hero.hid, ce: reduceCe(hero.ce), incHeroCe: reduceCe(incHeroCe) });
|
||||
await HeroModel.updateHeroInfo(roleId, hero.hid, { ce: heroCe });
|
||||
await HeroModel.updateHeroInfo(roleId, hero.hid, { ce: heroCe });
|
||||
await PvpDefenseModel.updateCe(roleId, hero.hid, incHeroCe); // 更新pvp防守阵战力
|
||||
|
||||
}
|
||||
let { topLineup, topLineupCe } = await calculatetopLineup(role); // 计算更新最强五人战力
|
||||
|
||||
@@ -85,7 +89,8 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
|
||||
update.topLineupCe = topLineupCe;
|
||||
|
||||
role = await RoleModel.updateRoleInfo(roleId, update);
|
||||
return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe }
|
||||
let guild = await GuildModel.updateCe(roleId, allIncCe); // 公会更新战力
|
||||
return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild }
|
||||
}
|
||||
|
||||
// 计算武将全局战力
|
||||
|
||||
Reference in New Issue
Block a user