From ac57d2378eaee8ea1ce6b7ddac440667cfd0f8b6 Mon Sep 17 00:00:00 2001 From: Josh Larson Date: Mon, 14 Oct 2024 18:10:58 -0500 Subject: [PATCH] Fixed some weird behavior with combat movement --- .../holocore/resources/support/npc/ai/NpcCombatMode.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt b/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt index 6dacc5fa2..52846e328 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt +++ b/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt @@ -59,6 +59,7 @@ class NpcCombatMode(obj: AIObject) : NpcMode(obj) { private val targets = CopyOnWriteArraySet() private val iteration = AtomicLong(0) private val npcRunSpeed = PswgDatabase.config.getDouble(this, "npcRunSpeed", 9.0) + private var isMoving = false private val primaryTarget: CreatureObject? // Don't attack if they're already dead get() = targets.stream() @@ -135,7 +136,7 @@ class NpcCombatMode(obj: AIObject) : NpcMode(obj) { val actionRange = attackRange / 2 val lineOfSight = obj.isLineOfSight(target) - if (ai.walkSpeed > 0 && (targetDistance > actionRange || !lineOfSight)) { + if (ai.walkSpeed > 0 && (targetDistance > attackRange || !lineOfSight)) { val targetLocation = target.location val targetHeading = target.location.yaw + ThreadLocalRandom.current().nextDouble(-75.0, 75.0) val targetRange = actionRange / 2 @@ -143,6 +144,12 @@ class NpcCombatMode(obj: AIObject) : NpcMode(obj) { val moveZ = targetLocation.z + cos(Math.toRadians(targetHeading)) * targetRange val moveHeading = targetLocation.getHeadingTo(Point3D(moveX, targetLocation.y, moveZ)) + 180 StartNpcMovementIntent(obj, target.effectiveParent, Location.builder(targetLocation).setX(moveX).setZ(moveZ).setHeading(moveHeading).build(), npcRunSpeed).broadcast() + isMoving = true + } else { + if (ai.walkSpeed > 0 && isMoving) { + StopNpcMovementIntent(obj).broadcast() + isMoving = false + } } if (lineOfSight && iteration.get() % 4 == 0L) {