mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-10 14:26:45 +00:00
Cubot respawns on death. ElectricBox damages near objects
This commit is contained in:
parent
2565d3338c
commit
cbb07891fc
@ -10,9 +10,11 @@ import net.simon987.server.logging.LogManager;
|
||||
import net.simon987.server.user.User;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
public class Cubot extends GameObject implements Updatable, ControllableUnit, Programmable, Attackable {
|
||||
public class Cubot extends GameObject implements Updatable, ControllableUnit, Programmable, Attackable, Rechargeable {
|
||||
|
||||
private static final char MAP_INFO = 0x0080;
|
||||
public static final int ID = 1;
|
||||
@ -233,20 +235,19 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
|
||||
this.energy = energy;
|
||||
}
|
||||
|
||||
public boolean spendEnergy(int spent) {
|
||||
public boolean spendEnergy(int amount) {
|
||||
|
||||
if (energy - spent < 0) {
|
||||
if (energy - amount < 0) {
|
||||
return false;
|
||||
} else {
|
||||
energy -= spent;
|
||||
energy -= amount;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public void storeEnergy(int qty) {
|
||||
|
||||
energy = Math.min(energy + qty, maxEnergy);
|
||||
public void storeEnergy(int amount) {
|
||||
|
||||
energy = Math.min(energy + amount, maxEnergy);
|
||||
}
|
||||
|
||||
public void setMaxEnergy(int maxEnergy) {
|
||||
@ -420,9 +421,46 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
|
||||
}
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
setDead(false);
|
||||
setHp(maxHp);
|
||||
setShield(0);
|
||||
setHeldItem(0);
|
||||
setEnergy(maxEnergy);
|
||||
clearKeyboardBuffer();
|
||||
consoleMessagesBuffer.clear();
|
||||
lastConsoleMessagesBuffer.clear();
|
||||
hologramColor = 0;
|
||||
currentStatus = 0;
|
||||
lastStatus = 0;
|
||||
addStatus(CubotStatus.FACTORY_NEW);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDeadCallback() {
|
||||
LogManager.LOGGER.severe("Cubot death");
|
||||
return true; //always cancelled
|
||||
LogManager.LOGGER.info(getParent().getUsername() + "'s Cubot died");
|
||||
|
||||
reset();
|
||||
|
||||
//Teleport to spawn point
|
||||
this.getWorld().removeObject(this);
|
||||
this.getWorld().decUpdatable();
|
||||
|
||||
ServerConfiguration config = GameServer.INSTANCE.getConfig();
|
||||
Random random = new Random();
|
||||
|
||||
int spawnX = config.getInt("new_user_worldX") + random.nextInt(5);
|
||||
int spawnY = config.getInt("new_user_worldY") + random.nextInt(5);
|
||||
String dimension = config.getString("new_user_dimension");
|
||||
this.setWorld(GameServer.INSTANCE.getGameUniverse().getWorld(spawnX, spawnY, true, dimension));
|
||||
|
||||
Point point = this.getWorld().getRandomPassableTile();
|
||||
this.setX(point.x);
|
||||
this.setY(point.y);
|
||||
|
||||
this.getWorld().addObject(this);
|
||||
this.getWorld().incUpdatable();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,8 @@ public enum CubotStatus {
|
||||
|
||||
DEFAULT(0),
|
||||
RADIATED(1),
|
||||
DAMAGED(2);
|
||||
DAMAGED(2),
|
||||
FACTORY_NEW(3);
|
||||
|
||||
public char val;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.simon987.cubotplugin.event;
|
||||
|
||||
import net.simon987.cubotplugin.Cubot;
|
||||
import net.simon987.cubotplugin.CubotStatus;
|
||||
import net.simon987.server.GameServer;
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
import net.simon987.server.event.GameEvent;
|
||||
@ -25,6 +26,7 @@ public class UserCreationListener implements GameEventListener {
|
||||
|
||||
User user = (User) event.getSource();
|
||||
Cubot cubot = new Cubot();
|
||||
cubot.addStatus(CubotStatus.FACTORY_NEW);
|
||||
cubot.setObjectId(GameServer.INSTANCE.getGameUniverse().getNextObjectId());
|
||||
ServerConfiguration config = GameServer.INSTANCE.getConfig();
|
||||
|
||||
|
@ -3,22 +3,28 @@ package net.simon987.npcplugin;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBObject;
|
||||
import net.simon987.server.GameServer;
|
||||
import net.simon987.server.assembly.Util;
|
||||
import net.simon987.server.game.Attackable;
|
||||
import net.simon987.server.game.GameObject;
|
||||
import net.simon987.server.game.Rechargeable;
|
||||
import net.simon987.server.game.Updatable;
|
||||
import net.simon987.server.logging.LogManager;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ElectricBox extends GameObject implements Updatable, Attackable {
|
||||
|
||||
public static final int ID = 7;
|
||||
|
||||
private static final int maxHp = GameServer.INSTANCE.getConfig().getInt("electric_box_hp");
|
||||
private static final int damage = GameServer.INSTANCE.getConfig().getInt("electric_box_damage");
|
||||
private static final int damageDealt = GameServer.INSTANCE.getConfig().getInt("electric_box_damage");
|
||||
private static final int energyGiven = GameServer.INSTANCE.getConfig().getInt("electric_box_energy_given");
|
||||
|
||||
private int hp;
|
||||
|
||||
private ArrayList<Attackable> nearObjects = new ArrayList<>();
|
||||
|
||||
public ElectricBox() {
|
||||
|
||||
this.hp = maxHp;
|
||||
@ -71,9 +77,31 @@ public class ElectricBox extends GameObject implements Updatable, Attackable {
|
||||
return Obstacle.MAP_INFO;
|
||||
}
|
||||
|
||||
private void updateNearObjects() {
|
||||
|
||||
nearObjects.clear();
|
||||
|
||||
for (GameObject object : getWorld().getGameObjects()) {
|
||||
if (object != this && object instanceof Attackable && Util.manhattanDist(object.getX(), object.getY(),
|
||||
getX(), getY()) <= 1) {
|
||||
nearObjects.add((Attackable) object);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
updateNearObjects();
|
||||
|
||||
for (Attackable obj : nearObjects) {
|
||||
obj.damage(damageDealt);
|
||||
|
||||
if (obj instanceof Rechargeable) {
|
||||
((Rechargeable) obj).storeEnergy(energyGiven);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -92,6 +92,7 @@ public class GameServer implements Runnable {
|
||||
eventDispatcher.getListeners().add(new UserInfoCommandListener());
|
||||
eventDispatcher.getListeners().add(new HealObjCommandListener());
|
||||
eventDispatcher.getListeners().add(new DamageObjCommandListener());
|
||||
eventDispatcher.getListeners().add(new SetEnergyCommandListener());
|
||||
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,16 @@
|
||||
package net.simon987.server.game;
|
||||
|
||||
public interface Rechargeable {
|
||||
|
||||
int getEnergy();
|
||||
|
||||
void setEnergy(int energy);
|
||||
|
||||
boolean spendEnergy(int spent);
|
||||
|
||||
void storeEnergy(int amount);
|
||||
|
||||
void setMaxEnergy(int maxEnergy);
|
||||
|
||||
int getMaxEnergy();
|
||||
}
|
@ -160,6 +160,8 @@ public class World implements MongoSerialisable {
|
||||
if (!object.onDeadCallback()) {
|
||||
removeObject(object);
|
||||
//LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId());
|
||||
} else if (object instanceof Updatable) {
|
||||
((Updatable) object).update();
|
||||
}
|
||||
|
||||
} else if (object instanceof Updatable) {
|
||||
|
@ -0,0 +1,44 @@
|
||||
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.GameObject;
|
||||
import net.simon987.server.game.Rechargeable;
|
||||
|
||||
public class SetEnergyCommandListener implements GameEventListener {
|
||||
|
||||
@Override
|
||||
public Class getListenedEventType() {
|
||||
return DebugCommandEvent.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(GameEvent event) {
|
||||
|
||||
DebugCommandEvent e = (DebugCommandEvent) event;
|
||||
|
||||
if (e.getName().equals("setEnergy")) {
|
||||
|
||||
GameObject object = GameServer.INSTANCE.getGameUniverse().getObject(e.getLong("objectId"));
|
||||
|
||||
if (object != null) {
|
||||
|
||||
if (object instanceof Rechargeable) {
|
||||
|
||||
int oldEnergy = ((Rechargeable) object).getEnergy();
|
||||
((Rechargeable) object).setEnergy(e.getInt("amount"));
|
||||
|
||||
e.reply("Success: " + oldEnergy + " -> " + e.getInt("amount"));
|
||||
} else {
|
||||
e.reply("Object is not Rechargeable");
|
||||
}
|
||||
|
||||
} else {
|
||||
e.reply("Object not found: " + e.getLong("objectId"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user