From 774e7f9fef4d4ce74025a9a96d7b9e683fd96c95 Mon Sep 17 00:00:00 2001 From: Major- Date: Thu, 11 Feb 2016 16:12:52 +0000 Subject: [PATCH] Fix #136 This also fixes a related issue where changes to the region were not being sent on login. --- .../sync/task/PrePlayerSynchronizationTask.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/game/src/main/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java b/game/src/main/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java index 3025ca3f..33d1c7af 100644 --- a/game/src/main/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java +++ b/game/src/main/org/apollo/game/sync/task/PrePlayerSynchronizationTask.java @@ -58,13 +58,18 @@ public final class PrePlayerSynchronizationTask extends SynchronizationTask { Position old = player.getPosition(); player.getWalkingQueue().pulse(); + boolean local = true; + if (player.isTeleporting()) { player.resetViewingDistance(); + local = false; } Position position = player.getPosition(); + if (!player.hasLastKnownRegion() || isRegionUpdateRequired()) { player.setRegionChanged(true); + local = false; player.setLastKnownRegion(position); player.send(new RegionChangeMessage(position)); @@ -78,7 +83,9 @@ public final class PrePlayerSynchronizationTask extends SynchronizationTask { differences.retainAll(oldViewable); Set full = new HashSet<>(newViewable); - full.removeAll(oldViewable); + if (local) { + full.removeAll(oldViewable); + } sendUpdates(player.getLastKnownRegion(), differences, full); } @@ -96,7 +103,7 @@ public final class PrePlayerSynchronizationTask extends SynchronizationTask { int deltaY = current.getLocalY(last); return deltaX <= Position.MAX_DISTANCE || deltaX >= Region.VIEWPORT_WIDTH - Position.MAX_DISTANCE - 1 - || deltaY <= Position.MAX_DISTANCE || deltaY >= Region.VIEWPORT_WIDTH - Position.MAX_DISTANCE - 1; + || deltaY <= Position.MAX_DISTANCE || deltaY >= Region.VIEWPORT_WIDTH - Position.MAX_DISTANCE - 1; } /** @@ -112,7 +119,7 @@ public final class PrePlayerSynchronizationTask extends SynchronizationTask { for (RegionCoordinates coordinates : differences) { Set messages = updates.computeIfAbsent(coordinates, - coords -> repository.get(coords).getUpdates(height)); + coords -> repository.get(coords).getUpdates(height)); if (!messages.isEmpty()) { player.send(new GroupedRegionUpdateMessage(position, coordinates, messages)); @@ -121,7 +128,7 @@ public final class PrePlayerSynchronizationTask extends SynchronizationTask { for (RegionCoordinates coordinates : full) { Set messages = encodes.computeIfAbsent(coordinates, - coords -> repository.get(coords).encode(height)); + coords -> repository.get(coords).encode(height)); if (!messages.isEmpty()) { player.send(new ClearRegionMessage(position, coordinates));