diff --git a/src/network/packets/swg/zone/object_controller/DataTransform.java b/src/network/packets/swg/zone/object_controller/DataTransform.java index 607e2f49a..95c5c29dc 100644 --- a/src/network/packets/swg/zone/object_controller/DataTransform.java +++ b/src/network/packets/swg/zone/object_controller/DataTransform.java @@ -47,6 +47,16 @@ public class DataTransform extends ObjectController { super(objectId, CRC); } + public DataTransform(DataTransform transform) { + super(transform.getObjectId(), CRC); + timestamp = transform.getTimestamp(); + updateCounter = transform.getUpdateCounter(); + l = new Location(transform.getLocation()); + speed = transform.getSpeed(); + lookAtYaw = transform.getLookAtYaw(); + useLookAtYaw = transform.isUseLookAtYaw(); + } + public DataTransform(long objectId, int counter, Location l, float speed) { super(objectId, CRC); if (l == null) diff --git a/src/services/map/CityService.java b/src/services/map/CityService.java index 96f5b0458..98f539405 100644 --- a/src/services/map/CityService.java +++ b/src/services/map/CityService.java @@ -54,21 +54,19 @@ public class CityService extends Service { } DataTransform transform = (DataTransform) p; Location loc = transform.getLocation(); - performLocationUpdate(creature, loc); + performLocationUpdate(creature, (int) (loc.getX() + 0.5), (int) (loc.getZ() + 0.5)); } } else if (i instanceof PlayerEventIntent) { Player player = ((PlayerEventIntent) i).getPlayer(); CreatureObject creature = player.getCreatureObject(); if (((PlayerEventIntent) i).getEvent() == PlayerEvent.PE_ZONE_IN_CLIENT) { - performLocationUpdate(creature, creature.getLocation()); + performLocationUpdate(creature, (int) (creature.getX()+0.5), (int) (creature.getZ()+0.5)); } } } - private void performLocationUpdate(CreatureObject object, Location loc) { - String terrain = loc.getTerrain().getName().toLowerCase(Locale.US); - int locX = (int) (loc.getX() + 0.5); - int locZ = (int) (loc.getZ() + 0.5); + private void performLocationUpdate(CreatureObject object, int locX, int locZ) { + String terrain = object.getTerrain().getName().toLowerCase(Locale.US); synchronized (spawnDatabase) { ResultSet set = null; try { diff --git a/src/services/objects/ObjectAwareness.java b/src/services/objects/ObjectAwareness.java index 5580ee752..23816b685 100644 --- a/src/services/objects/ObjectAwareness.java +++ b/src/services/objects/ObjectAwareness.java @@ -207,6 +207,7 @@ public class ObjectAwareness extends Service { } private void moveObject(CreatureObject obj, DataTransform transform) { + transform = new DataTransform(transform); Location newLocation = transform.getLocation(); newLocation.setTerrain(obj.getTerrain()); double time = ((CreatureObject) obj).getTimeSinceLastTransform() / 1000;