From 61f5120cfcbf99b4f8d00fb23946ef439ed27605 Mon Sep 17 00:00:00 2001 From: randy Date: Mon, 17 Mar 2025 08:24:43 -0600 Subject: [PATCH] Fixed attack range when attacking large creatures from certain angles When attacking a 2x2 or larger creature from the SW, attack range would be reduced. Most noticeable on halberds. Fixed by checking the closest tile when attacking from a distance. --- .../main/core/game/node/entity/combat/MagicSwingHandler.kt | 4 ++-- .../main/core/game/node/entity/combat/MeleeSwingHandler.kt | 2 +- .../main/core/game/node/entity/combat/RangeSwingHandler.kt | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Server/src/main/core/game/node/entity/combat/MagicSwingHandler.kt b/Server/src/main/core/game/node/entity/combat/MagicSwingHandler.kt index 82bf1d5d8..1838c72e1 100644 --- a/Server/src/main/core/game/node/entity/combat/MagicSwingHandler.kt +++ b/Server/src/main/core/game/node/entity/combat/MagicSwingHandler.kt @@ -25,9 +25,9 @@ open class MagicSwingHandler (vararg flags: SwingHandlerFlag) } var distance = 10 var type = InteractionType.STILL_INTERACT - var goodRange = victim.centerLocation.withinDistance(entity.centerLocation, getCombatDistance(entity, victim, distance)) + var goodRange = victim.getClosestOccupiedTile(entity.location).withinDistance(entity.centerLocation, getCombatDistance(entity, victim, distance)) if (victim.walkingQueue.isMoving && !goodRange) { - goodRange = victim.centerLocation.withinDistance(entity.centerLocation, getCombatDistance(entity, victim, ++distance)) + goodRange = victim.getClosestOccupiedTile(entity.location).withinDistance(entity.centerLocation, getCombatDistance(entity, victim, ++distance)) type = InteractionType.MOVE_INTERACT } if (goodRange && isAttackable(entity, victim) != InteractionType.NO_INTERACT) { diff --git a/Server/src/main/core/game/node/entity/combat/MeleeSwingHandler.kt b/Server/src/main/core/game/node/entity/combat/MeleeSwingHandler.kt index b58fe0c0c..90c30e728 100644 --- a/Server/src/main/core/game/node/entity/combat/MeleeSwingHandler.kt +++ b/Server/src/main/core/game/node/entity/combat/MeleeSwingHandler.kt @@ -322,7 +322,7 @@ open class MeleeSwingHandler (vararg flags: SwingHandlerFlag) } return victim.getSwingHandler(false).type == CombatStyle.MELEE && e.withinDistance(victim.location, 1) && victim.properties.combatPulse.getVictim() === entity && entity.index < victim.index } - return entity.centerLocation.withinDistance(victim.centerLocation, distance + (size shr 1) + (victim.size() shr 1)) + return entity.centerLocation.withinDistance(victim.getClosestOccupiedTile(entity.location), distance + (size shr 1) + (victim.size() shr 1)) } } } diff --git a/Server/src/main/core/game/node/entity/combat/RangeSwingHandler.kt b/Server/src/main/core/game/node/entity/combat/RangeSwingHandler.kt index 7a083b748..ead12b6c3 100644 --- a/Server/src/main/core/game/node/entity/combat/RangeSwingHandler.kt +++ b/Server/src/main/core/game/node/entity/combat/RangeSwingHandler.kt @@ -53,10 +53,10 @@ open class RangeSwingHandler (vararg flags: SwingHandlerFlag) : CombatSwingHandl distance = 10 } } - var goodRange = victim.centerLocation.withinDistance(entity.centerLocation, getCombatDistance(entity, victim, distance)) + var goodRange = victim.getClosestOccupiedTile(entity.location).withinDistance(entity.centerLocation, getCombatDistance(entity, victim, distance)) var type = InteractionType.STILL_INTERACT if (victim.walkingQueue.isMoving && !goodRange) { - goodRange = victim.centerLocation.withinDistance(entity.centerLocation, getCombatDistance(entity, victim, ++distance)) + goodRange = victim.getClosestOccupiedTile(entity.location).withinDistance(entity.centerLocation, getCombatDistance(entity, victim, ++distance)) type = InteractionType.MOVE_INTERACT } if (goodRange && super.canSwing(entity, victim) != InteractionType.NO_INTERACT) {