Fixed zoning in to buildings

This commit is contained in:
Obique PSWG
2016-01-07 12:34:39 -06:00
parent 17f4446a81
commit 28ff803385
2 changed files with 21 additions and 15 deletions
+16 -12
View File
@@ -630,13 +630,17 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
}
public void clearAware() {
clearAware(true);
}
public void clearAware(boolean updateSelf) {
List<SWGObject> 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<SWGObject> {
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<SWGObject> {
}
}
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);
+5 -3
View File
@@ -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: