public static void onEnablePostfix(ModManager.ModEntry __instance, ref bool __result)
            {
                if (!(GameController.Instance != null && GameController.Instance.isCampaignScenario) && __result)
                {
                    if (!ExtenedLoader.ContainsKey(__instance.mod.getIdentifier()))
                    {
                        string[] files = Directory.GetFiles(__instance.path, "*.assetProject",
                                                            SearchOption.TopDirectoryOnly);
                        if (files.Length != 0)
                        {
                            ExtendedLoader loader = new ExtendedLoader(files[0]);
                            ExtenedLoader.Add(__instance.mod.getIdentifier(), loader);
                        }
                    }

                    Debug.Log("Extended loader/ Loading:" + __instance.mod.getIdentifier());
                    if (ExtenedLoader.ContainsKey(__instance.mod.getIdentifier()))
                    {
                        try
                        {
                            if (!ExtenedLoader[__instance.mod.getIdentifier()].IsLoaded)
                            {
                                ExtenedLoader[__instance.mod.getIdentifier()].OnEnabled();
                            }
                        }
                        catch (Exception e)
                        {
                            Debug.LogError(e);
                        }
                    }
                }
            }
            public static void onDisablePostfix(ModManager.ModEntry __instance, ref bool __result)
            {
                Debug.Log("Extended loader/ Disabling:" + __instance.mod.getIdentifier());

                if (ExtenedLoader.ContainsKey(__instance.mod.getIdentifier()) && ExtenedLoader[__instance.mod.getIdentifier()].IsLoaded)
                {
                    ExtenedLoader[__instance.mod.getIdentifier()].onDisabled();
                }
            }
Пример #3
0
        public static void DrawMenu(ModManager.ModEntry modEntry, object[] param)
        {
            if (param == null || param.Length <= 1)
            {
                return;
            }
            if (param.Length == 2 && !((param[1] is Vector2) || (param[1] is Vector4)))
            {
                return;
            }
            if (!(param[0] is ScreenManager))
            {
                return;
            }
            ScreenManager screenManager = (ScreenManager)param[0];
            Vector4       ranged;

            if (param[1] is Vector2)
            {
                ranged = new Vector4((Vector2)param[1], screenManager.GraphicsDevice.Viewport.Width - ((Vector2)param[1]).X - 55, screenManager.GraphicsDevice.Viewport.Height - ((Vector2)param[1]).Y - 55);
            }
            else if (param[1] is Vector4)
            {
                ranged = (Vector4)param[1];
            }
            else if ((param[1] is int) && param.Length >= 3 && param.Length != 4)
            {
                int x = (int)param[1];
                int y = (int)param[2];

                int w = screenManager.GraphicsDevice.Viewport.Width - x - 55;
                int h = screenManager.GraphicsDevice.Viewport.Height - y - 55;

                if (param.Length == 5)
                {
                    w = (int)param[3];
                    h = (int)param[4];
                }

                ranged = new Vector4(x, y, w, h);
            }
            else
            {
                return;
            }

            TextItem.doMeasuredSmallLabel(new Vector2(ranged.X + 25, ranged.Y + 25), "ModsCore.Settings.FontName".Translate(), Color.White);
            settings.CurFont = SelectableTextList.doFancyList((modEntry.Info.Id + "FontName").GetHashCode(), (int)ranged.X, (int)ranged.Y + 50, (int)ranged.Z - 50, (int)ranged.W - 50, Main.FontName.ToArray(), settings.CurFont, Color.White);
        }
Пример #4
0
        public static bool Load(ModManager.ModEntry modEntry)
        {
            try
            {
                settings = Settings.Load <Settings>(modEntry);
            }
            catch
            {
                settings = new Settings();
            }
            if (settings.FontList.Count == 0)
            {
                settings.FontList.Add("Font_MSYH");
                settings.FontList.Add("Font_Song");
                settings.FontList.Sort();
                settings.CurFont = settings.FontList.IndexOf("Font_MSYH");
            }
            if (settings.CurFont < 0 || settings.CurFont > settings.FontList.Count - 1)
            {
                settings.CurFont = settings.FontList.IndexOf("Font_MSYH");
            }


            modEntry.SaveMethod          = SaveMethod;
            modEntry.DrawSettingUIMethod = DrawMenu;
            Harmony      = HarmonyInstance.Create(modEntry.Info.Id);
            Logger       = modEntry.Logger;
            GameAssembly = Assembly.GetCallingAssembly();

            //Patch MainMenu.drawMainMenuButtons
            try
            {
                var original = GameAssembly.GetType("Hacknet.MainMenu").GetMethod("drawMainMenuButtons", BindingFlags.NonPublic | BindingFlags.Instance);
                var postfix  = typeof(Main).GetMethod("drawMainMenuButtonsPostfix");
                Harmony.Patch(original, null, new HarmonyMethod(postfix));
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
            }

            //Patch MainMenu..ctor
            try
            {
                var original = GameAssembly.GetType("Hacknet.MainMenu").GetConstructor(new Type[] { });
                var postfix  = typeof(Main).GetMethod("OptionsMenuDrawPostfix");
                Harmony.Patch(original, null, new HarmonyMethod(postfix));
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
            }

            //Patch SpriteBatch.DrawString
            try
            {
                var original = typeof(SpriteBatch).GetMethod("DrawString", BindingFlags.Public | BindingFlags.Instance, null, new Type[] {
                    typeof(SpriteFont),
                    typeof(string),
                    typeof(Vector2),
                    typeof(Microsoft.Xna.Framework.Color),
                    typeof(float),
                    typeof(Vector2),
                    typeof(Vector2),
                    typeof(SpriteEffects),
                    typeof(float)
                }, new ParameterModifier[0]);
                var prefixCover = typeof(Main).GetMethod("DrawStringPrefixCover");
                Harmony.Patch(original, new HarmonyMethod(prefixCover), null);
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
            }

            //Patch Game.Game1LoadContentPostfix
            try
            {
                var original = typeof(Game1).GetMethod("LoadContent", BindingFlags.NonPublic | BindingFlags.Instance);
                var postfix  = typeof(Main).GetMethod("Game1LoadContentPostfix");
                Harmony.Patch(original, null, new HarmonyMethod(postfix));
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
            }

            //Patch OptionsMenu.Draw
            try
            {
                var original = GameAssembly.GetType("Hacknet.OptionsMenu").GetMethod("Draw", BindingFlags.Public | BindingFlags.Instance);
                var postfix  = typeof(Main).GetMethod("OptionsMenuDrawPostfix");
                Harmony.Patch(original, null, new HarmonyMethod(postfix));
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
            }

            Harmony.PatchAll();
            Logger.Log("LoadingComplete".Translate());
            return(true);
        }
Пример #5
0
 private static void SaveMethod(ModManager.ModEntry modEntry, object[] param) => settings.Save(modEntry);
Пример #6
0
 public override void Save(ModManager.ModEntry modEntry) => Save(this, modEntry);