aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-01-18 10:01:37 -0500
committerMichael <[email protected]>2017-01-18 10:01:37 -0500
commit33edc6a21175f16aae06fc4d3d327266a456eeee (patch)
tree2fdd8ef3edc135a38088a2409032982538f22664 /ShiftOS_TheReturn
parent18f93056b7d882b4dcce4d3afacd1ba6d37d94ac (diff)
downloadshiftos_thereturn-33edc6a21175f16aae06fc4d3d327266a456eeee.tar.gz
shiftos_thereturn-33edc6a21175f16aae06fc4d3d327266a456eeee.tar.bz2
shiftos_thereturn-33edc6a21175f16aae06fc4d3d327266a456eeee.zip
Improved tutorial, win.open edit
Tutorial now goes over how to do basic things like check codepoints, buy upgrades, open windows etc. win.open now shows a list of available windows when ran with no arguments.
Diffstat (limited to 'ShiftOS_TheReturn')
-rw-r--r--ShiftOS_TheReturn/Commands.cs299
-rw-r--r--ShiftOS_TheReturn/SaveSystem.cs21
-rw-r--r--ShiftOS_TheReturn/TerminalBackend.cs3
-rw-r--r--ShiftOS_TheReturn/TutorialManager.cs32
4 files changed, 241 insertions, 114 deletions
diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs
index 9822c1c..70486bb 100644
--- a/ShiftOS_TheReturn/Commands.cs
+++ b/ShiftOS_TheReturn/Commands.cs
@@ -42,11 +42,14 @@ using Discoursistency.Base.Models.Authentication;
using ShiftOS.Engine.Scripting;
using ShiftOS.Objects.ShiftFS;
-namespace ShiftOS.Engine {
+namespace ShiftOS.Engine
+{
[Namespace("virus")]
- public class VirusTestCommands {
+ public class VirusTestCommands
+ {
[Command("infect")]
- public static void InfectFileWithMUDVirus(Dictionary<string, object> args) {
+ public static void InfectFileWithMUDVirus(Dictionary<string, object> args)
+ {
string signature = "";
if (args.ContainsKey("signature"))
@@ -56,15 +59,18 @@ namespace ShiftOS.Engine {
string script = "";
- Action<string> scriptFound = new Action<string>((s) => {
+ Action<string> scriptFound = new Action<string>((s) =>
+ {
script = s;
Virus v = new LuaVirus(s, 1);
VirusEngine.Add(v);
VirusEngine.Infect($"lua.{v.Signature}.1");
});
- ServerManager.MessageReceived += (srv) => {
- if (srv.Name == "mud_virus") {
+ ServerManager.MessageReceived += (srv) =>
+ {
+ if (srv.Name == "mud_virus")
+ {
scriptFound?.Invoke(srv.Contents);
scriptFound = null;
}
@@ -77,9 +83,11 @@ namespace ShiftOS.Engine {
[RequiresUpgrade("mud_fundamentals")]
[Namespace("mud")]
- public static class MUDCommands {
+ public static class MUDCommands
+ {
[Command("addvirus")]
- public static void Virus_AddToDatabase(Dictionary<string, object> args) {
+ public static void Virus_AddToDatabase(Dictionary<string, object> args)
+ {
string file = "";
int threatLevel = 0;
@@ -100,23 +108,31 @@ namespace ShiftOS.Engine {
[Command("status")]
- public static bool Status() {
+ public static bool Status()
+ {
ServerManager.PrintDiagnostics();
return true;
}
[Command("connect")]
- public static bool Connect(Dictionary<string, object> args) {
- try {
+ public static bool Connect(Dictionary<string, object> args)
+ {
+ try
+ {
string ip = (args.ContainsKey("addr") == true) ? args["addr"] as string : "michaeltheshifter.me";
int port = (args.ContainsKey("port") == true) ? Convert.ToInt32(args["port"] as string) : 13370;
- try {
+ try
+ {
ServerManager.Initiate(ip, port);
- } catch (Exception ex) {
+ }
+ catch (Exception ex)
+ {
Console.WriteLine("{ERROR}: " + ex.Message);
}
return true;
- } catch (Exception ex) {
+ }
+ catch (Exception ex)
+ {
Console.WriteLine("Error running script:" + ex);
return false;
}
@@ -127,34 +143,39 @@ namespace ShiftOS.Engine {
[RequiresUpgrade("mud_fundamentals")]
[Namespace("chat")]
- public static class ChatCommands {
+ public static class ChatCommands
+ {
[RequiresArgument("id")]
[RequiresArgument("name")]
[RequiresArgument("topic")]
[Command("create")]
- public static bool CreateChat(Dictionary<string, object> args) {
+ public static bool CreateChat(Dictionary<string, object> args)
+ {
string id = "";
string topic = "";
string name = "";
int max_users = 0;
- id = args["id"] as string;
- name = args["topic"] as string;
- topic = args["name"] as string;
+ id = args["id"] as string;
+ name = args["topic"] as string;
+ topic = args["name"] as string;
bool valid = true;
if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(topic))
valid = false;
- if (valid) {
+ if (valid)
+ {
ServerManager.SendMessage("chat_create", $@"{{
id: ""{id}"",
name: ""{name}"",
topic: ""{topic}"",
max_users: {max_users}
}}");
- } else {
+ }
+ else
+ {
Console.WriteLine("{CHAT_PLEASE_PROVIDE_VALID_CHANNEL_DATA}");
}
return true;
@@ -162,17 +183,21 @@ namespace ShiftOS.Engine {
}
+ [TutorialLock]
[Namespace("trm")]
- public static class TerminalCommands {
+ public static class TerminalCommands
+ {
[Command("clear")]
- public static bool Clear() {
+ public static bool Clear()
+ {
AppearanceManager.ConsoleOut.Clear();
return true;
}
-
+
[Command("echo")]
[RequiresArgument("text")]
- public static bool Echo(Dictionary<string, object> args) {
+ public static bool Echo(Dictionary<string, object> args)
+ {
Console.WriteLine(args["text"]);
return true;
}
@@ -180,33 +205,41 @@ namespace ShiftOS.Engine {
#if DEVEL
[Namespace("cheats", true)]
- public static class CheatCommands {
+ public static class CheatCommands
+ {
[Command("freecp", true)]
[CommandObsolete("{OBSOLETE_CHEATS_FREECP}", "dev.freecp", true)]
- public static bool FreeCodepoints(Dictionary<string, object> args) {
+ public static bool FreeCodepoints(Dictionary<string, object> args)
+ {
// never called
return true;
}
}
[Namespace("dev")]
- public static class ShiftOSDevCommands {
+ public static class ShiftOSDevCommands
+ {
[Command("multarg")]
[RequiresArgument("id")]
[RequiresArgument("name")]
[RequiresArgument("type")]
- public static bool MultArg(Dictionary<string, object> args) {
+ public static bool MultArg(Dictionary<string, object> args)
+ {
return true;
}
[Command("freecp")]
- public static bool FreeCodepoints(Dictionary<string, object> args) {
+ public static bool FreeCodepoints(Dictionary<string, object> args)
+ {
if (args.ContainsKey("amount"))
- try {
+ try
+ {
int codepointsToAdd = Convert.ToInt32(args["amount"].ToString());
SaveSystem.TransferCodepointsFrom("dev", codepointsToAdd);
return true;
- } catch (Exception ex) {
+ }
+ catch (Exception ex)
+ {
Console.WriteLine("{ERROR}: " + ex.Message);
return true;
}
@@ -216,41 +249,55 @@ namespace ShiftOS.Engine {
}
[Command("unlockeverything")]
- public static bool GetAllUpgrades() {
- foreach (var upg in Shiftorium.GetDefaults()) {
+ public static bool GetAllUpgrades()
+ {
+ foreach (var upg in Shiftorium.GetDefaults())
+ {
Shiftorium.Buy(upg.ID, 0);
}
return true;
}
[Command("info")]
- public static bool DevInformation() {
+ public static bool DevInformation()
+ {
Console.WriteLine("{SHIFTOS_PLUS_MOTTO}");
Console.WriteLine("{SHIFTOS_VERSION_INFO}" + Assembly.GetExecutingAssembly().GetName().Version);
return true;
}
[Command("pullfile")]
- public static bool PullFile(Dictionary<string, object> args) {
- if (args.ContainsKey("physical") && args.ContainsKey("virtual")) {
+ public static bool PullFile(Dictionary<string, object> args)
+ {
+ if (args.ContainsKey("physical") && args.ContainsKey("virtual"))
+ {
string file = (string)args["physical"];
string dest = (string)args["virtual"];
- if (System.IO.File.Exists(file)) {
+ if (System.IO.File.Exists(file))
+ {
Console.WriteLine("Pulling physical file to virtual drive...");
byte[] filebytes = System.IO.File.ReadAllBytes(file);
ShiftOS.Objects.ShiftFS.Utils.WriteAllBytes(dest, filebytes);
- } else {
+ }
+ else
+ {
Console.WriteLine("The specified file does not exist on the physical drive.");
}
- } else {
+ }
+ else
+ {
Console.WriteLine("You must supply a physical path.");
}
return true;
}
[Command("crash")]
- public static bool CrashInstantly() {
- try {
+ public static bool CrashInstantly()
+ {
+ try
+ {
throw new Exception("ShiftOS was sent a command to forcefully crash.");
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
CrashHandler.Start(e);
return true;
}
@@ -259,46 +306,36 @@ namespace ShiftOS.Engine {
#endif
[Namespace("sos")]
- public static class ShiftOSCommands {
-
+ public static class ShiftOSCommands
+ {
[Command("shutdown")]
- public static bool Shutdown() {
+ public static bool Shutdown()
+ {
SaveSystem.ShuttingDown = true;
TerminalBackend.InvokeCommand("sos.save");
AppearanceManager.Exit();
return true;
}
- [Command("verify")]
- public static bool Verify(Dictionary<string, object> args) {
- if (SaveSystem.CurrentSave.StoryPosition == 4) {
- if (args.ContainsKey(Localization.Parse("{ARGS_PASSWORD}"))) {
- if (args[Localization.Parse("{ARGS_PASSWORD}")] as string == "theepicwin") {
- SaveSystem.CurrentSave.StoryPosition++;
- } else {
- Console.WriteLine("{SENTIENCE_INVALIDPASSWORD}");
- }
- } else {
- Console.WriteLine("{SENTIENCE_INVALIDPASSWORD}");
- }
- return true;
- } else {
- return false;
- }
- }
[Command("help", "{COMMAND_HELP_USAGE}", "{COMMAND_HELP_DESCRIPTION}")]
- public static bool Help() {
+ public static bool Help()
+ {
var asm = Assembly.GetExecutingAssembly();
var types = asm.GetTypes();
- foreach (var type in types) {
- if (Shiftorium.UpgradeAttributesUnlocked(type)) {
- foreach (var a in type.GetCustomAttributes(false)) {
- if (a is Namespace) {
+ foreach (var type in types)
+ {
+ if (Shiftorium.UpgradeAttributesUnlocked(type))
+ {
+ foreach (var a in type.GetCustomAttributes(false))
+ {
+ if (a is Namespace)
+ {
var ns = a as Namespace;
- if (!ns.hide) {
+ if (!ns.hide)
+ {
string descp = "{NAMESPACE_" + ns.name.ToUpper() + "_DESCRIPTION}";
if (descp == Localization.Parse(descp))
descp = "";
@@ -307,13 +344,18 @@ namespace ShiftOS.Engine {
Console.WriteLine($"{{NAMESPACE}}{ns.name}" + descp);
- foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) {
- if (Shiftorium.UpgradeAttributesUnlocked(method)) {
- foreach (var ma in method.GetCustomAttributes(false)) {
- if (ma is Command) {
+ foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
+ {
+ if (Shiftorium.UpgradeAttributesUnlocked(method))
+ {
+ foreach (var ma in method.GetCustomAttributes(false))
+ {
+ if (ma is Command)
+ {
var cmd = ma as Command;
- if (!cmd.hide) {
+ if (!cmd.hide)
+ {
string descriptionparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_DESCRIPTION}";
string usageparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_USAGE}";
if (descriptionparse == Localization.Parse(descriptionparse))
@@ -347,13 +389,15 @@ namespace ShiftOS.Engine {
}
[Command("save")]
- public static bool Save() {
+ public static bool Save()
+ {
SaveSystem.SaveGame();
return true;
}
[Command("status")]
- public static bool Status() {
+ public static bool Status()
+ {
Console.WriteLine($@"ShiftOS version {Assembly.GetExecutingAssembly().GetName().Version.ToString()}
Codepoints: {SaveSystem.CurrentSave.Codepoints}
@@ -365,11 +409,14 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
[Namespace("shiftorium")]
- public static class ShiftoriumCommands {
+ public static class ShiftoriumCommands
+ {
[Command("buy")]
[RequiresArgument("upgrade")]
- public static bool BuyUpgrade(Dictionary<string, object> userArgs) {
- try {
+ public static bool BuyUpgrade(Dictionary<string, object> userArgs)
+ {
+ try
+ {
string upgrade = "";
if (userArgs.ContainsKey("upgrade"))
@@ -377,15 +424,19 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
else
throw new Exception("You must specify a valid 'upgrade' value.");
- foreach (var upg in Shiftorium.GetAvailable()) {
- if (upg.ID == upgrade) {
+ foreach (var upg in Shiftorium.GetAvailable())
+ {
+ if (upg.ID == upgrade)
+ {
Shiftorium.Buy(upgrade, upg.Cost);
return true;
}
}
throw new Exception($"Couldn't find upgrade with ID: {upgrade}");
- } catch {
+ }
+ catch
+ {
return false;
}
}
@@ -393,15 +444,20 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
[RequiresUpgrade("shiftorium_bulk_buy")]
[Command("bulkbuy")]
[RequiresArgument("upgrades")]
- public static bool BuyBulk(Dictionary<string, object> args) {
- if (args.ContainsKey("upgrades")) {
+ public static bool BuyBulk(Dictionary<string, object> args)
+ {
+ if (args.ContainsKey("upgrades"))
+ {
string[] upgrade_list = (args["upgrades"] as string).Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
- foreach (var upg in upgrade_list) {
+ foreach (var upg in upgrade_list)
+ {
var dict = new Dictionary<string, object>();
dict.Add("upgrade", upg);
BuyUpgrade(dict);
}
- } else {
+ }
+ else
+ {
throw new Exception("Please specify a list of upgrades in the 'upgrades' argument. Each upgrade is separated by a comma.");
}
return true;
@@ -409,8 +465,10 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
[Command("info")]
- public static bool ViewInfo(Dictionary<string, object> userArgs) {
- try {
+ public static bool ViewInfo(Dictionary<string, object> userArgs)
+ {
+ try
+ {
string upgrade = "";
if (userArgs.ContainsKey("upgrade"))
@@ -418,8 +476,10 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
else
throw new Exception("You must specify a valid 'upgrade' value.");
- foreach (var upg in Shiftorium.GetDefaults()) {
- if (upg.ID == upgrade) {
+ foreach (var upg in Shiftorium.GetDefaults())
+ {
+ if (upg.ID == upgrade)
+ {
Console.WriteLine($@"Information for {upgrade}:
{upg.Name} - {upg.Cost} Codepoints
@@ -434,18 +494,24 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}");
}
throw new Exception($"Couldn't find upgrade with ID: {upgrade}");
- } catch {
+ }
+ catch
+ {
return false;
}
}
[Command("list")]
- public static bool ListAll() {
- try {
+ public static bool ListAll()
+ {
+ try
+ {
Dictionary<string, int> upgrades = new Dictionary<string, int>();
int maxLength = 5;
- foreach (var upg in Shiftorium.GetAvailable()) {
- if (upg.ID.Length > maxLength) {
+ foreach (var upg in Shiftorium.GetAvailable())
+ {
+ if (upg.ID.Length > maxLength)
+ {
maxLength = upg.ID.Length;
}
@@ -454,11 +520,14 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}");
Console.WriteLine("ID".PadRight((maxLength + 5) - 2) + "Cost (Codepoints)");
- foreach (var upg in upgrades) {
+ foreach (var upg in upgrades)
+ {
Console.WriteLine(upg.Key.PadRight((maxLength + 5) - upg.Key.Length) + " " + upg.Value.ToString());
}
return true;
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
CrashHandler.Start(e);
return false;
}
@@ -466,15 +535,18 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}");
}
[Namespace("win")]
- public static class WindowCommands {
+ public static class WindowCommands
+ {
[Command("list")]
- public static bool List() {
+ public static bool List()
+ {
Console.WriteLine("{ID}\t{WINDOW}");
- foreach (var app in AppearanceManager.OpenForms) {
+ foreach (var app in AppearanceManager.OpenForms)
+ {
//All .NET object instances have a unique hash code. Good for fake process management.
Console.WriteLine($"{app.GetHashCode()}\t{app.Text}");
}
@@ -536,7 +608,32 @@ shiftorium.buy{{upgrade:""{upg.ID}""}}");
}
else
{
- Console.WriteLine("Please specify a valid 'app' param.");
+ foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
+ {
+ if (asmExec.EndsWith(".exe") || asmExec.EndsWith(".dll"))
+ {
+ var asm = Assembly.LoadFile(asmExec);
+
+ foreach (var type in asm.GetTypes())
+ {
+ if (type.GetInterfaces().Contains(typeof(IShiftOSWindow)))
+ {
+ foreach (var attr in type.GetCustomAttributes(false))
+ {
+ if (attr is WinOpenAttribute)
+ {
+ if (Shiftorium.UpgradeAttributesUnlocked(type))
+ {
+ Console.WriteLine("win.open{app:\"" + (attr as WinOpenAttribute).ID + "\"}");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
return true;
}
Console.WriteLine("Couldn't find the specified app on your system.");
diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs
index 4b5312a..7678bca 100644
--- a/ShiftOS_TheReturn/SaveSystem.cs
+++ b/ShiftOS_TheReturn/SaveSystem.cs
@@ -154,19 +154,6 @@ namespace ShiftOS.Engine
}
- if(CurrentSave.StoryPosition == 1)
- {
- Desktop.InvokeOnWorkerThread(new Action(() =>
- {
- TutorialManager.StartTutorial();
- }));
-
- while(CurrentSave.StoryPosition < 2)
- {
-
- }
- }
-
Thread.Sleep(75);
@@ -189,6 +176,14 @@ namespace ShiftOS.Engine
Shiftorium.LogOrphanedUpgrades = true;
Desktop.InvokeOnWorkerThread(new Action(() => Desktop.PopulateAppLauncher()));
GameReady?.Invoke();
+ if (CurrentSave.StoryPosition == 1)
+ {
+ Desktop.InvokeOnWorkerThread(new Action(() =>
+ {
+ TutorialManager.StartTutorial();
+ }));
+ }
+
}));
thread.IsBackground = true;
thread.Start();
diff --git a/ShiftOS_TheReturn/TerminalBackend.cs b/ShiftOS_TheReturn/TerminalBackend.cs
index bba5510..156a916 100644
--- a/ShiftOS_TheReturn/TerminalBackend.cs
+++ b/ShiftOS_TheReturn/TerminalBackend.cs
@@ -36,6 +36,8 @@ namespace ShiftOS.Engine
{
public static class TerminalBackend
{
+ public static event Action<string, string> CommandProcessed;
+
public static bool Elevated { get; set; }
public static Dictionary<string, object> GetArgs(ref string text)
@@ -84,6 +86,7 @@ namespace ShiftOS.Engine
args: ""{JsonConvert.SerializeObject(args)}""
}}");
}
+ CommandProcessed?.Invoke(text, JsonConvert.SerializeObject(args));
}
catch (Exception ex)
{
diff --git a/ShiftOS_TheReturn/TutorialManager.cs b/ShiftOS_TheReturn/TutorialManager.cs
index 1d8943e..2145977 100644
--- a/ShiftOS_TheReturn/TutorialManager.cs
+++ b/ShiftOS_TheReturn/TutorialManager.cs
@@ -12,22 +12,54 @@ namespace ShiftOS.Engine
public static void RegisterTutorial(ITutorial tut)
{
+ IsInTutorial = false;
_tut = tut;
_tut.OnComplete += (o, a) =>
{
SaveSystem.CurrentSave.StoryPosition = 2;
+ IsInTutorial = false;
};
}
+ public static bool IsInTutorial
+ {
+ get; private set;
+ }
+
+ public static int Progress
+ {
+ get
+ {
+ return _tut.TutorialProgress;
+ }
+ }
+
public static void StartTutorial()
{
+ IsInTutorial = true;
_tut.Start();
}
}
public interface ITutorial
{
+ int TutorialProgress { get; set; }
void Start();
event EventHandler OnComplete;
}
+
+ public class TutorialLockAttribute : Attribute
+ {
+ public TutorialLockAttribute(int progress)
+ {
+ Progress = progress;
+ }
+
+ public TutorialLockAttribute() : this(0)
+ {
+
+ }
+
+ public int Progress { get; private set; }
+ }
}