From 49e03289d7dc056a5de8c38f522bb1b285acaf74 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Fri, 7 Sep 2018 16:50:41 +0000 Subject: [PATCH] Dropped visibility range variable. --- .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ .../l2jmobius/gameserver/model/L2World.java | 102 ++++++++++++------ 8 files changed, 544 insertions(+), 272 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/L2World.java index cd09cc4be8..9e7711497b 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/model/L2World.java @@ -76,9 +76,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -595,9 +592,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceId() != object.getInstanceId()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -635,36 +699,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)
  • diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/L2World.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/L2World.java index 1f782c509c..d250ba15e5 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/L2World.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/L2World.java @@ -77,9 +77,6 @@ public final class L2World private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X; private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y; - /** Max client visibility distance. **/ - private static final int VISIBILITY_RANGE = 3000; - /** Map containing all the players in game. */ private final Map _allPlayers = new ConcurrentHashMap<>(); /** Map containing all the Good players in game. */ @@ -599,9 +596,76 @@ public final class L2World }); } + public List getVisibleObjects(L2Object object, Class clazz) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObject(object, clazz, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; + } + public void forEachVisibleObject(L2Object object, Class clazz, Consumer c) { - forEachVisibleObjectInRange(object, clazz, VISIBILITY_RANGE, c); + if (object == null) + { + return; + } + + final L2WorldRegion centerWorldRegion = getRegion(object); + if (centerWorldRegion == null) + { + return; + } + + for (L2WorldRegion region : centerWorldRegion.getSurroundingRegions()) + { + for (L2Object visibleObject : region.getVisibleObjects().values()) + { + if ((visibleObject == null) || (visibleObject == object) || !clazz.isInstance(visibleObject)) + { + continue; + } + + if (visibleObject.getInstanceWorld() != object.getInstanceWorld()) + { + continue; + } + + c.accept(clazz.cast(visibleObject)); + } + } + } + + public List getVisibleObjects(L2Object object, Class clazz, int range) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, result::add); + return result; + } + + public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) + { + final List result = new ArrayList<>(); + forEachVisibleObjectInRange(object, clazz, range, o -> + { + if (predicate.test(o)) + { + result.add(o); + } + }); + return result; } public void forEachVisibleObjectInRange(L2Object object, Class clazz, int range, Consumer c) @@ -639,36 +703,6 @@ public final class L2World } } - public List getVisibleObjects(L2Object object, Class clazz) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE); - } - - public List getVisibleObjects(L2Object object, Class clazz, Predicate predicate) - { - return getVisibleObjects(object, clazz, VISIBILITY_RANGE, predicate); - } - - public List getVisibleObjects(L2Object object, Class clazz, int range) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, result::add); - return result; - } - - public List getVisibleObjects(L2Object object, Class clazz, int range, Predicate predicate) - { - final List result = new ArrayList<>(); - forEachVisibleObjectInRange(object, clazz, range, o -> - { - if (predicate.test(o)) - { - result.add(o); - } - }); - return result; - } - /** * Calculate the current L2WorldRegions of the object according to its position (x,y). Example of use : *
  • Set position of a new L2Object (drop, spawn...)