mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-08-01 02:16:15 -04:00
Fixed bug related to deleting characters
Also added 2 new variables to destroyObject for certain cases.
This commit is contained in:
@@ -226,10 +226,13 @@ public class ConnectionService implements INetworkDispatch {
|
||||
|
||||
long parentId = object.getParentId();
|
||||
|
||||
boolean removed = false;
|
||||
if(object.getContainer() == null) {
|
||||
boolean remove = core.simulationService.remove(object, object.getPosition().x, object.getPosition().z);
|
||||
if(remove)
|
||||
if(remove) {
|
||||
System.out.println("Successful quadtree remove");
|
||||
removed = true;
|
||||
}
|
||||
} else {
|
||||
object.getContainer()._remove(object);
|
||||
object.setParentId(parentId);
|
||||
@@ -250,8 +253,10 @@ public class ConnectionService implements INetworkDispatch {
|
||||
object.createTransaction(core.getCreatureODB().getEnvironment());
|
||||
core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction());
|
||||
object.getTransaction().commitSync();
|
||||
core.objectService.destroyObject(object);
|
||||
|
||||
if(removed)
|
||||
core.objectService.destroyObject(object, false);
|
||||
else
|
||||
core.objectService.destroyObject(object);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@ import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
import engine.resources.service.LocalDbLoginProvider;
|
||||
import engine.resources.service.VBLoginProvider;
|
||||
|
||||
import protocol.swg.CharacterCreationDisabled;
|
||||
import protocol.swg.ClientUIErrorMessage;
|
||||
import protocol.swg.DeleteCharacterMessage;
|
||||
@@ -56,7 +55,6 @@ import protocol.swg.ServerNowEpochTime;
|
||||
import protocol.swg.StationIdHasJediSlot;
|
||||
import resources.common.*;
|
||||
import resources.datatables.PlayerFlags;
|
||||
|
||||
import resources.objects.creature.CreatureObject;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@@ -182,41 +180,49 @@ public class LoginService implements INetworkDispatch{
|
||||
packet.deserialize(data);
|
||||
Client client = core.getClient(session);
|
||||
|
||||
PreparedStatement preparedStatement;
|
||||
|
||||
preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?");
|
||||
preparedStatement.setLong(1, packet.getcharId());
|
||||
preparedStatement.setInt(2, packet.getgalaxyId());
|
||||
preparedStatement.setInt(3, (int) client.getAccountId());
|
||||
boolean resultSet = preparedStatement.execute();
|
||||
|
||||
//TODO: send deletecharacter failed
|
||||
if(!resultSet) {
|
||||
CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId());
|
||||
|
||||
if (object != null) {
|
||||
if (object.isInQuadtree() && object.getClient() != null) {
|
||||
core.connectionService.disconnect(object.getClient());
|
||||
}
|
||||
|
||||
if (object.isInQuadtree()) {
|
||||
core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true);
|
||||
}
|
||||
|
||||
core.objectService.destroyObject(object);
|
||||
}
|
||||
|
||||
core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class);
|
||||
DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0);
|
||||
session.write(reply.serialize());
|
||||
}
|
||||
|
||||
preparedStatement.close();
|
||||
PreparedStatement preparedStatement;
|
||||
|
||||
preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?");
|
||||
preparedStatement.setLong(1, packet.getcharId());
|
||||
preparedStatement.setInt(2, packet.getgalaxyId());
|
||||
preparedStatement.setInt(3, (int) client.getAccountId());
|
||||
boolean resultSet = preparedStatement.execute();
|
||||
CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId());
|
||||
|
||||
// TODO: Revert DELETE if everything fails for some reason... ?
|
||||
if(!resultSet) {
|
||||
if (object != null) {
|
||||
boolean destroyed = false;
|
||||
if(object.isInQuadtree() && object.getClient() != null) {
|
||||
core.connectionService.disconnect(object.getClient()); // destroyed in method
|
||||
destroyed = true;
|
||||
}
|
||||
else {
|
||||
core.objectService.destroyObject(object, false, false);
|
||||
destroyed = true;
|
||||
}
|
||||
if(destroyed) {
|
||||
core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class);
|
||||
DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0);
|
||||
session.write(reply.serialize());
|
||||
} else {
|
||||
//core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class);
|
||||
DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1);
|
||||
session.write(reply.serialize());
|
||||
}
|
||||
} else {
|
||||
//core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class);
|
||||
DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1);
|
||||
session.write(reply.serialize());
|
||||
}
|
||||
} else {
|
||||
//core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class);
|
||||
DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1);
|
||||
session.write(reply.serialize());
|
||||
}
|
||||
preparedStatement.close();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
|
||||
@@ -357,18 +357,22 @@ public class ObjectService implements INetworkDispatch {
|
||||
|
||||
public Map<Long, SWGObject> getObjectList() { return objectList; }
|
||||
|
||||
public void destroyObject(SWGObject object) {
|
||||
destroyObject(object, false, true);
|
||||
}
|
||||
|
||||
public void destroyObject(final SWGObject object, int seconds) {
|
||||
scheduler.schedule(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
destroyObject(object);
|
||||
destroyObject(object, false, true);
|
||||
}
|
||||
|
||||
}, seconds, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public void destroyObject(SWGObject object) {
|
||||
public void destroyObject(SWGObject object, boolean notify, boolean removeFromQt) {
|
||||
if (object == null) {
|
||||
return;
|
||||
}
|
||||
@@ -411,20 +415,29 @@ public class ObjectService implements INetworkDispatch {
|
||||
objectList.remove(obj.getObjectID());
|
||||
}
|
||||
});
|
||||
objectList.remove(object.getObjectID());
|
||||
core.simulationService.remove(object, object.getPosition().x, object.getPosition().y);
|
||||
|
||||
if(removeFromQt && !notify)
|
||||
core.simulationService.remove(object, object.getPosition().x, object.getPosition().y);
|
||||
|
||||
else if(notify && removeFromQt)
|
||||
core.simulationService.remove(object, object.getPosition().x, object.getPosition().y, true);
|
||||
|
||||
objectList.remove(object.getObjectID());
|
||||
|
||||
}
|
||||
|
||||
public void destroyObject(long objectID) {
|
||||
|
||||
SWGObject object = getObject(objectID);
|
||||
if(object != null) {
|
||||
destroyObject(object);
|
||||
destroyObject(object, false, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void destroyObject(SWGObject object, boolean removeFromQt) {
|
||||
destroyObject(object, false, removeFromQt);
|
||||
}
|
||||
public SWGObject getObjectByCustomName(String customName) {
|
||||
|
||||
synchronized(objectList) {
|
||||
|
||||
Reference in New Issue
Block a user