diff --git a/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java b/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java index acc5375b5..0e11db38c 100644 --- a/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java +++ b/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java @@ -71,7 +71,7 @@ public class DataTransformWithParent extends ObjectController { return null; } - public void setCounter(int counter) { + public void setUpdateCounter(int counter) { this.counter = counter; } diff --git a/src/resources/objects/custom/DefaultAIObject.java b/src/resources/objects/custom/DefaultAIObject.java index 2fa4fb6c9..ab36ccee0 100644 --- a/src/resources/objects/custom/DefaultAIObject.java +++ b/src/resources/objects/custom/DefaultAIObject.java @@ -31,10 +31,18 @@ public class DefaultAIObject extends AIObject { return behavior; } + public double getFloatRadius() { + return radius; + } + public void setBehavior(AIBehavior behavior) { this.behavior = behavior; } + public void setFloatRadius(double radius) { + this.radius = radius; + } + @Override public void aiStart() { super.aiStart(); @@ -53,11 +61,9 @@ public class DefaultAIObject extends AIObject { private void aiLoopFloat() { if (isInCombat()) return; - if (getParent() != null) - return; Location l = new Location(mainLocation); l.translatePosition((Math.random()-.5)*2*radius, 0, (Math.random()-.5)*2*radius); - new MoveObjectIntent(this, l, 1.37, updateCounter++).broadcast(); + new MoveObjectIntent(this, getParent(), l, 1.37, updateCounter++).broadcast(); } } diff --git a/src/services/objects/ObjectAwareness.java b/src/services/objects/ObjectAwareness.java index d8cfa3ede..a81d10ae9 100644 --- a/src/services/objects/ObjectAwareness.java +++ b/src/services/objects/ObjectAwareness.java @@ -194,6 +194,13 @@ public class ObjectAwareness extends Service { } private void processMoveObjectIntent(MoveObjectIntent i) { + if (i.getParent() != null) + processMoveObjectIntentParent(i); + else + processMoveObjectIntentNoParent(i); + } + + private void processMoveObjectIntentNoParent(MoveObjectIntent i) { SWGObject obj = i.getObject(); Location newLocation = i.getNewLocation(); BuildoutArea area = obj.getBuildoutArea(); @@ -204,16 +211,28 @@ public class ObjectAwareness extends Service { move(obj, newLocation, true); if (area != null) newLocation = area.readjustLocation(newLocation); - if (i.getParent() == null) { - DataTransform transform = new DataTransform(obj.getObjectId()); - transform.setTimestamp((int) ProjectSWG.getGalacticTime()); - transform.setLocation(newLocation); - transform.setLookAtYaw(0); - transform.setUseLookAtYaw(false); - transform.setSpeed((float) i.getSpeed()); - transform.setUpdateCounter(i.getUpdateCounter()); - obj.sendDataTransforms(transform); - } + DataTransform transform = new DataTransform(obj.getObjectId()); + transform.setTimestamp((int) ProjectSWG.getGalacticTime()); + transform.setLocation(newLocation); + transform.setLookAtYaw(0); + transform.setUseLookAtYaw(false); + transform.setSpeed((float) i.getSpeed()); + transform.setUpdateCounter(i.getUpdateCounter()); + obj.sendDataTransforms(transform); + } + + private void processMoveObjectIntentParent(MoveObjectIntent i) { + SWGObject obj = i.getObject(); + Location newLocation = i.getNewLocation(); + move(obj, i.getParent(), newLocation, true); + DataTransformWithParent transform = new DataTransformWithParent(obj.getObjectId()); + transform.setTimestamp((int) ProjectSWG.getGalacticTime()); + transform.setLocation(newLocation); + transform.setLookAtYaw(0); + transform.setUseLookAtYaw(false); + transform.setSpeed((float) i.getSpeed()); + transform.setUpdateCounter(i.getUpdateCounter()); + obj.sendParentDataTransforms(transform); } private void moveObject(CreatureObject obj, DataTransform transform) { diff --git a/src/services/spawn/SpawnerService.java b/src/services/spawn/SpawnerService.java index f0031c318..10d0f923e 100644 --- a/src/services/spawn/SpawnerService.java +++ b/src/services/spawn/SpawnerService.java @@ -57,7 +57,7 @@ import services.objects.ObjectManager; public final class SpawnerService extends Service { private static final String GET_ALL_SPAWNERS_SQL = "SELECT static.x, static.y, static.z, static.heading, " // static columns - + "static.spawner_type, static.cell_id, static.active, static.mood, static.behaviour, " // more static columns + + "static.spawner_type, static.cell_id, static.active, static.mood, static.behaviour, static.float_radius, " // more static columns + "buildings.object_id AS building_id, buildings.terrain_name AS building_terrain, " // building columns + "creatures.iff_template AS iff, creatures.creature_name, creatures.combat_level, creatures.difficulty, creatures.attackable, " // creature columns + "npc_stats.HP, npc_stats.Action " // npc_stats columns @@ -174,6 +174,8 @@ public final class SpawnerService extends Service { object.setMaxAction(set.getInt("Action")); object.setAction(object.getMaxAction()); object.setBehavior(AIBehavior.valueOf(set.getString("behaviour"))); + if (object.getBehavior() == AIBehavior.FLOAT) + object.setFloatRadius((Integer) set.getInt("float_radius")); switch (set.getString("attackable")) { case "AGGRESSIVE": object.addOptionFlags(OptionFlag.AGGRESSIVE); // Ziggy: There's also an AGGRESSIVE PvpFlag?