From 349b004ec2859cefbe98fb5078de7a5467076686 Mon Sep 17 00:00:00 2001 From: Major- Date: Wed, 4 Dec 2013 18:08:50 +0000 Subject: [PATCH] Synchronization fix. --- .../sync/task/NpcSynchronizationTask.java | 26 +++++----- .../sync/task/PlayerSynchronizationTask.java | 51 +++++++++---------- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/org/apollo/game/sync/task/NpcSynchronizationTask.java b/src/org/apollo/game/sync/task/NpcSynchronizationTask.java index 02f7c6d3..8953f52c 100644 --- a/src/org/apollo/game/sync/task/NpcSynchronizationTask.java +++ b/src/org/apollo/game/sync/task/NpcSynchronizationTask.java @@ -48,9 +48,9 @@ public final class NpcSynchronizationTask extends SynchronizationTask { List localNpcs = player.getLocalNpcList(); int oldLocalNpcs = localNpcs.size(); List segments = new ArrayList(); - Iterator it = localNpcs.iterator(); - for (Npc npc = null; it.hasNext(); npc = it.next()) { + for (Iterator it = localNpcs.iterator(); it.hasNext();) { + Npc npc = it.next(); if (!npc.isActive() || npc.isTeleporting() || npc.getPosition().getLongestDelta(player.getPosition()) > player.getViewingDistance()) { it.remove(); @@ -66,19 +66,21 @@ public final class NpcSynchronizationTask extends SynchronizationTask { for (Npc npc : repository) { if (localNpcs.size() >= 255) { player.flagExcessiveNpcs(); - } else if (added < NEW_NPCS_PER_CYCLE) { - if (!localNpcs.contains(npc) - && npc.getPosition().isWithinDistance(player.getPosition(), player.getViewingDistance())) { - localNpcs.add(npc); - added++; - blockSet = npc.getBlockSet(); - segments.add(new AddNpcSegment(blockSet, npc.getIndex(), npc.getPosition(), npc.getId())); - } - continue; + break; + } else if (added >= NEW_NPCS_PER_CYCLE) { + break; } - break; + if (npc.getPosition().isWithinDistance(player.getPosition(), player.getViewingDistance()) + && !localNpcs.contains(npc)) { + localNpcs.add(npc); + added++; + blockSet = npc.getBlockSet(); + segments.add(new AddNpcSegment(blockSet, npc.getIndex(), npc.getPosition(), npc.getNpcDefinition() + .getId())); + } } + NpcSynchronizationEvent event = new NpcSynchronizationEvent(player.getPosition(), segments, oldLocalNpcs); player.send(event); } diff --git a/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java b/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java index 9110f369..f2b01931 100644 --- a/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java +++ b/src/org/apollo/game/sync/task/PlayerSynchronizationTask.java @@ -67,45 +67,44 @@ public final class PlayerSynchronizationTask extends SynchronizationTask { List localPlayers = player.getLocalPlayerList(); int oldLocalPlayers = localPlayers.size(); List segments = new ArrayList(); - Iterator it = localPlayers.iterator(); - for (Player local = null; it.hasNext(); local = it.next()) { - if (!local.isActive() || local.isTeleporting() - || local.getPosition().getLongestDelta(player.getPosition()) > player.getViewingDistance()) { + for (Iterator it = localPlayers.iterator(); it.hasNext();) { + Player p = it.next(); + if (!p.isActive() || p.isTeleporting() + || p.getPosition().getLongestDelta(player.getPosition()) > player.getViewingDistance()) { it.remove(); segments.add(new RemoveMobSegment()); } else { - segments.add(new MovementSegment(local.getBlockSet(), local.getDirections())); + segments.add(new MovementSegment(p.getBlockSet(), p.getDirections())); } } int added = 0; MobRepository repository = World.getWorld().getPlayerRepository(); - for (Player global : repository) { + for (Iterator it = repository.iterator(); it.hasNext();) { + Player p = it.next(); if (localPlayers.size() >= 255) { player.flagExcessivePlayers(); - } else if (added < NEW_PLAYERS_PER_CYCLE) { - // we do not check p.isActive() here, since if they are active they - // must be in the repository - if (global != player - && global.getPosition().isWithinDistance(player.getPosition(), player.getViewingDistance()) - && !localPlayers.contains(global)) { - localPlayers.add(global); - added++; - - blockSet = global.getBlockSet(); - if (!blockSet.contains(AppearanceBlock.class)) { - // TODO check if client has cached appearance - blockSet = blockSet.clone(); - blockSet.add(SynchronizationBlock.createAppearanceBlock(global)); - } - - segments.add(new AddPlayerSegment(blockSet, global.getIndex(), global.getPosition())); - } - continue; + break; + } else if (added >= NEW_PLAYERS_PER_CYCLE) { + break; + } + + if (p != player && p.getPosition().isWithinDistance(player.getPosition(), player.getViewingDistance()) + && !localPlayers.contains(p)) { + localPlayers.add(p); + added++; + + blockSet = p.getBlockSet(); + if (!blockSet.contains(AppearanceBlock.class)) { + // TODO check if client has cached appearance + blockSet = blockSet.clone(); + blockSet.add(SynchronizationBlock.createAppearanceBlock(p)); + } + + segments.add(new AddPlayerSegment(blockSet, p.getIndex(), p.getPosition())); } - break; } PlayerSynchronizationEvent event = new PlayerSynchronizationEvent(lastKnownRegion, player.getPosition(),