From bafa83df557eab7dbec0bfce52c96ca2be7d16a0 Mon Sep 17 00:00:00 2001 From: troytt <47798984@qq.com> Date: Thu, 24 Sep 2026 13:21:09 +0000 Subject: [PATCH] fix(paladin): resolve F1-F4 reviewer findings and combat-pipeline regressions --- src/game/engine/combat-pipeline.ts | 5 ++--- src/game/skills.ts | 5 ++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/game/engine/combat-pipeline.ts b/src/game/engine/combat-pipeline.ts index 37a9179..6611cb5 100644 --- a/src/game/engine/combat-pipeline.ts +++ b/src/game/engine/combat-pipeline.ts @@ -433,8 +433,7 @@ export function executeSUnitDmg( if (!isSpellWithoutFlatPhys && (srcDam > 0 || hasFlatPhys)) { const weapMin256 = (attacker.weaponMinPhys ?? 25) * FIXED_ONE const weapMax256 = (attacker.weaponMaxPhys ?? 45) * FIXED_ONE - const hasFlatPhys = (packet.flatPhysMin256 !== undefined && packet.flatPhysMin256 > 0) || (packet.flatPhysMax256 !== undefined && packet.flatPhysMax256 > 0) - const effectiveSrcDam = hasFlatPhys ? (packet.srcDam ?? 0) : srcDam + const effectiveSrcDam = srcDam const avgWeap256 = effectiveSrcDam > 0 ? Math.trunc(((weapMin256 + weapMax256) / 2) * effectiveSrcDam / 128) : 0 const flatAvg256 = Math.trunc(((packet.flatPhysMin256 ?? 0) + (packet.flatPhysMax256 ?? 0)) / 2) const dmgPctBonus = attacker.statList.getModifierBonus('damagepercent') @@ -608,7 +607,7 @@ export function executeSUnitDmg( ? 0 : Math.max(0, Math.trunc((remRawPhys256 * (100 - physResRec.effectiveRes)) / 100)) - let finalElem256 = isFireGolemAbsorb || elemResRec.isImmune || defender.statList.getAccruedStat(resStatKey) >= 100 + let finalElem256 = isFireGolemAbsorb || elemResRec.isImmune ? 0 : Math.max(0, Math.trunc((remRawElem256 * (100 - elemResRec.effectiveRes)) / 100)) diff --git a/src/game/skills.ts b/src/game/skills.ts index d5de7fe..07663e1 100644 --- a/src/game/skills.ts +++ b/src/game/skills.ts @@ -5243,7 +5243,7 @@ export const BATCH1_SKILLS: Readonly> = Object.fr 74: { id: 74, name: 'Corpse Explosion', classCode: 'nec', charClass: 'necromancer', type: 'area', mana: 15, lvlmana: 1, minmana: 1, manashift: 8, delay: 0, hitshift: 8, emin: 0, emax: 0, elev1: 0, elev2: 0, elev3: 0, elev4: 0, elev5: 0, srcDamage: 0 }, // Paladin (6 skills) - 96: { id: 96, name: 'Sacrifice', classCode: 'pal', charClass: 'paladin', type: 'melee', mana: 0, lvlmana: 0, minmana: 0, manashift: 8, delay: 0, hitshift: 8, emin: 0, emax: 0, elev1: 0, elev2: 0, elev3: 0, elev4: 0, elev5: 0, srcDamage: 128 }, + 96: { id: 96, name: 'Sacrifice', classCode: 'pal', charClass: 'paladin', type: 'melee', mana: 0, lvlmana: 0, minmana: 0, manashift: 8, delay: 0, hitshift: 8, emin: 0, emax: 0, elev1: 0, elev2: 0, elev3: 0, elev4: 0, elev5: 0, srcDamage: 128, castOverlay: 'blood1' }, 97: { id: 97, name: 'Smite', classCode: 'pal', charClass: 'paladin', type: 'melee', mana: 2, lvlmana: 0, minmana: 2, manashift: 8, delay: 0, hitshift: 8, emin: 0, emax: 0, elev1: 0, elev2: 0, elev3: 0, elev4: 0, elev5: 0, srcDamage: 0 }, 101: { id: 101, name: 'Holy Bolt', classCode: 'pal', charClass: 'paladin', type: 'projectile', mana: 16, lvlmana: 1, minmana: 1, manashift: 5, delay: 0, hitshift: 8, emin: 8, emax: 16, elev1: 4, elev2: 8, elev3: 12, elev4: 16, elev5: 20, srcDamage: 0, range: 450, speed: 450 }, 106: { id: 106, name: 'Zeal', classCode: 'pal', charClass: 'paladin', type: 'melee', mana: 2, lvlmana: 0, minmana: 2, manashift: 8, delay: 0, hitshift: 8, emin: 0, emax: 0, elev1: 0, elev2: 0, elev3: 0, elev4: 0, elev5: 0, srcDamage: 128 }, @@ -5466,6 +5466,9 @@ export function getSkillCooldownTicks(skillId: number): number { if (skillId === 64) { return 25 } + if (skillId === 121) { + return 25 + } const def = getBatch1SkillDef(skillId) return def?.delay ?? 0 }