using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Emit; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using UnityEngine; using UnityEngine.UI; namespace CheatEnabler; [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] public class CheatEnabler : BaseUnityPlugin { public new static readonly BepInEx.Logging.ManualLogSource Logger = BepInEx.Logging.Logger.CreateLogSource(PluginInfo.PLUGIN_NAME); private static bool _configWinInitialized = false; private static KeyboardShortcut _shortcut = KeyboardShortcut.Deserialize("H + LeftControl"); private static UIConfigWindow _configWin; private static string _unlockTechToMaximumLevel = ""; private static readonly List TechToUnlock = new(); private static Harmony _windowPatch; private static Harmony _patch; private static bool _initialized; private void Awake() { DevShortcuts.Enabled = Config.Bind("General", "DevShortcuts", true, "enable DevMode shortcuts"); AbnormalDisabler.Enabled = Config.Bind("General", "DisableAbnormalChecks", false, "disable all abnormal checks"); ResourcePatch.InfiniteEnabled = Config.Bind("Planet", "AlwaysInfiniteResource", false, "always infinite natural resource"); ResourcePatch.FastEnabled = Config.Bind("Planet", "FastMining", false, "super-fast mining speed"); WaterPumperPatch.Enabled = Config.Bind("Planet", "WaterPumpAnywhere", false, "Can pump water anywhere (while water type is not None)"); TerraformPatch.Enabled = Config.Bind("Planet", "TerraformAnyway", false, "Can do terraform without enough sands"); BirthPlanetPatch.SitiVeinsOnBirthPlanet = Config.Bind("Birth", "SiTiVeinsOnBirthPlanet", false, "Silicon/Titanium on birth planet"); BirthPlanetPatch.FireIceOnBirthPlanet = Config.Bind("Birth", "FireIceOnBirthPlanet", false, "Fire ice on birth planet"); BirthPlanetPatch.KimberliteOnBirthPlanet = Config.Bind("Birth", "KimberliteOnBirthPlanet", false, "Kimberlite on birth planet"); BirthPlanetPatch.FractalOnBirthPlanet = Config.Bind("Birth", "FractalOnBirthPlanet", false, "Fractal silicon on birth planet"); BirthPlanetPatch.OrganicOnBirthPlanet = Config.Bind("Birth", "OrganicOnBirthPlanet", false, "Organic crystal on birth planet"); BirthPlanetPatch.OpticalOnBirthPlanet = Config.Bind("Birth", "OpticalOnBirthPlanet", false, "Optical grating crystal on birth planet"); BirthPlanetPatch.SpiniformOnBirthPlanet = Config.Bind("Birth", "SpiniformOnBirthPlanet", false, "Spiniform stalagmite crystal on birth planet"); BirthPlanetPatch.UnipolarOnBirthPlanet = Config.Bind("Birth", "UnipolarOnBirthPlanet", false, "Unipolar magnet on birth planet"); BirthPlanetPatch.FlatBirthPlanet = Config.Bind("Birth", "FlatBirthPlanet", false, "Birth planet is solid flat (no water at all)"); BirthPlanetPatch.HighLuminosityBirthStar = Config.Bind("Birth", "HighLuminosityBirthStar", false, "Birth star has high luminosity"); _unlockTechToMaximumLevel = Config.Bind("General", "UnlockTechToMaxLevel", _unlockTechToMaximumLevel, "Unlock listed tech to MaxLevel").Value; I18N.Init(); I18N.Add("CheatEnabler Config", "CheatEnabler Config", "CheatEnabler设置"); I18N.Apply(); // UI Patch _windowPatch = Harmony.CreateAndPatchAll(typeof(UI.MyWindowManager.Patch)); _patch = Harmony.CreateAndPatchAll(typeof(CheatEnabler)); DevShortcuts.Init(); AbnormalDisabler.Init(); ResourcePatch.Init(); WaterPumperPatch.Init(); TerraformPatch.Init(); BirthPlanetPatch.Init(); foreach (var idstr in _unlockTechToMaximumLevel.Split(',')) { if (int.TryParse(idstr, out var id)) { TechToUnlock.Add(id); } } if (TechToUnlock.Count > 0) { Harmony.CreateAndPatchAll(typeof(UnlockTechOnGameStart)); } } public void OnDestroy() { BirthPlanetPatch.Uninit(); TerraformPatch.Uninit(); WaterPumperPatch.Uninit(); ResourcePatch.Uninit(); AbnormalDisabler.Uninit(); DevShortcuts.Uninit(); _patch?.UnpatchSelf(); _windowPatch?.UnpatchSelf(); } private void Update() { if (VFInput.inputing) { return; } if (_shortcut.IsDown()) ShowConfigWindow(); } [HarmonyPostfix, HarmonyPatch(typeof(UIRoot), "_OnOpen")] public static void UIRoot__OnOpen_Postfix() { if (_initialized) return; { var mainMenu = UIRoot.instance.uiMainMenu; var src = mainMenu.newGameButton.gameObject; var parent = src.transform.parent; var btn = Instantiate(src, parent); btn.name = "btn-cheatenabler-config"; var btnConfig = btn.GetComponent(); btnConfig.text.text = "CheatEnabler Config"; btnConfig.text.fontSize = btnConfig.text.fontSize * 7 / 8; I18N.OnInitialized += () => { btnConfig.text.text = "CheatEnabler Config".Translate(); }; btnConfig.transform.SetParent(parent); var vec = ((RectTransform)mainMenu.exitButton.transform).anchoredPosition3D; var vec2 = ((RectTransform)mainMenu.creditsButton.transform).anchoredPosition3D; var transform1 = (RectTransform)btn.transform; transform1.anchoredPosition3D = new Vector3(vec.x, vec.y + (vec.y - vec2.y) * 2, vec.z); btnConfig.button.onClick.RemoveAllListeners(); btnConfig.button.onClick.AddListener(ShowConfigWindow); } { var panel = UIRoot.instance.uiGame.planetGlobe; var src = panel.button2; var sandboxMenu = UIRoot.instance.uiGame.sandboxMenu; var icon = sandboxMenu.categoryButtons[6].transform.Find("icon")?.GetComponent()?.sprite; var b = GameObject.Instantiate