🐞 fix(共鸣系统):修改数据下发
This commit is contained in:
@@ -146,8 +146,9 @@ export async function getModuleData(type: string, data: { role: RoleType, sessio
|
|||||||
let { dbResonanceMap } = await getResonanceDataMap(role.roleId);
|
let { dbResonanceMap } = await getResonanceDataMap(role.roleId);
|
||||||
|
|
||||||
role['heros'] = heros.map(hero => new HeroParam(hero));
|
role['heros'] = heros.map(hero => new HeroParam(hero));
|
||||||
for(let hero of role['heros']){
|
for (let hero of role['heros']) {
|
||||||
if(dbResonanceMap.has(hero.hid)){
|
hero.isResonance = false;
|
||||||
|
if (dbResonanceMap.has(hero.hid)) {
|
||||||
hero.isResonance = true;
|
hero.isResonance = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -518,9 +518,12 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
|||||||
}
|
}
|
||||||
let { heroCe, roleInc } = calCe.getCeInc(); // 计算战力,获得有变化的武将战力
|
let { heroCe, roleInc } = calCe.getCeInc(); // 计算战力,获得有变化的武将战力
|
||||||
let changeHids: number[] = [];
|
let changeHids: number[] = [];
|
||||||
let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>();
|
let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number, isResonance:boolean }>();
|
||||||
let heroes: HeroType[] = [];
|
let heroes: HeroType[] = [];
|
||||||
|
|
||||||
|
const { dbResonanceMap } = await getResonanceDataMap(roleId);
|
||||||
|
let isResonance = false
|
||||||
|
|
||||||
for(let [hid, heroUpdate] of heroUpdates) {
|
for(let [hid, heroUpdate] of heroUpdates) {
|
||||||
if(heroCe.has(hid)) {
|
if(heroCe.has(hid)) {
|
||||||
let { ce, inc } = heroCe.get(hid);
|
let { ce, inc } = heroCe.get(hid);
|
||||||
@@ -531,7 +534,8 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
|||||||
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
||||||
await LadderMatchModel.updateCe(roleId, hid, ce);
|
await LadderMatchModel.updateCe(roleId, hid, ce);
|
||||||
await GVGVestigeRankModel.updateCe(roleId, hid, ce);
|
await GVGVestigeRankModel.updateCe(roleId, hid, ce);
|
||||||
pushHeros.push({ hid, ce, incHeroCe: inc });
|
if(dbResonanceMap.has(hid)) isResonance = true;
|
||||||
|
pushHeros.push({ hid, ce, incHeroCe: inc, isResonance });
|
||||||
} else {
|
} else {
|
||||||
let hero = await HeroModel.updateHeroInfo(roleId, hid, heroUpdate);
|
let hero = await HeroModel.updateHeroInfo(roleId, hid, heroUpdate);
|
||||||
heroes.push(hero);
|
heroes.push(hero);
|
||||||
@@ -543,11 +547,11 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
|||||||
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
||||||
await LadderMatchModel.updateCe(roleId, hid, ce);
|
await LadderMatchModel.updateCe(roleId, hid, ce);
|
||||||
await GVGVestigeRankModel.updateCe(roleId, hid, ce);
|
await GVGVestigeRankModel.updateCe(roleId, hid, ce);
|
||||||
pushHeros.push({ hid, ce: hero.ce, incHeroCe: inc });
|
if(dbResonanceMap.has(hid)) isResonance = true;
|
||||||
|
pushHeros.push({ hid, ce: hero.ce, incHeroCe: inc, isResonance });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const { dbResonanceMap } = await getResonanceDataMap(roleId);
|
|
||||||
let { topLineup, topLineupCe, hasTopCeChange } = calCe.getTopLineupNew(dbResonanceMap);
|
let { topLineup, topLineupCe, hasTopCeChange } = calCe.getTopLineupNew(dbResonanceMap);
|
||||||
let roleCeUpdate: RoleCeUpdate = calCe.getRoleCeTable();
|
let roleCeUpdate: RoleCeUpdate = calCe.getRoleCeTable();
|
||||||
if(topLineupCe > (roleCe?.historyLineupCe||0)) {
|
if(topLineupCe > (roleCe?.historyLineupCe||0)) {
|
||||||
@@ -560,6 +564,7 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
|||||||
|
|
||||||
saveCeChangeLog(role, roleInc, role.ce, type, ceChangeTxt);
|
saveCeChangeLog(role, roleInc, role.ce, type, ceChangeTxt);
|
||||||
updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild);
|
updateRank(roleId, serverId, topLineupCe, role, pushHeros, guild);
|
||||||
|
|
||||||
sendMessageToUserWithSuc(roleId, PUSH_ROUTE.PLAYER_CE_UPDATE, { ce: role.ce, heros: pushHeros, topLineupCe, topLineup }, sid);
|
sendMessageToUserWithSuc(roleId, PUSH_ROUTE.PLAYER_CE_UPDATE, { ce: role.ce, heros: pushHeros, topLineupCe, topLineup }, sid);
|
||||||
if(hasTopCeChange) await updateRoleOnlineInfo(roleId, { topLineupCe });
|
if(hasTopCeChange) await updateRoleOnlineInfo(roleId, { topLineupCe });
|
||||||
if(guild) {
|
if(guild) {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import * as util from 'util';
|
|||||||
|
|
||||||
export async function refreshResonanceData(roleId: string, serverId: number, sid: string) {
|
export async function refreshResonanceData(roleId: string, serverId: number, sid: string) {
|
||||||
let resonanceDatas: ReturnResonanceParam[] = [];
|
let resonanceDatas: ReturnResonanceParam[] = [];
|
||||||
let resonanceLv = {}, resonanceJob = {}, resonanceCon = [], resonanceEquip = [];
|
let resonanceLv = {}, resonanceJob = {}, resonanceCon = [], resonanceEquip = [], resonanceEpQuality = [], resonanceEpStar = [], resonanceJewel = [], resonanceStone = [];
|
||||||
|
|
||||||
let dbHeroes: HeroType[] = await HeroModel.findByRole(roleId, [{ field: 'ce', sortBy: -1 }]);
|
let dbHeroes: HeroType[] = await HeroModel.findByRole(roleId, [{ field: 'ce', sortBy: -1 }]);
|
||||||
if (dbHeroes.length < LINEUP_NUM) return { resonanceDatas };
|
if (dbHeroes.length < LINEUP_NUM) return { resonanceDatas };
|
||||||
@@ -30,7 +30,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
for (let position of newPositionArr) {
|
for (let position of newPositionArr) {
|
||||||
resonanceDatas.push({ position });
|
resonanceDatas.push({ position });
|
||||||
}
|
}
|
||||||
if (dbResonanceMap.size == 0) return { resonanceDatas };
|
// if (dbResonanceMap.size == 0) return { resonanceDatas };
|
||||||
|
|
||||||
let dbJewelMap = await getJewelDataMap(dbHeroes);
|
let dbJewelMap = await getJewelDataMap(dbHeroes);
|
||||||
|
|
||||||
@@ -101,6 +101,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
|
|
||||||
//装备升品
|
//装备升品
|
||||||
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.EQUIP_QUALITY, id);
|
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.EQUIP_QUALITY, id);
|
||||||
|
resonanceEpQuality.push({ hid: topLineHero.hid, id, quality: topLineHero.quality, qualityStage: topLineHero.quality })
|
||||||
for (let [hid] of dbResonanceMap) {
|
for (let [hid] of dbResonanceMap) {
|
||||||
let hero = dbHeroes.find(cur => cur.hid == hid);
|
let hero = dbHeroes.find(cur => cur.hid == hid);
|
||||||
const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id);
|
const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id);
|
||||||
@@ -117,6 +118,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
|
|
||||||
//装备精练
|
//装备精练
|
||||||
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.EQUIP_STAR, id);
|
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.EQUIP_STAR, id);
|
||||||
|
resonanceEpStar.push({ hid: topLineHero.hid, id, star: topLineHero.star, starStage: topLineHero.starStage })
|
||||||
for (let [hid] of dbResonanceMap) {
|
for (let [hid] of dbResonanceMap) {
|
||||||
let hero = dbHeroes.find(cur => cur.hid == hid);
|
let hero = dbHeroes.find(cur => cur.hid == hid);
|
||||||
const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id);
|
const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id);
|
||||||
@@ -134,6 +136,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
//天晶
|
//天晶
|
||||||
if (RESONANCE.JEWEL) {
|
if (RESONANCE.JEWEL) {
|
||||||
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.JEWEL, id, dbJewelMap);
|
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.JEWEL, id, dbJewelMap);
|
||||||
|
resonanceJewel.push({ hid: topLineHero.hid, id, jewel: topLineHero.ePlace.find(cur => cur.id == id)?.jewel || 0 })
|
||||||
//破,御,护,命
|
//破,御,护,命
|
||||||
for (let [hid] of dbResonanceMap) {
|
for (let [hid] of dbResonanceMap) {
|
||||||
let hero = dbHeroes.find(cur => cur.hid == hid);
|
let hero = dbHeroes.find(cur => cur.hid == hid);
|
||||||
@@ -152,8 +155,11 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
//地玉
|
//地玉
|
||||||
if (RESONANCE.STONE) {
|
if (RESONANCE.STONE) {
|
||||||
//破,御,护,命 1,2,3
|
//破,御,护,命 1,2,3
|
||||||
|
resonanceStone.push({ id, stones: [] });
|
||||||
for (let index = 1; index <= EQUIP_STONE.THREE; index++) {
|
for (let index = 1; index <= EQUIP_STONE.THREE; index++) {
|
||||||
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.STONE, id, null, index);
|
topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.STONE, id, null, index);
|
||||||
|
resonanceStone.find(cur => cur.id == id).stones.push({ hid: topLineHero.hid, id: index, stone: 0 });
|
||||||
|
|
||||||
for (let [hid] of dbResonanceMap) {
|
for (let [hid] of dbResonanceMap) {
|
||||||
let hero = dbHeroes.find(cur => cur.hid == hid);
|
let hero = dbHeroes.find(cur => cur.hid == hid);
|
||||||
const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id);
|
const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id);
|
||||||
@@ -167,6 +173,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
ePlaceData = hero.ePlace.find(cur => cur.id == id);
|
ePlaceData = hero.ePlace.find(cur => cur.id == id);
|
||||||
};
|
};
|
||||||
ePlaceData.stones.find(cur => cur.id == index).stone = topLineHeroStone.stone;
|
ePlaceData.stones.find(cur => cur.id == index).stone = topLineHeroStone.stone;
|
||||||
|
resonanceStone.find(cur => cur.id == id).stones.find(cur => cur.id == index).stone = topLineHeroStone.stone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -184,17 +191,19 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid
|
|||||||
await HeroModel.bulkWriteUpdate(updateHeroes)
|
await HeroModel.bulkWriteUpdate(updateHeroes)
|
||||||
|
|
||||||
// 重新计算战力
|
// 重新计算战力
|
||||||
let artifacts = await ArtifactModel.findbyHids(roleId, newHeroIds);
|
if (newHeroes.length > 0) {
|
||||||
let { heroes } = await calculateCeWithHeroes(HERO_SYSTEM_TYPE.REBORN_CAL, roleId, serverId, sid, newHeroes, { jewels: [...dbJewelMap.values()], heroes: newHeroes, artifacts });
|
let artifacts = await ArtifactModel.findbyHids(roleId, newHeroIds);
|
||||||
|
let { heroes } = await calculateCeWithHeroes(HERO_SYSTEM_TYPE.RESONANCE_CAL, roleId, serverId, sid, newHeroes, { jewels: [...dbJewelMap.values()], heroes: newHeroes, artifacts });
|
||||||
for (let hero of (heroes || [])) {
|
for (let hero of (heroes || [])) {
|
||||||
const { hid } = hero;
|
const { hid } = hero;
|
||||||
const heroResult = new HeroParam(hero);
|
const heroResult = new HeroParam(hero);
|
||||||
if (!dbResonanceMap.has(hid)) continue;
|
if (!dbResonanceMap.has(hid)) continue;
|
||||||
resonanceDatas.push({ position: dbResonanceMap.get(hid).position, ...pick(heroResult, ['hid', 'seqId', 'lv', 'exp', 'job', 'jobStage', 'talent', 'usedTalentPoint', 'totalTalentPoint', 'connections', 'ePlace', 'ce']) });
|
resonanceDatas.push({ isResonance: true, position: dbResonanceMap.get(hid).position, ...pick(heroResult, ['hid', 'seqId', 'lv', 'exp', 'job', 'jobStage', 'talent', 'usedTalentPoint', 'totalTalentPoint', 'connections', 'ePlace', 'ce']) });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return { resonanceDatas, resonanceLv, resonanceJob, resonanceCon, resonanceEquip };
|
|
||||||
|
return { resonanceDatas, resonanceLv, resonanceJob, resonanceCon, resonanceEquip, resonanceEpQuality, resonanceEpStar, resonanceJewel, resonanceStone };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -223,4 +223,5 @@ export interface ReturnResonanceParam {
|
|||||||
connections?: ResonanceConnection[]; // 羁绊
|
connections?: ResonanceConnection[]; // 羁绊
|
||||||
ePlace?: ResonanceEplace[];
|
ePlace?: ResonanceEplace[];
|
||||||
ce?: number; //战力
|
ce?: number; //战力
|
||||||
|
isResonance?: boolean
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user