mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-19 10:36:43 +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 net.simon987.server.user.User;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.util.ArrayList;
|
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;
|
private static final char MAP_INFO = 0x0080;
|
||||||
public static final int ID = 1;
|
public static final int ID = 1;
|
||||||
@ -233,20 +235,19 @@ public class Cubot extends GameObject implements Updatable, ControllableUnit, Pr
|
|||||||
this.energy = energy;
|
this.energy = energy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean spendEnergy(int spent) {
|
public boolean spendEnergy(int amount) {
|
||||||
|
|
||||||
if (energy - spent < 0) {
|
if (energy - amount < 0) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
energy -= spent;
|
energy -= amount;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void storeEnergy(int qty) {
|
public void storeEnergy(int amount) {
|
||||||
|
|
||||||
energy = Math.min(energy + qty, maxEnergy);
|
|
||||||
|
|
||||||
|
energy = Math.min(energy + amount, maxEnergy);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxEnergy(int 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
|
@Override
|
||||||
public boolean onDeadCallback() {
|
public boolean onDeadCallback() {
|
||||||
LogManager.LOGGER.severe("Cubot death");
|
LogManager.LOGGER.info(getParent().getUsername() + "'s Cubot died");
|
||||||
return true; //always cancelled
|
|
||||||
|
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),
|
DEFAULT(0),
|
||||||
RADIATED(1),
|
RADIATED(1),
|
||||||
DAMAGED(2);
|
DAMAGED(2),
|
||||||
|
FACTORY_NEW(3);
|
||||||
|
|
||||||
public char val;
|
public char val;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package net.simon987.cubotplugin.event;
|
package net.simon987.cubotplugin.event;
|
||||||
|
|
||||||
import net.simon987.cubotplugin.Cubot;
|
import net.simon987.cubotplugin.Cubot;
|
||||||
|
import net.simon987.cubotplugin.CubotStatus;
|
||||||
import net.simon987.server.GameServer;
|
import net.simon987.server.GameServer;
|
||||||
import net.simon987.server.ServerConfiguration;
|
import net.simon987.server.ServerConfiguration;
|
||||||
import net.simon987.server.event.GameEvent;
|
import net.simon987.server.event.GameEvent;
|
||||||
@ -25,6 +26,7 @@ public class UserCreationListener implements GameEventListener {
|
|||||||
|
|
||||||
User user = (User) event.getSource();
|
User user = (User) event.getSource();
|
||||||
Cubot cubot = new Cubot();
|
Cubot cubot = new Cubot();
|
||||||
|
cubot.addStatus(CubotStatus.FACTORY_NEW);
|
||||||
cubot.setObjectId(GameServer.INSTANCE.getGameUniverse().getNextObjectId());
|
cubot.setObjectId(GameServer.INSTANCE.getGameUniverse().getNextObjectId());
|
||||||
ServerConfiguration config = GameServer.INSTANCE.getConfig();
|
ServerConfiguration config = GameServer.INSTANCE.getConfig();
|
||||||
|
|
||||||
|
@ -3,22 +3,28 @@ package net.simon987.npcplugin;
|
|||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import com.mongodb.DBObject;
|
import com.mongodb.DBObject;
|
||||||
import net.simon987.server.GameServer;
|
import net.simon987.server.GameServer;
|
||||||
|
import net.simon987.server.assembly.Util;
|
||||||
import net.simon987.server.game.Attackable;
|
import net.simon987.server.game.Attackable;
|
||||||
import net.simon987.server.game.GameObject;
|
import net.simon987.server.game.GameObject;
|
||||||
|
import net.simon987.server.game.Rechargeable;
|
||||||
import net.simon987.server.game.Updatable;
|
import net.simon987.server.game.Updatable;
|
||||||
import net.simon987.server.logging.LogManager;
|
import net.simon987.server.logging.LogManager;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ElectricBox extends GameObject implements Updatable, Attackable {
|
public class ElectricBox extends GameObject implements Updatable, Attackable {
|
||||||
|
|
||||||
public static final int ID = 7;
|
public static final int ID = 7;
|
||||||
|
|
||||||
private static final int maxHp = GameServer.INSTANCE.getConfig().getInt("electric_box_hp");
|
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 static final int energyGiven = GameServer.INSTANCE.getConfig().getInt("electric_box_energy_given");
|
||||||
|
|
||||||
private int hp;
|
private int hp;
|
||||||
|
|
||||||
|
private ArrayList<Attackable> nearObjects = new ArrayList<>();
|
||||||
|
|
||||||
public ElectricBox() {
|
public ElectricBox() {
|
||||||
|
|
||||||
this.hp = maxHp;
|
this.hp = maxHp;
|
||||||
@ -71,9 +77,31 @@ public class ElectricBox extends GameObject implements Updatable, Attackable {
|
|||||||
return Obstacle.MAP_INFO;
|
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
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
|
|
||||||
|
updateNearObjects();
|
||||||
|
|
||||||
|
for (Attackable obj : nearObjects) {
|
||||||
|
obj.damage(damageDealt);
|
||||||
|
|
||||||
|
if (obj instanceof Rechargeable) {
|
||||||
|
((Rechargeable) obj).storeEnergy(energyGiven);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -92,6 +92,7 @@ public class GameServer implements Runnable {
|
|||||||
eventDispatcher.getListeners().add(new UserInfoCommandListener());
|
eventDispatcher.getListeners().add(new UserInfoCommandListener());
|
||||||
eventDispatcher.getListeners().add(new HealObjCommandListener());
|
eventDispatcher.getListeners().add(new HealObjCommandListener());
|
||||||
eventDispatcher.getListeners().add(new DamageObjCommandListener());
|
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()) {
|
if (!object.onDeadCallback()) {
|
||||||
removeObject(object);
|
removeObject(object);
|
||||||
//LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId());
|
//LogManager.LOGGER.fine("Removed object " + object + " id: " + object.getObjectId());
|
||||||
|
} else if (object instanceof Updatable) {
|
||||||
|
((Updatable) object).update();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (object instanceof Updatable) {
|
} 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