diff --git a/src/resources/objects/awareness/DataTransformHandler.java b/src/resources/objects/awareness/DataTransformHandler.java index 76664fe93..d5f994eca 100644 --- a/src/resources/objects/awareness/DataTransformHandler.java +++ b/src/resources/objects/awareness/DataTransformHandler.java @@ -37,13 +37,19 @@ import network.packets.swg.zone.UpdateTransformWithParentMessage; public class DataTransformHandler { private final SpeedCheckHandler speedCheckHandler; + private boolean speedCheckEnabled; public DataTransformHandler() { speedCheckHandler = new SpeedCheckHandler(); + speedCheckEnabled = true; + } + + public void setSpeedCheck(boolean enabled) { + this.speedCheckEnabled = enabled; } public boolean handleMove(SWGObject obj, Location requestedLocation, double speed, int update) { - if (obj instanceof CreatureObject && ((CreatureObject) obj).isLoggedInPlayer()) + if (speedCheckEnabled && obj instanceof CreatureObject && ((CreatureObject) obj).isLoggedInPlayer()) speedCheckHandler.moveObjectSpeedChecks((CreatureObject) obj, requestedLocation); BuildoutArea area = obj.getBuildoutArea(); if (area != null) @@ -53,7 +59,7 @@ public class DataTransformHandler { } public boolean handleMove(SWGObject obj, SWGObject parent, Location requestedLocation, double speed, int update) { - if (obj instanceof CreatureObject && ((CreatureObject) obj).isLoggedInPlayer()) + if (speedCheckEnabled && obj instanceof CreatureObject && ((CreatureObject) obj).isLoggedInPlayer()) speedCheckHandler.moveObjectSpeedChecks((CreatureObject) obj, parent, requestedLocation); obj.sendObservers(createTransform(obj, parent.getObjectId(), requestedLocation, speed, update)); return true; diff --git a/src/services/objects/ObjectAwareness.java b/src/services/objects/ObjectAwareness.java index 96a5fa3b4..5007720e5 100644 --- a/src/services/objects/ObjectAwareness.java +++ b/src/services/objects/ObjectAwareness.java @@ -35,6 +35,7 @@ import intents.object.MoveObjectIntent; import intents.object.ObjectCreatedIntent; import intents.object.ObjectTeleportIntent; import intents.player.PlayerTransformedIntent; +import intents.server.ConfigChangedIntent; import main.ProjectSWG; import network.packets.Packet; import network.packets.swg.zone.CmdSceneReady; @@ -44,6 +45,7 @@ import network.packets.swg.zone.object_controller.DataTransformWithParent; import resources.Location; import resources.Race; import resources.Terrain; +import resources.config.ConfigFile; import resources.control.Intent; import resources.control.Service; import resources.objects.SWGObject; @@ -62,6 +64,7 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { public ObjectAwareness() { awarenessHandler = new AwarenessHandler(this); dataTransformHandler = new DataTransformHandler(); + dataTransformHandler.setSpeedCheck(getConfig(ConfigFile.FEATURES).getBoolean("SPEED-HACK-CHECK", true)); registerForIntent(PlayerEventIntent.TYPE); registerForIntent(ObjectCreatedIntent.TYPE); @@ -69,6 +72,7 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { registerForIntent(ObjectTeleportIntent.TYPE); registerForIntent(GalacticPacketIntent.TYPE); registerForIntent(MoveObjectIntent.TYPE); + registerForIntent(ConfigChangedIntent.TYPE); } @Override @@ -104,6 +108,9 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { if (i instanceof MoveObjectIntent) processMoveObjectIntent((MoveObjectIntent) i); break; + case ConfigChangedIntent.TYPE: + if (i instanceof ConfigChangedIntent) + processConfigChangedIntent((ConfigChangedIntent) i); default: break; } @@ -205,6 +212,11 @@ public class ObjectAwareness extends Service implements TerrainMapCallback { moveObjectWithTransform(i.getObject(), i.getParent(), i.getNewLocation(), i.getSpeed(), i.getUpdateCounter()); } + private void processConfigChangedIntent(ConfigChangedIntent i) { + if (i.getChangedConfig() == ConfigFile.FEATURES && i.getKey().equals("SPEED-HACK-CHECK")) + dataTransformHandler.setSpeedCheck(Boolean.parseBoolean(i.getNewValue())); + } + private void startScene(CreatureObject creature) { Location loc = creature.getWorldLocation(); long time = ProjectSWG.getGalacticTime();