mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
@@ -3,9 +3,15 @@ package org.apollo.game.sync.task;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apollo.game.message.impl.NpcSynchronizationMessage;
|
||||
import org.apollo.game.model.Position;
|
||||
import org.apollo.game.model.area.Region;
|
||||
import org.apollo.game.model.area.RegionCoordinates;
|
||||
import org.apollo.game.model.area.RegionRepository;
|
||||
import org.apollo.game.model.entity.EntityType;
|
||||
import org.apollo.game.model.entity.Npc;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.sync.seg.AddNpcSegment;
|
||||
@@ -70,7 +76,18 @@ public final class NpcSynchronizationTask extends SynchronizationTask {
|
||||
|
||||
int added = 0, count = locals.size();
|
||||
|
||||
for (Npc npc : player.getWorld().getNpcRepository()) {
|
||||
RegionRepository repository = player.getWorld().getRegionRepository();
|
||||
Region current = repository.fromPosition(playerPosition);
|
||||
|
||||
Set<RegionCoordinates> regions = current.getSurrounding();
|
||||
regions.add(current.getCoordinates());
|
||||
|
||||
Stream<Npc> npcs = regions.stream().map(repository::get)
|
||||
.flatMap(region -> region.getEntities(EntityType.NPC));
|
||||
|
||||
Iterator<Npc> iterator = npcs.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
if (count >= MAXIMUM_LOCAL_NPCS) {
|
||||
player.flagExcessiveNpcs();
|
||||
break;
|
||||
@@ -78,6 +95,7 @@ public final class NpcSynchronizationTask extends SynchronizationTask {
|
||||
break;
|
||||
}
|
||||
|
||||
Npc npc = iterator.next();
|
||||
Position position = npc.getPosition();
|
||||
if (position.isWithinDistance(playerPosition, distance) && !locals.contains(npc)) {
|
||||
locals.add(npc);
|
||||
|
||||
@@ -3,9 +3,15 @@ package org.apollo.game.sync.task;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apollo.game.message.impl.PlayerSynchronizationMessage;
|
||||
import org.apollo.game.model.Position;
|
||||
import org.apollo.game.model.area.Region;
|
||||
import org.apollo.game.model.area.RegionCoordinates;
|
||||
import org.apollo.game.model.area.RegionRepository;
|
||||
import org.apollo.game.model.entity.EntityType;
|
||||
import org.apollo.game.model.entity.Player;
|
||||
import org.apollo.game.sync.block.AppearanceBlock;
|
||||
import org.apollo.game.sync.block.ChatBlock;
|
||||
@@ -86,7 +92,18 @@ public final class PlayerSynchronizationTask extends SynchronizationTask {
|
||||
|
||||
int added = 0, count = localPlayers.size();
|
||||
|
||||
for (Player other : player.getWorld().getPlayerRepository()) {
|
||||
RegionRepository repository = player.getWorld().getRegionRepository();
|
||||
Region current = repository.fromPosition(position);
|
||||
|
||||
Set<RegionCoordinates> regions = current.getSurrounding();
|
||||
regions.add(current.getCoordinates());
|
||||
|
||||
Stream<Player> players = regions.stream().map(repository::get)
|
||||
.flatMap(region -> region.getEntities(EntityType.PLAYER));
|
||||
|
||||
Iterator<Player> iterator = players.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
if (count >= MAXIMUM_LOCAL_PLAYERS) {
|
||||
player.flagExcessivePlayers();
|
||||
break;
|
||||
@@ -94,6 +111,7 @@ public final class PlayerSynchronizationTask extends SynchronizationTask {
|
||||
break;
|
||||
}
|
||||
|
||||
Player other = iterator.next();
|
||||
Position local = other.getPosition();
|
||||
|
||||
if (other != player && local.isWithinDistance(position, distance) && !localPlayers.contains(other)) {
|
||||
|
||||
Reference in New Issue
Block a user