コード例 #1
0
        internal static void LoadContentForModExtensionListener(OSLoadContentEvent e)
        {
            if (Extension.Handler.ActiveInfo == null)
            {
                return;
            }
            e.IsCancelled = true;
            var os = e.OS;

            if (os.canRunContent)
            {
                // setup for proper game function
                Settings.slowOSStartup     = false;
                Settings.initShowsTutorial = false;
                os.initShowsTutorial       = false;
                // replacing OS.LoadContent
                os.delayer = new ActionDelayer();
                ComputerLoader.init(os);
                os.content  = e.OS.ScreenManager.Game.Content;
                os.username = (os.SaveUserAccountName ?? (Settings.isConventionDemo ? Settings.ConventionLoginName : Environment.UserName));
                os.username = FileSanitiser.purifyStringForDisplay(os.username);
                var compLocation = new Vector2(0.1f, 0.5f);
                if (os.multiplayer && !os.isServer)
                {
                    compLocation = new Vector2(0.8f, 0.8f);
                }
                os.ramAvaliable         = os.totalRam;
                os.thisComputer         = new Computer(os.username + " PC", Utility.GenerateRandomIP(), compLocation, 5, 4, os);
                os.thisComputer.adminIP = os.thisComputer.ip;
                os.thisComputer.idName  = "playerComp";
                os.thisComputer.Memory  = new MemoryContents();
                os.GibsonIP             = Utility.GenerateRandomIP();
                UserDetail value = os.thisComputer.users[0];
                value.known = true;
                os.thisComputer.users[0] = value;
                os.defaultUser           = new UserDetail(os.username, "password", 1);
                os.defaultUser.known     = true;
                ThemeManager.setThemeOnComputer(os.thisComputer, OSTheme.HacknetBlue);
                if (os.multiplayer)
                {
                    os.thisComputer.addMultiplayerTargetFile();
                    os.sendMessage("newComp #" + os.thisComputer.ip + "#" + compLocation.X +
                                   "#" + compLocation.Y + "#" + 5 + "#" + os.thisComputer.name);
                    os.multiplayerMissionLoaded = false;
                }
                if (!OS.WillLoadSave)
                {
                    People.init();
                }
                os.modules  = new List <Module>();
                os.exes     = new List <ExeModule>();
                os.shells   = new List <ShellExe>();
                os.shellIPs = new List <string>();
                Viewport viewport = os.ScreenManager.GraphicsDevice.Viewport;
                int      num2     = 205;
                var      num3     = (int)((viewport.Width - RamModule.MODULE_WIDTH - 6) * 0.44420000000000004);
                var      num4     = (int)((viewport.Width - RamModule.MODULE_WIDTH - 6) * 0.5558);
                int      height   = viewport.Height - num2 - OS.TOP_BAR_HEIGHT - 6;
                os.terminal = new Terminal(new Rectangle(viewport.Width - 2 - num3,
                                                         OS.TOP_BAR_HEIGHT,
                                                         num3,
                                                         viewport.Height - OS.TOP_BAR_HEIGHT - 2), os)
                {
                    name = "TERMINAL"
                };
                os.modules.Add(os.terminal);
                os.netMap = new NetworkMap(new Rectangle(RamModule.MODULE_WIDTH + 4,
                                                         viewport.Height - num2 - 2,
                                                         num4 - 1,
                                                         num2), os)
                {
                    name = "netMap v1.7"
                };
                os.modules.Add(os.netMap);
                os.display = new DisplayModule(new Rectangle(RamModule.MODULE_WIDTH + 4,
                                                             OS.TOP_BAR_HEIGHT,
                                                             num4 - 2,
                                                             height), os)
                {
                    name = "DISPLAY"
                };
                os.modules.Add(os.display);
                os.ram = new RamModule(new Rectangle(2,
                                                     OS.TOP_BAR_HEIGHT,
                                                     RamModule.MODULE_WIDTH,
                                                     os.ramAvaliable + RamModule.contentStartOffset), os)
                {
                    name = "RAM"
                };
                os.modules.Add(os.ram);
                foreach (var m in os.modules.ToArray())
                {
                    m.LoadContent();
                }
                if (os.allFactions == null)
                {
                    os.allFactions = new AllFactions();
                    os.allFactions.init();
                }
                bool flag = false;
                if (!OS.WillLoadSave)
                {
                    os.netMap.nodes.Insert(0, os.thisComputer);
                    os.netMap.visibleNodes.Add(0);
                    MusicManager.loadAsCurrentSong(os.IsDLCConventionDemo ? "Music\\out_run_the_wolves" : "Music\\Revolve");
                    os.LanguageCreatedIn = Settings.ActiveLocale;
                }
                else
                {
                    os.loadSaveFile();
                    flag = true;
                    Settings.initShowsTutorial = false;
                    SaveFixHacks.FixSavesWithTerribleHacks(os);
                }
                var computer = new Computer("JMail Email Server", Utility.GenerateRandomIP(), new Vector2(0.8f, 0.2f), 6, 1, os)
                {
                    idName = "jmail"
                };
                computer.daemons.Add(new MailServer(computer, "JMail", os));
                MailServer.shouldGenerateJunk = false;
                computer.users.Add(new UserDetail(os.defaultUser.name, "mailpassword", 2));
                computer.initDaemons();
                os.netMap.nodes.Add(computer);
                os.netMap.mailServer = computer;
                os.topBar            = new Rectangle(0, 0, viewport.Width, OS.TOP_BAR_HEIGHT - 1);
                os.crashModule       = new CrashModule(new Rectangle(0, 0, os.ScreenManager.GraphicsDevice.Viewport.Width, os.ScreenManager.GraphicsDevice.Viewport.Height), os);
                os.crashModule.LoadContent();
                Settings.IsInExtensionMode = false; // little hack to prevent intro text module ctor from throwing nullref
                os.introTextModule         = new IntroTextModule(new Rectangle(0, 0, os.ScreenManager.GraphicsDevice.Viewport.Width, os.ScreenManager.GraphicsDevice.Viewport.Height), os)
                {
                    complete = true,
                    text     = new string[] { "" }
                };
                os.introTextModule.LoadContent();
                Settings.IsInExtensionMode = true; // hack end
                os.traceTracker            = new TraceTracker(os);
                os.IncConnectionOverlay    = new IncomingConnectionOverlay(os);
                os.scanLines           = os.content.Load <Texture2D>("ScanLines");
                os.cross               = os.content.Load <Texture2D>("Cross");
                os.cog                 = os.content.Load <Texture2D>("Cog");
                os.saveIcon            = os.content.Load <Texture2D>("SaveIcon");
                os.beepSound           = os.content.Load <SoundEffect>("SFX/beep");
                os.mailicon            = new MailIcon(os, new Vector2(0f, 0f));
                os.mailicon.pos.X      = viewport.Width - os.mailicon.getWidth() - 2;
                os.hubServerAlertsIcon = new HubServerAlertsIcon(os.content, "dhs",
                                                                 new string[] { "@channel", "@" + os.defaultUser.name }
                                                                 );
                os.hubServerAlertsIcon.Init(os);
                if (os.HasLoadedDLCContent)
                {
                    os.AircraftInfoOverlay = new AircraftInfoOverlay(os);
                }
                SAChangeAlertIcon.UpdateAlertIcon(os);
                os.introTextModule.complete |= (flag || !Settings.slowOSStartup);
                if (!flag)
                {
                    MusicManager.playSong();
                }
                os.inputEnabled        = true;
                os.isLoaded            = true;
                os.fullscreen          = new Rectangle(0, 0, os.ScreenManager.GraphicsDevice.Viewport.Width, os.ScreenManager.GraphicsDevice.Viewport.Height);
                os.TraceDangerSequence = new TraceDangerSequence(os.content, os.ScreenManager.SpriteBatch, os.fullscreen, os);
                os.endingSequence      = new EndingSequenceModule(os.fullscreen, os);
                if (Settings.EnableDLC && DLC1SessionUpgrader.HasDLC1Installed)
                {
                    os.BootAssitanceModule = new BootCrashAssistanceModule(os.fullscreen, os);
                }
                if (Settings.EnableDLC && DLC1SessionUpgrader.HasDLC1Installed && HostileHackerBreakinSequence.IsInBlockingHostileFileState(os))
                {
                    os.rebootThisComputer();
                    os.BootAssitanceModule.ShouldSkipDialogueTypeout = true;
                }
                else
                {
                    if (Settings.EnableDLC && HostileHackerBreakinSequence.IsFirstSuccessfulBootAfterBlockingState(os))
                    {
                        HostileHackerBreakinSequence.ReactToFirstSuccesfulBoot(os);
                        os.rebootThisComputer();
                    }
                    if (!OS.TestingPassOnly)
                    {
                        os.runCommand("connect " + os.thisComputer.ip);
                    }
                    var folder2 = os.thisComputer.files.root.searchForFolder("sys");
                    if (folder2.searchForFile("Notes_Reopener.bat") != null)
                    {
                        os.runCommand("notes");
                    }
                }
                if (Settings.EnableDLC && DLC1SessionUpgrader.HasDLC1Installed && os.HasLoadedDLCContent)
                {
                    bool flag4 = false;
                    if (!os.Flags.HasFlag("AircraftInfoOverlayDeactivated"))
                    {
                        flag4 |= os.Flags.HasFlag("AircraftInfoOverlayActivated");
                        if (!flag4)
                        {
                            var  c       = Programs.getComputer(os, "dair_crash");
                            var  folder3 = c.files.root.searchForFolder("FlightSystems");
                            bool flag5   = false;
                            for (int i = 0; i < folder3.files.Count; i++)
                            {
                                flag5 |= folder3.files[i].name == "747FlightOps.dll";
                            }
                            var aircraftDaemon = (AircraftDaemon)c.getDaemon(typeof(AircraftDaemon));
                            if (!flag5 && !os.Flags.HasFlag("DLC_PlaneResult"))
                            {
                                flag4 = true;
                            }
                        }
                    }
                    if (flag4)
                    {
                        var c = Programs.getComputer(os, "dair_crash");
                        var aircraftDaemon = (AircraftDaemon)c.getDaemon(typeof(AircraftDaemon));
                        aircraftDaemon.StartReloadFirmware();
                        aircraftDaemon.StartUpdating();
                        os.AircraftInfoOverlay.Activate();
                        os.AircraftInfoOverlay.IsMonitoringDLCEndingCases = true;
                        MissionFunctions.runCommand(0, "playAirlineCrashSongSequence");
                    }
                }
            }
            else if (os.multiplayer)
            {
                os.initializeNetwork();
            }
            os.Flags.AddFlag("FirstAlertComplete");
            os.IsInDLCMode       = false;
            os.ShowDLCAlertsIcon = false;

            if (OS.WillLoadSave)
            {
                Stream stream = null;
                if (e.OS.ForceLoadOverrideStream != null && OS.TestingPassOnly)
                {
                    stream = e.OS.ForceLoadOverrideStream;
                }
                else
                {
                    stream = SaveFileManager.GetSaveReadStream(e.OS.SaveGameUserName);
                }
                Extension.Handler.LoadExtension(Extension.Handler.ActiveInfo.Id);
                Extension.Handler.ActiveInfo.OnLoad(e.OS, stream);
            }
            else
            {
                Extension.Handler.CanRegister = true;
                Extension.Handler.ActiveInfo.OnConstruct(e.OS);
                Extension.Handler.CanRegister = false;
            }
        }