From 56a3080c7bcf5a836de817807cda64216c184659 Mon Sep 17 00:00:00 2001 From: william341 Date: Fri, 28 Jul 2017 21:38:44 -0700 Subject: [PATCH] loot kinda works lol --- ShiftOS.Frontend/Hacking/HackableProvider.cs | 4 +- ShiftOS.Frontend/Hacking/HackingCommands.cs | 51 +++++++++++++++-- .../Properties/Resources.Designer.cs | 29 +++++++++- ShiftOS.Frontend/Properties/Resources.resx | 3 + ShiftOS.Frontend/Resources/Exploits.txt | 4 +- ShiftOS.Frontend/Resources/Hackables.txt | 2 +- ShiftOS.Frontend/Resources/Payloads.txt | 4 +- ShiftOS.Frontend/Resources/Shiftorium.txt | 4 +- ShiftOS.Objects/Hacking/Hackable.cs | 7 --- ShiftOS_TheReturn/Hacking.cs | 57 ++++++++++--------- 10 files changed, 115 insertions(+), 50 deletions(-) diff --git a/ShiftOS.Frontend/Hacking/HackableProvider.cs b/ShiftOS.Frontend/Hacking/HackableProvider.cs index 5419030..e578fb0 100644 --- a/ShiftOS.Frontend/Hacking/HackableProvider.cs +++ b/ShiftOS.Frontend/Hacking/HackableProvider.cs @@ -36,9 +36,9 @@ namespace ShiftOS.Frontend return new byte[] { 0xDE, 0xAD, 0xBE, 0xEF }; //nyi } - public LootInfo[] GetLootInfo() + public Loot[] GetLoot() { - return JsonConvert.DeserializeObject(Properties.Resources.LootInfo); + return JsonConvert.DeserializeObject(Properties.Resources.LootInfo); } } } diff --git a/ShiftOS.Frontend/Hacking/HackingCommands.cs b/ShiftOS.Frontend/Hacking/HackingCommands.cs index e34bbd5..d07b174 100644 --- a/ShiftOS.Frontend/Hacking/HackingCommands.cs +++ b/ShiftOS.Frontend/Hacking/HackingCommands.cs @@ -18,7 +18,7 @@ namespace ShiftOS.Frontend var hackable = Hacking.AvailableToHack.FirstOrDefault(x => x.ID == id); if (hackable == null) { - Console.WriteLine("[sploitset] device not found on network."); + Console.WriteLine("[connectlib] device not found on network."); return; } Hacking.InitHack(hackable); @@ -31,7 +31,7 @@ namespace ShiftOS.Frontend { if (Hacking.CurrentHackable == null) { - Console.WriteLine("[sploitset] not connected"); + Console.WriteLine("[connectlib] not connected"); } string Port = args["port"].ToString(); string ExploitName = args["id"].ToString(); @@ -63,7 +63,7 @@ namespace ShiftOS.Frontend { if (Hacking.CurrentHackable == null) { - Console.WriteLine("[sploitset] not connected"); + Console.WriteLine("[connectlib] not connected"); } string PayloadName = args["id"].ToString(); var PayloadID = Hacking.AvailablePayloads.FirstOrDefault(x => x.ID == PayloadName); @@ -87,7 +87,7 @@ namespace ShiftOS.Frontend { if (Hacking.CurrentHackable == null) { - Console.WriteLine("[sploitset] not connected"); + Console.WriteLine("[connectlib] not connected"); } foreach (var port in Hacking.CurrentHackable.PortsToUnlock) { @@ -130,7 +130,7 @@ namespace ShiftOS.Frontend { if (Hacking.CurrentHackable == null) { - Console.WriteLine("[sploitset] not connected"); + Console.WriteLine("[connectlib] not connected"); } if (Hacking.CurrentHackable.PayloadExecuted.Count == 0) { @@ -139,5 +139,46 @@ namespace ShiftOS.Frontend } Hacking.FinishHack(); } + + [Command("ftp-list")] + public static void ListAllFTP(Dictionary args) + { + if (Hacking.CurrentHackable == null) + { + Console.WriteLine("[connectlib] not connected"); + } + foreach (var loot in Hacking.CurrentHackable.ServerFTPLoot) + { + Console.WriteLine(loot.LootName + ": (assumed: " + loot.FriendlyName + ")" ); + } + } + + [Command("ftp-download")] + [RequiresArgument("file")] + public static void DownloadFTP(Dictionary args) + { + if (Hacking.CurrentHackable == null) + { + Console.WriteLine("[connectlib] not connected"); + } + string FindName = args["file"].ToString(); + var LootID = Hacking.AvailableLoot.FirstOrDefault(x => x.LootName == FindName); + if (LootID == null) + { + Console.WriteLine("[SimplFTP] file not found on server."); + return; + } + if (!Hacking.CurrentHackable.ServerFTPLoot.Contains(LootID)) + { + Console.WriteLine("[SimplFTP] file not found on server."); + return; + } + if (!Shiftorium.Buy(FindName, 0)) + { + Console.WriteLine("[SimplFTP] Could not download file. Either the upgrade does not exist or the user doesn't have 0 codepoints (wat)"); + return; + } + Console.WriteLine("[SimplFTP] downloaded file"); + } } } diff --git a/ShiftOS.Frontend/Properties/Resources.Designer.cs b/ShiftOS.Frontend/Properties/Resources.Designer.cs index 1e6a8f2..05b50c6 100644 --- a/ShiftOS.Frontend/Properties/Resources.Designer.cs +++ b/ShiftOS.Frontend/Properties/Resources.Designer.cs @@ -70,6 +70,33 @@ namespace ShiftOS.Frontend.Properties { } } + /// + /// Looks up a localized string similar to /* ShiftOS Exploits data file + /// * + /// * This file contains information about all exploits in the game's campaign. + /// * + /// */ + /// + ///[ + /// { + /// FriendlyName: "FTP Exploit", + /// ExploitName: "ftpwn", + /// EffectiveAgainstPort: "FileServer" + /// }, + /// { + /// FriendlyName: "SSH Exploit", + /// ExploitName: "sshardline", + /// EffectiveAgainstPort: "SSHServer", + /// Dependencies: "sploitset_sshardline" + /// } + ///]. + /// + public static string Exploits { + get { + return ResourceManager.GetString("Exploits", resourceCulture); + } + } + /// /// Looks up a localized string similar to /* ShiftOS hackables data file /// * @@ -86,7 +113,7 @@ namespace ShiftOS.Frontend.Properties { /// WelcomeMessage: "Don't make fun of SpamSyndicate web design.", /// FirewallStrength: 0, /// LootRarity: 1, - /// LootAmount: 4, + /// LootAmount: 2, /// ConnectionTimeoutLevel: 4, /// SystemType: "FileServer, SSHServer", /// diff --git a/ShiftOS.Frontend/Properties/Resources.resx b/ShiftOS.Frontend/Properties/Resources.resx index c4acd46..0676c58 100644 --- a/ShiftOS.Frontend/Properties/Resources.resx +++ b/ShiftOS.Frontend/Properties/Resources.resx @@ -148,4 +148,7 @@ ..\Resources\Ports.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + ..\resources\exploits.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + \ No newline at end of file diff --git a/ShiftOS.Frontend/Resources/Exploits.txt b/ShiftOS.Frontend/Resources/Exploits.txt index a3fa2fc..463ce67 100644 --- a/ShiftOS.Frontend/Resources/Exploits.txt +++ b/ShiftOS.Frontend/Resources/Exploits.txt @@ -8,12 +8,12 @@ { FriendlyName: "FTP Exploit", ExploitName: "ftpwn", - EffectiveAgainstPort: "FileServer" + EffectiveAgainstPort: "FileServer", }, { FriendlyName: "SSH Exploit", ExploitName: "sshardline", EffectiveAgainstPort: "SSHServer", - Dependencies: "sploitset_sshardline" + Dependencies: "sploitset_sshardline", } ] \ No newline at end of file diff --git a/ShiftOS.Frontend/Resources/Hackables.txt b/ShiftOS.Frontend/Resources/Hackables.txt index ca09057..b2fadcc 100644 --- a/ShiftOS.Frontend/Resources/Hackables.txt +++ b/ShiftOS.Frontend/Resources/Hackables.txt @@ -13,7 +13,7 @@ WelcomeMessage: "Don't make fun of SpamSyndicate web design.", FirewallStrength: 0, LootRarity: 1, - LootAmount: 4, + LootAmount: 2, ConnectionTimeoutLevel: 4, SystemType: "FileServer, SSHServer", diff --git a/ShiftOS.Frontend/Resources/Payloads.txt b/ShiftOS.Frontend/Resources/Payloads.txt index d203158..7e74ba8 100644 --- a/ShiftOS.Frontend/Resources/Payloads.txt +++ b/ShiftOS.Frontend/Resources/Payloads.txt @@ -9,7 +9,7 @@ FriendlyName: "FTP Payload", PayloadName: "ftpull", EffectiveAgainstFirewall: 1, - EffectiveAgainst: "FileServer" + EffectiveAgainst: "FileServer", }, { FriendlyName: "Force Heartbeat", @@ -17,6 +17,6 @@ EffectiveAgainstFirewall: 1, EffectiveAgainst: "SSHServer", Function: 1, - Dependencies: "sploitset_keepalive" + Dependencies: "sploitset_keepalive", } ] \ No newline at end of file diff --git a/ShiftOS.Frontend/Resources/Shiftorium.txt b/ShiftOS.Frontend/Resources/Shiftorium.txt index 55368b3..1d31dcf 100644 --- a/ShiftOS.Frontend/Resources/Shiftorium.txt +++ b/ShiftOS.Frontend/Resources/Shiftorium.txt @@ -1,11 +1,11 @@ [ - } + { Name: "sploitset_keepalive", Cost: 1000000000, Description: "lolyouarentsupposedtobeabletobuythis", Dependencies: "thisupgradeshouldneverexistever;sploitset_sshardline", }, - } + { Name: "sploitset_sshardline", Cost: 1000000000, Description: "lolyouarentsupposedtobeabletobuythis", diff --git a/ShiftOS.Objects/Hacking/Hackable.cs b/ShiftOS.Objects/Hacking/Hackable.cs index d95cf5a..6ad8d13 100644 --- a/ShiftOS.Objects/Hacking/Hackable.cs +++ b/ShiftOS.Objects/Hacking/Hackable.cs @@ -61,11 +61,4 @@ namespace ShiftOS.Objects public string Contents { get; set; } } - public class LootInfo - { - public string Filename { get; set; } - public string ResourceId { get; set; } - public int Rarity { get; set; } - } - } diff --git a/ShiftOS_TheReturn/Hacking.cs b/ShiftOS_TheReturn/Hacking.cs index 337ac04..1eb1892 100644 --- a/ShiftOS_TheReturn/Hacking.cs +++ b/ShiftOS_TheReturn/Hacking.cs @@ -13,7 +13,7 @@ namespace ShiftOS.Engine private static List Exploits = new List(); private static List Payloads = new List(); private static List Ports = new List(); - private static List Loot = new List(); + private static List LootFiles = new List(); public static HackableSystem CurrentHackable { get; private set; } @@ -49,6 +49,14 @@ namespace ShiftOS.Engine } } + public static Objects.Loot[] AvailableLoot + { + get + { + return LootFiles.ToArray(); + } + } + public static HackableSystem[] ActiveConnections { get @@ -78,12 +86,6 @@ namespace ShiftOS.Engine var hsys = new HackableSystem(); hsys.Data = data; hsys.IsPwn3d = false; - var fs = new Objects.ShiftFS.Directory(); - fs.Name = data.FriendlyName; - Objects.ShiftFS.Utils.Mounts.Add(fs); - var mountid = Objects.ShiftFS.Utils.Mounts.IndexOf(fs); - Objects.ShiftFS.Utils.Mounts.Remove(fs); - hsys.Filesystem = fs; hsys.FirewallCracked = (data.FirewallStrength == 0); hsys.DoConnectionTimeout = (data.ConnectionTimeoutLevel > 0); if (hsys.DoConnectionTimeout) @@ -97,11 +99,22 @@ namespace ShiftOS.Engine hsys.PortsToUnlock = new List(); hsys.VectorsUnlocked = new List(); hsys.PayloadExecuted = new List(); + hsys.ServerFTPLoot = new List(); foreach(Objects.Port porttocheck in Ports) { if (data.SystemType.HasFlag(porttocheck.AttachTo)) hsys.PortsToUnlock.Add(porttocheck); } + var rnd = new Random(); + List loot = new List(); + loot.AddRange(LootFiles.Where(x => x.Rarity <= hsys.Data.LootRarity)); + var amount = data.LootAmount; + for (int i = 0; i < amount && i < loot.Count - 1; i++) + { + var randomLoot = loot[rnd.Next(0, loot.Count - 1)]; + hsys.ServerFTPLoot.Add(randomLoot); + loot.Remove(randomLoot); + } CurrentHackable = hsys; } @@ -114,8 +127,6 @@ namespace ShiftOS.Engine Console.WriteLine("[sploitset] [FAIL] disconnected - connection terminated by remote machine "); if (!string.IsNullOrWhiteSpace(CurrentHackable.Data.OnHackFailedStoryEvent)) Story.Start(CurrentHackable.Data.OnHackFailedStoryEvent); - if (Objects.ShiftFS.Utils.Mounts.Contains(CurrentHackable.Filesystem)) - Objects.ShiftFS.Utils.Mounts.Remove(CurrentHackable.Filesystem); CurrentHackable = null; } @@ -123,8 +134,6 @@ namespace ShiftOS.Engine { if (CurrentHackable == null) throw new NaughtyDeveloperException("Someone tried to end a non-existent hack."); - if (Objects.ShiftFS.Utils.Mounts.Contains(CurrentHackable.Filesystem)) - Objects.ShiftFS.Utils.Mounts.Remove(CurrentHackable.Filesystem); Console.WriteLine("[sploitset] [FAIL] disconnected for unknown reason"); CurrentHackable = null; } @@ -135,8 +144,6 @@ namespace ShiftOS.Engine throw new NaughtyDeveloperException("Someone tried to finish a non-existent hack."); if (!string.IsNullOrWhiteSpace(CurrentHackable.Data.OnHackCompleteStoryEvent)) Story.Start(CurrentHackable.Data.OnHackCompleteStoryEvent); - if (Objects.ShiftFS.Utils.Mounts.Contains(CurrentHackable.Filesystem)) - Objects.ShiftFS.Utils.Mounts.Remove(CurrentHackable.Filesystem); Console.WriteLine("[sploitset] disconnected with payload applied"); CurrentHackable = null; } @@ -150,29 +157,24 @@ namespace ShiftOS.Engine Ports.AddRange(@interface.GetPorts()); Payloads.AddRange(@interface.GetPayloads()); Exploits.AddRange(@interface.GetExploits()); - var lootinfo = @interface.GetLootInfo(); - foreach(var loot in lootinfo) - { - var existing = Loot.FirstOrDefault(x => x.Info.Filename == loot.Filename); - if (existing != null) - throw new DataConflictException("Data conflict encountered while reading loot data. Two or more loot resources with the filename \"" + loot.Filename + "\" were found. This can cause major bugs and confusion in the game."); - var @new = new Objects.Loot(loot, @interface.GetLootFromResource(loot.ResourceId)); - Loot.Add(@new); - } + LootFiles.AddRange(@interface.GetLoot()); } var hackable = Hackables.FirstOrDefault(x => Hackables.Where(y => x.SystemName == y.SystemName).Count() > 1); if(hackable != null) throw new DataConflictException("Data conflict encountered while initiating the hacking engine. Two or more hackables were found with the same hostname \"" + hackable.SystemName + "\". This is a direct violation of the ShiftOS save system and Shiftorium backend."); var ports = Ports.FirstOrDefault(x => Ports.Where(y => x.Name == y.Name).Count() > 1); - if (hackable != null) + if (ports != null) throw new DataConflictException("Data conflict encountered while initiating the hacking engine. Two or more ports were found with the same name \"" + ports.Name + "\". This is a direct violation of the ShiftOS save system and Shiftorium backend."); var payloads = Payloads.FirstOrDefault(x => Payloads.Where(y => x.PayloadName == y.PayloadName).Count() > 1); - if (hackable != null) + if (payloads != null) throw new DataConflictException("Data conflict encountered while initiating the hacking engine. Two or more payloads were found with the same name \"" + payloads.PayloadName + "\". This is a direct violation of the ShiftOS save system and Shiftorium backend."); var exploits = Exploits.FirstOrDefault(x => Exploits.Where(y => x.ExploitName == y.ExploitName).Count() > 1); - if (hackable != null) + if (exploits != null) throw new DataConflictException("Data conflict encountered while initiating the hacking engine. Two or more exploits were found with the same name \"" + exploits.ExploitName + "\". This is a direct violation of the ShiftOS save system and Shiftorium backend."); + var loot = LootFiles.FirstOrDefault(x => LootFiles.Where(y => x.LootName == y.LootName).Count() > 1); + if (loot != null) + throw new DataConflictException("Data conflict encountered while initiating the hacking engine. Two or more loot files were found with the same name \"" + loot.LootName + "\". This is a direct violation of the ShiftOS save system and Shiftorium backend."); } } @@ -205,8 +207,7 @@ namespace ShiftOS.Engine Objects.Exploit[] GetExploits(); Objects.Payload[] GetPayloads(); Objects.Port[] GetPorts(); - Objects.LootInfo[] GetLootInfo(); - byte[] GetLootFromResource(string resId); + Objects.Loot[] GetLoot(); } public class HackableSystem @@ -216,7 +217,7 @@ namespace ShiftOS.Engine public List VectorsUnlocked { get; set; } public List PayloadExecuted { get; set; } public bool FirewallCracked { get; set; } - public Objects.ShiftFS.Directory Filesystem { get; set; } + public List ServerFTPLoot { get; set; } public double MillisecondsCountdown { get; set; } public bool DoConnectionTimeout { get; set; } public bool IsPwn3d { get; set; }