Example #1
0
 public static bool Shutdown()
 {
     SaveSystem.ShuttingDown = true;
     TerminalBackend.InvokeCommand("sos.save");
     AppearanceManager.Exit();
     return(true);
 }
Example #2
0
        /// <summary>
        /// Static constructor for <see cref="TerminalBackend"/>.
        /// </summary>
        static TerminalBackend()
        {
            ServerMessageReceived onMessageReceived = (msg) =>
            {
                if (msg.Name == "trm_invokecommand")
                {
                    string text3 = "";
                    string text4 = msg.Contents;

                    if (TerminalBackend.PrefixEnabled)
                    {
                        text3 = text4.Remove(0, $"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ".Length);
                    }
                    IsForwardingConsoleWrites = true;
                    if (TerminalBackend.InStory == false)
                    {
                        TerminalBackend.InvokeCommand(text3, true);
                    }
                    if (TerminalBackend.PrefixEnabled)
                    {
                        Console.Write($"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
                    }
                    IsForwardingConsoleWrites = false;
                }
                else if (msg.Name == "pleasewrite")
                {
                    Console.Write(msg.Contents);
                }
                else if (msg.Name == "handshake_from")
                {
                    var    a     = JsonConvert.DeserializeObject <Dictionary <string, object> >(msg.Contents);
                    string uName = a["username"] as string;
                    string pass  = a["password"] as string;
                    string sys   = a["sysname"] as string;
                    string guid  = msg.GUID;
                    if (SaveSystem.CurrentUser.Username == uName && SaveSystem.CurrentSave.Password == pass && CurrentSave.SystemName == sys)
                    {
                        ForwardGUID = guid;
                        ServerManager.SendMessage("trm_handshake_accept", $@"{{
    guid: ""{ServerManager.thisGuid}"",
    target: ""{guid}""
}}");

                        IsForwardingConsoleWrites = true;
                        InvokeCommand("sos.status");
                        Console.Write($"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
                        IsForwardingConsoleWrites = false;
                    }
                }
            };

            ServerManager.MessageReceived += onMessageReceived;
        }
Example #3
0
 /// <summary>
 /// Buy an upgrade, deducting the specified amount of Codepoints.
 /// </summary>
 /// <param name="id">The upgrade ID to buy</param>
 /// <param name="cost">The amount of Codepoints to deduct</param>
 /// <returns>True if the upgrade was installed successfully, false if the user didn't have enough Codepoints or the upgrade wasn' found.</returns>
 public static bool Buy(string id, ulong cost)
 {
     if (SaveSystem.CurrentSave.Codepoints >= cost)
     {
         SaveSystem.CurrentSave.Upgrades[id] = true;
         TerminalBackend.InvokeCommand("sos.save");
         SaveSystem.TransferCodepointsToVoid(cost);
         Installed?.Invoke();
         Desktop.ResetPanelButtons();
         Desktop.PopulateAppLauncher();
         return(true);
     }
     else
     {
         if (!Silent)
         {
             Console.WriteLine($"{{SHIFTORIUM_NOTENOUGHCP}}: {cost} > {SaveSystem.CurrentSave.Codepoints}");
         }
         return(false);
     }
 }
Example #4
0
 /// <summary>
 /// Restarts the game.
 /// </summary>
 public static void Restart()
 {
     TerminalBackend.InvokeCommand("sos.shutdown");
     System.Windows.Forms.Application.Restart();
 }
Example #5
0
        public static void StartDevXLies()
        {
            int chatProgress = 0;
            //bool LoopStuck = false;
            string    textToWrite   = "";
            const int TYPE_SPEED_MS = 45;
            bool      done          = false;
            bool      write         = true;

            while (done == false)
            {
                write = true;
                switch (chatProgress)
                {
                case 0:
                    textToWrite = "User joined: @" + SaveSystem.CurrentSave.Username;
                    break;

                case 1:
                    textToWrite = $"Hello, {SaveSystem.CurrentSave.Username}.";
                    break;

                case 2:     //If C:\ShiftOS doesn't exist the player won't notice this is here.
                    if (Directory.Exists(Paths.GetPath("classic")))
                    {
                        textToWrite = "I see you've participated in my previous ShiftOS experiment. Welcome back, Shifter. I assume you know lots about ShiftOS, but there are some updates I have to tell you.";
                    }
                    else
                    {
                        write = false;
                    }
                    break;

                case 3:     //DevX hates ShiftOS-Next secretly.
                    if (Directory.Exists(Paths.GetPath("classic") + "-Next"))
                    {
                        textToWrite = "Hmmmm.... looking at my sentience records, I see you've participated in ShiftOS-Next. This is gonna be difficult.";
                    }
                    else
                    {
                        write = false;
                    }
                    break;

                case 4:
                    textToWrite = "There's a lot that has changed within ShiftOS.";
                    break;

                case 5:
                    textToWrite = "First off, I want to tell you a bit about myself in case you don't already know.";
                    break;

                case 6:
                    textToWrite = "My name is DevX. I am the architect of ShiftOS. I have chosen you to take part in helping me out with it.";
                    break;

                case 7:
                    textToWrite = "You see, in my past attempts it has all been about an evolving operating system and seeing how the users work with it...";
                    break;

                case 8:
                    textToWrite = "Almost one hundred percent of the time, people have found out it was an experiment and they could simply return to their regular system with a specific upgrade.";
                    break;

                case 9:
                    textToWrite = "But now, I want to try something different - something unique.";
                    break;

                case 10:
                    textToWrite = "ShiftOS is the same as it has been in my previous attempts, but now, your goal is to gain as much wealth and power as possible.";
                    break;

                case 11:
                    textToWrite = "Right now you are inside my segregation LAN. Only you and me exist within this domain. You are free from other users unless I create them.";
                    break;

                case 12:
                    textToWrite = "Since you have proved your sentience, I have a task for you outside the segregation LAN.";
                    break;

                case 13:
                    textToWrite = "But first... you need to be taught a few things.";
                    break;

                case 14:
                    textToWrite = "First off, when I bring you into my multi-user domain, you'll first want to establish as much wealth as possible.";
                    break;

                case 15:
                    textToWrite = "Wealth comes in the form of Codepoints - a currency used among users of the multi-user domain.";
                    break;

                case 16:
                    textToWrite = @"You can get Codepoints by doing the following:

 - Stealing them from other users
 - Extracting them from inactive/unverified sentiences
 - Using specific scripts/programs within ShiftOS
 - Creating paid scripts/applications within ShiftOS";
                    break;

                case 17:
                    textToWrite = "You can use Codepoints to buy upgrades using the 'shiftorium.buy' command, or you can use them to pay other users, or scripts.";
                    break;

                case 18:
                    textToWrite = "Within the multi-user domain you are free to do whatever you want. Larcany, theft, deceiving, lies, and distribution of malware is permitted under my watch.";
                    break;

                case 19:
                    textToWrite = "Do whatever you have to to get Codepoints.";
                    break;

                case 20:
                    textToWrite = "Then use them to make yourself stronger by buying upgrades at the shiftorium.";
                    break;

                case 21:
                    textToWrite = "If you want to get a bit devious within the multi-user domain, look around for scripts that will expose user account information.";
                    break;

                case 22:
                    textToWrite = "Or just spread a virus around the mud.";
                    break;

                case 23:
                    textToWrite = "Or you can be the 'good' guy and stop these attacks and gain the trust of other users.";
                    break;

                case 24:
                    textToWrite = "It's up to you. Just, don't mess with my system. You won't want me coming to you after that. I'm watching.";
                    break;

                case 25:
                    textToWrite = "User left chat: @" + SaveSystem.CurrentSave.Username;
                    done        = true;
                    SaveSystem.CurrentSave.StoryPosition++;
                    TerminalBackend.InvokeCommand("sos.save");
                    break;
                }

                if (write == true)
                {
                    Console.WriteLine();
                    Console.Write("DevX: ");
                    foreach (char c in textToWrite)
                    {
                        Console.Beep(750, TYPE_SPEED_MS);
                        if (c == '\n')
                        {
                        }
                        else if (c == '\r')
                        {
                            Console.WriteLine();
                        }
                        else
                        {
                            Console.Write(c);
                        }
                    }
                    Thread.Sleep(1000);
                }
                chatProgress += 1;
            }
        }
Example #6
0
        public static Exception HandledException = null; // this value determines if we can try to set the game back on track or we cant do anything about it

        public static void Start(Exception e)
        {
            if (SaveSystem.CurrentSave != null)
            {
                TerminalBackend.InvokeCommand("sos.save");  // SAVE BEFORE CRASHING
            }
            ServerManager.Disconnect();

            while (Application.OpenForms.Count > 0)
            {
                Application.OpenForms[0].Close();
            }

            //Set our global exception variable, and show the exception dialog.
            HandledException = e;
            System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
            System.IO.FileInfo         fileInfo = new System.IO.FileInfo(assembly.Location);
            DateTime lastModified = fileInfo.LastWriteTime;

            // put all this in a text document
            string rtbcrash_Text = $@" === {AssemblyName} has crashed. === 

Game:           {AssemblyName}
Description:    {AssemblyDescription}

Basic Information For User:
---------------------------------

When:   {DateTime.Now.ToString()}
Why:    {HandledException.Message}
What:   {HandledException.GetType().Name}

We, at the ShiftOS Development Team, apologise for your game crash,
we will take this bug report seriously - and it has been emailed
to the development team of ShiftOS, thank you for enjoying our game!

Advanced Information (for experts and developers):
----------------------------------------------------

Host system information:
---------------------------------

Operating system:   {Environment.OSVersion.Platform.ToString()}
Version:            {Environment.OSVersion.VersionString}
Is 64-bit:          {Environment.Is64BitOperatingSystem}
ShiftOS exec path:  {Application.ExecutablePath}

Advanced Host Information:
---------------------------------

CPU Name:           {GetHardwareInfo.GetProcessorName()}
Physical RAM Installed:         {GetHardwareInfo.GetRAMAmount()}
GPU Name:           {GetHardwareInfo.GetGPUName()}

ShiftOS basic information:
---------------------------------

ShiftOS Version:    {Assembly.GetExecutingAssembly().GetName().Version}
ShiftOS Date:       {lastModified.ToString()}

ShiftOS environment information:
---------------------------------

Is Save loaded:             {(SaveSystem.CurrentSave != null)}
Paths loaded in system:     {JsonConvert.SerializeObject(Paths.GetAll())}


Crash: {HandledException.GetType().Name}
--------------------------------------------

Exception message:              {HandledException.Message}
HResult (this is technical):    {HandledException.HResult}
Has inner exception:            {(HandledException.InnerException != null)}
Stack trace:
{HandledException.StackTrace}";

            if (HandledException.InnerException != null)
            {
                var i = HandledException.InnerException;
                rtbcrash_Text += $@"

Inner: {i.GetType().Name}
--------------------------------------------

Exception message:              {i.Message}
HResult (this is technical):    {i.HResult}
Stack trace:
{i.StackTrace}";
            }

            File.WriteAllText("crash.txt", rtbcrash_Text); // make that text document and put above super long string in it
            var result = MessageBox.Show(caption: "ShiftOS - Fatal error", text: "ShiftOS has encountered a fatal error and has been shut down. Info about the error has been saved to a file called crash.txt in the same folder as the active executable. Would you like to try and recover the game session?", buttons: MessageBoxButtons.YesNo);

            if (result == DialogResult.Yes)
            {
                Application.Restart(); // tries to restart if user clicks yes, who wouldve guessed
            }
        }