More refactoring, updated mongodb driver + transactions on supported clusters

This commit is contained in:
simon
2018-12-22 17:48:29 -05:00
parent b361f87154
commit 5f95c17aed
18 changed files with 83 additions and 49 deletions

View File

@@ -65,6 +65,13 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
Settlement settlement = NpcPlugin.settlementMap.get(getWorld().getId());
if (settlement == null) {
//Only happens when server is killed during save function
getWorld().decUpdatable();
setDead(true);
return;
}
if (cooldown == 0) {
if (settlement.getNpcs().size() < MAX_NPC_COUNT) {
Point p = getAdjacentTile();
@@ -72,6 +79,9 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
if (p != null) {
NonPlayerCharacter npc = spawnNPC(p);
settlement.addNpc(npc);
getWorld().addObject(npc);
getWorld().incUpdatable();
}
}
@@ -102,8 +112,6 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
npc.setObjectId(new ObjectId());
npc.setX(p.x);
npc.setY(p.y);
getWorld().addObject(npc);
getWorld().incUpdatable();
return npc;
}
@@ -114,8 +122,6 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
npc.setObjectId(new ObjectId());
npc.setX(p.x);
npc.setY(p.y);
getWorld().addObject(npc);
getWorld().incUpdatable();
this.locked = true;
this.programIndex = 0;
@@ -126,8 +132,6 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
@Override
public boolean sendMessage(char[] message) {
String strMessage = String.valueOf(message);
if (locked) {
Settlement settlement = NpcPlugin.settlementMap.get(getWorld().getId());
@@ -136,10 +140,10 @@ public class Factory extends Structure implements Updatable, MessageReceiver {
return true;
}
} else if (programIndex <= 2048) { //todo config
} else if (programIndex <= PROGRAM_SIZE) {
if (programIndex == 0) {
program = new char[2048];
program = new char[PROGRAM_SIZE];
}
System.arraycopy(message, 0, program, programIndex, message.length);

View File

@@ -2,6 +2,7 @@ package net.simon987.npcplugin;
import net.simon987.server.GameServer;
import net.simon987.server.assembly.*;
import net.simon987.server.event.ObjectDeathEvent;
import net.simon987.server.game.item.Item;
import net.simon987.server.game.item.ItemVoid;
import net.simon987.server.game.objects.Action;
@@ -87,6 +88,11 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit {
module.update();
}
//Self-destroy when age limit is reached
if (getAge() >= NonPlayerCharacter.LIFETIME) {
setDead(true);
}
//Don't bother calling checkCompleted()
getTask().tick(this);
}
@@ -312,6 +318,20 @@ public class HackedNPC extends NonPlayerCharacter implements ControllableUnit {
return json;
}
@Override
public boolean onDeadCallback() {
getWorld().decUpdatable();
if (getSettlement() != null && getSettlement().getNpcs() != null) {
getSettlement().getNpcs().remove(this);
}
GameServer.INSTANCE.getEventDispatcher().dispatch(new ObjectDeathEvent(this));
return false;
}
@Override
public JSONObject debugJsonSerialise() {
return jsonSerialise();

View File

@@ -43,12 +43,6 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable
private Settlement settlement;
/**
* If set to true, the NPC will be destroyed next tick if it is
* not linked to a Factory
*/
private boolean selfDestroyNextTick = false;
/**
* Age of the npc, in ticks
*/
@@ -92,11 +86,7 @@ public abstract class NonPlayerCharacter extends GameObject implements Updatable
//Destroy NPCs that are not linked with a Settlement
if (settlement == null) {
if (selfDestroyNextTick) {
setDead(true);
}
selfDestroyNextTick = true;
setDead(true);
}
//Heal the NPC

View File

@@ -37,7 +37,8 @@ public class WorldCreationListener implements GameEventListener {
World world = (World) event.getSource();
try {
NpcPlugin.settlementMap.put(world.getId(), new Settlement(world));
Settlement settlement = new Settlement(world);
NpcPlugin.settlementMap.put(world.getId(), settlement);
} catch (WorldGenerationException e) {
LogManager.LOGGER.fine(String.format("Exception during settlement generation: %s.",
e.getMessage()));