From 997fede7f309e0cfa53c55c5a4ef5db27cc5b18f Mon Sep 17 00:00:00 2001 From: Checkium Date: Mon, 30 Apr 2018 17:45:53 +0100 Subject: [PATCH] Servers & daily missions - Improved server automation - Added daily mission automation --- build.gradle | 2 +- .../bot/core/misc/MiscConfigValues.java | 6 ++ .../vhackos/bot/core/misc/MiscService.java | 60 +++++++++++++--- .../bot/core/server/ServerService.java | 69 +++++++------------ .../vhackos/bot/core/vHackOSBot.java | 13 ++-- 5 files changed, 89 insertions(+), 61 deletions(-) diff --git a/build.gradle b/build.gradle index c76ee9b..d674394 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ dependencies { compile 'com.google.code.gson:gson:2.8.2' compile 'ch.qos.logback:logback-classic:1.2.3' compile 'com.google.guava:guava:24.0-jre' - compile 'net.olympiccode:vHackOSAPI-Java:1e05dd5a3c' + compile 'net.olympiccode:vHackOSAPI-Java:4b9e0383ee' compile 'io.sentry:sentry:1.7.1' } mainClassName = "net.olympiccode.vhackos.bot.core.vHackOSBot" diff --git a/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscConfigValues.java b/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscConfigValues.java index 680d880..3f7c153 100644 --- a/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscConfigValues.java +++ b/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscConfigValues.java @@ -10,5 +10,11 @@ public class MiscConfigValues { @ConfigOption(path = "misc.enableMiner", defaultValue = "true", options={"true", "false"}) public static boolean enableMiner; + @ConfigOption(path = "misc.enableMissions", defaultValue = "true", options={"true", "false"}) + public static boolean enableMissions; + + @ConfigOption(path = "misc.doMissionActions", defaultValue = "true", options={"true", "false"}) + public static boolean doMissionActions; + } diff --git a/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscService.java b/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscService.java index ffa8e83..c43d91d 100644 --- a/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscService.java +++ b/src/main/java/net/olympiccode/vhackos/bot/core/misc/MiscService.java @@ -2,6 +2,7 @@ import io.sentry.Sentry; import net.olympiccode.vhackos.api.entities.AppType; +import net.olympiccode.vhackos.api.entities.impl.MissionManagerImpl; import net.olympiccode.vhackos.bot.core.BotService; import net.olympiccode.vhackos.bot.core.vHackOSBot; import org.slf4j.Logger; @@ -39,17 +40,7 @@ public void setup() { public static int[] history = {0, 0, 0, 0, 0, 0}; public void runLongService() { try { - if (MiscConfigValues.enableMiner) { - if (vHackOSBot.api.getAppManager().getApp(AppType.NCMiner).isInstalled()) { - if (vHackOSBot.api.getMiner().start()) { - LOG.info("Collected and restarted miner"); - } else { - LOG.info("Failed to collect and restart miner"); - } - } else { - LOG.warn("MiscService ran but miner was not installed."); - } - } + } catch (Exception e) { Sentry.capture(e); e.printStackTrace(); @@ -58,6 +49,11 @@ public void runLongService() { } } + boolean exploitFinished = false; + boolean bruteforceFinished = false; + boolean logFinished = false; + boolean emptyFinished = false; + public void runService() { try { history[5] = history[4]; @@ -66,6 +62,48 @@ public void runService() { history[2] = history[1]; history[1] = history[0]; history[0] = vHackOSBot.api.getLeaderboards().getTournamentRank(); + + if (MiscConfigValues.enableMiner) { + if (vHackOSBot.api.getAppManager().getApp(AppType.NCMiner).isInstalled()) { + if (!vHackOSBot.api.getMiner().isRunning()) { + if (vHackOSBot.api.getMiner().start()) { + LOG.info("Collected and restarted miner"); + } else { + LOG.info("Failed to collect and restart miner"); + } + } + } else { + LOG.warn("MiscService ran but miner was not installed."); + } + } + + if (MiscConfigValues.enableMissions) { + if (vHackOSBot.api.getAppManager().getApp(AppType.Missions).isInstalled()) { + vHackOSBot.api.getMissionManager().getDailyMissions().forEach(dailyMission -> { + switch (((MissionManagerImpl.DailyMissionImpl) dailyMission).getId()) { + case 0: + exploitFinished = dailyMission.isFinished() || dailyMission.isClaimed(); + break; + case 1: + bruteforceFinished = dailyMission.isFinished() || dailyMission.isClaimed(); + break; + case 2: + logFinished = dailyMission.isFinished() || dailyMission.isClaimed(); + break; + case 3: + emptyFinished = dailyMission.isFinished() || dailyMission.isClaimed(); + break; + default: + throw new RuntimeException("Invalid id: " + ((MissionManagerImpl.DailyMissionImpl) dailyMission).getId()); + + } + if (dailyMission.isFinished() && !dailyMission.isClaimed()) { + LOG.info("Calimed mission for " + dailyMission.getRewardAmount() + " " + dailyMission.getType() + " and " + dailyMission.getExpReward() + "XP"); + dailyMission.claim(); + } + }); + } + } } catch (Exception e) { Sentry.capture(e); e.printStackTrace(); diff --git a/src/main/java/net/olympiccode/vhackos/bot/core/server/ServerService.java b/src/main/java/net/olympiccode/vhackos/bot/core/server/ServerService.java index 2ae72b8..f969308 100644 --- a/src/main/java/net/olympiccode/vhackos/bot/core/server/ServerService.java +++ b/src/main/java/net/olympiccode/vhackos/bot/core/server/ServerService.java @@ -2,6 +2,7 @@ import io.sentry.Sentry; import net.olympiccode.vhackos.api.entities.AppType; +import net.olympiccode.vhackos.api.entities.impl.ServerImpl; import net.olympiccode.vhackos.api.server.Server; import net.olympiccode.vhackos.bot.core.BotService; import net.olympiccode.vhackos.bot.core.vHackOSBot; @@ -45,54 +46,21 @@ public void setup() { public void runService() { try { Server server = vHackOSBot.api.getServer(); - server.update(); + if (server.getPackages() > 0) { Server.OpenResult result = server.openAllPacks(); LOG.info("Opened " + server.getPackages() + " server packages, got " + result.getServer() + " server, " + result.getAv() + " av, " + result.getFw() + " fw and " + result.getBoost() + " boosters."); } - server.update(); if (ServerConfigValues.upgradeNodes) { - if (server.getServerPieces() > 9) { - int times = 0; - int cur = server.getServerStrength(); - LOG.info("Upgrading server's server..."); - while (server.getServerPieces() > 9 && (server.getServerStrength() < server.getServerStrengthMax())) { - if (server.upgrade(Server.NODE_TYPE.SERVER, 1)) times++; - } - server.update(); - LOG.info("Upgraded server's server " + times + " times. (" + cur + "->" + server.getServerStrength() + ")"); - } - - server.update(); - int fwNodes = (int) Arrays.stream(server.getFirewallStrength()).filter(value -> value != 0).count(); - for (int i = 0; i < fwNodes; i++) { - if (server.getFirewallPieces() > 9) { - LOG.info("Upgrading server's firewall node " + (i + 1) + "..."); - int times = 0; - int cur = server.getFirewallStrength()[i]; - while (server.getFirewallPieces() > 9 && (server.getFirewallStrength()[i] < server.getFirewallStrengthMax()[i])) { - if (server.upgrade(Server.NODE_TYPE.FW, i + 1)) times++; - } - server.update(); - LOG.info("Upgraded server's firewall node " + (i + 1) + " " + times + " times. (" + cur + "->" + server.getFirewallStrength()[i] + ")"); - } - } - - - server.update(); - int avNodes = (int) Arrays.stream(server.getAntivirusStrength()).filter(value -> value != 0).count(); - for (int i = 0; i < avNodes; i++) { - if (server.getAntivirusPieces() > 9) { - LOG.info("Upgrading server's antivirus node " + (i + 1) + "..."); - int times = 0; - int cur = server.getAntivirusStrength()[0]; - while (server.getAntivirusPieces() > 9 && (server.getAntivirusStrength()[i] < server.getAntivirusStrengthMax()[i])) { - if (server.upgrade(Server.NODE_TYPE.AV, i + 1)) times++; - } - server.update(); - LOG.info("Upgraded server's antivirus node " + (i + 1) + " " + times + " times. (" + cur + "->" + server.getAntivirusStrength()[i] + ")"); - } - } + server.getNodes().forEach(serverNode -> { + while (serverNode.getMaxStrength() > serverNode.getStrength() && has(serverNode, server) != 0) { + int s = serverNode.getStrength(); + boolean b = false; + if (has(serverNode, server) == 1) b = serverNode.upgrade(); else if (has(serverNode, server) == 2) b = serverNode.upgradeFive(); + ((ServerImpl) server).update(); + if (b) LOG.info("Upgraded " + serverNode.getType() + " node (" + s + "->" + serverNode.getStrength() + ")"); else LOG.info("Failed to upgrade " + serverNode.getType() + " node."); + } + }); } } catch (Exception e) { @@ -103,6 +71,21 @@ public void runService() { } } + int has(Server.ServerNode serverNode, Server server) { + switch (serverNode.getType()) { + case AV: + if (server.getAntivirusPieces() > 0) return (server.getAntivirusPieces() > 4) ? 2 : 1; + break; + case FW: + if (server.getFirewallPieces() > 0) return (server.getFirewallPieces() > 4) ? 2 : 1; + break; + case SERVER: + if (server.getServerPieces() > 0) return (server.getServerPieces() > 4) ? 2 : 1; + break; + } + return 0; + } + public class ServerServiceFactory implements ThreadFactory { public Thread newThread(Runnable r) { return new Thread(r, "vHackOSBot-ServerService"); diff --git a/src/main/java/net/olympiccode/vhackos/bot/core/vHackOSBot.java b/src/main/java/net/olympiccode/vhackos/bot/core/vHackOSBot.java index 5e7e7d3..3c630ea 100644 --- a/src/main/java/net/olympiccode/vhackos/bot/core/vHackOSBot.java +++ b/src/main/java/net/olympiccode/vhackos/bot/core/vHackOSBot.java @@ -4,6 +4,7 @@ import io.sentry.event.BreadcrumbBuilder; import io.sentry.event.UserBuilder; import net.olympiccode.vhackos.api.entities.impl.vHackOSAPIImpl; +import net.olympiccode.vhackos.api.server.Server; import net.olympiccode.vhackos.api.vHackOSAPI; import net.olympiccode.vhackos.api.vHackOSAPIBuilder; import net.olympiccode.vhackos.api.vHackOSInfo; @@ -43,7 +44,7 @@ public class vHackOSBot { static Logger LOG = LoggerFactory.getLogger("vHackOSBot"); ConfigFile config = new ConfigFile(); AdvancedConfigFile advConfig = new AdvancedConfigFile(); - double curVersion = 1.14; + double curVersion = 1.15; private long startTime = 0; public static void main(String[] args) { @@ -140,7 +141,7 @@ public void run() throws LoginException, InterruptedException { String[] args = line.split(" "); switch (args[0]) { case "help": - System.out.println("stats - List all basic stats\n" + "tasks - Lists all active tasks\n" + "brutes - Lists all active bruteforces" + "\nservices - Check the services status\napps - Check app stats\nquit - Exit the bot\nleaders - Check leaderboards"); + System.out.println("stats - List all basic stats\n" + "tasks - Lists all active tasks\n" + "brutes - Lists all active bruteforces" + "\nservices - Check the services status\napps - Check app stats\nquit - Exit the bot\nleaders - Check leaderboards\nserver - Check server stats"); break; case "stats": System.out.println("Username: " + api.getStats().getUsername() + SEPARATOR + "Money: " + api.getStats().getMoney() + SEPARATOR + "Netcoins: " + api.getStats().getNetcoins() + @@ -173,10 +174,10 @@ public void run() throws LoginException, InterruptedException { System.exit(0); break; case "server": - api.getServer().update(); - System.out.print("Server: " + api.getServer().getServerStrength() + "/" + api.getServer().getServerStrengthMax() + "\n" + - "Firewall: " + api.getServer().getFirewallStrength()[0] + "/" + api.getServer().getFirewallStrengthMax()[0] + " | " + api.getServer().getFirewallStrength()[1] + "/" + api.getServer().getFirewallStrengthMax()[1] + " | " + api.getServer().getFirewallStrength()[2] + "/" + api.getServer().getFirewallStrengthMax()[2] + "\n" + - "Antivirus: " + api.getServer().getAntivirusStrength()[0] + "/" + api.getServer().getAntivirusStrengthMax()[0] + " | " + api.getServer().getAntivirusStrength()[1] + "/" + api.getServer().getAntivirusStrengthMax()[1] + " | " + api.getServer().getAntivirusStrength()[2] + "/" + api.getServer().getAntivirusStrengthMax()[2] + "\nPackages: " + api.getServer().getPackages()); + System.out.print("Server: " + api.getServer().getNode(Server.NodeType.SERVER,0).getStrength() + "/" + api.getServer().getNode(Server.NodeType.SERVER,0).getMaxStrength() + "\n" + + "Firewall: " + api.getServer().getNode(Server.NodeType.FW, 0).getStrength() + "/" + api.getServer().getNode(Server.NodeType.FW, 0).getMaxStrength() + " | " + api.getServer().getNode(Server.NodeType.FW, 1).getStrength() + "/" + api.getServer().getNode(Server.NodeType.FW, 1).getMaxStrength() + " | " + api.getServer().getNode(Server.NodeType.FW, 2).getStrength() + "/" + api.getServer().getNode(Server.NodeType.FW, 2).getMaxStrength() + "\n" + + "Antivirus: " + api.getServer().getNode(Server.NodeType.AV, 0).getStrength() + "/" + api.getServer().getNode(Server.NodeType.AV, 0).getMaxStrength() + " | " + api.getServer().getNode(Server.NodeType.AV, 1).getStrength() + "/" + api.getServer().getNode(Server.NodeType.AV, 1).getMaxStrength() + " | " + api.getServer().getNode(Server.NodeType.AV, 2).getStrength() + "/" + api.getServer().getNode(Server.NodeType.AV, 2).getMaxStrength() + + "\nPackages: " + api.getServer().getPackages() + " | Server Pieces: " + api.getServer().getServerPieces() + " | Antivirus Pieces: " + api.getServer().getAntivirusPieces() + " | Firewall Pieces: " + api.getServer().getFirewallPieces()); break; default: System.out.println("Unknown command, use \"help\" to list all commands.");