Example #1
0
        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);
        }
Example #2
0
 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);
 }
Example #3
0
        /// <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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #6
0
        /// <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();
        }
Example #7
0
        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);
        }