public static bool Commands() { var sb = new StringBuilder(); sb.AppendLine("{GEN_COMMANDS}"); sb.AppendLine("================="); sb.AppendLine(); //print all unique namespaces. foreach (var n in TerminalBackend.Commands.Where(x => !(x is TerminalBackend.WinOpenCommand) && Shiftorium.UpgradeInstalled(x.Dependencies) && x.CommandInfo.hide == false).OrderBy(x => x.CommandInfo.name)) { sb.Append(" - " + n.CommandInfo.name); if (!string.IsNullOrWhiteSpace(n.CommandInfo.description)) { if (Shiftorium.UpgradeInstalled("help_description")) { sb.Append(" - " + n.CommandInfo.description); } } sb.AppendLine(); } Console.WriteLine(sb.ToString()); return(true); }
public static bool Programs() { Console.WriteLine("{GEN_PROGRAMS}"); Console.WriteLine("==============="); Console.WriteLine(); foreach (var cmd in TerminalBackend.Commands.Where(x => x is TerminalBackend.WinOpenCommand && Shiftorium.UpgradeInstalled(x.Dependencies)).OrderBy(x => x.CommandInfo.name)) { Console.Write(" - " + cmd.CommandInfo.name); if (!string.IsNullOrWhiteSpace(cmd.CommandInfo.description)) { if (Shiftorium.UpgradeInstalled("help_description")) { Console.Write(": " + cmd.CommandInfo.description); } } Console.WriteLine(); } return(true); }
/// <summary> /// Runs a command on the client. /// </summary> /// <param name="text">The command text.</param> /// <param name="args">The command arguments.</param> /// <param name="isRemote">Whether the command should be run in RTS.</param> /// <returns>Whether the command ran successfully.</returns> public static bool RunClient(string text, Dictionary <string, object> args, bool isRemote = false) { latestCommmand = text; //Console.WriteLine(text + " " + "{" + string.Join(",", args.Select(kv => kv.Key + "=" + kv.Value).ToArray()) + "}" + " " + isRemote); var cmd = Commands.FirstOrDefault(x => Localization.Parse(x.CommandInfo.name) == text); if (cmd == null) { return(false); } if (!Shiftorium.UpgradeInstalled(cmd.Dependencies)) { return(false); } bool res = false; foreach (var arg in cmd.RequiredArguments) { if (!args.ContainsKey(arg)) { res = true; Console.WriteLine("You are missing an argument with the key \"" + arg + "\"."); } } if (res == true) { return(true); } try { cmd.Invoke(args); } catch (Exception ex) { Console.WriteLine("Command error: " + ex.Message); } return(true); }
public static bool Open(Dictionary <string, object> args) { try { if (args.ContainsKey("app")) { var app = args["app"] as string; //ANNND now we start reflecting... 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.BaseType == typeof(UserControl)) { foreach (var attr in type.GetCustomAttributes(false)) { if (attr is WinOpenAttribute) { if (app == (attr as WinOpenAttribute).ID) { if (SaveSystem.CurrentSave.Upgrades.ContainsKey(app)) { if (Shiftorium.UpgradeInstalled(app)) { IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow; AppearanceManager.SetupWindow(frm); return(true); } else { throw new Exception($"{app} was not found on your system! Try looking in the shiftorium..."); } } else { IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow; AppearanceManager.SetupWindow(frm); return(true); } } } } } } } } } else { Console.WriteLine("Please specify a valid 'app' param."); return(true); } Console.WriteLine("Couldn't find the specified app on your system."); return(true); } catch (Exception ex) { Console.WriteLine("Error running script:" + ex); return(false); } }
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) { var ns = a as Namespace; if (!ns.hide) { string descp = "{NAMESPACE_" + ns.name.ToUpper() + "_DESCRIPTION}"; if (descp == Localization.Parse(descp)) { descp = ""; } else { descp = Shiftorium.UpgradeInstalled("help_description") ? Localization.Parse("{SEPERATOR}" + descp) : ""; } 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) { var cmd = ma as Command; 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)) { descriptionparse = ""; } else { descriptionparse = Shiftorium.UpgradeInstalled("help_description") ? Localization.Parse("{SEPERATOR}" + descriptionparse) : ""; } if (usageparse == Localization.Parse(usageparse)) { usageparse = ""; } else { usageparse = Shiftorium.UpgradeInstalled("help_usage") ? Localization.Parse("{SEPERATOR}" + usageparse, new Dictionary <string, string>() { { "%ns", ns.name }, { "%cmd", cmd.name } }) : ""; } Console.WriteLine($"{{COMMAND}}{ns.name}.{cmd.name}" + usageparse + descriptionparse); } } } } } } } } } } return(true); }
/// <summary> /// Start the entire ShiftOS engine. /// </summary> /// <param name="useDefaultUI">Whether ShiftOS should initiate it's Windows Forms front-end.</param> public static void Begin(bool useDefaultUI = true) { if (!System.IO.File.Exists(Paths.SaveFile)) { var root = new ShiftOS.Objects.ShiftFS.Directory(); root.Name = "System"; root.permissions = Permissions.All; System.IO.File.WriteAllText(Paths.SaveFile, JsonConvert.SerializeObject(root)); } if (Utils.Mounts.Count == 0) { Utils.Mount(System.IO.File.ReadAllText(Paths.SaveFile)); } Paths.Init(); Localization.SetupTHETRUEDefaultLocals(); SkinEngine.Init(); TerminalBackend.OpenTerminal(); TerminalBackend.InStory = true; var thread = new Thread(new ThreadStart(() => { //Do not uncomment until I sort out the copyright stuff... - Michael //AudioManager.Init(); var defaultConf = new EngineConfig(); if (System.IO.File.Exists("engineconfig.json")) { defaultConf = JsonConvert.DeserializeObject <EngineConfig>(System.IO.File.ReadAllText("engineconfig.json")); } else { System.IO.File.WriteAllText("engineconfig.json", JsonConvert.SerializeObject(defaultConf, Formatting.Indented)); } Thread.Sleep(350); Console.WriteLine("Initiating kernel..."); Thread.Sleep(250); Console.WriteLine("Reading filesystem..."); Thread.Sleep(100); Console.WriteLine("Reading configuration..."); Console.WriteLine("{CONNECTING_TO_MUD}"); if (defaultConf.ConnectToMud == true) { try { bool guidReceived = false; ServerManager.GUIDReceived += (str) => { guidReceived = true; Console.WriteLine("{CONNECTION_SUCCESSFUL}"); }; ServerManager.Initiate("secondary4162.cloudapp.net", 13370); while (guidReceived == false) { } } catch (Exception ex) { Console.WriteLine("{ERROR}: " + ex.Message); Thread.Sleep(3000); ServerManager.StartLANServer(); } } else { ServerManager.StartLANServer(); } ServerManager.MessageReceived += (msg) => { if (msg.Name == "mud_savefile") { CurrentSave = JsonConvert.DeserializeObject <Save>(msg.Contents); } else if (msg.Name == "mud_login_denied") { oobe.PromptForLogin(); } }; ReadSave(); while (CurrentSave == null) { } Shiftorium.Init(); while (CurrentSave.StoryPosition < 5) { } Thread.Sleep(75); if (Shiftorium.UpgradeInstalled("desktop")) { Console.Write("{START_DESKTOP}"); Thread.Sleep(50); Console.WriteLine(" ...{DONE}."); } Story.Start(); Thread.Sleep(50); Console.WriteLine("{SYSTEM_INITIATED}"); TerminalBackend.InStory = false; Shiftorium.LogOrphanedUpgrades = true; Desktop.InvokeOnWorkerThread(new Action(() => Desktop.PopulateAppLauncher())); GameReady?.Invoke(); })); thread.IsBackground = true; thread.Start(); }
public static bool RunClient(string text, Dictionary <string, object> args) { latestCommmand = text; foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) { try { var asm = Assembly.LoadFile(asmExec); var types = asm.GetTypes(); 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 (text.Split('.')[0] == ns.name) { 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 (text.Split('.')[1] == cmd.name) { var attr = method.GetCustomAttribute <CommandObsolete>(); if (attr != null) { string newcommand = attr.newcommand; if (attr.warn) { Console.WriteLine(Localization.Parse((newcommand == "" ? "{ERROR}" : "{WARN}") + attr.reason, new Dictionary <string, string>() { { "%newcommand", newcommand } })); } if (newcommand != "") { // redo the entire process running newcommand return(RunClient(newcommand, args)); } } var requiresArgs = method.GetCustomAttributes <RequiresArgument>(); bool error = false; bool providedusage = false; foreach (RequiresArgument argument in requiresArgs) { if (!args.ContainsKey(argument.argument)) { if (!providedusage) { string usageparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_USAGE}"; if (usageparse == Localization.Parse(usageparse)) { usageparse = ""; } else { usageparse = Shiftorium.UpgradeInstalled("help_usage") ? Localization.Parse("{ERROR}{USAGE}" + usageparse, new Dictionary <string, string>() { { "%ns", ns.name }, { "%cmd", cmd.name } }) : ""; } Console.WriteLine(usageparse); providedusage = true; } if (Shiftorium.UpgradeInstalled("help_usage")) { Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED}", new Dictionary <string, string>() { { "%argument", argument.argument } })); } else { Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED_NO_USAGE}")); } error = true; } } if (error) { throw new Exception("{ERROR_COMMAND_WRONG}"); } try { return((bool)method.Invoke(null, new[] { args })); } catch { return((bool)method.Invoke(null, new object[] { })); } } } } } } } } } } } } catch { } } return(false); }