From 8ed192f8d02e0d222fa29c514739e5cd8f829ba1 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 10 Mar 2018 09:49:34 -0500 Subject: [PATCH] Cubot implements Attackable (untested) --- .../java/net/simon987/cubotplugin/Cubot.java | 70 +++++++++++++++++-- .../net/simon987/cubotplugin/CubotCore.java | 59 ++++++++++++++++ .../net/simon987/cubotplugin/CubotShield.java | 6 +- .../net/simon987/cubotplugin/CubotStatus.java | 18 +++++ .../net/simon987/npcplugin/HarvesterNPC.java | 4 +- .../net/simon987/server/game/GameObject.java | 5 +- .../java/net/simon987/server/game/World.java | 9 ++- 7 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotCore.java create mode 100644 Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotStatus.java diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java index 8c1b84f..9d573f9 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/Cubot.java @@ -10,13 +10,11 @@ import org.json.simple.JSONObject; import java.util.ArrayList; -public class Cubot extends GameObject implements Updatable, ControllableUnit, Programmable { +public class Cubot extends GameObject implements Updatable, ControllableUnit, Programmable, Attackable { private static final char MAP_INFO = 0x0080; public static final int ID = 1; - public static int TYPE_ID = 2; - private int hologram = 0; private String hologramString = ""; private HologramMode hologramMode = HologramMode.CLEARED; @@ -34,6 +32,9 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr private Action currentAction = Action.IDLE; private Action lastAction = Action.IDLE; + private char currentStatus; + private char lastStatus; + private ArrayList keyboardBuffer = new ArrayList<>(); private ArrayList consoleMessagesBuffer = new ArrayList<>(CONSOLE_BUFFER_MAX_SIZE); @@ -92,6 +93,10 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr lastConsoleMessagesBuffer = new ArrayList<>(consoleMessagesBuffer); consoleMessagesBuffer.clear(); + + //And the status.. + lastStatus = currentStatus; + currentStatus = 0; } @Override @@ -152,8 +157,8 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr cubot.setX((int) obj.get("x")); cubot.setY((int) obj.get("y")); cubot.hp = (int) obj.get("hp"); - cubot.shield = (int) obj.get("shield"); - cubot.maxShield = GameServer.INSTANCE.getConfig().getInt("max_shield"); +// cubot.shield = (int) obj.get("shield"); +// cubot.maxShield = GameServer.INSTANCE.getConfig().getInt("max_shield"); cubot.setDirection(Direction.getDirection((int) obj.get("direction"))); cubot.heldItem = (int) obj.get("heldItem"); cubot.energy = (int) obj.get("energy"); @@ -246,7 +251,6 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr return maxEnergy; } - // shield methods are modeled after energy methods public int getShield() { return shield; } @@ -347,4 +351,58 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr public void setHologramColor(int hologramColor) { this.hologramColor = hologramColor; } + + public void addStatus(CubotStatus status) { + + currentStatus |= status.val; + } + + public void removeStatus(CubotStatus status) { + + currentStatus &= (~status.val); + } + + public char getStatus() { + return lastStatus; + } + + @Override + public void setHealRate(int hp) { + + } + + @Override + public int getHp() { + return 0; + } + + @Override + public void setHp(int hp) { + + } + + @Override + public int getMaxHp() { + return 0; + } + + @Override + public void setMaxHp(int hp) { + + } + + @Override + public void heal(int amount) { + + } + + @Override + public void damage(int amount) { + + } + + @Override + public boolean onDeadCallback() { + return true; //always cancelled + } } diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotCore.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotCore.java new file mode 100644 index 0000000..021dc62 --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotCore.java @@ -0,0 +1,59 @@ +package net.simon987.cubotplugin; + +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; +import net.simon987.server.GameServer; +import net.simon987.server.assembly.CpuHardware; +import net.simon987.server.assembly.Status; + +public class CubotCore extends CpuHardware { + + public static final int DEFAULT_ADDRESS = 0x000E; + + /** + * Hardware ID (Should be unique) + */ + public static final char HWID = 0x000E; + + private static final int CORE_STATUS_POLL = 1; + private static final int CORE_HULL_POLL = 2; + + private Cubot cubot; + + public CubotCore(Cubot cubot) { + this.cubot = cubot; + } + + @Override + public void handleInterrupt(Status status) { + + int a = getCpu().getRegisterSet().getRegister("A").getValue(); + + if (a == CORE_STATUS_POLL) { + getCpu().getRegisterSet().getRegister("B").setValue(cubot.getStatus()); + } else if (a == CORE_HULL_POLL) { + getCpu().getRegisterSet().getRegister("B").setValue(cubot.getHp()); + } + } + + @Override + public char getId() { + return HWID; + } + + @Override + public BasicDBObject mongoSerialise() { + + BasicDBObject dbObject = new BasicDBObject(); + + dbObject.put("hwid", (int) HWID); + dbObject.put("cubot", cubot.getObjectId()); + + return dbObject; + } + + + public static CubotCore deserialize(DBObject obj) { + return new CubotCore((Cubot) GameServer.INSTANCE.getGameUniverse().getObject((long) obj.get("cubot"))); + } +} diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java index 670634b..0491b35 100644 --- a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotShield.java @@ -7,10 +7,10 @@ import net.simon987.server.assembly.CpuHardware; import net.simon987.server.assembly.Status; public class CubotShield extends CpuHardware { - static final char HWID = 0x000E; + static final char HWID = 0x000F; private static final int SHIELD_CHARGE = 1; - private static final int SHIELD_QUERY = 2; + private static final int SHIELD_POLL = 2; private Cubot cubot; public CubotShield(Cubot cubot) { @@ -39,7 +39,7 @@ public class CubotShield extends CpuHardware { if(a == SHIELD_CHARGE) { int b = getCpu().getRegisterSet().getRegister("B").getValue(); cubot.chargeShield(b); - } else if(a == SHIELD_QUERY) { + } else if (a == SHIELD_POLL) { int shield = cubot.getShield(); getCpu().getRegisterSet().getRegister("B").setValue(shield); } diff --git a/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotStatus.java b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotStatus.java new file mode 100644 index 0000000..bb16666 --- /dev/null +++ b/Plugin Cubot/src/main/java/net/simon987/cubotplugin/CubotStatus.java @@ -0,0 +1,18 @@ +package net.simon987.cubotplugin; + +/** + * Status of a Cubot (Special buff or debuff) + */ +public enum CubotStatus { + + DEFAULT(0), + RADIATED(1), + DAMAGED(2); + + public char val; + + CubotStatus(int val) { + this.val = (char) val; + } + +} diff --git a/Plugin NPC/src/main/java/net/simon987/npcplugin/HarvesterNPC.java b/Plugin NPC/src/main/java/net/simon987/npcplugin/HarvesterNPC.java index b6d8979..89c58f4 100644 --- a/Plugin NPC/src/main/java/net/simon987/npcplugin/HarvesterNPC.java +++ b/Plugin NPC/src/main/java/net/simon987/npcplugin/HarvesterNPC.java @@ -46,7 +46,7 @@ public class HarvesterNPC extends NonPlayerCharacter { } @Override - public void onDeadCallback() { + public boolean onDeadCallback() { getWorld().decUpdatable(); @@ -56,6 +56,8 @@ public class HarvesterNPC extends NonPlayerCharacter { GameServer.INSTANCE.getEventDispatcher().dispatch( new ObjectDeathEvent(this, ID)); + + return false; } @Override diff --git a/Server/src/main/java/net/simon987/server/game/GameObject.java b/Server/src/main/java/net/simon987/server/game/GameObject.java index a176129..cde0d20 100755 --- a/Server/src/main/java/net/simon987/server/game/GameObject.java +++ b/Server/src/main/java/net/simon987/server/game/GameObject.java @@ -257,6 +257,9 @@ public abstract class GameObject implements JSONSerialisable, MongoSerialisable /** * Called before this GameObject is removed from the world - defaults to doing nothing + * @return true if cancelled */ - public void onDeadCallback() { } + public boolean onDeadCallback() { + return false; + } } \ No newline at end of file diff --git a/Server/src/main/java/net/simon987/server/game/World.java b/Server/src/main/java/net/simon987/server/game/World.java index be7ea1f..ce9c9d4 100644 --- a/Server/src/main/java/net/simon987/server/game/World.java +++ b/Server/src/main/java/net/simon987/server/game/World.java @@ -147,9 +147,12 @@ public class World implements MongoSerialisable { for (GameObject object : gameObjects.values()) { //Clean up dead objects if (object.isDead()) { - object.onDeadCallback(); - removeObject(object); - //LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId()); + + if (!object.onDeadCallback()) { + removeObject(object); + //LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId()); + } + } else if (object instanceof Updatable) { ((Updatable) object).update(); }