mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-18 18:26:42 +00:00
Implemented shield hardware. Added heal, damage and charge shield debug commands.
This commit is contained in:
parent
e4269b83c4
commit
2565d3338c
@ -265,12 +265,12 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
|
||||
this.shield = shield;
|
||||
}
|
||||
|
||||
public boolean chargeShield(int qty) {
|
||||
qty = Math.min(qty, maxShield - shield);
|
||||
int cost = GameServer.INSTANCE.getConfig().getInt("shield_energy_cost");
|
||||
int energySpent = qty * cost;
|
||||
public boolean chargeShield(int amount) {
|
||||
amount = Math.min(amount, maxShield - shield);
|
||||
|
||||
int energySpent = amount * CubotShield.COST;
|
||||
if(spendEnergy(energySpent)) {
|
||||
shield += qty;
|
||||
shield += amount;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@ -278,12 +278,12 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
|
||||
}
|
||||
|
||||
/**
|
||||
* Damages shield by qty.
|
||||
* Damages shield by amount.
|
||||
*
|
||||
* Return damage that broke through the shield.
|
||||
*/
|
||||
public int damageShield(int qty) {
|
||||
int after = shield - qty;
|
||||
public int damageShield(int amount) {
|
||||
int after = shield - amount;
|
||||
if(after < 0) {
|
||||
shield = 0;
|
||||
return -after;
|
||||
@ -409,7 +409,11 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
|
||||
|
||||
@Override
|
||||
public void damage(int amount) {
|
||||
hp -= amount;
|
||||
|
||||
//Damage shield first
|
||||
int hullDamage = damageShield(amount);
|
||||
|
||||
hp -= hullDamage;
|
||||
|
||||
if (hp <= 0) {
|
||||
setDead(true);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.simon987.cubotplugin;
|
||||
|
||||
import com.mongodb.DBObject;
|
||||
import net.simon987.cubotplugin.event.ChargeShieldCommandListener;
|
||||
import net.simon987.cubotplugin.event.CpuInitialisationListener;
|
||||
import net.simon987.cubotplugin.event.UserCreationListener;
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
@ -18,6 +19,7 @@ public class CubotPlugin extends ServerPlugin implements GameObjectDeserializer,
|
||||
public void init(ServerConfiguration config) {
|
||||
listeners.add(new CpuInitialisationListener());
|
||||
listeners.add(new UserCreationListener());
|
||||
listeners.add(new ChargeShieldCommandListener());
|
||||
|
||||
LogManager.LOGGER.info("Initialised Cubot plugin");
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ public class CubotShield extends CpuHardware {
|
||||
private static final int SHIELD_POLL = 2;
|
||||
private Cubot cubot;
|
||||
|
||||
public static final int COST = GameServer.INSTANCE.getConfig().getInt("shield_energy_cost");
|
||||
|
||||
public CubotShield(Cubot cubot) {
|
||||
this.cubot = cubot;
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
package net.simon987.cubotplugin.event;
|
||||
|
||||
import net.simon987.cubotplugin.Cubot;
|
||||
import net.simon987.server.GameServer;
|
||||
import net.simon987.server.event.DebugCommandEvent;
|
||||
import net.simon987.server.event.GameEvent;
|
||||
import net.simon987.server.event.GameEventListener;
|
||||
import net.simon987.server.game.GameObject;
|
||||
|
||||
public class ChargeShieldCommandListener implements GameEventListener {
|
||||
@Override
|
||||
public Class getListenedEventType() {
|
||||
return DebugCommandEvent.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(GameEvent event) {
|
||||
|
||||
DebugCommandEvent e = (DebugCommandEvent) event;
|
||||
|
||||
if (e.getName().equals("chargeShield")) {
|
||||
|
||||
GameObject cubot = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId"));
|
||||
|
||||
if (cubot != null) {
|
||||
|
||||
if (cubot instanceof Cubot) {
|
||||
|
||||
String hp = ((Cubot) cubot).getHp() + "/" + ((Cubot) cubot).getMaxHp();
|
||||
int oldShield = ((Cubot) cubot).getShield();
|
||||
((Cubot) cubot).chargeShield(e.getInt("amount"));
|
||||
|
||||
e.reply("Success: " + hp + " (" + oldShield + ") -> " + hp + "(" + ((Cubot) cubot).getShield() +
|
||||
")");
|
||||
} else {
|
||||
e.reply("Object is not a Cubot");
|
||||
}
|
||||
|
||||
} else {
|
||||
e.reply("Object not found: " + e.getLong("objectId"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -90,6 +90,8 @@ public class GameServer implements Runnable {
|
||||
eventDispatcher.getListeners().add(new SpawnObjCommandListener());
|
||||
eventDispatcher.getListeners().add(new TpObjectCommandListener());
|
||||
eventDispatcher.getListeners().add(new UserInfoCommandListener());
|
||||
eventDispatcher.getListeners().add(new HealObjCommandListener());
|
||||
eventDispatcher.getListeners().add(new DamageObjCommandListener());
|
||||
|
||||
}
|
||||
|
||||
@ -184,7 +186,7 @@ public class GameServer implements Runnable {
|
||||
socketServer.tick();
|
||||
|
||||
LogManager.LOGGER.info("Processed " + gameUniverse.getWorldCount() + " worlds (" + updatedWorlds +
|
||||
") updated");
|
||||
" updated)");
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,46 @@
|
||||
package net.simon987.server.game.debug;
|
||||
|
||||
import net.simon987.server.GameServer;
|
||||
import net.simon987.server.event.DebugCommandEvent;
|
||||
import net.simon987.server.event.GameEvent;
|
||||
import net.simon987.server.event.GameEventListener;
|
||||
import net.simon987.server.game.Attackable;
|
||||
import net.simon987.server.game.GameObject;
|
||||
|
||||
|
||||
public class DamageObjCommandListener implements GameEventListener {
|
||||
|
||||
@Override
|
||||
public Class getListenedEventType() {
|
||||
return DebugCommandEvent.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(GameEvent event) {
|
||||
|
||||
DebugCommandEvent e = (DebugCommandEvent) event;
|
||||
|
||||
if (e.getName().equals("damageObj")) {
|
||||
|
||||
GameObject object = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId"));
|
||||
|
||||
if (object != null) {
|
||||
|
||||
if (object instanceof Attackable) {
|
||||
|
||||
int oldHp = ((Attackable) object).getHp();
|
||||
int maxHp = ((Attackable) object).getMaxHp();
|
||||
((Attackable) object).damage(e.getInt("amount"));
|
||||
|
||||
e.reply("Success: " + oldHp + "/" + maxHp + " -> " + ((Attackable) object).getHp() + "/" + maxHp);
|
||||
} else {
|
||||
e.reply("Object is not Attackable");
|
||||
}
|
||||
|
||||
} else {
|
||||
e.reply("Object not found: " + e.getLong("objectId"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package net.simon987.server.game.debug;
|
||||
|
||||
import net.simon987.server.GameServer;
|
||||
import net.simon987.server.event.DebugCommandEvent;
|
||||
import net.simon987.server.event.GameEvent;
|
||||
import net.simon987.server.event.GameEventListener;
|
||||
import net.simon987.server.game.Attackable;
|
||||
import net.simon987.server.game.GameObject;
|
||||
|
||||
|
||||
public class HealObjCommandListener implements GameEventListener {
|
||||
|
||||
@Override
|
||||
public Class getListenedEventType() {
|
||||
return DebugCommandEvent.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(GameEvent event) {
|
||||
|
||||
DebugCommandEvent e = (DebugCommandEvent) event;
|
||||
|
||||
if (e.getName().equals("healObj")) {
|
||||
|
||||
GameObject object = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId"));
|
||||
|
||||
if (object != null) {
|
||||
|
||||
if (object instanceof Attackable) {
|
||||
|
||||
int oldHp = ((Attackable) object).getHp();
|
||||
int maxHp = ((Attackable) object).getMaxHp();
|
||||
((Attackable) object).heal(e.getInt("amount"));
|
||||
|
||||
e.reply("Success: " + oldHp + "/" + maxHp + " -> " + ((Attackable) object).getHp() + "/" + maxHp);
|
||||
} else {
|
||||
e.reply("Object is not Attackable");
|
||||
}
|
||||
|
||||
} else {
|
||||
e.reply("Object not found: " + e.getLong("objectId"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -13,9 +13,8 @@ public class DebugCommandHandler implements MessageHandler {
|
||||
|
||||
if (json.get("t").equals("debug") && user.isModerator()) {
|
||||
|
||||
|
||||
DebugCommandEvent e = new DebugCommandEvent(json, user);
|
||||
GameServer.INSTANCE.getEventDispatcher().dispatch(e);
|
||||
GameServer.INSTANCE.getEventDispatcher().dispatch(e); //Ignore cancellation
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public class TerrainRequestHandler implements MessageHandler {
|
||||
try {
|
||||
world = GameServer.INSTANCE.getGameUniverse().getWorld(
|
||||
Long.valueOf((long) json.get("x")).intValue(),
|
||||
Long.valueOf((long) json.get("y")).intValue(), false,
|
||||
Long.valueOf((long) json.get("y")).intValue(), true,
|
||||
(String) json.get("dimension"));
|
||||
} catch (NullPointerException e) {
|
||||
LogManager.LOGGER.severe("FIXME: handle TerrainRequestHandler");
|
||||
|
Loading…
x
Reference in New Issue
Block a user