コード例 #1
0
        public static void EndDLCSection(object osobj)
        {
            OS os = (OS)osobj;

            os.IsInDLCMode        = false;
            os.mailicon.isEnabled = true;
            os.Flags.AddFlag("dlc_complete");
            if (os.Flags.HasFlag("dlc_start_csec"))
            {
                os.Flags.AddFlag("dlc_complete_FromCSEC");
                ComputerLoader.loadMission("Content/DLC/Missions/BaseGameConnectors/Missions/CSEC_DLC_EndEmail.xml", false);
                os.allFactions.setCurrentFaction("hub", os);
                os.homeNodeID        = "mainHub";
                os.homeAssetServerID = "mainHubAssets";
                os.Flags.AddFlag("dlc_csec_end_facval:" + (object)os.currentFaction.playerValue);
            }
            else if (os.Flags.HasFlag("dlc_start_entropy"))
            {
                os.Flags.AddFlag("dlc_complete_FromEntropy");
                ComputerLoader.loadMission("Content/DLC/Missions/BaseGameConnectors/Missions/Entropy_DLC_EndEmail.xml", false);
                os.allFactions.setCurrentFaction("entropy", os);
                os.homeNodeID        = "entropy00";
                os.homeAssetServerID = "entropy01";
            }
            else
            {
                os.Flags.AddFlag("dlc_complete_FromUnknown");
                ComputerLoader.loadMission("Content/DLC/Missions/BaseGameConnectors/Missions/Entropy_DLC_EndEmail.xml", false);
                os.allFactions.setCurrentFaction("entropy", os);
                os.homeNodeID        = "entropy00";
                os.homeAssetServerID = "entropy01";
            }
            DLC1SessionUpgrader.ReDsicoverAllVisibleNodesInOSCache((object)os);
        }
コード例 #2
0
 public void finish()
 {
     OS.currentInstance.branchMissions.Clear();
     if (!this.nextMission.Equals("NONE"))
     {
         string str = "Content/Missions/";
         if (Settings.IsInExtensionMode)
         {
             str = ExtensionLoader.ActiveExtensionInfo.FolderPath + "/";
         }
         ComputerLoader.loadMission(str + this.nextMission, false);
         OS.currentInstance.currentMission.ActivateSuppressedStartFunctionIfPresent();
     }
     else
     {
         OS.currentInstance.currentMission = (ActiveMission)null;
     }
     if (this.endFunctionName != null)
     {
         MissionFunctions.runCommand(this.endFunctionValue, this.endFunctionName);
     }
     OS.currentInstance.saveGame();
     if (!OS.currentInstance.multiplayer)
     {
         return;
     }
     OS.currentInstance.endMultiplayerMatch(true);
 }
コード例 #3
0
        public override void addValue(int value, object os)
        {
            int playerValue = this.playerValue;

            base.addValue(value, os);
            if (this.valuePassedPoint(playerValue, 3))
            {
                ((OS)os).Flags.AddFlag("eosPathStarted");
                ComputerLoader.loadMission("Content/Missions/Entropy/StartingSet/eosMissions/eosIntroDelayer.xml", false);
            }
            if (!this.valuePassedPoint(playerValue, 4))
            {
                return;
            }
            if (Settings.EnableDLC && DLC1SessionUpgrader.HasDLC1Installed && ((OS)os).HasLoadedDLCContent)
            {
                try
                {
                    Computer computer = Programs.getComputer((OS)os, "entropy00");
                    if (computer != null)
                    {
                        ;
                    }
                    ((MissionListingServer)computer.getDaemon(typeof(MissionListingServer))).addMisison((ActiveMission)ComputerLoader.readMission("Content/DLC/Missions/BaseGameConnectors/Missions/EntropyDLCConnectorIntro.xml"), true);
                    Console.WriteLine("Injected Labyrinths transition mission to Entropy");
                }
                catch (Exception ex)
                {
                    Utils.AppendToErrorFile("Could not add in Labyrinths upgrade mission to entropy!\r\n\r\n" + Utils.GenerateReportFromException(ex));
                }
            }
        }
コード例 #4
0
        public static void AccelerateSessionToDLCStart(object osObj)
        {
            OS os = (OS)osObj;

            os.Flags.AddFlag("TutorialComplete");
            os.delayer.RunAllDelayedActions();
            ThemeManager.setThemeOnComputer((object)os.thisComputer, "DLC/Themes/RiptideClassicTheme.xml");
            ThemeManager.switchTheme((object)os, "DLC/Themes/RiptideClassicTheme.xml");
            for (int index1 = 0; index1 < 60; ++index1)
            {
                int index2;
                do
                {
                    index2 = Utils.random.Next(os.netMap.nodes.Count);
                }while (os.netMap.nodes[index2].idName == "mainHub" || os.netMap.nodes[index2].idName == "entropy00" || os.netMap.nodes[index2].idName == "entropy01");
                os.netMap.discoverNode(os.netMap.nodes[index2]);
            }
            os.netMap.lastAddedNode = os.thisComputer;
            os.delayer.Post(ActionDelayer.Wait(0.15), (Action)(() =>
            {
                Game1.getSingleton().IsMouseVisible = true;
                os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[22], "SSHCrack.exe"));
                os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[21], "FTPBounce.exe"));
                os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[13], "eosDeviceScan.exe"));
                MissionFunctions.runCommand(7, "changeSong");
                MusicManager.stop();
            }));
            os.delayer.Post(ActionDelayer.Wait(56.0), (Action)(() => ComputerLoader.loadMission("Content/DLC/Missions/Demo/DLCDemoIntroMission1.xml", false)));
        }
コード例 #5
0
        private void CompleteAndReturnToMenu()
        {
            this.os.Flags.AddFlag("Victory");
            Programs.disconnect(new string[0], this.os);
            Computer computer = Programs.getComputer(this.os, "porthackHeart");

            this.os.netMap.visibleNodes.Remove(this.os.netMap.nodes.IndexOf(computer));
            computer.disabled = true;
            computer.daemons.Clear();
            computer.ip = NetworkMap.generateRandomIP();
            this.os.terminal.inputLocked = false;
            this.os.ram.inputLocked      = false;
            this.os.netMap.inputLocked   = false;
            this.os.DisableTopBarButtons = false;
            this.os.canRunContent        = true;
            this.IsActive = false;
            ComputerLoader.loadMission("Content/Missions/CreditsMission.xml", false);
            this.os.threadedSaveExecute(false);
            MediaPlayer.IsRepeating = true;
            MusicManager.playSongImmediatley("Music\\Bit(Ending)");
            if (Settings.isPirateBuild)
            {
                this.os.delayer.Post(ActionDelayer.Wait(15.0), (Action)(() =>
                {
                    try
                    {
                        ComputerLoader.loadMission("Content/Missions/CreditsMission_p.xml", false);
                    }
                    catch (Exception ex)
                    {
                    }
                }));
            }
            if (!Settings.sendsDLC1PromoEmailAtEnd)
            {
                return;
            }
            this.os.delayer.Post(ActionDelayer.Wait(30.0), (Action)(() =>
            {
                try
                {
                    string body = Utils.readEntireFile("Content/LocPost/DLCMessage.txt");
                    string subject = "Labyrinths";
                    string sender = "Matt Trobbiani";
                    string email = MailServer.generateEmail(subject, body, sender);
                    MailServer daemon = this.os.netMap.mailServer.getDaemon(typeof(MailServer)) as MailServer;
                    if (daemon == null)
                    {
                        return;
                    }
                    daemon.addMail(email, this.os.defaultUser.name);
                }
                catch (Exception ex)
                {
                }
            }));
        }
コード例 #6
0
 private void ProgressionSaveFixHacks()
 {
     if (!this.groupName.Equals("Entropy") || (this.missions.Count != 0 || !(this.os.currentFaction.idName == "entropy") || this.os.currentMission != null || this.os.Flags.HasFlag("ThemeHackTransitionAssetsAdded")))
     {
         return;
     }
     ComputerLoader.loadMission("Content/Missions/Entropy/ThemeHackTransitionMission.xml", false);
     this.os.saveGame();
 }
コード例 #7
0
        public override void addValue(int value, object os)
        {
            var oldValue = playerValue;

            base.addValue(value, os);
            if (!valuePassedPoint(oldValue, 3))
            {
                return;
            }
            ((OS)os).Flags.AddFlag("eosPathStarted");
            ComputerLoader.loadMission("Content/Missions/Entropy/StartingSet/eosMissions/eosIntroDelayer.xml");
        }
コード例 #8
0
 public override void playerPassedValue(object os)
 {
     base.playerPassedValue(os);
     if (Settings.isAlphaDemoMode)
     {
         ComputerLoader.loadMission("Content/Missions/Entropy/EntropyMission3.xml");
     }
     else
     {
         ((OS)os).delayer.Post(ActionDelayer.Wait(1.7),
                               () => ComputerLoader.loadMission("Content/Missions/Entropy/ThemeHackTransitionMission.xml"));
     }
 }
コード例 #9
0
ファイル: HubFaction.cs プロジェクト: hochladen/Hacknet
 public void ForceStartBitMissions(object os)
 {
     ((OS)os).Flags.AddFlag("bitPathStarted");
     ((OS)os).delayer.Post(ActionDelayer.Wait(1.6), (Action)(() => ComputerLoader.loadMission("Content/Missions/BitPath/BitAdv_Intro.xml", false)));
     Programs.getComputer((OS)os, "mainHubAssets").files.root.searchForFolder("bin").folders.Add(new Folder("Misc")
     {
         files =
         {
             new FileEntry(PortExploits.crackExeData[9],                           "Decypher.exe"),
             new FileEntry(PortExploits.crackExeData[10],                          "DECHead.exe"),
             new FileEntry(PortExploits.crackExeData[104],                         "KBT_PortTest.exe"),
             new FileEntry("Kellis BioTech medical port cycler - target 104-103.", "kbt_readme.txt")
         }
     });
     this.SendNotification(os, LocaleTerms.Loc("Agent") + ",\n" + LocaleTerms.Loc("Additional resources have been added to the CSEC members asset pool, for your free use.") + " " + LocaleTerms.Loc("Find them in the misc folder on the asset server.") + "\n\n" + LocaleTerms.Loc("Thankyou") + ",\n -" + this.name, this.name + " " + LocaleTerms.Loc("Admins :: Asset Uploads"));
 }
コード例 #10
0
        public override void finish()
        {
            Tuple <string, int> t;

            if ((t = Interface.OnEnd(this)) != null)
            {
                addEndFunction(t.Item2, t.Item1);
            }

            var os = Utility.ClientOS;

            os.branchMissions.Clear();
            if (nextMission.StartsWith("Pathfinder:", StringComparison.Ordinal))
            {
                var id = nextMission.Substring(nextMission.IndexOf(':') + 1);
                os.currentMission = CreateInstance(id, new Dictionary <string, string>());
                os.currentMission?.sendEmail(os);
            }
            else if (!nextMission.Equals("NONE"))
            {
                var str = "Content/Missions";
                if (Settings.IsInExtensionMode)
                {
                    str = ExtensionLoader.ActiveExtensionInfo.FolderPath;
                }
                ComputerLoader.loadMission(str + "/" + nextMission, false);
            }
            else
            {
                os.currentMission = null;
            }

            os.currentMission?.ActivateSuppressedStartFunctionIfPresent();

            if (endFunctionName != null)
            {
                MissionFunctions.runCommand(endFunctionValue, endFunctionName);
            }

            os.saveGame();
            if (os.multiplayer)
            {
                os.endMultiplayerMatch(true);
            }
        }
コード例 #11
0
        public static string TestGameProgression(object os_obj, out int errorsOut)
        {
            string str = "";
            int    num = 0;
            OS     os  = (OS)os_obj;

            os.delayer.RunAllDelayedActions();
            ComputerLoader.loadMission("Content/Missions/BitMissionIntro.xml", false);
            Folder folder = os.thisComputer.files.root.searchForFolder("bin");

            folder.files.Clear();
            if (!os.currentMission.isComplete((List <string>)null))
            {
                ++num;
                str += "\r\nCouldn't finish first mission...\r\n";
            }
            os.currentMission.finish();
            FileEntry file = Programs.getComputer(os, "portcrack01").files.root.searchForFolder("bin").files[0];

            folder.files.Add(new FileEntry(file.data, "ssh.exe"));
            if (!os.currentMission.isComplete((List <string>)null))
            {
                ++num;
                str += "\r\nCouldn't finish sshcrack mission...\r\n";
            }
            os.currentMission.finish();
            if (os.currentMission.isComplete((List <string>)null))
            {
                ++num;
                str += "\r\nMission 3 is completable early!\r\n";
            }
            Programs.getComputer(os, "bitMission00").giveAdmin(os.thisComputer.ip);
            if (!os.currentMission.isComplete((List <string>)null))
            {
                ++num;
                str += "\r\nCouldn't finish BitMission0\r\n";
            }
            os.currentMission.finish();
            errorsOut = num;
            return(str);
        }
コード例 #12
0
        private void CompleteAndReturnToMenu()
        {
            os.Flags.AddFlag("Victory");
            Programs.disconnect(new string[0], os);
            var computer = Programs.getComputer(os, "porthackHeart");

            os.netMap.visibleNodes.Remove(os.netMap.nodes.IndexOf(computer));
            computer.disabled = true;
            computer.daemons.Clear();
            computer.ip             = NetworkMap.generateRandomIP();
            os.terminal.inputLocked = false;
            os.ram.inputLocked      = false;
            os.netMap.inputLocked   = false;
            os.DisableTopBarButtons = false;
            os.canRunContent        = true;
            IsActive = false;
            ComputerLoader.loadMission("Content/Missions/CreditsMission.xml");
            os.threadedSaveExecute();
            MediaPlayer.IsRepeating = true;
            MusicManager.playSongImmediatley("Music\\Bit(Ending)");
        }
コード例 #13
0
 public void finish()
 {
     OS.currentInstance.branchMissions.Clear();
     if (!nextMission.Equals("NONE"))
     {
         ComputerLoader.loadMission("Content/Missions/" + nextMission);
         OS.currentInstance.currentMission.ActivateSuppressedStartFunctionIfPresent();
     }
     else
     {
         OS.currentInstance.currentMission = null;
     }
     if (endFunctionName != null)
     {
         MissionFunctions.runCommand(endFunctionValue, endFunctionName);
     }
     OS.currentInstance.saveGame();
     if (!OS.currentInstance.multiplayer)
     {
         return;
     }
     OS.currentInstance.endMultiplayerMatch(true);
 }
コード例 #14
0
ファイル: MainMenu.cs プロジェクト: hochladen/Hacknet
        private void drawTestingMainMenuButtons(bool canRun)
        {
            SpriteFont tinyfont = GuiData.tinyfont;
            string     text     = "FONT:";

            for (int index = 0; index < tinyfont.Characters.Count; ++index)
            {
                text += (string)(object)tinyfont.Characters[index];
                if (index % 20 == 0)
                {
                    text += "\n";
                }
            }
            if (true)
            {
                text = "Labyrinths Testers:\nPress \"Start Full DLC Test\" to begin\n\n" + text;
            }
            GuiData.spriteBatch.DrawString(tinyfont, text, new Vector2(867f, 200f), Color.White);
            if (Button.doButton(8801, 634, 200, 225, 23, "New Test Session", new Color?(MainMenu.buttonColor)) && canRun && canRun)
            {
                this.ExitScreen();
                MainMenu.resetOS();
                if (!Settings.soundDisabled)
                {
                    this.ScreenManager.playAlertSound();
                }
                OS os = new OS();
                os.SaveGameUserName    = "******";
                os.SaveUserAccountName = "__test";
                this.ScreenManager.AddScreen((GameScreen)os, new PlayerIndex?(this.ScreenManager.controllingPlayer));
                os.Flags.AddFlag("TutorialComplete");
                os.delayer.RunAllDelayedActions();
                os.threadedSaveExecute(false);
                this.ScreenManager.RemoveScreen((GameScreen)os);
                OS.WillLoadSave = true;
                MainMenu.resetOS();
                os = new OS();
                os.SaveGameUserName    = "******";
                os.SaveUserAccountName = "__test";
                this.ScreenManager.AddScreen((GameScreen)os, new PlayerIndex?(this.ScreenManager.controllingPlayer));
                os.delayer.Post(ActionDelayer.Wait(0.1), (Action)(() => Game1.getSingleton().IsMouseVisible = true));
                os.delayer.Post(ActionDelayer.Wait(0.4), (Action)(() =>
                {
                    os.runCommand("debug");
                    ComputerLoader.loadMission("Content/Missions/MainHub/Intro/Intro01.xml", false);
                }));
                if (!Settings.EnableDLC)
                {
                    ComputerLoader.loadMission("Content/Missions/BitMission0.xml", false);
                }
            }
            if (Button.doButton(8803, 634, 225, 225, 23, "New DLC Test Session", new Color?(Settings.EnableDLC ? Color.Gray : MainMenu.buttonColor)) && canRun && canRun)
            {
                this.ExitScreen();
                MainMenu.resetOS();
                if (!Settings.soundDisabled)
                {
                    this.ScreenManager.playAlertSound();
                }
                OS os1 = new OS();
                os1.SaveGameUserName    = "******";
                os1.SaveUserAccountName = "__test";
                this.ScreenManager.AddScreen((GameScreen)os1, new PlayerIndex?(this.ScreenManager.controllingPlayer));
                SessionAccelerator.AccelerateSessionToDLCHA((object)os1);
                os1.threadedSaveExecute(false);
                this.ScreenManager.RemoveScreen((GameScreen)os1);
                OS.WillLoadSave = true;
                MainMenu.resetOS();
                Settings.initShowsTutorial = false;
                OS os2 = new OS();
                os2.SaveGameUserName    = "******";
                os2.SaveUserAccountName = "__test";
                this.ScreenManager.AddScreen((GameScreen)os2, new PlayerIndex?(this.ScreenManager.controllingPlayer));
                os2.delayer.Post(ActionDelayer.Wait(0.15), (Action)(() => Game1.getSingleton().IsMouseVisible = true));
            }
            if (Button.doButton(8806, 634, 250, 225, 23, "Run Test Suite", new Color?(MainMenu.buttonColor)))
            {
                this.testSuiteResult = TestSuite.RunTestSuite(this.ScreenManager, false);
            }
            if (Button.doButton(8809, 634, 275, 225, 23, "Run Quick Tests", new Color?(MainMenu.buttonColor)))
            {
                this.testSuiteResult = TestSuite.RunTestSuite(this.ScreenManager, true);
            }
            else
            {
                if (Button.doButton(8812, 634, 300, 225, 23, "Start Full DLC Test", new Color?(MainMenu.buttonColor)) && canRun)
                {
                    this.StartFullDLCTest();
                }
                if (this.testSuiteResult == null)
                {
                    return;
                }
                TextItem.doFontLabel(new Vector2(635f, 325f), Utils.SuperSmartTwimForWidth(this.testSuiteResult, 600, GuiData.tinyfont), GuiData.tinyfont, new Color?(this.testSuiteResult.Length > 950 ? Utils.AddativeRed : Utils.AddativeWhite), float.MaxValue, float.MaxValue, false);
            }
        }
コード例 #15
0
ファイル: MainMenu.cs プロジェクト: hochladen/Hacknet
 private void HookUpCreationEvents()
 {
     this.loginScreen.RequestGoBack += (Action)(() => this.State = MainMenu.MainMenuState.Normal);
     this.loginScreen.StartNewGameForUsernameAndPass += (Action <string, string>)((username, pass) =>
     {
         if (SaveFileManager.AddUser(username, pass))
         {
             string filePathForLogin = SaveFileManager.GetFilePathForLogin(username, pass);
             this.ExitScreen();
             MainMenu.resetOS();
             if (!Settings.soundDisabled)
             {
                 this.ScreenManager.playAlertSound();
             }
             try
             {
                 OS os = new OS();
                 os.SaveGameUserName    = filePathForLogin;
                 os.SaveUserAccountName = username;
                 if (this.NextStartedGameShouldBeDLCAccelerated)
                 {
                     os.IsDLCConventionDemo = true;
                     os.Flags.AddFlag("TutorialComplete");
                     Settings.EnableDLC         = true;
                     Settings.initShowsTutorial = false;
                     os.initShowsTutorial       = false;
                 }
                 this.ScreenManager.AddScreen((GameScreen)os, new PlayerIndex?(this.ScreenManager.controllingPlayer));
                 os.Flags.AddFlag("startVer:" + MainMenu.OSVersion);
                 if (!this.NextStartedGameShouldBeDLCAccelerated)
                 {
                     return;
                 }
                 SessionAccelerator.AccelerateSessionToDLCStart((object)os);
                 os.delayer.Post(ActionDelayer.Wait(0.15), (Action)(() => Game1.getSingleton().IsMouseVisible = true));
                 this.NextStartedGameShouldBeDLCAccelerated = false;
             }
             catch (Exception ex)
             {
                 this.UpdateUIForSaveCreationFailed(ex);
             }
         }
         else
         {
             this.loginScreen.ResetForNewAccount();
             this.loginScreen.WriteToHistory(" ERROR: Username invalid or already in use.");
         }
     });
     this.loginScreen.LoadGameForUserFileAndUsername += (Action <string, string>)((userFile, username) =>
     {
         this.ExitScreen();
         MainMenu.resetOS();
         if (SaveFileManager.StorageMethods[0].FileExists(userFile))
         {
             OS.WillLoadSave = true;
             OS os = new OS();
             os.SaveGameUserName    = userFile;
             os.SaveUserAccountName = username;
             try
             {
                 this.ScreenManager.AddScreen((GameScreen)os, new PlayerIndex?(this.ScreenManager.controllingPlayer));
             }
             catch (XmlException ex)
             {
                 this.UpdateUIForSaveCorruption(userFile, (Exception)ex);
             }
             catch (FormatException ex)
             {
                 this.UpdateUIForSaveCorruption(userFile, (Exception)ex);
             }
             catch (NullReferenceException ex)
             {
                 this.UpdateUIForSaveCorruption(userFile, (Exception)ex);
             }
             catch (FileNotFoundException ex)
             {
                 this.UpdateUIForSaveMissing(userFile, (Exception)ex);
             }
             catch (ContentLoadException ex1)
             {
                 string str = Utils.ReadEntireContentsOfStream(SaveFileManager.StorageMethods[0].GetFileReadStream(userFile));
                 if (str.Contains("DigiPets"))
                 {
                     string data = str.Replace("DigiPets", "Neopals").Replace("DigiPoints", "Neopoints");
                     for (int index = 0; index < 3; ++index)
                     {
                         try
                         {
                             Thread.Sleep(200);
                             SaveFileManager.StorageMethods[0].WriteFileData(userFile, data);
                             break;
                         }
                         catch (IOException ex2)
                         {
                         }
                         Thread.Sleep(500);
                     }
                     MainMenu.AccumErrors = "-- Savefile Automatically Upgraded - Try again! --";
                 }
                 else
                 {
                     this.UpdateUIForSaveCorruption(userFile, (Exception)ex1);
                 }
             }
         }
         else
         {
             OS.WillLoadSave = false;
             this.UpdateUIForSaveMissing(userFile, (Exception) new FileNotFoundException());
         }
     });
     this.attractModeScreen.Start += (Action)(() =>
     {
         try
         {
             this.ExitScreen();
             MainMenu.resetOS();
             if (!Settings.soundDisabled)
             {
                 this.ScreenManager.playAlertSound();
             }
             this.ScreenManager.AddScreen((GameScreen) new OS(), new PlayerIndex?(this.ScreenManager.controllingPlayer));
         }
         catch (Exception ex)
         {
             Utils.writeToFile("OS Load Error: " + ex.ToString() + "\n\n" + ex.StackTrace, "crashLog.txt");
         }
     });
     this.attractModeScreen.StartDLC += (Action)(() =>
     {
         try
         {
             this.ExitScreen();
             MainMenu.resetOS();
             Settings.EnableDLC = true;
             Settings.initShowsTutorial = false;
             if (!Settings.soundDisabled)
             {
                 this.ScreenManager.playAlertSound();
             }
             OS os = new OS();
             os.IsDLCConventionDemo = true;
             os.Flags.AddFlag("TutorialComplete");
             os.SaveGameUserName = "******" + Settings.ConventionLoginName + ".xml";
             os.SaveUserAccountName = Settings.ConventionLoginName;
             this.ScreenManager.AddScreen((GameScreen)os, new PlayerIndex?(this.ScreenManager.controllingPlayer));
             os.allFactions.setCurrentFaction("Bibliotheque", os);
             ThemeManager.setThemeOnComputer((object)os.thisComputer, "DLC/Themes/RiptideClassicTheme.xml");
             ThemeManager.switchTheme((object)os, "DLC/Themes/RiptideClassicTheme.xml");
             for (int index1 = 0; index1 < 60; ++index1)
             {
                 int index2;
                 do
                 {
                     index2 = Utils.random.Next(os.netMap.nodes.Count);
                 }while (os.netMap.nodes[index2].idName == "mainHub" || os.netMap.nodes[index2].idName == "entropy00" || os.netMap.nodes[index2].idName == "entropy01");
                 os.netMap.discoverNode(os.netMap.nodes[index2]);
             }
             os.delayer.Post(ActionDelayer.Wait(0.15), (Action)(() =>
             {
                 Game1.getSingleton().IsMouseVisible = true;
                 os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[22], "SSHCrack.exe"));
                 os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[21], "FTPBounce.exe"));
                 MissionFunctions.runCommand(7, "changeSong");
                 MusicManager.stop();
             }));
             os.delayer.Post(ActionDelayer.Wait(38.0), (Action)(() => ComputerLoader.loadMission("Content/DLC/Missions/Demo/DLCDemointroMission1.xml", false)));
         }
         catch (Exception ex)
         {
             Utils.writeToFile("OS Load Error: " + ex.ToString() + "\n\n" + ex.StackTrace, "crashLog.txt");
         }
     });
     this.extensionsScreen.ExitClicked += (Action)(() => this.State = MainMenu.MainMenuState.Normal);
     this.extensionsScreen.CreateNewAccountForExtension_UserAndPass += (Action <string, string>)((user, pass) => MainMenu.CreateNewAccountForExtensionAndStart(user, pass, this.ScreenManager, (GameScreen)this, this.extensionsScreen));
     this.extensionsScreen.LoadAccountForExtension_FileAndUsername  += (Action <string, string>)((userFile, username) =>
     {
         this.ExitScreen();
         MainMenu.resetOS();
         Settings.IsInExtensionMode = true;
         OS.WillLoadSave            = SaveFileManager.StorageMethods[0].FileExists(userFile);
         this.ScreenManager.AddScreen((GameScreen) new OS()
         {
             SaveGameUserName    = userFile,
             SaveUserAccountName = username
         }, new PlayerIndex?(this.ScreenManager.controllingPlayer));
     });
 }
コード例 #16
0
ファイル: SALoadMission.cs プロジェクト: hochladen/Hacknet
 public override void Trigger(object os_obj)
 {
     ComputerLoader.loadMission(Utils.GetFileLoadPrefix() + this.MissionName, false);
 }
コード例 #17
0
ファイル: HubFaction.cs プロジェクト: strangea/OpenHacknet
        public override void addValue(int value, object os)
        {
            var oldValue = playerValue;

            base.addValue(value, os);
            if (valuePassedPoint(oldValue, 1) && !((OS)os).Flags.HasFlag("themeChangerAdded"))
            {
                var folder1 = Programs.getComputer((OS)os, "mainHubAssets").files.root.searchForFolder("bin");
                var folder2 = new Folder("ThemeChanger");
                folder2.files.Add(new FileEntry(PortExploits.crackExeData[14], "ThemeChanger.exe"));
                var dataEntry =
                    "\n-- Theme Changer Readme --\n\nThis program allows for fast hot-swapping of x-server theme files from local and remote conneced sources.\nFiles in the \"Remote\" row are remotely hosted valid theme files in the currently nagivated folder on a connected machine.\nFiles in the \"Local\" row are locally hosted theme files in the home or sys folder.\nThemeChanger allows a user to select any of these, and will automatically download it's contents into x-server.sys\nin the system folder, and activate the system theme without the need for a reboot.\nThe program will also automatically back up existing themes so that all known styles are preserved for future use.";
                folder2.files.Add(new FileEntry(dataEntry, "info.txt"));
                folder1.folders.Add(folder2);
                ((OS)os).delayer.Post(ActionDelayer.Wait(1.0), () =>
                {
                    SendAssetAddedNotification(os);
                    ((OS)os).Flags.AddFlag("themeChangerAdded");
                    ((OS)os).saveGame();
                });
            }
            if (valuePassedPoint(oldValue, 4))
            {
                ((OS)os).delayer.Post(ActionDelayer.Wait(2.0), () =>
                {
                    ((MissionHubServer)Programs.getComputer((OS)os, "mainHub").getDaemon(typeof(MissionHubServer)))
                    .AddMissionToListings("Content/Missions/MainHub/BitSet/Missions/BitHubSet01.xml");
                    ((OS)os).saveGame();
                });
            }
            else if (playerValue >= 7 && ((OS)os).Flags.HasFlag("decypher") &&
                     (((OS)os).Flags.HasFlag("dechead") && !((OS)os).Flags.HasFlag("csecRankingS2Pass")))
            {
                SendNotification(os, "Project Junebug");
                ((OS)os).Flags.AddFlag("csecRankingS2Pass");
                ((OS)os).saveGame();
            }
            else
            {
                if (playerValue < 10 || ((OS)os).Flags.HasFlag("bitPathStarted"))
                {
                    return;
                }
                ((OS)os).Flags.AddFlag("bitPathStarted");
                ((OS)os).delayer.Post(ActionDelayer.Wait(1.6),
                                      () => ComputerLoader.loadMission("Content/Missions/BitPath/BitAdv_Intro.xml"));
                Programs.getComputer((OS)os, "mainHubAssets")
                .files.root.searchForFolder("bin")
                .folders.Add(new Folder("Misc")
                {
                    files =
                    {
                        new FileEntry(PortExploits.crackExeData[9],                           "Decypher.exe"),
                        new FileEntry(PortExploits.crackExeData[10],                          "DECHead.exe"),
                        new FileEntry(PortExploits.crackExeData[104],                         "KBT_PortTest.exe"),
                        new FileEntry("Kellis BioTech medical port cycler - target 104-103.", "kbt_readme.txt")
                    }
                });
                SendNotification(os,
                                 "Agent,\nAdditional resources have been added to the CSEC members asset pool, for your free use. Find them in the misc folder on the asset server.\n\nThankyou,\n -" +
                                 name, name + " Admins :: Asset Uploads");
            }
        }
コード例 #18
0
        public static void runCommand(int value, string name)
        {
            MissionFunctions.assertOS();
            if (name.ToLower().Trim() == "none")
            {
                return;
            }
            if (name.Equals("addRank"))
            {
                if (!OS.TestingPassOnly || MissionFunctions.os.currentFaction != null)
                {
                    MissionFunctions.os.currentFaction.addValue(value, (object)MissionFunctions.os);
                    string email = MailServer.generateEmail(LocaleTerms.Loc("Contract Successful"), string.Format(Utils.readEntireFile("Content/LocPost/MissionCompleteEmail.txt"), (object)MissionFunctions.os.currentFaction.getRank(), (object)MissionFunctions.os.currentFaction.getMaxRank(), (object)MissionFunctions.os.currentFaction.name), MissionFunctions.os.currentFaction.name + " ReplyBot");
                    ((MailServer)MissionFunctions.os.netMap.mailServer.getDaemon(typeof(MailServer))).addMail(email, MissionFunctions.os.defaultUser.name);
                }
                else if (OS.DEBUG_COMMANDS && MissionFunctions.os.currentFaction == null)
                {
                    MissionFunctions.os.write("----------");
                    MissionFunctions.os.write("----------");
                    MissionFunctions.os.write("ERROR IN FUNCTION 'addRank'");
                    MissionFunctions.os.write("Player is not assigned to a faction, so rank cannot be added!");
                    MissionFunctions.os.write("Make sure you have assigned a player a faction with the 'SetFaction' function before using this!");
                    MissionFunctions.os.write("----------");
                    MissionFunctions.os.write("----------");
                }
            }
            else if (name.Equals("addRankSilent"))
            {
                if (OS.TestingPassOnly && MissionFunctions.os.currentFaction == null)
                {
                    return;
                }
                MissionFunctions.os.currentFaction.addValue(value, (object)MissionFunctions.os);
            }
            else if (name.StartsWith("addFlags:"))
            {
                foreach (string flag in name.Substring("addFlags:".Length).Split(Utils.commaDelim, StringSplitOptions.RemoveEmptyEntries))
                {
                    MissionFunctions.os.Flags.AddFlag(flag);
                }
                CustomFaction currentFaction = MissionFunctions.os.currentFaction as CustomFaction;
                if (currentFaction == null)
                {
                    return;
                }
                currentFaction.CheckForAllCustomActionsToRun((object)MissionFunctions.os);
            }
            else if (name.StartsWith("removeFlags:"))
            {
                string[] strArray = name.Substring("removeFlags:".Length).Split(Utils.commaDelim, StringSplitOptions.RemoveEmptyEntries);
                for (int index = 0; index < strArray.Length; ++index)
                {
                    if (MissionFunctions.os.Flags.HasFlag(strArray[index]))
                    {
                        MissionFunctions.os.Flags.RemoveFlag(strArray[index]);
                    }
                }
                CustomFaction currentFaction = MissionFunctions.os.currentFaction as CustomFaction;
                if (currentFaction == null)
                {
                    return;
                }
                currentFaction.CheckForAllCustomActionsToRun((object)MissionFunctions.os);
            }
            else if (name.StartsWith("setFaction:"))
            {
                string newFaction = name.Substring("setFaction:".Length);
                bool   flag       = false;
                foreach (KeyValuePair <string, Faction> faction in MissionFunctions.os.allFactions.factions)
                {
                    if (faction.Value.idName.ToLower() == newFaction.ToLower())
                    {
                        MissionFunctions.os.allFactions.setCurrentFaction(newFaction, MissionFunctions.os);
                        flag = true;
                        break;
                    }
                }
                if (!flag && OS.TestingPassOnly)
                {
                    throw new NullReferenceException("Faction " + newFaction + "not found for setFaction action!");
                }
            }
            else if (name.StartsWith("loadConditionalActions:"))
            {
                RunnableConditionalActions.LoadIntoOS(name.Substring("loadConditionalActions:".Length), (object)MissionFunctions.os);
            }
            else if (name.Equals("triggerThemeHackRevenge"))
            {
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(5.0), (Action)(() =>
                {
                    string email = MailServer.generateEmail(LocaleTerms.Loc("Are you Kidding me?"), Utils.readEntireFile("Content/LocPost/NaixEmail.txt"), "*****@*****.**");
                    ((MailServer)MissionFunctions.os.netMap.mailServer.getDaemon(typeof(MailServer))).addMail(email, MissionFunctions.os.defaultUser.name);
                    MissionFunctions.os.delayer.Post(ActionDelayer.Wait(24.0), (Action)(() =>
                    {
                        try
                        {
                            HackerScriptExecuter.runScript("HackerScripts/ThemeHack.txt", (object)MissionFunctions.os, (string)null, (string)null);
                        }
                        catch (Exception ex)
                        {
                            if (!Settings.recoverFromErrorsSilently)
                            {
                                throw ex;
                            }
                            MissionFunctions.os.write("CAUTION: UNSYNDICATED OUTSIDE CONNECTION ATTEMPT");
                            MissionFunctions.os.write("RECOVERED FROM CONNECTION SUBTERFUGE SUCCESSFULLY");
                            Console.WriteLine("Critical error loading hacker script - aborting");
                        }
                    }));
                }));
            }
            else if (name.Equals("changeSong"))
            {
                switch (value)
                {
                case 2:
                    MusicManager.transitionToSong("Music\\The_Quickening");
                    break;

                case 3:
                    MusicManager.transitionToSong("Music\\TheAlgorithm");
                    break;

                case 4:
                    MusicManager.transitionToSong("Music\\Ryan3");
                    break;

                case 5:
                    MusicManager.transitionToSong("Music\\Bit(Ending)");
                    break;

                case 6:
                    MusicManager.transitionToSong("Music\\Rico_Puestel-Roja_Drifts_By");
                    break;

                case 7:
                    MusicManager.transitionToSong("Music\\out_run_the_wolves");
                    break;

                case 8:
                    MusicManager.transitionToSong("Music\\Irritations");
                    break;

                case 9:
                    MusicManager.transitionToSong("Music\\Broken_Boy");
                    break;

                case 10:
                    MusicManager.transitionToSong("Music\\Ryan10");
                    break;

                case 11:
                    MusicManager.transitionToSong("Music\\tetrameth");
                    break;

                default:
                    MusicManager.transitionToSong("Music\\Revolve");
                    break;
                }
            }
            else if (name.Equals("entropyEndMissionSetup"))
            {
                MissionFunctions.runCommand(3, "changeSong");
                Computer  comp1      = MissionFunctions.findComp("corp0#IS");
                Computer  comp2      = MissionFunctions.findComp("corp0#MF");
                Computer  comp3      = MissionFunctions.findComp("corp0#BU");
                FileEntry fileEntry1 = new FileEntry(Computer.generateBinaryString(5000), "HacknetOS.rar");
                FileEntry fileEntry2 = new FileEntry(Computer.generateBinaryString(4000), "HacknetOS_Data.xnb");
                FileEntry fileEntry3 = new FileEntry(Computer.generateBinaryString(4000), "HacknetOS_Content.xnb");
                Folder    folder1    = comp1.files.root.folders[2];
                folder1.files.Add(fileEntry1);
                folder1.files.Add(fileEntry2);
                folder1.files.Add(fileEntry3);
                Folder folder2 = comp2.files.root.folders[2];
                folder2.files.Add(fileEntry1);
                folder2.files.Add(fileEntry2);
                folder2.files.Add(fileEntry3);
                FileEntry fileEntry4 = new FileEntry(fileEntry1.data, fileEntry1.name + "_backup");
                FileEntry fileEntry5 = new FileEntry(fileEntry2.data, fileEntry2.name + "_backup");
                FileEntry fileEntry6 = new FileEntry(fileEntry3.data, fileEntry3.name + "_backup");
                Folder    folder3    = comp3.files.root.folders[2];
                folder3.files.Add(fileEntry4);
                folder3.files.Add(fileEntry5);
                folder3.files.Add(fileEntry6);
                comp1.traceTime           = Computer.BASE_TRACE_TIME * 7.5f;
                comp3.traceTime           = Computer.BASE_TRACE_TIME * 7.5f;
                comp2.traceTime           = Computer.BASE_TRACE_TIME * 7.5f;
                comp2.portsNeededForCrack = 3;
                comp1.portsNeededForCrack = 2;
                comp3.portsNeededForCrack = 2;
                Folder folder4 = MissionFunctions.findComp("entropy01").files.root.folders[2];
                folder4.files.Add(new FileEntry(PortExploits.crackExeData[25], "SMTPoverflow.exe"));
                folder4.files.Add(new FileEntry(PortExploits.crackExeData[80], "WebServerWorm.exe"));
            }
            else if (name.Equals("entropyAddSMTPCrack"))
            {
                Folder folder = MissionFunctions.findComp("entropy01").files.root.folders[2];
                bool   flag   = false;
                for (int index = 0; index < folder.files.Count; ++index)
                {
                    if (folder.files[index].data == PortExploits.crackExeData[25] || folder.files[index].name == "SMTPoverflow.exe")
                    {
                        flag = true;
                    }
                }
                if (!flag)
                {
                    folder.files.Add(new FileEntry(PortExploits.crackExeData[25], Utils.GetNonRepeatingFilename("SMTPoverflow", ".exe", folder)));
                }
                MissionFunctions.os.Flags.AddFlag("ThemeHackTransitionAssetsAdded");
            }
            else if (name.Equals("transitionToBitMissions"))
            {
                if (Settings.isDemoMode)
                {
                    MissionFunctions.runCommand(6, "changeSong");
                    if (Settings.isPressBuildDemo)
                    {
                        ComputerLoader.loadMission("Content/Missions/Demo/PressBuild/DemoMission01.xml", false);
                    }
                    else
                    {
                        ComputerLoader.loadMission("Content/Missions/Demo/AvconDemo.xml", false);
                    }
                }
                else
                {
                    ComputerLoader.loadMission("Content/Missions/BitMission0.xml", false);
                }
            }
            else if (name.Equals("entropySendCSECInvite"))
            {
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(6.0), (Action)(() => ComputerLoader.loadMission("Content/Missions/MainHub/Intro/Intro01.xml", false)));
            }
            else if (name.Equals("hubBitSetComplete01"))
            {
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(4.0), (Action)(() => MissionFunctions.runCommand(1, "addRank")));
                MissionFunctions.runCommand(3, "changeSong");
                MissionFunctions.os.Flags.AddFlag("csecBitSet01Complete");
            }
            else if (name.Equals("enTechEnableOfflineBackup"))
            {
                Programs.getComputer(MissionFunctions.os, "EnTechOfflineBackup");
                MissionFunctions.os.Flags.AddFlag("VaporSequencerEnabled");
                Folder folder1 = MissionFunctions.findComp("mainHubAssets").files.root.searchForFolder("bin");
                Folder folder2 = folder1.searchForFolder("Sequencer");
                if (folder2 == null)
                {
                    folder2 = new Folder("Sequencer");
                    folder1.folders.Add(folder2);
                }
                if (folder2.searchForFile("Sequencer.exe") != null)
                {
                    return;
                }
                folder2.files.Add(new FileEntry(PortExploits.crackExeData[17], "Sequencer.exe"));
            }
            else if (name.Equals("rudeNaixResponse"))
            {
                AchievementsManager.Unlock("rude_response", false);
            }
            else if (name.Equals("assignPlayerToHubServerFaction"))
            {
                MissionFunctions.os.allFactions.setCurrentFaction("hub", MissionFunctions.os);
                Computer         computer   = Programs.getComputer(MissionFunctions.os, "mainHub");
                MissionHubServer daemon     = (MissionHubServer)computer.getDaemon(typeof(MissionHubServer));
                UserDetail       userDetail = new UserDetail(MissionFunctions.os.defaultUser.name, "reptile", (byte)3);
                computer.addNewUser(computer.ip, userDetail);
                daemon.addUser(userDetail);
                MissionFunctions.os.homeNodeID        = "mainHub";
                MissionFunctions.os.homeAssetServerID = "mainHubAssets";
                MissionFunctions.runCommand(3, "changeSong");
                MissionFunctions.os.Flags.AddFlag("CSEC_Member");
                AchievementsManager.Unlock("progress_csec", false);
                if (!MissionFunctions.os.HasLoadedDLCContent || !Settings.EnableDLC || MissionFunctions.os.Flags.HasFlag("dlc_complete"))
                {
                    return;
                }
                daemon.AddMissionToListings("Content/DLC/Missions/BaseGameConnectors/Missions/CSEC_DLCConnectorIntro.xml", 1);
            }
            else if (name.Equals("assignPlayerToEntropyFaction"))
            {
                MissionFunctions.runCommand(6, "changeSong");
                MissionFunctions.os.homeNodeID        = "entropy00";
                MissionFunctions.os.homeAssetServerID = "entropy01";
                AchievementsManager.Unlock("progress_entropy", false);
            }
            else if (name.Equals("assignPlayerToLelzSec"))
            {
                MissionFunctions.os.homeNodeID        = "lelzSecHub";
                MissionFunctions.os.homeAssetServerID = "lelzSecHub";
                MissionFunctions.os.Flags.AddFlag("LelzSec_Member");
                AchievementsManager.Unlock("progress_lelz", false);
            }
            else if (name.Equals("lelzSecVictory"))
            {
                AchievementsManager.Unlock("secret_path_complete", false);
            }
            else if (name.Equals("demoFinalMissionEnd"))
            {
                MissionFunctions.os.exes.Clear();
                PostProcessor.EndingSequenceFlashOutActive             = true;
                PostProcessor.EndingSequenceFlashOutPercentageComplete = 1f;
                MusicManager.stop();
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.2), (Action)(() => MissionFunctions.os.content.Load <SoundEffect>("Music/Ambient/spiral_gauge_down").Play()));
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(3.0), (Action)(() =>
                {
                    PostProcessor.dangerModeEnabled = false;
                    PostProcessor.dangerModePercentComplete = 0.0f;
                    MissionFunctions.os.ExitScreen();
                    MissionFunctions.os.ScreenManager.AddScreen((GameScreen) new DemoEndScreen());
                }));
            }
            else if (name.Equals("demoFinalMissionEndDLC"))
            {
                if (!Settings.isDemoMode)
                {
                    return;
                }
                MissionFunctions.os.exes.Clear();
                PostProcessor.EndingSequenceFlashOutActive             = true;
                PostProcessor.EndingSequenceFlashOutPercentageComplete = 1f;
                MusicManager.stop();
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.0), (Action)(() => MissionFunctions.os.content.Load <SoundEffect>("SFX/BrightFlash").Play()));
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.4), (Action)(() => MissionFunctions.os.content.Load <SoundEffect>("SFX/TraceKill").Play()));
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(1.6), (Action)(() =>
                {
                    MusicManager.playSongImmediatley("DLC/Music/DreamHead");
                    PostProcessor.dangerModeEnabled = false;
                    PostProcessor.dangerModePercentComplete = 0.0f;
                    MissionFunctions.os.ScreenManager.AddScreen((GameScreen) new DemoEndScreen()
                    {
                        StopsMusic = false,
                        IsDLCDemoScreen = true
                    });
                    MissionFunctions.os.ExitScreen();
                }));
            }
            else if (name.Equals("demoFinalMissionStart"))
            {
                MissionFunctions.os.Flags.AddFlag("DemoSequencerEnabled");
                MusicManager.transitionToSong("Music/Ambient/dark_drone_008");
            }
            else if (name.Equals("CSECTesterGameWorldSetup"))
            {
                for (int index = 0; index < PortExploits.services.Count && index < 4; ++index)
                {
                    MissionFunctions.os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[PortExploits.portNums[index]], PortExploits.cracks[PortExploits.portNums[index]]));
                }
                for (int index = 0; index < 4; ++index)
                {
                    Computer c = new Computer("DebugShell" + (object)index, NetworkMap.generateRandomIP(), MissionFunctions.os.netMap.getRandomPosition(), 0, (byte)2, MissionFunctions.os);
                    c.adminIP = MissionFunctions.os.thisComputer.adminIP;
                    MissionFunctions.os.netMap.nodes.Add(c);
                    MissionFunctions.os.netMap.discoverNode(c);
                }
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.2), (Action)(() =>
                {
                    MissionFunctions.os.allFactions.setCurrentFaction("entropy", MissionFunctions.os);
                    MissionFunctions.os.currentMission = (ActiveMission)null;
                    MissionFunctions.os.netMap.discoverNode(Programs.getComputer(MissionFunctions.os, "entropy00"));
                    MissionFunctions.os.netMap.discoverNode(Programs.getComputer(MissionFunctions.os, "entropy01"));
                }));
            }
            else if (name.Equals("EntropyFastFowardSetup"))
            {
                MissionFunctions.os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[22], PortExploits.cracks[22]));
                MissionFunctions.os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[21], PortExploits.cracks[21]));
                for (int index = 0; index < 3; ++index)
                {
                    Computer c = new Computer("DebugShell" + (object)index, NetworkMap.generateRandomIP(), MissionFunctions.os.netMap.getRandomPosition(), 0, (byte)2, MissionFunctions.os);
                    c.adminIP = MissionFunctions.os.thisComputer.adminIP;
                    MissionFunctions.os.netMap.nodes.Add(c);
                    MissionFunctions.os.netMap.discoverNode(c);
                }
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.2), (Action)(() =>
                {
                    MissionFunctions.os.allFactions.setCurrentFaction("entropy", MissionFunctions.os);
                    MissionFunctions.os.currentMission = (ActiveMission)null;
                    MissionFunctions.os.netMap.discoverNode(Programs.getComputer(MissionFunctions.os, "entropy00"));
                    MissionFunctions.os.netMap.discoverNode(Programs.getComputer(MissionFunctions.os, "entropy01"));
                    Computer computer = Programs.getComputer(MissionFunctions.os, "entropy01");
                    UserDetail user = computer.users[0];
                    user.known = true;
                    computer.users[0] = user;
                    MissionFunctions.os.allFactions.factions[MissionFunctions.os.allFactions.currentFaction].playerValue = 2;
                    MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.2), (Action)(() =>
                    {
                        MissionFunctions.os.Flags.AddFlag("eosPathStarted");
                        ComputerLoader.loadMission("Content/Missions/Entropy/StartingSet/eosMissions/eosIntroDelayer.xml", false);
                    }));
                }));
            }
            else if (name.Equals("CSECFastFowardSetup"))
            {
                MissionFunctions.os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[22], PortExploits.cracks[22]));
                MissionFunctions.os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[21], PortExploits.cracks[21]));
                for (int index = 0; index < 3; ++index)
                {
                    Computer c = new Computer("DebugShell" + (object)index, NetworkMap.generateRandomIP(), MissionFunctions.os.netMap.getRandomPosition(), 0, (byte)2, MissionFunctions.os);
                    c.adminIP = MissionFunctions.os.thisComputer.adminIP;
                    MissionFunctions.os.netMap.nodes.Add(c);
                    MissionFunctions.os.netMap.discoverNode(c);
                }
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(0.2), (Action)(() =>
                {
                    MissionFunctions.runCommand(0, "assignPlayerToHubServerFaction");
                    MissionFunctions.os.currentMission = (ActiveMission)null;
                    MissionFunctions.os.netMap.discoverNode(Programs.getComputer(MissionFunctions.os, "mainHub"));
                    MissionFunctions.os.netMap.discoverNode(Programs.getComputer(MissionFunctions.os, "mainHubAssets"));
                    Computer computer = Programs.getComputer(MissionFunctions.os, "mainHubAssets");
                    UserDetail user = computer.users[0];
                    user.known = true;
                    computer.users[0] = user;
                }));
            }
            else if (name.Equals("csecAddTraceKill"))
            {
                Folder folder = MissionFunctions.findComp("mainHubAssets").files.root.searchForFolder("bin");
                Folder f      = folder.searchForFolder("TK");
                if (f == null)
                {
                    f = new Folder("TK");
                    folder.folders.Add(f);
                }
                f.files.Add(new FileEntry(FileEncrypter.EncryptString(PortExploits.crackExeData[12], "Vapor Trick Enc.", "NULL", "dx122DX", ".exe"), Utils.GetNonRepeatingFilename("TraceKill", ".dec", f)));
                MissionFunctions.os.Flags.AddFlag("bitPathStarted");
                MissionFunctions.runCommand(10, "changeSong");
            }
            else if (name.Equals("junebugComplete"))
            {
                Computer computer = Programs.getComputer(MissionFunctions.os, "pacemaker01");
                if (computer != null)
                {
                    HeartMonitorDaemon daemon = (HeartMonitorDaemon)computer.getDaemon(typeof(HeartMonitorDaemon));
                    if (daemon != null)
                    {
                        daemon.ForceStopBeepSustainSound();
                    }
                }
                MissionFunctions.runCommand(1, "addRank");
            }
            else if (name.Equals("eosIntroMissionSetup"))
            {
                MissionFunctions.findComp("entropy01").files.root.searchForFolder("bin").files.Add(new FileEntry(PortExploits.crackExeData[13], "eosDeviceScan.exe"));
                MissionFunctions.os.delayer.Post(ActionDelayer.Wait(8.0), (Action)(() =>
                {
                    string email = MailServer.generateEmail("Fwd: eOS Stuff", Utils.readEntireFile("Content/Post/eosScannerMail.txt"), "vtfx", new List <string>((IEnumerable <string>) new string[1] {
                        "note#%#" + LocaleTerms.Loc("eOS Security Basics") + "#%#" + Utils.readEntireFile("Content/LocPost/eOSNote.txt")
                    }));
                    ((MailServer)MissionFunctions.os.netMap.mailServer.getDaemon(typeof(MailServer))).addMail(email, MissionFunctions.os.defaultUser.name);
                    MissionFunctions.os.saveGame();
                }));
                MissionFunctions.runCommand(4, "changeSong");
                MissionFunctions.os.saveGame();
            }
            else if (name.Equals("eosIntroEndFunc"))
            {
                MissionFunctions.runCommand(1, "addRank");
                MissionListingServer daemon         = (MissionListingServer)MissionFunctions.findComp("entropy00").getDaemon(typeof(MissionListingServer));
                List <ActiveMission> branchMissions = MissionFunctions.os.branchMissions;
                ActiveMission        m = (ActiveMission)ComputerLoader.readMission("Content/Missions/Entropy/StartingSet/eosMissions/eosAddedMission.xml");
                daemon.addMisison(m, false);
                MissionFunctions.os.branchMissions = branchMissions;
            }
            else if (name.Equals("changeSongDLC"))
            {
                switch (value)
                {
                case 2:
                    MusicManager.transitionToSong("DLC\\Music\\snidelyWhiplash");
                    break;

                case 3:
                    MusicManager.transitionToSong("DLC\\Music\\Slow_Motion");
                    break;

                case 4:
                    MusicManager.transitionToSong("DLC\\Music\\World_Chase");
                    break;

                case 5:
                    MusicManager.transitionToSong("DLC\\Music\\HOME_Resonance");
                    break;

                case 6:
                    MusicManager.transitionToSong("DLC\\Music\\Remi_Finale");
                    break;

                case 7:
                    MusicManager.transitionToSong("DLC\\Music\\RemiDrone");
                    break;

                case 8:
                    MusicManager.transitionToSong("DLC\\Music\\DreamHead");
                    break;

                case 9:
                    MusicManager.transitionToSong("DLC\\Music\\Userspacelike");
                    break;

                case 10:
                    MusicManager.transitionToSong("DLC\\Music\\CrashTrack");
                    break;

                default:
                    MusicManager.transitionToSong("DLC\\Music\\Remi2");
                    break;
                }
            }
            else if (name.Equals("scanAndStartDLCVenganceHack"))
            {
                Computer comp = MissionFunctions.findComp("dAttackTarget");
                if (comp == null)
                {
                    return;
                }
                Folder folder = comp.files.root.searchForFolder("log");
                bool   flag   = false;
                for (int index = 0; index < folder.files.Count; ++index)
                {
                    if (folder.files[index].data.Contains(MissionFunctions.os.thisComputer.ip))
                    {
                        SARunFunction saRunFunction = new SARunFunction()
                        {
                            DelayHost = "dhs", FunctionName = "triggerDLCHackRevenge", FunctionValue = 1
                        };
                        ((DLCHubServer)Programs.getComputer(MissionFunctions.os, "dhs").getDaemon(typeof(DLCHubServer))).DelayedActions.AddAction((SerializableAction)saRunFunction, 16f);
                        break;
                    }
                }
                if (!flag)
                {
                    MissionFunctions.runCommand(4, "changeSongDLC");
                }
            }
            else if (name.Equals("triggerDLCHackRevenge"))
            {
                try
                {
                    HackerScriptExecuter.runScript("DLC/ActionScripts/Hackers/SystemHack.txt", (object)MissionFunctions.os, (string)null, (string)null);
                }
                catch (Exception ex)
                {
                    if (!Settings.recoverFromErrorsSilently)
                    {
                        throw ex;
                    }
                    MissionFunctions.os.write("CAUTION: UNSYNDICATED OUTSIDE CONNECTION ATTEMPT");
                    MissionFunctions.os.write("RECOVERED FROM CONNECTION SUBTERFUGE SUCCESSFULLY");
                    Console.WriteLine("Critical error loading hacker script - aborting\r\n" + Utils.GenerateReportFromException(ex));
                }
            }
            else if (name.Equals("activateAircraftStatusOverlay"))
            {
                MissionFunctions.os.AircraftInfoOverlay.Activate();
                MissionFunctions.os.AircraftInfoOverlay.IsMonitoringDLCEndingCases = true;
            }
            else if (name.Equals("activateAircraftStatusOverlayLabyrinthsMonitoring"))
            {
                MissionFunctions.os.AircraftInfoOverlay.IsMonitoringDLCEndingCases = true;
            }
            else if (name.Equals("deActivateAircraftStatusOverlay"))
            {
                MissionFunctions.os.AircraftInfoOverlay.IsActive = false;
                MissionFunctions.os.AircraftInfoOverlay.IsMonitoringDLCEndingCases = false;
                MissionFunctions.os.Flags.AddFlag("AircraftInfoOverlayDeactivated");
            }
            else if (name.Equals("defAttackAircraft"))
            {
                Computer computer = Programs.getComputer(MissionFunctions.os, "dair_crash");
                Folder   folder   = computer.files.root.searchForFolder("FlightSystems");
                for (int index = 0; index < folder.files.Count; ++index)
                {
                    if (folder.files[index].name == "747FlightOps.dll")
                    {
                        folder.files.RemoveAt(index);
                        break;
                    }
                }
                ((AircraftDaemon)computer.getDaemon(typeof(AircraftDaemon))).StartReloadFirmware();
                if (MissionFunctions.os.AircraftInfoOverlay.IsActive)
                {
                    return;
                }
                MissionFunctions.os.AircraftInfoOverlay.Activate();
                MissionFunctions.os.AircraftInfoOverlay.IsMonitoringDLCEndingCases = true;
            }
            else if (name.Equals("playAirlineCrashSongSequence"))
            {
                MusicManager.playSongImmediatley("DLC\\Music\\Remi_Finale");
                MediaPlayer.IsRepeating = false;
            }
            else if (name.Equals("flashUI"))
            {
                MissionFunctions.os.warningFlash();
            }
            else if (name.Equals("addRankSilent"))
            {
                MissionFunctions.os.currentFaction.addValue(value, (object)MissionFunctions.os);
            }
            else if (name.StartsWith("addRankFaction:"))
            {
                string str = name.Substring("addRankFaction:".Length);
                foreach (KeyValuePair <string, Faction> faction in MissionFunctions.os.allFactions.factions)
                {
                    if (faction.Value.idName.ToLower() == str.ToLower())
                    {
                        faction.Value.addValue(value, (object)MissionFunctions.os);
                        break;
                    }
                }
            }
            else if (name.StartsWith("setHubServer:"))
            {
                string str = name.Substring("setHubServer:".Length);
                MissionFunctions.os.homeNodeID = str;
            }
            else if (name.StartsWith("setAssetServer:"))
            {
                string str = name.Substring("setAssetServer:".Length);
                MissionFunctions.os.homeAssetServerID = str;
            }
            else if (name.StartsWith("playCustomSong:"))
            {
                string songName = Utils.GetFileLoadPrefix() + name.Substring("playCustomSong:".Length);
                if (songName.EndsWith(".ogg"))
                {
                    songName = songName.Substring(0, songName.Length - ".ogg".Length);
                }
                if (songName.StartsWith("Content"))
                {
                    songName = songName.Substring("Content/".Length);
                }
                else if (songName.StartsWith("Extensions"))
                {
                    songName = "../" + songName;
                }
                MusicManager.transitionToSong(songName);
            }
            else if (name.StartsWith("playCustomSongImmediatley:"))
            {
                string songname = Utils.GetFileLoadPrefix() + name.Substring("playCustomSongImmediatley:".Length);
                if (songname.EndsWith(".ogg"))
                {
                    songname = songname.Substring(0, songname.Length - ".ogg".Length);
                }
                if (songname.StartsWith("Content"))
                {
                    songname = songname.Substring("Content/".Length);
                }
                else if (songname.StartsWith("Extensions"))
                {
                    songname = "../" + songname;
                }
                MusicManager.playSongImmediatley(songname);
            }
            else
            {
                if (OS.TestingPassOnly && !string.IsNullOrWhiteSpace(name))
                {
                    throw new FormatException("No Command Function " + name);
                }
                if (MissionFunctions.ReportErrorInCommand != null)
                {
                    MissionFunctions.ReportErrorInCommand("No command found for \"" + name + "\" with value \"" + (object)value + "\"");
                }
            }
        }
コード例 #19
0
ファイル: ExtensionTests.cs プロジェクト: hochladen/Hacknet
        public static string TestExtensionCustomFactionsActions(ScreenManager screenMan, out int errorsAdded)
        {
            int    errorsAdded1 = 0;
            string str1         = "";
            OS     os1          = (OS)ExtensionTests.SetupOSForTests("Content/Tests/TestExtension", screenMan);
            string str2         = str1 + ExtensionTests.TestExtensionsFactions(os1.allFactions, out errorsAdded1);
            Folder folder       = Programs.getComputer(os1, "linkNode1").files.root.searchForFolder("bin");

            if (folder.searchForFile("FTPBounce.exe") != null)
            {
                ++errorsAdded1;
                str2 += "\nFile somehow already on target system for faction test";
            }
            if (os1.currentFaction != null)
            {
                ++errorsAdded1;
                str2 += "\nFaction does not start as null";
            }
            ComputerLoader.loadMission(Utils.GetFileLoadPrefix() + "Missions/FactionTestMission0.xml", false);
            if (os1.currentFaction.idName != "autoTestFaction")
            {
                ++errorsAdded1;
                str2 += "\nLoading mission with start function to set player faction does not load faction correctly";
            }
            if (os1.currentFaction.playerValue != 0)
            {
                ++errorsAdded1;
                str2 = str2 + "\nPlayer faction not expected before mission completion. Expected 0, got " + (object)os1.currentFaction.playerValue;
            }
            os1.currentMission.finish();
            if (os1.currentFaction.playerValue != 5)
            {
                ++errorsAdded1;
                str2 = str2 + "\nPlayer faction not expected after mission completion. Expected 5, got " + (object)os1.currentFaction.playerValue;
            }
            FileEntry fileEntry = folder.searchForFile("FTPBounce.exe");

            if (fileEntry == null)
            {
                ++errorsAdded1;
                str2 += "\nFile not added correctly in response to faction progression";
            }
            else if (fileEntry.data != PortExploits.crackExeData[21])
            {
                ++errorsAdded1;
                str2 += "\nFile added through faction system data not correctly filtered.";
            }
            os1.threadedSaveExecute(false);
            screenMan.RemoveScreen((GameScreen)os1);
            OS.WillLoadSave = true;
            OS     os2  = (OS)ExtensionTests.SetupOSForTests("Content/Tests/TestExtension", screenMan);
            string str3 = str2 + ExtensionTests.TestExtensionsFactions(os2.allFactions, out errorsAdded1);

            if (os2.currentFaction.idName != "autoTestFaction")
            {
                ++errorsAdded1;
                str3 += "\nFaction not set correctly after load";
            }
            CustomFaction currentFaction = os2.currentFaction as CustomFaction;

            if (currentFaction == null)
            {
                ++errorsAdded1;
                str3 += "\nFaction is not set to the correct type after load";
            }
            if (currentFaction.CustomActions.Count != 1)
            {
                ++errorsAdded1;
                str3 += "\nFaction has incorrect number of remaining custom actions after load";
            }
            if (os2.currentFaction.playerValue != 5)
            {
                ++errorsAdded1;
                str3 = str3 + "\nPlayer faction value not set correctly after load. Expected 5, got " + (object)os2.currentFaction.playerValue;
            }
            os2.currentMission.finish();
            if (Programs.getComputer(os2, "linkNode1").files.root.searchForFolder("bin").searchForFile("SecondTestFile.txt") == null)
            {
                ++errorsAdded1;
                str3 += "\nSecond File not added correctly in response to faction progression";
            }
            screenMan.RemoveScreen((GameScreen)os2);
            ExtensionTests.CompleteExtensiontesting();
            errorsAdded = errorsAdded1;
            return(str3);
        }
コード例 #20
0
 public static void runCommand(int value, string name)
 {
     assertOS();
     if (name.Equals("addRank"))
     {
         os.currentFaction.addValue(value, os);
         var mail = MailServer.generateEmail("Contract Successful",
             "Congratulations,\nThe client of your recent contract has reported a success, and is pleased with your work.\n" +
             "You are now free to accept further contracts from the contact database.\n" +
             "\nYour Current Ranking is " + os.currentFaction.getRank() + " of " +
             os.currentFaction.getMaxRank() + ".\n" + "\nThankyou,\n -" + os.currentFaction.name,
             os.currentFaction.name + " ReplyBot");
         ((MailServer) os.netMap.mailServer.getDaemon(typeof (MailServer))).addMail(mail, os.defaultUser.name);
     }
     else if (name.StartsWith("addFlags:"))
     {
         foreach (
             var flag in
                 name.Substring("addFlags:".Length)
                     .Split(Utils.commaDelim, StringSplitOptions.RemoveEmptyEntries))
             os.Flags.AddFlag(flag);
     }
     if (name.Equals("triggerThemeHackRevenge"))
         os.delayer.Post(ActionDelayer.Wait(5.0), () =>
         {
             var mail = MailServer.generateEmail("Are you Kidding me?",
                 "Seriously?\n\n" +
                 "You think you can just f**k with my stuff and leave without consequence? Did you think I wouldn't notice?\n" +
                 "\nDid you think I wouldn't FIND you!?\n" +
                 "\nYou're a pathetic scrit kiddie, you couldn't hack a f*****g honeypot without your precious buttons and scrollbars.\n" +
                 "\nSay goodbye to your x-server, idiot." + "\n\nNaix", "*****@*****.**");
             ((MailServer) os.netMap.mailServer.getDaemon(typeof (MailServer))).addMail(mail, os.defaultUser.name);
             os.delayer.Post(ActionDelayer.Wait(24.0), () =>
             {
                 try
                 {
                     HackerScriptExecuter.runScript("ThemeHack.txt", os);
                 }
                 catch (Exception ex)
                 {
                     if (!Settings.recoverFromErrorsSilently)
                         throw ex;
                     os.write("CAUTION: UNSYNDICATED OUTSIDE CONNECTION ATTEMPT");
                     os.write("RECOVERED FROM CONNECTION SUBTERFUGE SUCCESSFULLY");
                     Console.WriteLine("Critical error loading hacker script - aborting");
                 }
             });
         });
     else if (name.Equals("changeSong"))
     {
         switch (value)
         {
             case 2:
                 MusicManager.transitionToSong("Music\\The_Quickening");
                 break;
             case 3:
                 MusicManager.transitionToSong("Music\\TheAlgorithm");
                 break;
             case 4:
                 MusicManager.transitionToSong("Music\\Ryan3");
                 break;
             case 5:
                 MusicManager.transitionToSong("Music\\Bit(Ending)");
                 break;
             case 6:
                 MusicManager.transitionToSong("Music\\Rico_Puestel-Roja_Drifts_By");
                 break;
             case 7:
                 MusicManager.transitionToSong("Music\\out_run_the_wolves");
                 break;
             case 8:
                 MusicManager.transitionToSong("Music\\Irritations");
                 break;
             case 9:
                 MusicManager.transitionToSong("Music\\Broken_Boy");
                 break;
             case 10:
                 MusicManager.transitionToSong("Music\\Ryan10");
                 break;
             case 11:
                 MusicManager.transitionToSong("Music\\tetrameth");
                 break;
             default:
                 MusicManager.transitionToSong("Music\\Revolve");
                 break;
         }
     }
     else if (name.Equals("entropyEndMissionSetup"))
     {
         runCommand(3, "changeSong");
         var comp1 = findComp("corp0#IS");
         var comp2 = findComp("corp0#MF");
         var comp3 = findComp("corp0#BU");
         var fileEntry1 = new FileEntry(Computer.generateBinaryString(5000), "HacknetOS.rar");
         var fileEntry2 = new FileEntry(Computer.generateBinaryString(4000), "HacknetOS_Data.xnb");
         var fileEntry3 = new FileEntry(Computer.generateBinaryString(4000), "HacknetOS_Content.xnb");
         var folder1 = comp1.files.root.folders[2];
         folder1.files.Add(fileEntry1);
         folder1.files.Add(fileEntry2);
         folder1.files.Add(fileEntry3);
         var folder2 = comp2.files.root.folders[2];
         folder2.files.Add(fileEntry1);
         folder2.files.Add(fileEntry2);
         folder2.files.Add(fileEntry3);
         var fileEntry4 = new FileEntry(fileEntry1.data, fileEntry1.name + "_backup");
         var fileEntry5 = new FileEntry(fileEntry2.data, fileEntry2.name + "_backup");
         var fileEntry6 = new FileEntry(fileEntry3.data, fileEntry3.name + "_backup");
         var folder3 = comp3.files.root.folders[2];
         folder3.files.Add(fileEntry4);
         folder3.files.Add(fileEntry5);
         folder3.files.Add(fileEntry6);
         comp1.traceTime = Computer.BASE_TRACE_TIME*7.5f;
         comp3.traceTime = Computer.BASE_TRACE_TIME*7.5f;
         comp2.traceTime = Computer.BASE_TRACE_TIME*7.5f;
         comp2.portsNeededForCrack = 3;
         comp1.portsNeededForCrack = 2;
         comp3.portsNeededForCrack = 2;
         var folder4 = findComp("entropy01").files.root.folders[2];
         folder4.files.Add(new FileEntry(PortExploits.crackExeData[25], "SMTPoverflow.exe"));
         folder4.files.Add(new FileEntry(PortExploits.crackExeData[80], "WebServerWorm.exe"));
     }
     else if (name.Equals("entropyAddSMTPCrack"))
     {
         var f = findComp("entropy01").files.root.folders[2];
         f.files.Add(new FileEntry(PortExploits.crackExeData[25],
             Utils.GetNonRepeatingFilename("SMTPoverflow", ".exe", f)));
         os.saveGame();
     }
     else if (name.Equals("transitionToBitMissions"))
     {
         if (Settings.isDemoMode)
         {
             runCommand(6, "changeSong");
             if (Settings.isPressBuildDemo)
                 ComputerLoader.loadMission("Content/Missions/Demo/PressBuild/DemoMission01.xml");
             else
                 ComputerLoader.loadMission("Content/Missions/Demo/AvconDemo.xml");
         }
         else
             ComputerLoader.loadMission("Content/Missions/BitMission0.xml");
     }
     else if (name.Equals("entropySendCSECInvite"))
         os.delayer.Post(ActionDelayer.Wait(6.0),
             () => ComputerLoader.loadMission("Content/Missions/MainHub/Intro/Intro01.xml"));
     else if (name.Equals("hubBitSetComplete01"))
     {
         os.delayer.Post(ActionDelayer.Wait(4.0), () => runCommand(1, "addRank"));
         runCommand(3, "changeSong");
         os.Flags.AddFlag("csecBitSet01Complete");
     }
     else if (name.Equals("enTechEnableOfflineBackup"))
     {
         var computer = Programs.getComputer(os, "EnTechOfflineBackup");
         Programs.getComputer(os, "EnTechMainframe").links.Add(os.netMap.nodes.IndexOf(computer));
         os.Flags.AddFlag("VaporSequencerEnabled");
         var folder1 = findComp("mainHubAssets").files.root.searchForFolder("bin");
         var folder2 = folder1.searchForFolder("Sequencer");
         if (folder2 == null)
         {
             folder2 = new Folder("Sequencer");
             folder1.folders.Add(folder2);
         }
         if (folder2.searchForFile("Sequencer.exe") != null)
             return;
         folder2.files.Add(new FileEntry(PortExploits.crackExeData[17], "Sequencer.exe"));
     }
     else if (name.Equals("rudeNaixResponse"))
         AchievementsManager.Unlock("rude_response", false);
     else if (name.Equals("assignPlayerToHubServerFaction"))
     {
         os.allFactions.setCurrentFaction("hub", os);
         var computer = Programs.getComputer(os, "mainHub");
         var missionHubServer = (MissionHubServer) computer.getDaemon(typeof (MissionHubServer));
         var userDetail = new UserDetail(os.defaultUser.name, "reptile", 3);
         computer.addNewUser(computer.ip, userDetail);
         missionHubServer.addUser(userDetail);
         os.homeNodeID = "mainHub";
         os.homeAssetServerID = "mainHubAssets";
         runCommand(3, "changeSong");
         os.Flags.AddFlag("CSEC_Member");
         AchievementsManager.Unlock("progress_csec", false);
     }
     else if (name.Equals("assignPlayerToEntropyFaction"))
     {
         runCommand(6, "changeSong");
         AchievementsManager.Unlock("progress_entropy", false);
     }
     else if (name.Equals("assignPlayerToLelzSec"))
     {
         os.homeNodeID = "lelzSecHub";
         os.homeAssetServerID = "lelzSecHub";
         os.Flags.AddFlag("LelzSec_Member");
         AchievementsManager.Unlock("progress_lelz", false);
     }
     else if (name.Equals("lelzSecVictory"))
         AchievementsManager.Unlock("secret_path_complete", false);
     else if (name.Equals("demoFinalMissionEnd"))
     {
         os.exes.Clear();
         PostProcessor.EndingSequenceFlashOutActive = true;
         PostProcessor.EndingSequenceFlashOutPercentageComplete = 1f;
         MusicManager.stop();
         os.delayer.Post(ActionDelayer.Wait(0.2),
             () => os.content.Load<SoundEffect>("Music/Ambient/spiral_gauge_down").Play());
         os.delayer.Post(ActionDelayer.Wait(3.0), () =>
         {
             PostProcessor.dangerModeEnabled = false;
             PostProcessor.dangerModePercentComplete = 0.0f;
             os.ExitScreen();
             os.ScreenManager.AddScreen(new DemoEndScreen());
         });
     }
     else if (name.Equals("demoFinalMissionStart"))
     {
         os.Flags.AddFlag("DemoSequencerEnabled");
         MusicManager.transitionToSong("Music/Ambient/dark_drone_008");
     }
     else if (name.Equals("CSECTesterGameWorldSetup"))
     {
         for (var index = 0; index < PortExploits.services.Count && index < 4; ++index)
             os.thisComputer.files.root.folders[2].files.Add(
                 new FileEntry(PortExploits.crackExeData[PortExploits.portNums[index]],
                     PortExploits.cracks[PortExploits.portNums[index]]));
         for (var index = 0; index < 4; ++index)
         {
             var c = new Computer("DebugShell" + index, NetworkMap.generateRandomIP(),
                 os.netMap.getRandomPosition(), 0, 2, os);
             c.adminIP = os.thisComputer.adminIP;
             os.netMap.nodes.Add(c);
             os.netMap.discoverNode(c);
         }
         os.delayer.Post(ActionDelayer.Wait(0.2), () =>
         {
             os.allFactions.setCurrentFaction("entropy", os);
             os.currentMission = null;
             os.netMap.discoverNode(Programs.getComputer(os, "entropy00"));
             os.netMap.discoverNode(Programs.getComputer(os, "entropy01"));
         });
     }
     else if (name.Equals("EntropyFastFowardSetup"))
     {
         os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[22],
             PortExploits.cracks[22]));
         os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[21],
             PortExploits.cracks[21]));
         for (var index = 0; index < 3; ++index)
         {
             var c = new Computer("DebugShell" + index, NetworkMap.generateRandomIP(),
                 os.netMap.getRandomPosition(), 0, 2, os);
             c.adminIP = os.thisComputer.adminIP;
             os.netMap.nodes.Add(c);
             os.netMap.discoverNode(c);
         }
         os.delayer.Post(ActionDelayer.Wait(0.2), () =>
         {
             os.allFactions.setCurrentFaction("entropy", os);
             os.currentMission = null;
             os.netMap.discoverNode(Programs.getComputer(os, "entropy00"));
             os.netMap.discoverNode(Programs.getComputer(os, "entropy01"));
             var computer = Programs.getComputer(os, "entropy01");
             var userDetail = computer.users[0];
             userDetail.known = true;
             computer.users[0] = userDetail;
             os.allFactions.factions[os.allFactions.currentFaction].playerValue = 2;
             os.delayer.Post(ActionDelayer.Wait(0.2), () =>
             {
                 os.Flags.AddFlag("eosPathStarted");
                 ComputerLoader.loadMission(
                     "Content/Missions/Entropy/StartingSet/eosMissions/eosIntroDelayer.xml");
             });
         });
     }
     else if (name.Equals("CSECFastFowardSetup"))
     {
         os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[22],
             PortExploits.cracks[22]));
         os.thisComputer.files.root.folders[2].files.Add(new FileEntry(PortExploits.crackExeData[21],
             PortExploits.cracks[21]));
         for (var index = 0; index < 3; ++index)
         {
             var c = new Computer("DebugShell" + index, NetworkMap.generateRandomIP(),
                 os.netMap.getRandomPosition(), 0, 2, os);
             c.adminIP = os.thisComputer.adminIP;
             os.netMap.nodes.Add(c);
             os.netMap.discoverNode(c);
         }
         os.delayer.Post(ActionDelayer.Wait(0.2), () =>
         {
             runCommand(0, "assignPlayerToHubServerFaction");
             os.currentMission = null;
             os.netMap.discoverNode(Programs.getComputer(os, "mainHub"));
             os.netMap.discoverNode(Programs.getComputer(os, "mainHubAssets"));
             var computer = Programs.getComputer(os, "mainHubAssets");
             var userDetail = computer.users[0];
             userDetail.known = true;
             computer.users[0] = userDetail;
         });
     }
     else if (name.Equals("csecAddTraceKill"))
     {
         var folder = findComp("mainHubAssets").files.root.searchForFolder("bin");
         var f = folder.searchForFolder("TK");
         if (f == null)
         {
             f = new Folder("TK");
             folder.folders.Add(f);
         }
         f.files.Add(
             new FileEntry(
                 FileEncrypter.EncryptString(PortExploits.crackExeData[12], "Vapor Trick Enc.", "NULL", "dx122DX",
                     ".exe"), Utils.GetNonRepeatingFilename("TraceKill", ".dec", f)));
         os.Flags.AddFlag("bitPathStarted");
         runCommand(10, "changeSong");
     }
     else if (name.Equals("junebugComplete"))
     {
         var computer = Programs.getComputer(os, "pacemaker01");
         if (computer != null)
         {
             var heartMonitorDaemon = (HeartMonitorDaemon) computer.getDaemon(typeof (HeartMonitorDaemon));
             if (heartMonitorDaemon != null)
                 heartMonitorDaemon.ForceStopBeepSustainSound();
         }
         runCommand(1, "addRank");
     }
     else if (name.Equals("eosIntroMissionSetup"))
     {
         findComp("entropy01")
             .files.root.searchForFolder("bin")
             .files.Add(new FileEntry(PortExploits.crackExeData[13], "eosDeviceScan.exe"));
         os.delayer.Post(ActionDelayer.Wait(8.0), () =>
         {
             var mail = MailServer.generateEmail("Fwd: eOS Stuff",
                 Utils.readEntireFile("Content/Post/eosScannerMail.txt"), "vtfx", new List<string>(new string[1]
                 {
                     "note#%#eOS Security Basics#%#" +
                     ("1: Get admin access to a computer that you suspect has an eOS device sync'd to it\n" +
                      "2: Run eosdevicescanner.exe\nto scan for paired devices and automatically open connection ports\n" +
                      "3: connect to the revealed device\n" +
                      "3: login with\nuser: \"admin\"\npassword: \"alpine\"\n\n" +
                      "The password is the same for all eOS devices!")
                 }));
             ((MailServer) os.netMap.mailServer.getDaemon(typeof (MailServer))).addMail(mail, os.defaultUser.name);
         });
         runCommand(4, "changeSong");
         os.saveGame();
     }
     else
     {
         if (!name.Equals("eosIntroEndFunc"))
             return;
         runCommand(1, "addRank");
         var missionListingServer =
             (MissionListingServer) findComp("entropy00").getDaemon(typeof (MissionListingServer));
         var list = os.branchMissions;
         var m =
             (ActiveMission)
                 ComputerLoader.readMission(
                     "Content/Missions/Entropy/StartingSet/eosMissions/eosAddedMission.xml");
         missionListingServer.addMisison(m);
         os.branchMissions = list;
     }
 }