mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-04-20 11:06:46 +00:00
Added logging of vault clears for display in the leaderboard
This commit is contained in:
parent
0a75cb557d
commit
f8c5dac969
@ -4,6 +4,7 @@ import com.mongodb.DBObject;
|
|||||||
import net.simon987.npcplugin.event.CpuInitialisationListener;
|
import net.simon987.npcplugin.event.CpuInitialisationListener;
|
||||||
import net.simon987.npcplugin.event.VaultWorldUpdateListener;
|
import net.simon987.npcplugin.event.VaultWorldUpdateListener;
|
||||||
import net.simon987.npcplugin.event.WorldCreationListener;
|
import net.simon987.npcplugin.event.WorldCreationListener;
|
||||||
|
import net.simon987.npcplugin.io.StatsDatabaseManager;
|
||||||
import net.simon987.server.ServerConfiguration;
|
import net.simon987.server.ServerConfiguration;
|
||||||
import net.simon987.server.assembly.CpuHardware;
|
import net.simon987.server.assembly.CpuHardware;
|
||||||
import net.simon987.server.game.GameObject;
|
import net.simon987.server.game.GameObject;
|
||||||
@ -21,6 +22,8 @@ public class NpcPlugin extends ServerPlugin implements GameObjectDeserializer, C
|
|||||||
*/
|
*/
|
||||||
private static ArrayList<RadioTower> radioTowers;
|
private static ArrayList<RadioTower> radioTowers;
|
||||||
|
|
||||||
|
private static StatsDatabaseManager statsDbManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(ServerConfiguration configuration) {
|
public void init(ServerConfiguration configuration) {
|
||||||
|
|
||||||
@ -30,6 +33,8 @@ public class NpcPlugin extends ServerPlugin implements GameObjectDeserializer, C
|
|||||||
|
|
||||||
radioTowers = new ArrayList<>(32);
|
radioTowers = new ArrayList<>(32);
|
||||||
|
|
||||||
|
statsDbManager = new StatsDatabaseManager(configuration);
|
||||||
|
|
||||||
LogManager.LOGGER.info("Initialised NPC plugin");
|
LogManager.LOGGER.info("Initialised NPC plugin");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +57,8 @@ public class NpcPlugin extends ServerPlugin implements GameObjectDeserializer, C
|
|||||||
return ElectricBox.deserialize(obj);
|
return ElectricBox.deserialize(obj);
|
||||||
} else if (objType == Portal.ID) {
|
} else if (objType == Portal.ID) {
|
||||||
return Portal.deserialize(obj);
|
return Portal.deserialize(obj);
|
||||||
|
} else if (objType == VaultExitPortal.ID) {
|
||||||
|
return VaultExitPortal.deserialize(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -72,4 +79,8 @@ public class NpcPlugin extends ServerPlugin implements GameObjectDeserializer, C
|
|||||||
public static ArrayList<RadioTower> getRadioTowers() {
|
public static ArrayList<RadioTower> getRadioTowers() {
|
||||||
return radioTowers;
|
return radioTowers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static StatsDatabaseManager getStatsDbManager() {
|
||||||
|
return statsDbManager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ public class VaultDimension {
|
|||||||
|
|
||||||
if (exitPortalPt != null) {
|
if (exitPortalPt != null) {
|
||||||
|
|
||||||
Portal exitPortal = new Portal();
|
VaultExitPortal exitPortal = new VaultExitPortal();
|
||||||
exitPortal.setDst(exitLocation);
|
exitPortal.setDst(exitLocation);
|
||||||
exitPortal.setX(exitPortalPt.x);
|
exitPortal.setX(exitPortalPt.x);
|
||||||
exitPortal.setY(exitPortalPt.y);
|
exitPortal.setY(exitPortalPt.y);
|
||||||
|
@ -157,6 +157,7 @@ public class VaultDoor extends GameObject implements Programmable, Enterable, Up
|
|||||||
VaultDoor vaultDoor = new VaultDoor(0); //cypherId ?
|
VaultDoor vaultDoor = new VaultDoor(0); //cypherId ?
|
||||||
vaultDoor.setX((int) obj.get("x"));
|
vaultDoor.setX((int) obj.get("x"));
|
||||||
vaultDoor.setY((int) obj.get("y"));
|
vaultDoor.setY((int) obj.get("y"));
|
||||||
|
vaultDoor.setObjectId((long) obj.get("i"));
|
||||||
|
|
||||||
|
|
||||||
if (obj.containsField("homeX") && obj.containsField("homeY")) {
|
if (obj.containsField("homeX") && obj.containsField("homeY")) {
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
package net.simon987.npcplugin;
|
||||||
|
|
||||||
|
import com.mongodb.BasicDBObject;
|
||||||
|
import com.mongodb.DBObject;
|
||||||
|
import net.simon987.server.game.ControllableUnit;
|
||||||
|
import net.simon987.server.game.GameObject;
|
||||||
|
import net.simon987.server.game.Location;
|
||||||
|
import net.simon987.server.logging.LogManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Final exit portal located in the 'last' World of a Vault dimension
|
||||||
|
*/
|
||||||
|
public class VaultExitPortal extends Portal {
|
||||||
|
|
||||||
|
public static final int ID = 9;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BasicDBObject mongoSerialise() {
|
||||||
|
BasicDBObject dbObject = new BasicDBObject();
|
||||||
|
|
||||||
|
dbObject.put("i", getObjectId());
|
||||||
|
dbObject.put("x", getX());
|
||||||
|
dbObject.put("y", getY());
|
||||||
|
dbObject.put("t", ID);
|
||||||
|
dbObject.put("dstWorldX", getDst().worldX);
|
||||||
|
dbObject.put("dstWorldY", getDst().worldY);
|
||||||
|
dbObject.put("dstX", getDst().x);
|
||||||
|
dbObject.put("dstY", getDst().y);
|
||||||
|
dbObject.put("dstDimension", getDst().dimension);
|
||||||
|
|
||||||
|
return dbObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean enter(GameObject object) {
|
||||||
|
|
||||||
|
LogManager.LOGGER.info(((ControllableUnit) object).getParent().getUsername() + " Completed vault " +
|
||||||
|
object.getWorld().getDimension());
|
||||||
|
|
||||||
|
NpcPlugin.getStatsDbManager().saveVaultCompletion((ControllableUnit) object, object.getWorld().getDimension());
|
||||||
|
|
||||||
|
|
||||||
|
return super.enter(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Portal deserialize(DBObject obj) {
|
||||||
|
|
||||||
|
VaultExitPortal portal = new VaultExitPortal();
|
||||||
|
|
||||||
|
portal.setDst(new Location(
|
||||||
|
(int) obj.get("dstWorldX"),
|
||||||
|
(int) obj.get("dstWorldY"),
|
||||||
|
(String) obj.get("dstDimension"),
|
||||||
|
(int) obj.get("dstX"),
|
||||||
|
(int) obj.get("dstY")));
|
||||||
|
portal.setX((int) obj.get("x"));
|
||||||
|
portal.setY((int) obj.get("y"));
|
||||||
|
|
||||||
|
return portal;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package net.simon987.npcplugin.io;
|
||||||
|
|
||||||
|
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
|
||||||
|
import net.simon987.server.ServerConfiguration;
|
||||||
|
import net.simon987.server.game.ControllableUnit;
|
||||||
|
import net.simon987.server.io.DatabaseManager;
|
||||||
|
import net.simon987.server.logging.LogManager;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class StatsDatabaseManager extends DatabaseManager {
|
||||||
|
|
||||||
|
public StatsDatabaseManager(ServerConfiguration config) {
|
||||||
|
super(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveVaultCompletion(ControllableUnit unit, String dimension) {
|
||||||
|
|
||||||
|
Connection connection = getConnection();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
PreparedStatement p = connection.prepareStatement("INSERT INTO mar_vault_clear " +
|
||||||
|
"(username, clear_time, vault_id) VALUES (?,?,?)");
|
||||||
|
p.setString(1, unit.getParent().getUsername());
|
||||||
|
p.setInt(2, 0);
|
||||||
|
p.setString(3, dimension);
|
||||||
|
|
||||||
|
int result = p.executeUpdate();
|
||||||
|
|
||||||
|
LogManager.LOGGER.fine("Saved vault clear (" + result + " rows changed)");
|
||||||
|
|
||||||
|
} catch (MySQLIntegrityConstraintViolationException e) {
|
||||||
|
LogManager.LOGGER.fine("This vault was already cleared by " + unit.getParent().getUsername());
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LogManager.LOGGER.severe(e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
connection.close();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,8 @@ public interface ControllableUnit {
|
|||||||
|
|
||||||
void setParent(User user);
|
void setParent(User user);
|
||||||
|
|
||||||
|
User getParent();
|
||||||
|
|
||||||
ArrayList<Integer> getKeyboardBuffer();
|
ArrayList<Integer> getKeyboardBuffer();
|
||||||
|
|
||||||
Memory getFloppyData();
|
Memory getFloppyData();
|
||||||
|
@ -167,7 +167,11 @@ public class DebugHandler implements MessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return Arrays.toString(e.getStackTrace()).replaceAll(", ", "\n");
|
|
||||||
|
String message = e.getMessage();
|
||||||
|
message += "\n " + Arrays.toString(e.getStackTrace()).replaceAll(", ", "\n");
|
||||||
|
|
||||||
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,7 +217,10 @@ public class DebugHandler implements MessageHandler {
|
|||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
||||||
return Arrays.toString(e.getStackTrace()).replaceAll(", ", "\n");
|
String message = e.getMessage();
|
||||||
|
message += "\n " + Arrays.toString(e.getStackTrace()).replaceAll(", ", "\n");
|
||||||
|
|
||||||
|
return message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ public class SocketServer extends WebSocketServer {
|
|||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("t", "tick");
|
json.put("t", "tick");
|
||||||
|
|
||||||
LogManager.LOGGER.info("Notified " + userManager.getOnlineUsers().size() + " users");
|
// LogManager.LOGGER.info("Notified " + userManager.getOnlineUsers().size() + " users");
|
||||||
|
|
||||||
ArrayList<OnlineUser> onlineUsers = new ArrayList<>(userManager.getOnlineUsers()); //Avoid ConcurrentModificationException
|
ArrayList<OnlineUser> onlineUsers = new ArrayList<>(userManager.getOnlineUsers()); //Avoid ConcurrentModificationException
|
||||||
for (OnlineUser user : onlineUsers) {
|
for (OnlineUser user : onlineUsers) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user