1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-09 07:33:40 +08:00
This commit is contained in:
2023-09-08 14:05:35 +08:00
parent 09dc6dbdcd
commit e88df0b7f4
4 changed files with 258 additions and 125 deletions

View File

@@ -0,0 +1,172 @@
using System.Collections.Generic;
using BepInEx.Configuration;
using HarmonyLib;
namespace CheatEnabler;
public static class BirthPlanetPatch
{
public static ConfigEntry<bool> SitiVeinsOnBirthPlanet;
public static ConfigEntry<bool> FireIceOnBirthPlanet;
public static ConfigEntry<bool> KimberliteOnBirthPlanet;
public static ConfigEntry<bool> FractalOnBirthPlanet;
public static ConfigEntry<bool> OrganicOnBirthPlanet;
public static ConfigEntry<bool> OpticalOnBirthPlanet;
public static ConfigEntry<bool> SpiniformOnBirthPlanet;
public static ConfigEntry<bool> UnipolarOnBirthPlanet;
public static ConfigEntry<bool> FlatBirthPlanet;
public static ConfigEntry<bool> HighLuminosityBirthStar;
private static BackupData _backupData;
private static bool _initialized;
private static Harmony _patch;
private struct BackupData
{
public void FromTheme(ThemeProto theme)
{
_algos = theme.Algos.Clone() as int[];
_veinSpot = theme.VeinSpot.Clone() as int[];
_veinCount = theme.VeinCount.Clone() as float[];
_veinOpacity = theme.VeinOpacity.Clone() as float[];
_rareVeins = theme.RareVeins.Clone() as int[];
_rareSettings = theme.RareSettings.Clone() as float[];
_specifyBirthStarMass = StarGen.specifyBirthStarMass;
_inited = true;
}
public void ToTheme(ThemeProto theme)
{
if (!_inited) return;
theme.Algos = _algos.Clone() as int[];
theme.VeinSpot = _veinSpot.Clone() as int[];
theme.VeinCount = _veinCount.Clone() as float[];
theme.VeinOpacity = _veinOpacity.Clone() as float[];
theme.RareVeins = _rareVeins.Clone() as int[];
theme.RareSettings = _rareSettings.Clone() as float[];
StarGen.specifyBirthStarMass = _specifyBirthStarMass;
}
private bool _inited;
private int[] _algos;
private int[] _veinSpot;
private float[] _veinCount;
private float[] _veinOpacity;
private int[] _rareVeins;
private float[] _rareSettings;
private float _specifyBirthStarMass;
}
public static void Init()
{
SitiVeinsOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
FireIceOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
KimberliteOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
FractalOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
OrganicOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
OpticalOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
SpiniformOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
UnipolarOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
FlatBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData();
HighLuminosityBirthStar.SettingChanged += (_, _) => PatchBirthThemeData();
PatchBirthThemeData();
_patch = Harmony.CreateAndPatchAll(typeof(DevShortcuts));
}
public static void Uninit()
{
if (_patch == null) return;
_patch.UnpatchSelf();
_patch = null;
}
[HarmonyPostfix, HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")]
private static void VFPreload_InvokeOnLoadWorkEnded_Postfix()
{
PatchBirthThemeData();
}
private static void PatchBirthThemeData()
{
var theme = LDB.themes.Select(1);
if (!_initialized)
{
_backupData.FromTheme(theme);
}
else
{
_backupData.ToTheme(theme);
}
if (FlatBirthPlanet.Value)
{
theme.Algos[0] = 2;
}
if (SitiVeinsOnBirthPlanet.Value)
{
theme.VeinSpot[2] = 2;
theme.VeinSpot[3] = 2;
theme.VeinCount[2] = 0.7f;
theme.VeinCount[3] = 0.7f;
theme.VeinOpacity[2] = 1f;
theme.VeinOpacity[3] = 1f;
}
List<int> veins = new();
List<float> settings = new();
if (FireIceOnBirthPlanet.Value)
{
veins.Add(8);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (KimberliteOnBirthPlanet.Value)
{
veins.Add(9);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (FractalOnBirthPlanet.Value)
{
veins.Add(10);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (OrganicOnBirthPlanet.Value)
{
veins.Add(11);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (OpticalOnBirthPlanet.Value)
{
veins.Add(12);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (SpiniformOnBirthPlanet.Value)
{
veins.Add(13);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (UnipolarOnBirthPlanet.Value)
{
veins.Add(14);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (veins.Count > 0)
{
theme.RareVeins = veins.ToArray();
theme.RareSettings = settings.ToArray();
}
if (HighLuminosityBirthStar.Value)
{
StarGen.specifyBirthStarMass = 100f;
}
_initialized = true;
}
}

View File

@@ -19,17 +19,6 @@ public class CheatEnabler : BaseUnityPlugin
private static bool _configWinInitialized = false;
private static KeyboardShortcut _shortcut = KeyboardShortcut.Deserialize("H + LeftControl");
private static UIConfigWindow _configWin;
private static bool _sitiVeinsOnBirthPlanet = true;
private static bool _fireIceOnBirthPlanet = false;
private static bool _kimberliteOnBirthPlanet = false;
private static bool _fractalOnBirthPlanet = false;
private static bool _organicOnBirthPlanet = true;
private static bool _opticalOnBirthPlanet = false;
private static bool _spiniformOnBirthPlanet = false;
private static bool _unipolarOnBirthPlanet = false;
private static bool _flatBirthPlanet = true;
private static bool _highLuminosityBirthStar = true;
private static bool _terraformAnyway = false;
private static string _unlockTechToMaximumLevel = "";
private static readonly List<int> TechToUnlock = new();
@@ -47,32 +36,32 @@ public class CheatEnabler : BaseUnityPlugin
"always infinite natural resource");
ResourcePatch.FastEnabled = Config.Bind("Planet", "FastMining", false,
"super-fast mining speed");
_unlockTechToMaximumLevel = Config.Bind("General", "UnlockTechToMaxLevel", _unlockTechToMaximumLevel,
"Unlock listed tech to MaxLevel").Value;
WaterPumperPatch.Enabled = Config.Bind("Planet", "WaterPumpAnywhere", false,
"Can pump water anywhere (while water type is not None)");
_sitiVeinsOnBirthPlanet = Config.Bind("Birth", "SiTiVeinsOnBirthPlanet", _sitiVeinsOnBirthPlanet,
"Has Silicon/Titanium veins on birth planet").Value;
_fireIceOnBirthPlanet = Config.Bind("Birth", "FireIceOnBirthPlanet", _fireIceOnBirthPlanet,
"Fire ice on birth planet (You should enable Rare Veins first)").Value;
_kimberliteOnBirthPlanet = Config.Bind("Birth", "KimberliteOnBirthPlanet", _kimberliteOnBirthPlanet,
"Kimberlite on birth planet (You should enable Rare Veins first)").Value;
_fractalOnBirthPlanet = Config.Bind("Birth", "FractalOnBirthPlanet", _fractalOnBirthPlanet,
"Fractal silicon on birth planet (You should enable Rare Veins first)").Value;
_organicOnBirthPlanet = Config.Bind("Birth", "OrganicOnBirthPlanet", _organicOnBirthPlanet,
"Organic crystal on birth planet (You should enable Rare Veins first)").Value;
_opticalOnBirthPlanet = Config.Bind("Birth", "OpticalOnBirthPlanet", _opticalOnBirthPlanet,
"Optical grating crystal on birth planet (You should enable Rare Veins first)").Value;
_spiniformOnBirthPlanet = Config.Bind("Birth", "SpiniformOnBirthPlanet", _spiniformOnBirthPlanet,
"Spiniform stalagmite crystal on birth planet (You should enable Rare Veins first)").Value;
_unipolarOnBirthPlanet = Config.Bind("Birth", "UnipolarOnBirthPlanet", _unipolarOnBirthPlanet,
"Unipolar magnet on birth planet (You should enable Rare Veins first)").Value;
_flatBirthPlanet = Config.Bind("Birth", "FlatBirthPlanet", _flatBirthPlanet,
"Birth planet is solid flat (no water)").Value;
_highLuminosityBirthStar = Config.Bind("Birth", "HighLuminosityBirthStar", _highLuminosityBirthStar,
"Birth star has high luminosity").Value;
TerraformPatch.Enabled = Config.Bind("General", "TerraformAnyway", false,
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设置");
@@ -85,7 +74,9 @@ public class CheatEnabler : BaseUnityPlugin
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))
@@ -93,26 +84,15 @@ public class CheatEnabler : BaseUnityPlugin
TechToUnlock.Add(id);
}
}
if (TechToUnlock.Count > 0)
{
Harmony.CreateAndPatchAll(typeof(UnlockTechOnGameStart));
}
WaterPumperPatch.Init();
if (_sitiVeinsOnBirthPlanet || _fireIceOnBirthPlanet || _kimberliteOnBirthPlanet || _fractalOnBirthPlanet ||
_organicOnBirthPlanet || _opticalOnBirthPlanet || _spiniformOnBirthPlanet || _unipolarOnBirthPlanet ||
_flatBirthPlanet || _highLuminosityBirthStar)
{
Harmony.CreateAndPatchAll(typeof(BirthPlanetCheat));
}
TerraformPatch.Init();
}
public void OnDestroy()
{
BirthPlanetPatch.Uninit();
TerraformPatch.Uninit();
WaterPumperPatch.Uninit();
ResourcePatch.Uninit();
@@ -293,78 +273,4 @@ public class CheatEnabler : BaseUnityPlugin
}
}
private class BirthPlanetCheat
{
[HarmonyPostfix, HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")]
private static void VFPreload_InvokeOnLoadWorkEnded_Postfix()
{
var theme = LDB.themes.Select(1);
if (_flatBirthPlanet)
{
theme.Algos[0] = 2;
}
if (_sitiVeinsOnBirthPlanet)
{
theme.VeinSpot[2] = 2;
theme.VeinSpot[3] = 2;
theme.VeinCount[2] = 0.7f;
theme.VeinCount[3] = 0.7f;
theme.VeinOpacity[2] = 1f;
theme.VeinOpacity[3] = 1f;
}
List<int> veins = new();
List<float> settings = new();
if (_fireIceOnBirthPlanet)
{
veins.Add(8);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (_kimberliteOnBirthPlanet)
{
veins.Add(9);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (_fractalOnBirthPlanet)
{
veins.Add(10);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (_organicOnBirthPlanet)
{
veins.Add(11);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (_opticalOnBirthPlanet)
{
veins.Add(12);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (_spiniformOnBirthPlanet)
{
veins.Add(13);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
if (_unipolarOnBirthPlanet)
{
veins.Add(14);
settings.AddRange(new[] { 1f, 1f, 0.5f, 1f });
}
theme.RareVeins = veins.ToArray();
theme.RareSettings = settings.ToArray();
if (_highLuminosityBirthStar)
{
StarGen.specifyBirthStarMass = 100f;
}
}
}
}

View File

@@ -12,7 +12,8 @@ public static class TerraformPatch
public static void Init()
{
_patch = Harmony.CreateAndPatchAll(typeof(TerraformPatch));
Enabled.SettingChanged += (_, _) => ValueChanged();
ValueChanged();
}
public static void Uninit()
@@ -22,6 +23,25 @@ public static class TerraformPatch
_patch = null;
}
private static void ValueChanged()
{
if (Enabled.Value)
{
if (_patch != null)
{
_patch.UnpatchSelf();
_patch = null;
}
_patch = Harmony.CreateAndPatchAll(typeof(TerraformPatch));
}
else if (_patch != null)
{
_patch.UnpatchSelf();
_patch = null;
}
}
[HarmonyTranspiler]
[HarmonyPatch(typeof(BuildTool_Reform), nameof(BuildTool_Reform.ReformAction))]
private static IEnumerable<CodeInstruction> BuildTool_Reform_ReformAction_Patch(IEnumerable<CodeInstruction> instructions, ILGenerator generator)

View File

@@ -15,7 +15,18 @@ public class UIConfigWindow : UI.MyWindowWithTabs
I18N.Add("Infinite Natural Resources", "Infinite Natural Resources", "自然资源采集不消耗");
I18N.Add("Fast Mining", "Fast Mining", "高速采集");
I18N.Add("Pump Anywhere", "Pump Anywhere", "平地抽水");
I18N.Add("Birth", "Birth Sys", "母星系");
I18N.Add("Terraform without enought sands", "Terraform without enough sands", "沙土不够时依然可以整改地形");
I18N.Add("Silicon/Titanium on birth planet", "Silicon/Titanium on birth planet", "母星有硅和钛");
I18N.Add("Fire ice on birth planet", "Fire ice on birth planet", "母星有可燃冰");
I18N.Add("Kimberlite on birth planet", "Kimberlite on birth planet", "母星有金伯利矿");
I18N.Add("Fractal silicon on birth planet", "Fractal silicon on birth planet", "母星有分形硅");
I18N.Add("Organic crystal on birth planet", "Organic crystal on birth planet", "母星有有机晶体");
I18N.Add("Optical grating crystal on birth planet", "Optical grating crystal on birth planet", "母星有光栅石");
I18N.Add("Spiniform stalagmite crystal on birth planet", "Spiniform stalagmite crystal on birth planet", "母星有刺笋结晶");
I18N.Add("Unipolar magnet on birth planet", "Unipolar magnet on birth planet", "母星有单极磁石");
I18N.Add("Birth planet is solid flat (no water at all)", "Birth planet is solid flat (no water at all)", "母星是纯平的(没有水)");
I18N.Add("Birth star has high luminosity", "Birth star has high luminosity", "母星系恒星高亮");
I18N.Apply();
}
@@ -27,7 +38,7 @@ public class UIConfigWindow : UI.MyWindowWithTabs
public override void _OnCreate()
{
_windowTrans = GetComponent<RectTransform>();
_windowTrans.sizeDelta = new Vector2(640f, 428f);
_windowTrans.sizeDelta = new Vector2(480f, 295f);
CreateUI();
}
@@ -52,7 +63,31 @@ public class UIConfigWindow : UI.MyWindowWithTabs
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab2, WaterPumperPatch.Enabled, "Pump Anywhere".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab2, WaterPumperPatch.Enabled, "Terraform without enought sands".Translate());
UI.MyCheckBox.CreateCheckBox(x, y, tab2, TerraformPatch.Enabled, "Terraform without enought sands".Translate());
var tab3 = AddTab(236f, 2, _windowTrans, "Birth".Translate());
x = 0f;
y = 10f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet".Translate());
x = 200f;
y = 10f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)".Translate());
y += 36f;
UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity".Translate());
SetCurrentTab(0);
}
@@ -84,4 +119,4 @@ public class UIConfigWindow : UI.MyWindowWithTabs
VFInput.UseEscape();
_Close();
}
}
}