diff --git a/game-server/app/servers/role/handler/resonanceHandler.ts b/game-server/app/servers/role/handler/resonanceHandler.ts index 51777cb81..f2264e064 100644 --- a/game-server/app/servers/role/handler/resonanceHandler.ts +++ b/game-server/app/servers/role/handler/resonanceHandler.ts @@ -30,7 +30,7 @@ export class HeroHandler { // if (!await getStartLimt(roleId)) return resResult(STATUS.RESONANCE_NO_START); const resonances = await refreshResonanceData(roleId, serverId, sid); - return resResult(STATUS.SUCCESS, { resonanceDatas: resonances }) + return resResult(STATUS.SUCCESS, resonances) } async unlockPosition(msg: { position: number }, session: BackendSession) { @@ -77,11 +77,11 @@ export class HeroHandler { let dbHeroes = await HeroModel.findByHidAndRole(hid, roleId); if (!dbHeroes) return resResult(STATUS.ROLE_HERO_NOT_EXISTS); - let { lv = 1, exp = 0, jobStage = 0, skinId, skins = [], connections = [], ePlace = [], seqId, ce } = dbHeroes; + let { lv = 1, exp = 0, job = 0, jobStage = 0, skinId, skins = [], connections = [], ePlace = [], seqId, ce } = dbHeroes; //检测养成维度 if (lv > 1) return resResult(STATUS.RESONANCE_PUT_POSITION_EXIST_LV); - if (jobStage) return resResult(STATUS.RESONANCE_PUT_POSITION_EXIST_JOBSTAGE); + // if (jobStage) return resResult(STATUS.RESONANCE_PUT_POSITION_EXIST_JOBSTAGE); if (skins.find(cur => (cur?.usedTalentPoint || 0) > 0)) return resResult(STATUS.RESONANCE_PUT_POSITION_EXIST_TALENT); if (connections.length > 0) return resResult(STATUS.RESONANCE_PUT_POSITION_EXIST_CONNECT); // if (ePlace.length > 0) return resResult(STATUS.RESONANCE_PUT_POSITION_EXIST_EQUIP); @@ -100,12 +100,12 @@ export class HeroHandler { } } - let result = await ResonanceModel.updateByPosition(roleId, position, { hid, seqId, lv, exp, jobStage, skinId, skins, connections, ePlace, ce }); + let result = await ResonanceModel.updateByPosition(roleId, position, { hid, seqId, lv, exp, job, jobStage, skinId, skins, connections, ePlace, ce }); if (!result) return resResult(STATUS.RESONANCE_PUT_POSITION_FAIL); const resonances = await refreshResonanceData(roleId, serverId, sid); - return resResult(STATUS.SUCCESS, { resonanceDatas: resonances }) + return resResult(STATUS.SUCCESS, resonances) } async heroOffPosition(msg: { position: number, hid: number }, session: BackendSession) { @@ -120,7 +120,7 @@ export class HeroHandler { let dbHero = await HeroModel.findByHidAndRole(hid, roleId); if (!dbHero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS); - let { lv = 1, exp = 0, jobStage = 0, skinId, skins = [], connections = [], ePlace = [], seqId } = dbResonance; + let { lv = 1, exp = 0, job = 0, jobStage = 0, skinId, skins = [], connections = [], ePlace = [], seqId } = dbResonance; for (let obj of dbHero.skins) { let newSkin = skins.find(cur => cur.id == obj.id); if (newSkin) { @@ -143,7 +143,7 @@ export class HeroHandler { tempEPlace.stones = obj.stones; } } - let heroResult = await HeroModel.updateHeroInfo(roleId, hid, { lv, exp, jobStage, skinId, skins: dbHero.skins, connections, ePlace }); + let heroResult = await HeroModel.updateHeroInfo(roleId, hid, { lv, exp, job, jobStage, skinId, skins: dbHero.skins, connections, ePlace }); if (!heroResult) return resResult(STATUS.RESONANCE_OFF_POSITION_FAIL); // 重新计算战力 @@ -164,8 +164,8 @@ export class HeroHandler { const resonances = await refreshResonanceData(roleId, serverId, sid); return resResult(STATUS.SUCCESS, { - curHero: { ...pick(new HeroParam(curHero), ['hid', 'seqId', 'lv', 'exp', 'jobStage', 'skinId', 'skins', 'talent', 'usedTalentPoint', 'totalTalentPoint', 'connections', 'ePlace', 'ce']) }, - resonanceDatas: resonances, + curHero: { ...pick(new HeroParam(curHero), ['hid', 'seqId', 'lv', 'exp', 'job', 'jobStage', 'skinId', 'skins', 'talent', 'usedTalentPoint', 'totalTalentPoint', 'connections', 'ePlace', 'ce']) }, + ...resonances, }) } diff --git a/game-server/app/services/role/resonanceService.ts b/game-server/app/services/role/resonanceService.ts index 1e309a85c..f48450a1c 100644 --- a/game-server/app/services/role/resonanceService.ts +++ b/game-server/app/services/role/resonanceService.ts @@ -8,7 +8,7 @@ import { HeroParam } from "../../domain/roleField/hero"; import { gameData, getEquipByJobClassAndEPlace } from "../../pubUtils/data"; import { ReturnResonanceParam } from "../../pubUtils/interface"; import { calculateCeWithHeroes } from "../playerCeService"; -import { initSkinTalent } from "../roleService"; +import { getNewJob, initSkinTalent } from "../roleService"; import { pick } from 'underscore'; import * as util from 'util'; @@ -19,22 +19,24 @@ import * as util from 'util'; // } export async function refreshResonanceData(roleId: string, serverId: number, sid: string) { - let resonances: ReturnResonanceParam[] = []; + let resonanceDatas: ReturnResonanceParam[] = []; + let resonanceLv = {}, resonanceJob = {}, resonanceCon = [], resonanceEquip = []; let dbHeroes: HeroType[] = await HeroModel.findByRole(roleId, [{ field: 'ce', sortBy: -1 }]); - if (dbHeroes.length < LINEUP_NUM) return resonances; + if (dbHeroes.length < LINEUP_NUM) return { resonanceDatas }; let { dbResonanceMap, newPositionArr } = await getResonanceDataMap(roleId); for (let position of newPositionArr) { - resonances.push({ position }); + resonanceDatas.push({ position }); } - if (dbResonanceMap.size == 0) return resonances; + if (dbResonanceMap.size == 0) return { resonanceDatas }; let dbJewelMap = await getJewelDataMap(dbHeroes); // 武将等级 let topLineHero: HeroType = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.LV); + resonanceLv = { hid: topLineHero.hid, lv: topLineHero.lv }; for (let [hid] of dbResonanceMap) { let hero = dbHeroes.find(cur => cur.hid == hid); hero.lv = topLineHero.lv; @@ -43,10 +45,12 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid // 职业(职阶、天赋) topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.JOBSTAGE); + resonanceJob = { hid: topLineHero.hid, job: topLineHero.job, jobStage: topLineHero.jobStage }; for (let [hid] of dbResonanceMap) { let hero = dbHeroes.find(cur => cur.hid == hid); let preJobStage = hero.jobStage; hero.jobStage = topLineHero.jobStage; + hero.job = getNewJob(hero, topLineHero.job); if (preJobStage != hero.jobStage) { //天赋树置空 @@ -57,6 +61,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid // 羁绊1, 2, 3 for (let index = 1; index <= FRIENDSHIP_INDEX.THREE; index++) { topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.CONNECT, index); + resonanceCon.push({ hid: topLineHero.hid, index, level: topLineHero.connections[index]?.level || 0 }); for (let [hid] of dbResonanceMap) { let hero = dbHeroes.find(cur => cur.hid == hid); const topDicShipId = gameData.friendShipByIndex.get(`${topLineHero.hid}_${index}`); @@ -70,6 +75,8 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid shipData.exp = topShipData.exp; shipData.level = topShipData.level; } + let tempCon = resonanceCon.find(cur => cur.index == index); + tempCon.level = topShipData.level; } } @@ -78,6 +85,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid //装备强化 topLineHero = sortData(dbResonanceMap, dbHeroes, RESONANCE_SORT_TYPE.EQUIP_LV, id); + resonanceEquip.push({ hid: topLineHero.hid, id, lv: topLineHero.ePlace.find(cur => cur.id == id)?.lv || 0 }); for (let [hid] of dbResonanceMap) { let hero = dbHeroes.find(cur => cur.hid == hid); const topLineHeroEplace = topLineHero.ePlace.find(cur => cur.id == id); @@ -169,7 +177,7 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid for (let [hid] of dbResonanceMap) { let hero = dbHeroes.find(cur => cur.hid == hid); // console.log('-x-x--x-x-x-x-x-x-x-x-x-55 hero', util.inspect(hero, { depth: null })); - updateHeroes.push({ ...pick(hero, ['roleId', 'hid', 'lv', 'exp', 'jobStage', 'connections', 'skins', 'jobStage', 'ePlace']) }) + updateHeroes.push({ ...pick(hero, ['roleId', 'hid', 'lv', 'exp', 'job', 'jobStage', 'connections', 'skins', 'jobStage', 'ePlace']) }) newHeroes.push(hero); newHeroIds.push(hid); } @@ -183,10 +191,10 @@ export async function refreshResonanceData(roleId: string, serverId: number, sid const { hid } = hero; const heroResult = new HeroParam(hero); if (!dbResonanceMap.has(hid)) continue; - resonances.push({ position: dbResonanceMap.get(hid).position, ...pick(heroResult, ['hid', 'seqId', 'lv', 'exp', 'jobStage', 'talent', 'usedTalentPoint', 'totalTalentPoint', 'connections', 'ePlace', 'ce']) }); + resonanceDatas.push({ position: dbResonanceMap.get(hid).position, ...pick(heroResult, ['hid', 'seqId', 'lv', 'exp', 'job', 'jobStage', 'talent', 'usedTalentPoint', 'totalTalentPoint', 'connections', 'ePlace', 'ce']) }); } - return resonances; + return { resonanceDatas, resonanceLv, resonanceJob, resonanceCon, resonanceEquip }; } @@ -206,7 +214,10 @@ export function sortData(dbResonanceMap: Map, heroes: Her case RESONANCE_SORT_TYPE.JOBSTAGE: { heroes.sort((a, b) => { - if (a.jobStage !== b.jobStage) { + if (a.job != b.job) { + return b.job - a.job; + } + else if (a.jobStage !== b.jobStage) { return b.jobStage - a.jobStage; } else { return b.ce - a.ce; diff --git a/shared/db/Resonance.ts b/shared/db/Resonance.ts index 663bc7153..1cb525851 100644 --- a/shared/db/Resonance.ts +++ b/shared/db/Resonance.ts @@ -67,6 +67,9 @@ export default class Resonance extends BaseModel { @prop({ required: true }) exp: number; // + @prop({ required: true }) + job: number; // + @prop({ required: true }) jobStage: number; // 职阶 diff --git a/shared/db/ResonanceHistory.ts b/shared/db/ResonanceHistory.ts index 0976aafda..660e1cbb4 100644 --- a/shared/db/ResonanceHistory.ts +++ b/shared/db/ResonanceHistory.ts @@ -60,6 +60,9 @@ export default class ResonanceHistory extends BaseModel { @prop({ required: true }) exp: number; // + @prop({ required: true }) + job: number; // + @prop({ required: true }) jobStage: number; // 职阶 diff --git a/shared/pubUtils/interface.ts b/shared/pubUtils/interface.ts index 028eab15a..f2ffa77ba 100644 --- a/shared/pubUtils/interface.ts +++ b/shared/pubUtils/interface.ts @@ -215,6 +215,7 @@ export interface ReturnResonanceParam { seqId?: number; // 武将表自增 id lv?: number; //武将等级 exp?: number; + job?: number; jobStage?: number; // 职阶 talent?: ResonanceTalent[]; // 天赋 usedTalentPoint?: number;