From 0ba6b372a22844bc058e2b0f139fbfd6181b1c2b Mon Sep 17 00:00:00 2001 From: Light2 Date: Fri, 28 Mar 2014 19:36:41 +0100 Subject: [PATCH] Some AI fixes --- scripts/mobiles/tatooine/krayt_dragon_ancient.py | 1 + src/services/ai/states/AIState.java | 2 ++ src/services/ai/states/AttackState.java | 7 +++++++ src/services/spawn/MobileTemplate.java | 10 ++++++++++ src/services/spawn/SpawnService.java | 2 ++ 5 files changed, 22 insertions(+) diff --git a/scripts/mobiles/tatooine/krayt_dragon_ancient.py b/scripts/mobiles/tatooine/krayt_dragon_ancient.py index 23adfbc0..a65f6786 100644 --- a/scripts/mobiles/tatooine/krayt_dragon_ancient.py +++ b/scripts/mobiles/tatooine/krayt_dragon_ancient.py @@ -14,5 +14,6 @@ def addTemplate(core): mobileTemplate.setAttacks(attacks) mobileTemplate.setCreatureName('krayt_dragon_ancient') mobileTemplate.setScale(2) + mobileTemplate.setAttackRange(12) core.spawnService.addMobileTemplate('krayt_dragon_ancient', mobileTemplate) \ No newline at end of file diff --git a/src/services/ai/states/AIState.java b/src/services/ai/states/AIState.java index a6a88631..7238d6ed 100644 --- a/src/services/ai/states/AIState.java +++ b/src/services/ai/states/AIState.java @@ -112,6 +112,8 @@ public abstract class AIState { float distance = oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); float travelDistance = distance - (pathDistance - maxDistance); + // temp fix for melee npcs + travelDistance *= 1.3; if(travelDistance <= 0) { newX = currentPathPosition.x; newZ = currentPathPosition.z; diff --git a/src/services/ai/states/AttackState.java b/src/services/ai/states/AttackState.java index 96baf032..690c5c18 100644 --- a/src/services/ai/states/AttackState.java +++ b/src/services/ai/states/AttackState.java @@ -110,6 +110,13 @@ public class AttackState extends AIState { actor.scheduleRecovery(); return StateResult.UNFINISHED; } + if(target.getPosture() == 13 || target.getPosture() == 14) { + actor.getDamageMap().remove(target); + actor.setFollowObject(actor.getHighestDamageDealer()); + target = actor.getFollowObject(); + if(target == null) + return StateResult.FINISHED; + } if(target.getWorldPosition().getDistance(creature.getWorldPosition()) > 128 || target.getPosture() == 13 || target.getPosture() == 14) { actor.removeDefender(target); actor.scheduleRecovery(); diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index 8d68731f..c2c42166 100644 --- a/src/services/spawn/MobileTemplate.java +++ b/src/services/spawn/MobileTemplate.java @@ -41,6 +41,8 @@ public class MobileTemplate { private int health, action; private String creatureName; private float scale = 1; + // this is a custom attack Range setting to use for large mobs like krayts + private int attackRange; public Vector getTemplates() { return templates; @@ -146,4 +148,12 @@ public class MobileTemplate { this.scale = scale; } + public int getAttackRange() { + return attackRange; + } + + public void setAttackRange(int attackRange) { + this.attackRange = attackRange; + } + } diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java index 75dbbffa..eede805a 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -116,6 +116,8 @@ public class SpawnService { defaultWeapon.setAttackSpeed(2); defaultWeapon.setDamageType("@obj_attr_n:armor_eff_kinetic"); defaultWeapon.setStringAttribute("cat_wpn_damage.damage", "0-0"); + if(mobileTemplate.getAttackRange() > 0) + defaultWeapon.setMaxRange(mobileTemplate.getAttackRange()); if(mobileTemplate.getMaxDamage() != 0) { defaultWeapon.setMaxDamage(mobileTemplate.getMaxDamage()); defaultWeapon.setMinDamage(mobileTemplate.getMinDamage());