From 52b0bbaf2b50728a646ef5fd0d10eb1a35f2510e Mon Sep 17 00:00:00 2001 From: troytt <47798984@qq.com> Date: Thu, 24 Sep 2026 19:19:25 +0000 Subject: [PATCH] fix(ama): isolate guided arrow maxTurn clamp and align magic arrow weaponless damage (#459) --- src/game/engine/missile-engine.ts | 18 +++++++++++------- src/game/skills.ts | 7 +++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/game/engine/missile-engine.ts b/src/game/engine/missile-engine.ts index 0b5d4e6..afcf424 100644 --- a/src/game/engine/missile-engine.ts +++ b/src/game/engine/missile-engine.ts @@ -1143,14 +1143,18 @@ export class MissileEngine { if (closestTarget) { const speed = m.record.vel ? m.record.vel : 12 const targetAngle = Math.atan2((closestTarget.y - m.y) / ISO_GROUND_ASPECT_RATIO, closestTarget.x - m.x) - let diff = targetAngle - m.angleRad - while (diff < -Math.PI) diff += Math.PI * 2 - while (diff > Math.PI) diff -= Math.PI * 2 - const maxTurn = 0.45 - if (Math.abs(diff) <= maxTurn) { - m.angleRad = targetAngle + if (m.name.toLowerCase() === 'guidedarrow' || m.sourceSkillId === 22) { + let diff = targetAngle - m.angleRad + while (diff < -Math.PI) diff += Math.PI * 2 + while (diff > Math.PI) diff -= Math.PI * 2 + const maxTurn = 0.45 + if (Math.abs(diff) <= maxTurn) { + m.angleRad = targetAngle + } else { + m.angleRad += Math.sign(diff) * maxTurn + } } else { - m.angleRad += Math.sign(diff) * maxTurn + m.angleRad = targetAngle } m.vx = Math.cos(m.angleRad) * speed m.vy = Math.sin(m.angleRad) * speed * ISO_GROUND_ASPECT_RATIO diff --git a/src/game/skills.ts b/src/game/skills.ts index eedb0f5..cafca65 100644 --- a/src/game/skills.ts +++ b/src/game/skills.ts @@ -5844,9 +5844,12 @@ export function calculateSkillDamage( weaponDamage?: { min: number; max: number } ): { min: number; max: number } { if (skillId === 6 || skillId === '6' || skillId === 'magicarrow' || skillId === 'magic arrow') { + if (!weaponDamage) { + return { min: 0, max: 0 } + } const stats = calculateMagicArrowStats(slvl) - const baseMin = weaponDamage?.min ?? 0 - const baseMax = weaponDamage?.max ?? 0 + const baseMin = weaponDamage.min ?? 0 + const baseMax = weaponDamage.max ?? 0 return { min: baseMin + stats.flatMagicDamage, max: baseMax + stats.flatMagicDamage } } if (skillId === 7 || skillId === '7' || skillId === 'firearrow' || skillId === 'fire arrow') {