diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index 3e32a16cb..e59c030c6 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -634,7 +634,7 @@ public abstract class SWGObject implements Serializable, Comparable { synchronized (objectsAware) { for (SWGObject obj : objectsAware) { Player p = obj.getOwner(); - if (p != null && !p.equals(childObject.getOwner())) + if (isValidPlayer(p)) observers.add(obj); else childObject.getChildrenObservers(observers, obj); @@ -650,13 +650,25 @@ public abstract class SWGObject implements Serializable, Comparable { private void getChildrenObservers(Set observers, SWGObject obj) { for (SWGObject child : obj.getContainedObjects()) { Player p = child.getOwner(); - if (p != null && !p.equals(getOwner())) { + if (isValidPlayer(p)) { observers.add(child); } else { getChildrenObservers(observers, child); } } } + + private boolean isValidPlayer(Player player) { + if (player == null) + return false; + if (player.equals(getOwner())) + return false; + if (player.getCreatureObject() == null) + return false; + if (player.getCreatureObject().getPlayerObject() == null) + return false; + return true; + } public void sendObserversAndSelf(Packet ... packets) { sendSelf(packets); diff --git a/src/services/objects/ObjectAwareness.java b/src/services/objects/ObjectAwareness.java index 1f5b92ab7..c988a19d1 100644 --- a/src/services/objects/ObjectAwareness.java +++ b/src/services/objects/ObjectAwareness.java @@ -98,6 +98,7 @@ public class ObjectAwareness { object.sendObserversAndSelf(new UpdateContainmentMessage(object.getObjectId(), nParent.getObjectId(), object.getSlotArrangement())); } object.setLocation(nLocation); + update(object); } /**