Fixed issue where players will still appear as spawned inside a building despite logging out

This commit is contained in:
Obique PSWG
2015-08-02 22:09:22 -05:00
parent 493b414fd1
commit c01a177c98
2 changed files with 16 additions and 6 deletions
+12 -5
View File
@@ -46,6 +46,7 @@ import resources.containers.DefaultPermissions;
import resources.encodables.StringId;
import resources.network.BaselineBuilder;
import resources.network.DeltaBuilder;
import resources.objects.creature.CreatureObject;
import resources.player.Player;
import resources.player.PlayerState;
import resources.server_info.Log;
@@ -578,7 +579,7 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
return (filledId != -1) ? filledId : -1;
}
protected final void sendSceneCreateObject(Player target) {
private final void sendSceneCreateObject(Player target) {
SceneCreateObjectByCrc create = new SceneCreateObjectByCrc();
create.setObjectId(objectId);
create.setLocation(location);
@@ -589,7 +590,7 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
}
protected final void sendSceneDestroyObject(Player target) {
private final void sendSceneDestroyObject(Player target) {
SceneDestroyObject destroy = new SceneDestroyObject();
destroy.setObjectId(objectId);
target.sendPacket(destroy);
@@ -607,6 +608,10 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
target.sendPacket(new SceneEndBaselines(getObjectId()));
}
public void destroyObject(Player target) {
sendSceneDestroyObject(target);
}
public void clearAware() {
SWGObject [] objects;
synchronized (objectsAware) {
@@ -741,7 +746,7 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
for (SWGObject swgObject : removed) {
if (swgObject.getOwner() != null) {
sendSceneDestroyObject(swgObject.getOwner());
destroyObject(swgObject.getOwner());
}
}
}
@@ -766,7 +771,7 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
if (objectsAware.remove(o)) {
Player owner = o.getOwner();
if (owner != null)
sendSceneDestroyObject(owner);
destroyObject(owner);
else
destroyObjectObservers(o);
}
@@ -797,7 +802,7 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
Set<SWGObject> observers = new HashSet<>();
getChildrenObservers(observers, obj);
for (SWGObject observer : observers) {
sendSceneDestroyObject(observer.getOwner());
destroyObject(observer.getOwner());
}
}
@@ -854,6 +859,8 @@ public abstract class SWGObject implements Serializable, Comparable<SWGObject> {
// Now create the contained objects
for (SWGObject containedObject : containedObjects.values()) {
if (containedObject != null && !sentObjects.contains(containedObject)) {
if (containedObject instanceof CreatureObject && containedObject.hasSlot("ghost") && containedObject.getOwner() == null)
continue; // If it's a player, but that's logged out
containedObject.createObject(target);
}
}