From 28ff80338564d3f50efb0d845804491e02c38e37 Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Thu, 7 Jan 2016 12:34:39 -0600 Subject: [PATCH] Fixed zoning in to buildings --- src/resources/objects/SWGObject.java | 28 +++++++++++++---------- src/services/objects/ObjectAwareness.java | 8 ++++--- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index 830756af..3d1d9a17 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -630,13 +630,17 @@ public abstract class SWGObject implements Serializable, Comparable { } public void clearAware() { + clearAware(true); + } + + public void clearAware(boolean updateSelf) { List objects; synchronized (objectsAware) { objects = new ArrayList<>(objectsAware); } for (SWGObject o : objects) { - o.awarenessOutOfRange(this); - awarenessOutOfRange(o); + o.awarenessOutOfRange(this, updateSelf); + awarenessOutOfRange(o, true); } } @@ -787,25 +791,25 @@ public abstract class SWGObject implements Serializable, Comparable { outOfRange.removeAll(withinRange); outOfRange.removeAll(observers); for (SWGObject o : outOfRange) { - awarenessOutOfRange(o); - o.awarenessOutOfRange(this); + awarenessOutOfRange(o, true); + o.awarenessOutOfRange(this, true); } for (SWGObject o : withinRange) { - awarenessInRange(o); - o.awarenessInRange(this); + awarenessInRange(o, true); + o.awarenessInRange(this, true); } for (SWGObject o : observers) { - awarenessInRange(o); - o.awarenessInRange(this); + awarenessInRange(o, true); + o.awarenessInRange(this, true); } } - protected void awarenessOutOfRange(SWGObject o) { + protected void awarenessOutOfRange(SWGObject o, boolean sendDestroy) { boolean success = false; synchronized (objectsAware) { success = objectsAware.remove(o); } - if (success) { + if (success && sendDestroy) { Player owner = o.getOwner(); if (owner != null) destroyObject(owner); @@ -814,12 +818,12 @@ public abstract class SWGObject implements Serializable, Comparable { } } - protected void awarenessInRange(SWGObject o) { + protected void awarenessInRange(SWGObject o, boolean sendCreate) { boolean success = false; synchronized (objectsAware) { success = objectsAware.add(o); } - if (success) { + if (success && sendCreate) { Player owner = o.getOwner(); if (owner != null) createObject(owner); diff --git a/src/services/objects/ObjectAwareness.java b/src/services/objects/ObjectAwareness.java index 1039caa6..7a5cec47 100644 --- a/src/services/objects/ObjectAwareness.java +++ b/src/services/objects/ObjectAwareness.java @@ -108,16 +108,18 @@ public class ObjectAwareness extends Service { if (creature == null) return; switch (pei.getEvent()) { + case PE_LOGGED_OUT: + creature.setOwner(null); + p.setCreatureObject(null); + break; case PE_DISAPPEAR: remove(creature); for (SWGObject obj : creature.getObservers()) creature.destroyObject(obj.getOwner()); creature.clearAware(); - creature.setOwner(null); - p.setCreatureObject(null); break; case PE_ZONE_IN: - creature.clearAware(); + creature.clearAware(false); update(creature); break; default: