From 62d86dfd66b9cabc201f4056cd67f7e754f26185 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 6 Sep 2023 21:03:24 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(=E7=A8=B7=E4=B8=8B=E5=AD=A6?= =?UTF-8?q?=E5=AE=AB):=20=E7=82=B9=E4=BA=AE=E6=B3=95=E9=98=B5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=9C=80=E5=A4=A7hp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/services/battle/rougeService.ts | 6 +++--- .../app/services/battle/rougeTechService.ts | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/game-server/app/services/battle/rougeService.ts b/game-server/app/services/battle/rougeService.ts index aae36c979..a74574c85 100644 --- a/game-server/app/services/battle/rougeService.ts +++ b/game-server/app/services/battle/rougeService.ts @@ -938,17 +938,17 @@ export async function getMaxHp(roleId: string, gameCode: string, charaId: number return Math.floor(maxHp); } -export async function updateMaxHp(roleId: string, gameCode: string, type: number, grade: number, updateCharasMap) { +export async function updateMaxHp(roleId: string, gameCode: string, type: number, grade: number, updateCharasMap?: Map) { let dbCharas = await RougelikeCharaModel.findByGameCode(gameCode); if (dbCharas.length == 0) return []; let result: RougelikeCharaType[] = []; for (let val of dbCharas) { - if (updateCharasMap.has(val.charaCode)) { + if (updateCharasMap && updateCharasMap.has(val.charaCode)) { val = { ...val, ...updateCharasMap.get(val.charaCode) } } let tempMaxHp = await getMaxHp(roleId, gameCode, val.charaId, type, grade); - if (tempMaxHp == val.maxHp && !updateCharasMap.has(val.charaCode)) continue; + if (tempMaxHp == val.maxHp && updateCharasMap && !updateCharasMap.has(val.charaCode)) continue; val.maxHp = tempMaxHp; result.push(val); } diff --git a/game-server/app/services/battle/rougeTechService.ts b/game-server/app/services/battle/rougeTechService.ts index be9bdaea5..7b39608cb 100644 --- a/game-server/app/services/battle/rougeTechService.ts +++ b/game-server/app/services/battle/rougeTechService.ts @@ -2,6 +2,9 @@ import { Circle, RougelikeTechModel, RougelikeTechType } from '../../db/Rougelik import { gameData } from '../../pubUtils/data'; import { HeroModel } from '../../db/Hero'; import { compareNumberArray } from '../../pubUtils/util'; +import { ROUGE_EFFECT_TYPE, ROUGE_LIKE_STATUS } from '../../consts'; +import { updateMaxHp } from './rougeService'; +import { RougelikeRecordModel } from '../../db/RougelikeRecord'; /** * 首页获得的科技树数据 @@ -42,10 +45,28 @@ async function calCircleCe(roleId: string, unlockedTech: number[], circles: Circ export async function updateEffectId(techData: RougelikeTechType) { let effectIds = getTechEffectIdsByData(techData); if(!compareNumberArray(effectIds, techData.effectIds||[])) { + if (hasMaxHpUpdate(effectIds, techData.effectIds||[])) { + const dbRecord = await RougelikeRecordModel.findByRoleIdAndStatus(techData.roleId, ROUGE_LIKE_STATUS.SUCCESS) + if(dbRecord) await updateMaxHp(techData.roleId, dbRecord.gameCode, dbRecord.type, dbRecord.grade) + } await RougelikeTechModel.updateEffectId(techData.roleId, effectIds); } } +function hasMaxHpUpdate(effectIds: number[], oldEffectIds: number[]) { + let newEffectIds: number[] = []; + for(let effectId of effectIds) { + if (oldEffectIds.includes(effectId)) newEffectIds.push(effectId); + } + for(let effectId of newEffectIds) { + let dicRougeEffect = gameData.rougeEffect.get(effectId); + if(dicRougeEffect && dicRougeEffect.effectType == ROUGE_EFFECT_TYPE.TECH_CHARA_MAIN_ATTR_UP) { + return true; + } + } + return false; +} + /** * 处理后单个科技点的数据 * @param techData