Exemplo n.º 1
0
        private static void ReplaceLoadFactionIL(ILContext il)
        {
            ILCursor c = new ILCursor(il);

            c.GotoNext(MoveType.Before,
                       x => x.MatchLdloc(4),
                       x => x.MatchCallOrCallvirt(AccessTools.Method(typeof(XmlReader), nameof(XmlReader.Create), new Type[] { typeof(Stream) })),
                       x => x.MatchStloc(5),
                       x => x.MatchLdloc(5),
                       x => x.MatchCallOrCallvirt(AccessTools.Method(typeof(Faction), nameof(Faction.loadFromSave)))
                       );

            c.Index++;
            c.RemoveRange(4);
            c.EmitDelegate <Func <FileStream, Faction> >(file =>
            {
                var factionExec         = new EventExecutor(new StreamReader(file).ReadToEnd(), false);
                ElementInfo factionInfo = null;
                factionExec.RegisterExecutor("*", (exec, info) =>
                {
                    factionInfo = info;
                }, ParseOption.ParseInterior);
                factionExec.Parse();
                return(ReplacementsCommon.LoadFaction(factionInfo));
            });
        }
Exemplo n.º 2
0
        static SaveLoader()
        {
            EventManager.onPluginUnload += OnPluginUnload;

            executor.RegisterExecutor("HacknetSave", (exec, info) =>
            {
                MissionGenerator.generationCount = info.Attributes.GetInt("generatedMissionCount", 100);
                os.username          = os.defaultUser.name = info.Attributes.GetString("Username");
                os.LanguageCreatedIn = info.Attributes.GetString("Language", "en-us");
                os.IsInDLCMode       = info.Attributes.GetBool("DLCMode") && Settings.EnableDLC;
                os.DisableEmailIcon  = info.Attributes.GetBool("DisableMailIcon") && Settings.EnableDLC;

                if (os.LanguageCreatedIn != Settings.ActiveLocale)
                {
                    LocaleActivator.ActivateLocale(os.LanguageCreatedIn, os.content);
                    Settings.ActiveLocale = os.LanguageCreatedIn;
                }
            });
            executor.RegisterExecutor("HacknetSave.DLC", (exec, info) =>
            {
                os.IsDLCSave = true;

                os.IsInDLCMode         = info.Attributes.GetBool("Active");
                os.HasLoadedDLCContent = info.Attributes.GetBool("LoadedContent");

                if (os.HasLoadedDLCContent && !DLC1SessionUpgrader.HasDLC1Installed)
                {
                    MainMenu.AccumErrors = "LOAD ERROR: Save " + os.SaveGameUserName +
                                           " is configured for Labyrinths DLC, but it is not installed on this computer.\n\n\n";
                    os.ExitScreen();
                    os.IsExiting = true;
                }
            });
            executor.RegisterExecutor("HacknetSave.DLC.Flags",
                                      (exec, info) => os.PreDLCFaction = info.Attributes.GetString("OriginalFaction"));
            executor.RegisterExecutor("HacknetSave.DLC.OriginalVisibleNodes",
                                      (exec, info) => os.PreDLCVisibleNodesCache = info.Content ?? "",
                                      ParseOption.ParseInterior);
            executor.RegisterExecutor("HacknetSave.DLC.ConditionalActions",
                                      (exec, info) => os.ConditionalActions = ActionsLoader.LoadActionSets(info),
                                      ParseOption.ParseInterior);
            executor.RegisterExecutor("HacknetSave.Flags", (exec, info) =>
            {
                os.Flags.Flags.Clear();

                foreach (var flag in info.Content?.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) ?? new string[0])
                {
                    os.Flags.Flags.Add(flag
                                       .Replace("[%%COMMAREPLACED%%]", ",")
                                       .Replace("décrypté", "decypher"));
                }
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("HacknetSave.NetworkMap",
                                      (exec, info) => { Enum.TryParse(info.Attributes.GetString("sort"), out os.netMap.SortingAlgorithm); });
            executor.RegisterExecutor("HacknetSave.NetworkMap", (exec, info) =>
            {
                foreach (var daemon in os.netMap.nodes.SelectMany(x => x.daemons))
                {
                    daemon.loadInit();
                }

                os.netMap.loadAssignGameNodes();
            }, ParseOption.FireOnEnd);
            executor.RegisterExecutor("HacknetSave.NetworkMap.network.computer", (exec, info) =>
            {
                var comp = LoadComputer(info, os);
                if (comp != null)
                {
                    os.netMap.nodes.Add(comp);
                }
            },
                                      ParseOption.ParseInterior);
            executor.RegisterExecutor("HacknetSave.NetworkMap.visible", (exec, info) =>
            {
                foreach (var node in info.Content.Split((char[])null, StringSplitOptions.RemoveEmptyEntries))
                {
                    os.netMap.visibleNodes.Add(int.Parse(node));
                }
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("HacknetSave.mission", (exec, info) => os.currentMission = LoadMission(info));
            executor.RegisterExecutor("HacknetSave.AllFactions", (exec, info) =>
            {
                os.allFactions = new AllFactions
                {
                    currentFaction = info.Attributes.GetString("current", null)
                };

                foreach (var factionInfo in info.Children)
                {
                    var faction = ReplacementsCommon.LoadFaction(factionInfo);
                    os.allFactions.factions.Add(faction.idName, faction);
                }

                if (os.allFactions.currentFaction != null)
                {
                    os.allFactions.setCurrentFaction(os.allFactions.currentFaction, os);
                }
            }, ParseOption.ParseInterior);
            executor.RegisterExecutor("HacknetSave.other", (exec, info) =>
            {
                MusicManager.playSongImmediatley(info.Attributes.GetString("music", null));
                os.homeNodeID        = info.Attributes.GetString("homeNode", os.homeNodeID);
                os.homeAssetServerID = info.Attributes.GetString("homeAssetsNode", os.homeAssetServerID);
            });
        }