Decompiled source of UniverseGenTweaks v1.2.7

UniverseGenTweaks.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UXAssist.Common;
using UXAssist.UI;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using crecheng.DSPModSave;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("UniverseGenTweaks")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("DSP MOD - UniverseGenTweaks")]
[assembly: AssemblyFileVersion("1.2.7.0")]
[assembly: AssemblyInformationalVersion("1.2.7+2741069bc742f4079fa890aea8827961ef5f1c54")]
[assembly: AssemblyProduct("UniverseGenTweaks")]
[assembly: AssemblyTitle("UniverseGenTweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.7.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace UniverseGenTweaks
{
	public static class BirthPlanetPatch
	{
		private struct BackupData
		{
			private bool _inited;

			private int[] _algos;

			private int[] _veinSpot;

			private float[] _veinCount;

			private float[] _veinOpacity;

			private int[] _rareVeins;

			private float[] _rareSettings;

			private float _specifyBirthStarMass;

			private float _specifyBirthStarAge;

			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;
				_specifyBirthStarAge = StarGen.specifyBirthStarAge;
				_inited = true;
			}

			public void ToTheme(ThemeProto theme)
			{
				if (_inited)
				{
					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;
					StarGen.specifyBirthStarAge = _specifyBirthStarAge;
				}
			}
		}

		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;

		public static void Init()
		{
			SitiVeinsOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			FireIceOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			KimberliteOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			FractalOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			OrganicOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			OpticalOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			SpiniformOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			UnipolarOnBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			FlatBirthPlanet.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			HighLuminosityBirthStar.SettingChanged += delegate
			{
				PatchBirthThemeData();
			};
			PatchBirthThemeData();
			if (_patch == null)
			{
				_patch = Harmony.CreateAndPatchAll(typeof(BirthPlanetPatch), (string)null);
			}
		}

		public static void Uninit()
		{
			Harmony patch = _patch;
			if (patch != null)
			{
				patch.UnpatchSelf();
			}
			_patch = null;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")]
		private static void VFPreload_InvokeOnLoadWorkEnded_Postfix()
		{
			PatchBirthThemeData();
		}

		private static void PatchBirthThemeData()
		{
			ThemeProto val = ((ProtoSet<ThemeProto>)(object)LDB.themes).Select(1);
			if (!_initialized)
			{
				_backupData.FromTheme(val);
			}
			else
			{
				_backupData.ToTheme(val);
			}
			if (FlatBirthPlanet.Value)
			{
				val.Algos[0] = 2;
			}
			if (SitiVeinsOnBirthPlanet.Value)
			{
				val.VeinSpot[2] = 2;
				val.VeinSpot[3] = 2;
				val.VeinCount[2] = 0.7f;
				val.VeinCount[3] = 0.7f;
				val.VeinOpacity[2] = 1f;
				val.VeinOpacity[3] = 1f;
			}
			List<int> list = new List<int>();
			List<float> list2 = new List<float>();
			if (FireIceOnBirthPlanet.Value)
			{
				list.Add(8);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (KimberliteOnBirthPlanet.Value)
			{
				list.Add(9);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (FractalOnBirthPlanet.Value)
			{
				list.Add(10);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (OrganicOnBirthPlanet.Value)
			{
				list.Add(11);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (OpticalOnBirthPlanet.Value)
			{
				list.Add(12);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (SpiniformOnBirthPlanet.Value)
			{
				list.Add(13);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (UnipolarOnBirthPlanet.Value)
			{
				list.Add(14);
				list2.AddRange(new float[4] { 1f, 1f, 0.5f, 1f });
			}
			if (list.Count > 0)
			{
				val.RareVeins = list.ToArray();
				val.RareSettings = list2.ToArray();
			}
			if (HighLuminosityBirthStar.Value)
			{
				StarGen.specifyBirthStarMass = 53.81f;
				StarGen.specifyBirthStarAge = 0.01f;
			}
			_initialized = true;
		}
	}
	public static class EpicDifficulty
	{
		public static ConfigEntry<bool> Enabled;

		public static ConfigEntry<float> ResourceMultiplier;

		public static ConfigEntry<float> OilMultiplier;

		private static Harmony _harmony;

		private static readonly float[] ResourceMultipliers = new float[9] { 0.0001f, 0.0005f, 0.001f, 0.005f, 0.01f, 0.02f, 0.03f, 0.04f, 0.05f };

		private static readonly float[] OilMultipliers = new float[10] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1f };

		public static void Init()
		{
			I18N.Add("究极少", "Micro", "究极少");
			I18N.Add("史诗难度", "Epic Difficulty !!", "史诗难度 !!");
			I18N.Apply();
			Enabled.SettingChanged += delegate
			{
				Enable(Enabled.Value);
			};
			Enable(Enabled.Value);
		}

		public static void Uninit()
		{
			Enable(on: false);
		}

		private static void Enable(bool on)
		{
			if (on)
			{
				if (_harmony == null)
				{
					_harmony = Harmony.CreateAndPatchAll(typeof(EpicDifficulty), (string)null);
				}
				return;
			}
			Harmony harmony = _harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			_harmony = null;
		}

		public static float IndexToResourceMultiplier(int index)
		{
			return ResourceMultipliers[(index >= 0) ? ((index >= ResourceMultipliers.Length) ? (ResourceMultipliers.Length - 1) : index) : 0];
		}

		public static int ResourceMultiplierToIndex(float mult)
		{
			for (int num = ResourceMultipliers.Length - 1; num > 0; num--)
			{
				if (ResourceMultipliers[num] <= mult)
				{
					return num;
				}
			}
			return 0;
		}

		public static int ResourceMultipliersCount()
		{
			return ResourceMultipliers.Length;
		}

		public static float IndexToOilMultiplier(int index)
		{
			return OilMultipliers[(index >= 0) ? ((index >= OilMultipliers.Length) ? (OilMultipliers.Length - 1) : index) : 0];
		}

		public static int OilMultiplierToIndex(float mult)
		{
			for (int num = OilMultipliers.Length - 1; num > 0; num--)
			{
				if (OilMultipliers[num] <= mult)
				{
					return num;
				}
			}
			return 0;
		}

		public static int OilMultipliersCount()
		{
			return OilMultipliers.Length;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(UIGalaxySelect), "_OnInit")]
		private static void PatchGalaxyUI_OnInit(UIGalaxySelect __instance)
		{
			__instance.resourceMultiplierSlider.maxValue = 11f;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UIGalaxySelect), "OnResourceMultiplierValueChange")]
		private static bool UIGalaxySelect_OnResourceMultiplierValueChange_Prefix(UIGalaxySelect __instance, float val)
		{
			float value = __instance.resourceMultiplierSlider.value;
			GameDesc gameDesc = __instance.gameDesc;
			float resourceMultiplier = ((value < 0.5f) ? ResourceMultiplier.Value : ((value < 1.5f) ? 0.1f : ((value < 2.5f) ? 0.3f : ((value < 3.5f) ? 0.5f : ((value < 4.5f) ? 0.8f : ((value < 5.5f) ? 1f : ((value < 6.5f) ? 1.5f : ((value < 7.5f) ? 2f : ((value < 8.5f) ? 3f : ((value < 9.5f) ? 5f : ((!(value < 10.5f)) ? 100f : 8f)))))))))));
			gameDesc.resourceMultiplier = resourceMultiplier;
			__instance.UpdateParametersUIDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UIGalaxySelect), "UpdateParametersUIDisplay")]
		private static bool UIGalaxySelect_UpdateParametersUIDisplay_Prefix(UIGalaxySelect __instance)
		{
			float resourceMultiplier = __instance.gameDesc.resourceMultiplier;
			string text = "";
			Slider resourceMultiplierSlider = __instance.resourceMultiplierSlider;
			float value = ((resourceMultiplier < 0.09f) ? 0f : ((resourceMultiplier < 0.11f) ? 1f : ((resourceMultiplier < 0.31f) ? 2f : ((resourceMultiplier < 0.51f) ? 3f : ((resourceMultiplier < 0.81f) ? 4f : ((resourceMultiplier < 1.01f) ? 5f : ((resourceMultiplier < 1.51f) ? 6f : ((resourceMultiplier < 2.01f) ? 7f : ((resourceMultiplier < 3.01f) ? 8f : ((resourceMultiplier < 5.01f) ? 9f : ((!(resourceMultiplier < 8.01f)) ? 11f : 10f)))))))))));
			resourceMultiplierSlider.value = value;
			string text2 = ((resourceMultiplier < 100f) ? ((resourceMultiplier > 0.1f) ? (resourceMultiplier + "x") : ((!(resourceMultiplier < 0.09f)) ? Localization.Translate("极少") : Localization.Translate("究极少"))) : ((!(resourceMultiplier >= 100f)) ? text : Localization.Translate("无限")));
			text = text2;
			__instance.resourceMultiplierText.text = text;
			__instance.propertyMultiplierText.text = Localization.Translate("元数据生成倍率") + " " + __instance.gameDesc.propertyMultiplier.ToString("P0");
			__instance.addrText.text = __instance.gameDesc.clusterString;
			bool flag = resourceMultiplier < 0.11f && !__instance.gameDesc.isSandboxMode;
			__instance.difficultTipGroup.SetActive(flag);
			if (!flag)
			{
				return false;
			}
			((Component)__instance.difficultTipGroup.transform.Find("difficult-tip-text")).GetComponent<Text>().text = Localization.Translate((resourceMultiplier < 0.09f) ? "史诗难度" : "非常困难");
			return false;
		}

		[HarmonyTranspiler]
		[HarmonyPatch(typeof(GameDesc), "get_oilAmountMultiplier")]
		private static IEnumerable<CodeInstruction> GameDesc_get_oilAmountMultiplier_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Expected O, but got Unknown
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Expected O, but got Unknown
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Expected O, but got Unknown
			CodeMatcher val = new CodeMatcher(instructions, generator);
			if (Math.Abs(OilMultiplier.Value - 1f) > 1E-05f)
			{
				Label label = generator.DefineLabel();
				val.Start().InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[4]
				{
					new CodeInstruction(OpCodes.Ldarg_0, (object)null),
					new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.Field(typeof(GameDesc), "resourceMultiplier")),
					new CodeInstruction(OpCodes.Ldc_R4, (object)0.05f),
					new CodeInstruction(OpCodes.Ble_S, (object)label)
				}).End()
					.Advance(1)
					.Insert((CodeInstruction[])(object)new CodeInstruction[2]
					{
						CodeInstructionExtensions.WithLabels(new CodeInstruction(OpCodes.Ldc_R4, (object)(0.5f * OilMultiplier.Value)), new Label[1] { label }),
						new CodeInstruction(OpCodes.Ret, (object)null)
					});
			}
			return val.InstructionEnumeration();
		}
	}
	public class MoreSettings
	{
		private static class PermanentPatch
		{
			private static void ResetSettings()
			{
				_gameMinDist = 2.0;
				_gameMinStep = 2.0;
				_gameMaxStep = 3.2;
				_gameFlatten = 0.18;
			}

			[HarmonyPrefix]
			[HarmonyPatch(typeof(GameData), "Import")]
			private static void GameData_Import_Prefix(GameData __instance)
			{
				ResetSettings();
			}

			[HarmonyPrefix]
			[HarmonyPatch(typeof(GameData), "SetForNewGame")]
			private static void GameData_SetForNewGame_Prefix(GameData __instance)
			{
				if (!Enabled.Value)
				{
					ResetSettings();
				}
			}

			[HarmonyTranspiler]
			[HarmonyPatch(/*Could not decode attribute arguments.*/)]
			private static IEnumerable<CodeInstruction> GalaxyData_Constructor_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Expected O, but got Unknown
				CodeMatcher val = new CodeMatcher(instructions, generator);
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
				{
					new CodeMatch((Func<CodeInstruction, bool>)((CodeInstruction ci) => ci.opcode == OpCodes.Ldc_I4 && CodeInstructionExtensions.OperandIs(ci, (object)25700)), (string)null)
				});
				val.Repeat((Action<CodeMatcher>)delegate(CodeMatcher m)
				{
					m.SetAndAdvance(OpCodes.Ldc_I4, (object)102500);
				}, (Action<string>)null);
				return val.InstructionEnumeration();
			}

			[HarmonyTranspiler]
			[HarmonyPatch(typeof(SectorModel), "CreateGalaxyAstroBuffer")]
			[HarmonyPatch(typeof(SpaceColliderLogic), "UpdateCollidersPose")]
			private static IEnumerable<CodeInstruction> SectorModel_CreateGalaxyAstroBuffer_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Expected O, but got Unknown
				CodeMatcher val = new CodeMatcher(instructions, generator);
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
				{
					new CodeMatch((Func<CodeInstruction, bool>)((CodeInstruction ci) => ci.opcode == OpCodes.Ldc_I4 && CodeInstructionExtensions.OperandIs(ci, (object)25600)), (string)null)
				});
				val.Repeat((Action<CodeMatcher>)delegate(CodeMatcher m)
				{
					m.SetAndAdvance(OpCodes.Ldc_I4, (object)102500);
				}, (Action<string>)null);
				return val.InstructionEnumeration();
			}

			[HarmonyTranspiler]
			[HarmonyPatch(typeof(UniverseGen), "CreateGalaxy")]
			private static IEnumerable<CodeInstruction> UniverseGen_CreateGalaxy_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Expected O, but got Unknown
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: Expected O, but got Unknown
				//IL_008d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Expected O, but got Unknown
				//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b4: Expected O, but got Unknown
				//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d5: Expected O, but got Unknown
				CodeMatcher val = new CodeMatcher(instructions, generator);
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
				{
					new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(UniverseGen), "GenerateTempPoses", (Type[])null, (Type[])null), (string)null)
				}).Advance(-4).RemoveInstructions(4)
					.Insert((CodeInstruction[])(object)new CodeInstruction[4]
					{
						new CodeInstruction(OpCodes.Ldsfld, (object)AccessTools.Field(typeof(MoreSettings), "_gameMinDist")),
						new CodeInstruction(OpCodes.Ldsfld, (object)AccessTools.Field(typeof(MoreSettings), "_gameMinStep")),
						new CodeInstruction(OpCodes.Ldsfld, (object)AccessTools.Field(typeof(MoreSettings), "_gameMaxStep")),
						new CodeInstruction(OpCodes.Ldsfld, (object)AccessTools.Field(typeof(MoreSettings), "_gameFlatten"))
					});
				return val.InstructionEnumeration();
			}

			[HarmonyTranspiler]
			[HarmonyPatch(typeof(UniverseGen), "RandomPoses")]
			private static IEnumerable<CodeInstruction> UniverseGen_RandomPoses_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0024: Expected O, but got Unknown
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Expected O, but got Unknown
				CodeMatcher val = new CodeMatcher(instructions, generator);
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[2]
				{
					new CodeMatch((OpCode?)OpCodes.Mul, (object)null, (string)null),
					new CodeMatch((OpCode?)OpCodes.Ldarg_2, (object)null, (string)null)
				});
				val.Repeat((Action<CodeMatcher>)delegate(CodeMatcher m)
				{
					//IL_000d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0017: Expected O, but got Unknown
					m.Advance(1).SetInstructionAndAdvance(new CodeInstruction(OpCodes.Ldarg_3, (object)null));
				}, (Action<string>)null);
				return val.InstructionEnumeration();
			}
		}

		public static ConfigEntry<bool> Enabled;

		public static ConfigEntry<int> MaxStarCount;

		private static double _minDist = 2.0;

		private static double _minStep = 2.0;

		private static double _maxStep = 3.2;

		private static double _flatten = 0.18;

		private static Text _minDistTitle;

		private static Text _minStepTitle;

		private static Text _maxStepTitle;

		private static Text _flattenTitle;

		private static Slider _minDistSlider;

		private static Slider _minStepSlider;

		private static Slider _maxStepSlider;

		private static Slider _flattenSlider;

		private static Text _minDistText;

		private static Text _minStepText;

		private static Text _maxStepText;

		private static Text _flattenText;

		private static Harmony _patch;

		private static Harmony _permanentPatch;

		private static double _gameMinDist = 2.0;

		private static double _gameMinStep = 2.0;

		private static double _gameMaxStep = 3.2;

		private static double _gameFlatten = 0.18;

		public static void Init()
		{
			I18N.Add("恒星最小距离", "Star Distance Min", "恒星最小距离");
			I18N.Add("步进最小距离", "Step Distance Min", "步进最小距离");
			I18N.Add("步进最大距离", "Step Distance Max", "步进最大距离");
			I18N.Add("扁平度", "Flatness", "扁平度");
			I18N.Apply();
			if (_permanentPatch == null)
			{
				_permanentPatch = Harmony.CreateAndPatchAll(typeof(PermanentPatch), (string)null);
			}
			Enabled.SettingChanged += delegate
			{
				Enable(Enabled.Value);
			};
			Enable(Enabled.Value);
		}

		public static void Uninit()
		{
			Enable(on: false);
			Harmony permanentPatch = _permanentPatch;
			if (permanentPatch != null)
			{
				permanentPatch.UnpatchSelf();
			}
			_permanentPatch = null;
		}

		private static void Enable(bool on)
		{
			if (on)
			{
				if (_patch == null)
				{
					_patch = Harmony.CreateAndPatchAll(typeof(MoreSettings), (string)null);
				}
				return;
			}
			Harmony patch = _patch;
			if (patch != null)
			{
				patch.UnpatchSelf();
			}
			_patch = null;
		}

		private static void CreateSliderWithText(Slider orig, out Text title, out Slider slider, out Text text, out Localizer loc)
		{
			Text component = ((Component)((Component)orig).transform.parent).GetComponent<Text>();
			title = Object.Instantiate<Text>(component, ((Component)component).transform.parent);
			slider = ((Component)CommonUtils.FindChildRecur(((Component)title).transform, "Slider")).GetComponent<Slider>();
			text = ((Component)CommonUtils.FindChildRecur(((Component)slider).transform, "Text")).GetComponent<Text>();
			loc = ((Component)title).GetComponent<Localizer>();
		}

		private static void TransformDeltaY(Transform trans, float delta)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			Vector3 anchoredPosition3D = ((RectTransform)trans).anchoredPosition3D;
			anchoredPosition3D.y += delta;
			((RectTransform)trans).anchoredPosition3D = anchoredPosition3D;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(UIGalaxySelect), "_OnCreate")]
		private static void UIGalaxySelect__OnCreate_Postfix(UIGalaxySelect __instance)
		{
			__instance.starCountSlider.maxValue = MaxStarCount.Value;
			CreateSliderWithText(__instance.starCountSlider, out _minDistTitle, out _minDistSlider, out _minDistText, out var loc);
			CreateSliderWithText(__instance.starCountSlider, out _minStepTitle, out _minStepSlider, out _minStepText, out var loc2);
			CreateSliderWithText(__instance.starCountSlider, out _maxStepTitle, out _maxStepSlider, out _maxStepText, out var loc3);
			CreateSliderWithText(__instance.starCountSlider, out _flattenTitle, out _flattenSlider, out _flattenText, out var loc4);
			loc.stringKey = "恒星最小距离";
			loc2.stringKey = "步进最小距离";
			loc3.stringKey = "步进最大距离";
			loc4.stringKey = "扁平度";
			((Object)_minDistTitle).name = "min-dist";
			_minDistSlider.minValue = 10f;
			_minDistSlider.maxValue = 50f;
			_minDistSlider.value = (float)(_minDist * 10.0);
			((Object)_minStepTitle).name = "min-step";
			_minStepSlider.minValue = 10f;
			_minStepSlider.maxValue = (float)(_maxStep * 10.0 - 1.0);
			_minStepSlider.value = (float)(_minStep * 10.0);
			((Object)_maxStepTitle).name = "max-step";
			_maxStepSlider.minValue = (float)(_minStep * 10.0 + 1.0);
			_maxStepSlider.maxValue = 100f;
			_maxStepSlider.value = (float)(_maxStep * 10.0);
			((Object)_flattenTitle).name = "flatten";
			_flattenSlider.minValue = 1f;
			_flattenSlider.maxValue = 50f;
			_flattenSlider.value = (float)(_flatten * 50.0);
			TransformDeltaY(((Component)_minDistTitle).transform, -36f);
			TransformDeltaY(((Component)_minStepTitle).transform, -72f);
			TransformDeltaY(((Component)_maxStepTitle).transform, -108f);
			TransformDeltaY(((Component)_flattenTitle).transform, -144f);
			TransformDeltaY(((Component)__instance.darkFogToggle).transform.parent, -144f);
			TransformDeltaY(((Component)__instance.resourceMultiplierSlider).transform.parent, -144f);
			TransformDeltaY(((Component)__instance.sandboxToggle).transform.parent, -144f);
			TransformDeltaY(((Component)__instance.propertyMultiplierText).transform, -144f);
			TransformDeltaY(((Component)__instance.addrText).transform.parent, -144f);
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UIGalaxySelect), "_OnOpen")]
		private static void UIGalaxySelect__OnOpen_Prefix()
		{
			_minDistText.text = _minDist.ToString();
			_minStepText.text = _minStep.ToString();
			_maxStepText.text = _maxStep.ToString();
			_flattenText.text = _flatten.ToString();
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(UIGalaxySelect), "_OnRegEvent")]
		private static void UIGalaxySelect__OnRegEvent_Postfix(UIGalaxySelect __instance)
		{
			((UnityEventBase)_minDistSlider.onValueChanged).RemoveAllListeners();
			((UnityEvent<float>)(object)_minDistSlider.onValueChanged).AddListener((UnityAction<float>)delegate(float val)
			{
				double gameMinDist = (double)Mathf.Round(val) / 10.0;
				if (!gameMinDist.Equals(_minDist))
				{
					_minDist = (_gameMinDist = gameMinDist);
					_minDistText.text = _minDist.ToString();
					if (_minStep < _minDist)
					{
						_minStep = (_gameMinStep = _minDist);
						_minStepSlider.value = (float)(_minStep * 10.0);
						_minStepText.text = _minStep.ToString();
						if (_maxStep < _minStep)
						{
							_maxStep = (_gameMaxStep = _minStep);
							_maxStepSlider.value = (float)(_maxStep * 10.0);
							_maxStepText.text = _maxStep.ToString();
						}
					}
					__instance.SetStarmapGalaxy();
				}
			});
			((UnityEventBase)_minStepSlider.onValueChanged).RemoveAllListeners();
			((UnityEvent<float>)(object)_minStepSlider.onValueChanged).AddListener((UnityAction<float>)delegate(float val)
			{
				double num2 = (double)Mathf.Round(val) / 10.0;
				if (!num2.Equals(_minStep))
				{
					_minStep = (_gameMinStep = num2);
					_maxStepSlider.minValue = (float)(num2 * 10.0);
					_minStepText.text = _minStep.ToString();
					__instance.SetStarmapGalaxy();
				}
			});
			((UnityEventBase)_maxStepSlider.onValueChanged).RemoveAllListeners();
			((UnityEvent<float>)(object)_maxStepSlider.onValueChanged).AddListener((UnityAction<float>)delegate(float val)
			{
				double num = (double)Mathf.Round(val) / 10.0;
				if (!num.Equals(_maxStep))
				{
					_maxStep = (_gameMaxStep = num);
					_minStepSlider.maxValue = (float)(num * 10.0);
					_maxStepText.text = _maxStep.ToString();
					__instance.SetStarmapGalaxy();
				}
			});
			((UnityEventBase)_flattenSlider.onValueChanged).RemoveAllListeners();
			((UnityEvent<float>)(object)_flattenSlider.onValueChanged).AddListener((UnityAction<float>)delegate(float val)
			{
				double gameFlatten = (double)Mathf.Round(val) / 50.0;
				if (!gameFlatten.Equals(_flatten))
				{
					_flatten = (_gameFlatten = gameFlatten);
					_flattenText.text = _flatten.ToString();
					__instance.SetStarmapGalaxy();
				}
			});
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(UIGalaxySelect), "_OnUnregEvent")]
		private static void UIGalaxySelect__OnUnregEvent_Postfix()
		{
			((UnityEventBase)_minDistSlider.onValueChanged).RemoveAllListeners();
			((UnityEventBase)_minStepSlider.onValueChanged).RemoveAllListeners();
			((UnityEventBase)_maxStepSlider.onValueChanged).RemoveAllListeners();
			((UnityEventBase)_flattenSlider.onValueChanged).RemoveAllListeners();
		}

		[HarmonyTranspiler]
		[HarmonyPatch(typeof(UIGalaxySelect), "OnStarCountSliderValueChange")]
		private static IEnumerable<CodeInstruction> UIGalaxySelect_OnStarCountSliderValueChange_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Expected O, but got Unknown
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Expected O, but got Unknown
			CodeMatcher val = new CodeMatcher(instructions, generator);
			val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
			{
				new CodeMatch((Func<CodeInstruction, bool>)((CodeInstruction ci) => ci.opcode == OpCodes.Ldc_I4_S && CodeInstructionExtensions.OperandIs(ci, (object)80)), (string)null)
			}).SetAndAdvance(OpCodes.Ldsfld, (object)AccessTools.Field(typeof(MoreSettings), "MaxStarCount")).Insert((CodeInstruction[])(object)new CodeInstruction[1]
			{
				new CodeInstruction(OpCodes.Call, (object)AccessTools.PropertyGetter(typeof(ConfigEntry<int>), "Value"))
			});
			return val.InstructionEnumeration();
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UIGalaxySelect), "EnterGame")]
		private static void UIGalaxySelect_EnterGame_Prefix()
		{
			_gameMinDist = _minDist;
			_gameMinStep = _minStep;
			_gameMaxStep = _maxStep;
			_gameFlatten = _flatten;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "_OnCreate")]
		private static void UICombatSettingsDF__OnCreate_Postfix(UICombatSettingsDF __instance)
		{
			__instance.initLevelSlider.maxValue = 30f;
			__instance.initGrowthSlider.maxValue = 10f;
			__instance.initOccupiedSlider.maxValue = 10f;
			__instance.growthSpeedSlider.maxValue = 7f;
			__instance.powerThreatSlider.maxValue = 10f;
			__instance.combatThreatSlider.maxValue = 10f;
			__instance.DFExpSlider.maxValue = 10f;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnInitLevelSliderChanged")]
		private static bool UICombatSettingsDF_OnInitLevelSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.initLevelSlider.value;
			float initialLevel = ((value < 0.5f) ? 0f : ((value < 1.5f) ? 1f : ((value < 2.5f) ? 2f : ((value < 3.5f) ? 3f : ((value < 4.5f) ? 4f : ((value < 5.5f) ? 5f : ((value < 6.5f) ? 6f : ((value < 7.5f) ? 7f : ((value < 8.5f) ? 8f : ((value < 9.5f) ? 9f : ((value < 10.5f) ? 10f : ((value < 11.5f) ? 11f : ((value < 12.5f) ? 12f : ((value < 13.5f) ? 13f : ((value < 14.5f) ? 14f : ((value < 15.5f) ? 15f : ((value < 16.5f) ? 16f : ((value < 17.5f) ? 17f : ((value < 18.5f) ? 18f : ((value < 19.5f) ? 19f : ((value < 20.5f) ? 20f : ((value < 21.5f) ? 21f : ((value < 22.5f) ? 22f : ((value < 23.5f) ? 23f : ((value < 24.5f) ? 24f : ((value < 25.5f) ? 25f : ((value < 26.5f) ? 26f : ((value < 27.5f) ? 27f : ((value < 28.5f) ? 28f : ((!(value < 29.5f)) ? 30f : 29f))))))))))))))))))))))))))))));
			__instance.combatSettings.initialLevel = initialLevel;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnInitGrowthSliderChanged")]
		private static bool UICombatSettingsDF_OnInitGrowthSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.initGrowthSlider.value;
			float initialGrowth = ((value < 0.5f) ? 0f : ((value < 1.5f) ? 0.25f : ((value < 2.5f) ? 0.5f : ((value < 3.5f) ? 0.75f : ((value < 4.5f) ? 1f : ((value < 5.5f) ? 1.5f : ((value < 6.5f) ? 2f : ((value < 7.5f) ? 2.5f : ((value < 8.5f) ? 3f : ((!(value < 9.5f)) ? 4f : 3.5f))))))))));
			__instance.combatSettings.initialGrowth = initialGrowth;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnInitOccupiedSliderChanged")]
		private static bool UICombatSettingsDF_OnInitOccupiedSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.initOccupiedSlider.value;
			float initialColonize = ((value < 0.5f) ? 0.01f : ((value < 1.5f) ? 0.25f : ((value < 2.5f) ? 0.5f : ((value < 3.5f) ? 0.75f : ((value < 4.5f) ? 1f : ((value < 5.5f) ? 1.5f : ((value < 6.5f) ? 2f : ((value < 7.5f) ? 2.5f : ((value < 8.5f) ? 3f : ((!(value < 9.5f)) ? 4f : 3.5f))))))))));
			__instance.combatSettings.initialColonize = initialColonize;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnGrowthSpeedSliderChanged")]
		private static bool UICombatSettingsDF_OnGrowthSpeedSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.growthSpeedSlider.value;
			float growthSpeedFactor = ((value < 0.5f) ? 0.25f : ((value < 1.5f) ? 0.5f : ((value < 2.5f) ? 1f : ((value < 3.5f) ? 2f : ((value < 4.5f) ? 3f : ((value < 5.5f) ? 4f : ((!(value < 6.5f)) ? 6f : 5f)))))));
			__instance.combatSettings.growthSpeedFactor = growthSpeedFactor;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnPowerThreatSliderChanged")]
		private static bool UICombatSettingsDF_OnPowerThreatSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.powerThreatSlider.value;
			float powerThreatFactor = ((value < 0.5f) ? 0.01f : ((value < 1.5f) ? 0.1f : ((value < 2.5f) ? 0.2f : ((value < 3.5f) ? 0.5f : ((value < 4.5f) ? 1f : ((value < 5.5f) ? 2f : ((value < 6.5f) ? 5f : ((value < 7.5f) ? 8f : ((value < 8.5f) ? 10f : ((!(value < 9.5f)) ? 20f : 15f))))))))));
			__instance.combatSettings.powerThreatFactor = powerThreatFactor;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnCombatThreatSliderChanged")]
		private static bool UICombatSettingsDF_OnCombatThreatSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.combatThreatSlider.value;
			float battleThreatFactor = ((value < 0.5f) ? 0.01f : ((value < 1.5f) ? 0.1f : ((value < 2.5f) ? 0.2f : ((value < 3.5f) ? 0.5f : ((value < 4.5f) ? 1f : ((value < 5.5f) ? 2f : ((value < 6.5f) ? 5f : ((value < 7.5f) ? 8f : ((value < 8.5f) ? 10f : ((!(value < 9.5f)) ? 20f : 15f))))))))));
			__instance.combatSettings.battleThreatFactor = battleThreatFactor;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "OnEXPSliderChanged")]
		private static bool UICombatSettingsDF_OnEXPSliderChanged_Prefix(UICombatSettingsDF __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			_ = __instance.combatSettings;
			float value = __instance.DFExpSlider.value;
			float battleExpFactor = ((value < 0.5f) ? 0.01f : ((value < 1.5f) ? 0.1f : ((value < 2.5f) ? 0.2f : ((value < 3.5f) ? 0.5f : ((value < 4.5f) ? 1f : ((value < 5.5f) ? 2f : ((value < 6.5f) ? 5f : ((value < 7.5f) ? 8f : ((value < 8.5f) ? 10f : ((!(value < 9.5f)) ? 20f : 15f))))))))));
			__instance.combatSettings.battleExpFactor = battleExpFactor;
			__instance.UpdateUIParametersDisplay();
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(UICombatSettingsDF), "UpdateUIParametersDisplay")]
		private static bool UICombatSettingsDF_UpdateUIParametersDisplay_Prefix(UICombatSettingsDF __instance)
		{
			//IL_09e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e6: Expected O, but got Unknown
			//IL_0a3e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a45: Invalid comparison between Unknown and I4
			//IL_0a6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a72: Unknown result type (might be due to invalid IL or missing references)
			string text = "";
			Slider aggresiveSlider = __instance.aggresiveSlider;
			float aggressiveness = __instance.combatSettings.aggressiveness;
			float value = ((aggressiveness < -0.99f) ? 0f : ((aggressiveness < 0.01f) ? 1f : ((aggressiveness < 0.51f) ? 2f : ((aggressiveness < 1.01f) ? 3f : ((!(aggressiveness < 2.01f)) ? 5f : 4f)))));
			aggresiveSlider.value = value;
			text = (int)(__instance.aggresiveSlider.value + 0.5f) switch
			{
				0 => Localization.Translate("活靶子"), 
				1 => Localization.Translate("被动"), 
				2 => Localization.Translate("消极"), 
				3 => Localization.Translate("正常"), 
				4 => Localization.Translate("积极"), 
				5 => Localization.Translate("狂暴"), 
				_ => text, 
			};
			__instance.aggresiveText.text = text;
			float initialLevel = __instance.combatSettings.initialLevel;
			Slider initLevelSlider = __instance.initLevelSlider;
			aggressiveness = ((initialLevel < 0.01f) ? 0f : ((initialLevel < 1.01f) ? 1f : ((initialLevel < 2.01f) ? 2f : ((initialLevel < 3.01f) ? 3f : ((initialLevel < 4.01f) ? 4f : ((initialLevel < 5.01f) ? 5f : ((initialLevel < 6.01f) ? 6f : ((initialLevel < 7.01f) ? 7f : ((initialLevel < 8.01f) ? 8f : ((initialLevel < 9.01f) ? 9f : ((initialLevel < 10.01f) ? 10f : ((initialLevel < 11.01f) ? 11f : ((initialLevel < 12.01f) ? 12f : ((initialLevel < 13.01f) ? 13f : ((initialLevel < 14.01f) ? 14f : ((initialLevel < 15.01f) ? 15f : ((initialLevel < 16.01f) ? 16f : ((initialLevel < 17.01f) ? 17f : ((initialLevel < 18.01f) ? 18f : ((initialLevel < 19.01f) ? 19f : ((initialLevel < 20.01f) ? 20f : ((initialLevel < 21.01f) ? 21f : ((initialLevel < 22.01f) ? 22f : ((initialLevel < 23.01f) ? 23f : ((initialLevel < 24.01f) ? 24f : ((initialLevel < 25.01f) ? 25f : ((initialLevel < 26.01f) ? 26f : ((initialLevel < 27.01f) ? 27f : ((initialLevel < 28.01f) ? 28f : ((!(initialLevel < 29.01f)) ? 30f : 29f))))))))))))))))))))))))))))));
			initLevelSlider.value = aggressiveness;
			__instance.initLevelText.text = initialLevel.ToString();
			initialLevel = __instance.combatSettings.initialGrowth;
			Slider initGrowthSlider = __instance.initGrowthSlider;
			aggressiveness = ((initialLevel < 0.01f) ? 0f : ((initialLevel < 0.26f) ? 1f : ((initialLevel < 0.51f) ? 2f : ((initialLevel < 0.76f) ? 3f : ((initialLevel < 1.01f) ? 4f : ((initialLevel < 1.51f) ? 5f : ((initialLevel < 2.01f) ? 6f : ((initialLevel < 2.51f) ? 7f : ((initialLevel < 3.01f) ? 8f : ((!(initialLevel < 3.51f)) ? 10f : 9f))))))))));
			initGrowthSlider.value = aggressiveness;
			text = initialLevel * 100f + "%";
			__instance.initGrowthText.text = text;
			initialLevel = __instance.combatSettings.initialColonize;
			Slider initOccupiedSlider = __instance.initOccupiedSlider;
			aggressiveness = ((initialLevel < 0.02f) ? 0f : ((initialLevel < 0.26f) ? 1f : ((initialLevel < 0.51f) ? 2f : ((initialLevel < 0.76f) ? 3f : ((initialLevel < 1.01f) ? 4f : ((initialLevel < 1.51f) ? 5f : ((initialLevel < 2.01f) ? 6f : ((initialLevel < 2.51f) ? 7f : ((initialLevel < 3.01f) ? 8f : ((!(initialLevel < 3.51f)) ? 10f : 9f))))))))));
			initOccupiedSlider.value = aggressiveness;
			text = initialLevel * 100f + "%";
			__instance.initOccupiedText.text = text;
			initialLevel = __instance.combatSettings.maxDensity;
			Slider maxDensitySlider = __instance.maxDensitySlider;
			aggressiveness = ((initialLevel < 1.01f) ? 0f : ((initialLevel < 1.51f) ? 1f : ((initialLevel < 2.01f) ? 2f : ((!(initialLevel < 2.51f)) ? 4f : 3f))));
			maxDensitySlider.value = aggressiveness;
			text = initialLevel + "x";
			__instance.maxDensityText.text = text;
			initialLevel = __instance.combatSettings.growthSpeedFactor;
			Slider growthSpeedSlider = __instance.growthSpeedSlider;
			aggressiveness = ((initialLevel < 0.26f) ? 0f : ((initialLevel < 0.51f) ? 1f : ((initialLevel < 1.01f) ? 2f : ((initialLevel < 2.01f) ? 3f : ((initialLevel < 3.01f) ? 4f : ((initialLevel < 4.01f) ? 5f : ((!(initialLevel < 5.01f)) ? 7f : 6f)))))));
			growthSpeedSlider.value = aggressiveness;
			text = initialLevel * 100f + "%";
			__instance.growthSpeedText.text = text;
			initialLevel = __instance.combatSettings.powerThreatFactor;
			Slider powerThreatSlider = __instance.powerThreatSlider;
			aggressiveness = ((initialLevel < 0.02f) ? 0f : ((initialLevel < 0.11f) ? 1f : ((initialLevel < 0.21000001f) ? 2f : ((initialLevel < 0.51f) ? 3f : ((initialLevel < 1.01f) ? 4f : ((initialLevel < 2.01f) ? 5f : ((initialLevel < 5.01f) ? 6f : ((initialLevel < 8.01f) ? 7f : ((initialLevel < 10.01f) ? 8f : ((!(initialLevel < 15.01f)) ? 10f : 9f))))))))));
			powerThreatSlider.value = aggressiveness;
			text = initialLevel * 100f + "%";
			__instance.powerThreatText.text = text;
			initialLevel = __instance.combatSettings.battleThreatFactor;
			Slider combatThreatSlider = __instance.combatThreatSlider;
			aggressiveness = ((initialLevel < 0.02f) ? 0f : ((initialLevel < 0.11f) ? 1f : ((initialLevel < 0.21000001f) ? 2f : ((initialLevel < 0.51f) ? 3f : ((initialLevel < 1.01f) ? 4f : ((initialLevel < 2.01f) ? 5f : ((initialLevel < 5.01f) ? 6f : ((initialLevel < 8.01f) ? 7f : ((initialLevel < 10.01f) ? 8f : ((!(initialLevel < 15.01f)) ? 10f : 9f))))))))));
			combatThreatSlider.value = aggressiveness;
			text = initialLevel * 100f + "%";
			__instance.combatThreatText.text = text;
			initialLevel = __instance.combatSettings.battleExpFactor;
			Slider dFExpSlider = __instance.DFExpSlider;
			aggressiveness = ((initialLevel < 0.02f) ? 0f : ((initialLevel < 0.11f) ? 1f : ((initialLevel < 0.21000001f) ? 2f : ((initialLevel < 0.51f) ? 3f : ((initialLevel < 1.01f) ? 4f : ((initialLevel < 2.01f) ? 5f : ((initialLevel < 5.01f) ? 6f : ((initialLevel < 8.01f) ? 7f : ((initialLevel < 10.01f) ? 8f : ((!(initialLevel < 15.01f)) ? 10f : 9f))))))))));
			dFExpSlider.value = aggressiveness;
			text = initialLevel * 100f + "%";
			__instance.DFExpText.text = text;
			GameDesc val = new GameDesc();
			float difficulty = ((CombatSettings)(ref __instance.combatSettings)).difficulty;
			string arg = ((difficulty >= 9.9999f) ? difficulty.ToString("0.00") : difficulty.ToString("0.000"));
			__instance.difficultyText.text = string.Format(Localization.Translate("难度系数值"), arg);
			__instance.difficultTipGroupDF.SetActive(((int)((CombatSettings)(ref __instance.combatSettings)).aggressiveLevel == 40 && difficulty > 4.5f) || difficulty > 6f);
			__instance.gameDesc.CopyTo(val);
			val.combatSettings = __instance.combatSettings;
			__instance.propertyMultiplierText.text = Localization.Translate("元数据生成倍率") + " " + val.propertyMultiplier.ToString("0%");
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		private static bool CombatSettings_difficulty_Getter_Prefix(CombatSettings __instance, ref float __result)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0375: Unknown result type (might be due to invalid IL or missing references)
			//IL_043e: Unknown result type (might be due to invalid IL or missing references)
			float aggressiveness = __instance.aggressiveness;
			float num = ((aggressiveness < -0.1f) ? (-0.2f) : ((aggressiveness < 0.25f) ? 0f : ((aggressiveness < 0.75f) ? 0.5f : ((aggressiveness < 1.5f) ? 0.75f : ((!(aggressiveness < 2.5f)) ? 1.125f : 0.875f)))));
			float num2 = num;
			float num3 = __instance.initialLevel * 0.8f;
			num = __instance.initialGrowth;
			aggressiveness = ((num < 0.15f) ? 0f : ((num < 0.3f) ? 0.25f : ((num < 0.65f) ? 0.5f : ((num < 0.8f) ? 0.75f : ((num < 1.15f) ? 1f : ((num < 1.65f) ? 1.25f : ((num < 2.15f) ? 1.5f : ((num < 2.65f) ? 1.75f : ((num < 3.15f) ? 2f : ((!(num < 3.65f)) ? 2.5f : 2.25f))))))))));
			float num4 = aggressiveness;
			aggressiveness = __instance.initialColonize;
			num = ((aggressiveness < 0.15f) ? 0f : ((aggressiveness < 0.3f) ? 0.25f : ((aggressiveness < 0.65f) ? 0.5f : ((aggressiveness < 0.8f) ? 0.75f : ((aggressiveness < 1.15f) ? 1f : ((aggressiveness < 1.65f) ? 1.25f : ((aggressiveness < 2.15f) ? 1.5f : ((aggressiveness < 2.65f) ? 1.75f : ((aggressiveness < 3.15f) ? 2f : ((!(aggressiveness < 3.65f)) ? 2.5f : 2.25f))))))))));
			float num5 = num;
			float num6 = __instance.maxDensity - 1f;
			num = __instance.growthSpeedFactor;
			aggressiveness = ((num < 0.35f) ? 0.3f : ((num < 0.75f) ? 0.7f : ((num < 1.5f) ? 1f : ((num < 2.5f) ? 1.2f : ((num < 3.5f) ? 1.5f : ((num < 4.5f) ? 1.6f : ((!(num < 5.5f)) ? 2f : 1.8f)))))));
			float num7 = aggressiveness;
			aggressiveness = __instance.powerThreatFactor;
			num = ((aggressiveness < 0.05f) ? 0.125f : ((aggressiveness < 0.15f) ? 0.3f : ((aggressiveness < 0.25f) ? 0.6f : ((aggressiveness < 0.55f) ? 0.8f : ((aggressiveness < 1.15f) ? 1f : ((aggressiveness < 2.15f) ? 1.2f : ((aggressiveness < 5.15f) ? 1.5f : ((aggressiveness < 8.15f) ? 1.8f : ((aggressiveness < 10.15f) ? 2f : ((!(aggressiveness < 15.15f)) ? 3f : 2.5f))))))))));
			float num8 = num;
			num = __instance.battleThreatFactor;
			aggressiveness = ((num < 0.05f) ? 0.125f : ((num < 0.15f) ? 0.3f : ((num < 0.25f) ? 0.6f : ((num < 0.55f) ? 0.8f : ((num < 1.15f) ? 1f : ((num < 2.15f) ? 1.2f : ((num < 5.15f) ? 1.5f : ((num < 8.15f) ? 1.8f : ((num < 10.15f) ? 2f : ((!(num < 15.15f)) ? 3f : 2.5f))))))))));
			float num9 = aggressiveness;
			aggressiveness = __instance.battleExpFactor;
			num = ((aggressiveness < 0.05f) ? 0f : ((aggressiveness < 0.15f) ? 1f : ((aggressiveness < 0.25f) ? 3f : ((aggressiveness < 0.55f) ? 6f : ((aggressiveness < 1.15f) ? 10f : ((aggressiveness < 2.15f) ? 12f : ((aggressiveness < 5.15f) ? 14f : ((aggressiveness < 8.15f) ? 16f : ((aggressiveness < 10.15f) ? 18f : ((!(aggressiveness < 15.15f)) ? 20f : 19f))))))))));
			float num10 = num;
			float num11 = ((num2 < 0f) ? 0f : (0.25f + num2 * (num8 * 0.5f + num9 * 0.5f)));
			float num12 = 0.375f + 0.625f * ((num3 + num10) / 10f);
			float num13 = 0.375f + 0.625f * ((num5 * 0.6f + num4 * 0.4f * (num5 * 0.75f + 0.25f)) * 0.6f + num7 * 0.4f * (num5 * 0.8f + 0.2f) + num6 * 0.29f * (num5 * 0.5f + 0.5f));
			__result = (float)(int)(num11 * num12 * num13 * 10000f + 0.5f) / 10000f;
			return false;
		}

		public static void Export(BinaryWriter w)
		{
			w.Write(_gameMinDist);
			w.Write(_gameMinStep);
			w.Write(_gameMaxStep);
			w.Write(_gameFlatten);
		}

		public static void Import(BinaryReader r)
		{
			_gameMinDist = r.ReadDouble();
			_gameMinStep = r.ReadDouble();
			_gameMaxStep = r.ReadDouble();
			_gameFlatten = r.ReadDouble();
		}
	}
	public static class UIConfigWindow
	{
		private static RectTransform _windowTrans;

		public static void Init()
		{
			I18N.Add("UniverseGen", "UniverseGen", "宇宙生成");
			I18N.Add("Birth Star", "Birth Star", "母星系");
			I18N.Add("Enable more settings on UniverseGen", "Enable more settings on UniverseGen", "启用更多宇宙生成设置");
			I18N.Add("* Requires game restart to take effect", "* Requires game restart to take effect", "* 需要重启游戏才能生效");
			I18N.Add("Maximum star count", "Maximum star count", "最大恒星数");
			I18N.Add("Enable Epic difficulty", "Enable Epic difficulty", "启用史诗难度");
			I18N.Add("Resource multiplier", "Resource multiplier", "资源倍率");
			I18N.Add("Oil multiplier (relative to Very Hard)", "Oil multiplier (relative to Very Hard)", "石油倍率(相对于非常困难)");
			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();
			MyConfigWindow.OnUICreated = (Action<MyConfigWindow, RectTransform>)Delegate.Combine(MyConfigWindow.OnUICreated, new Action<MyConfigWindow, RectTransform>(CreateUI));
		}

		private static void CreateUI(MyConfigWindow wnd, RectTransform trans)
		{
			_windowTrans = trans;
			float num = 0f;
			float num2 = 10f;
			((MyWindowWithTabs)wnd).AddSplitter(trans, 10f);
			((MyWindowWithTabs)wnd).AddTabGroup(trans, "UniverseGen", "tab-group-galaxygen");
			RectTransform val = ((MyWindowWithTabs)wnd).AddTab(_windowTrans, "General");
			MyCheckBox.CreateCheckBox(num, num2, val, MoreSettings.Enabled, "Enable more settings on UniverseGen", 15);
			num += 20f;
			num2 += 26f;
			MyWindow.AddText(num, num2, val, "* Requires game restart to take effect", 13, "label");
			num -= 20f;
			num2 += 36f;
			num += 10f;
			MyWindow.AddText(num, num2, val, "Maximum star count", 16, "label");
			num += 20f;
			num2 += 26f;
			MySlider sl0 = MySlider.CreateSlider(num, num2, val, (float)MoreSettings.MaxStarCount.Value, 64f, 1024f, "G", 240f);
			sl0.OnValueChanged += delegate
			{
				MySlider obj = sl0;
				int num5 = (MoreSettings.MaxStarCount.Value = (Mathf.RoundToInt(sl0.Value) + 7) & -8);
				obj.Value = num5;
			};
			num -= 30f;
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val, EpicDifficulty.Enabled, "Enable Epic difficulty", 15);
			num2 += 36f;
			num += 10f;
			MyWindow.AddText(num, num2, val, "Resource multiplier", 16, "label");
			num += 20f;
			num2 += 26f;
			int num3 = EpicDifficulty.ResourceMultiplierToIndex(EpicDifficulty.ResourceMultiplier.Value);
			MySlider sl1 = MySlider.CreateSlider(num, num2, val, (float)num3, 0f, (float)EpicDifficulty.ResourceMultipliersCount() - 1f, "G", 240f);
			sl1.SetLabelText(EpicDifficulty.IndexToResourceMultiplier(Mathf.RoundToInt(sl1.Value)).ToString(sl1.labelFormat));
			sl1.OnValueChanged += delegate
			{
				float value2 = EpicDifficulty.IndexToResourceMultiplier(Mathf.RoundToInt(sl1.Value));
				EpicDifficulty.ResourceMultiplier.Value = value2;
				sl1.SetLabelText(value2.ToString(sl1.labelFormat));
			};
			num -= 30f;
			num2 += 31f;
			num += 10f;
			MyWindow.AddText(num, num2, val, "Oil multiplier (relative to Very Hard)", 16, "label");
			num += 20f;
			num2 += 26f;
			num3 = EpicDifficulty.OilMultiplierToIndex(EpicDifficulty.OilMultiplier.Value);
			MySlider sl2 = MySlider.CreateSlider(num, num2, val, (float)num3, 0f, (float)EpicDifficulty.OilMultipliersCount() - 1f, "G", 240f);
			sl2.SetLabelText(EpicDifficulty.IndexToOilMultiplier(Mathf.RoundToInt(sl2.Value)).ToString(sl2.labelFormat));
			sl2.OnValueChanged += delegate
			{
				float value = EpicDifficulty.IndexToOilMultiplier(Mathf.RoundToInt(sl2.Value));
				EpicDifficulty.OilMultiplier.Value = value;
				sl2.SetLabelText(value.ToString(sl2.labelFormat));
			};
			RectTransform val2 = ((MyWindowWithTabs)wnd).AddTab(_windowTrans, "Birth Star");
			num = 0f;
			num2 = 10f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet", 15);
			num = 300f;
			num2 = 10f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)", 15);
			num2 += 36f;
			MyCheckBox.CreateCheckBox(num, num2, val2, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity", 15);
		}
	}
	[BepInPlugin("org.soardev.universegentweaks", "UniverseGenTweaks", "1.2.7")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[ModSaveSettings(/*Could not decode attribute arguments.*/)]
	public class UniverseGenTweaks : BaseUnityPlugin, IModCanSave
	{
		public static readonly ManualLogSource Logger = Logger.CreateLogSource("UniverseGenTweaks");

		private const ushort ModSaveVersion = 1;

		private void Awake()
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Expected O, but got Unknown
			MoreSettings.Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("MoreSettings", "Enabled", true, "Enable more settings on Universe Generation");
			MoreSettings.MaxStarCount = ((BaseUnityPlugin)this).Config.Bind<int>("MoreSettings", "MaxStarCount", 128, new ConfigDescription("(32 ~ 1024)\nMaximum star count for Universe Generation, enable MoreSettings.Enabled to take effect", (AcceptableValueBase)(object)new AcceptableValueRange<int>(32, 1024), new object[1]
			{
				new { }
			}));
			EpicDifficulty.Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("EpicDifficulty", "Enabled", true, "Enable Epic difficulty");
			EpicDifficulty.ResourceMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("EpicDifficulty", "ResourceMultiplier", 0.01f, new ConfigDescription("Resource multiplier for Epic difficulty", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.0001f, 0.05f), new object[1]
			{
				new { }
			}));
			EpicDifficulty.OilMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("EpicDifficulty", "OilMultiplier", 0.5f, new ConfigDescription("Oil multiplier for Epic difficulty relative to the Very-Hard difficulty", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 1f), new object[1]
			{
				new { }
			}));
			BirthPlanetPatch.SitiVeinsOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "SiTiVeinsOnBirthPlanet", false, "Silicon/Titanium on birth planet");
			BirthPlanetPatch.FireIceOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "FireIceOnBirthPlanet", false, "Fire ice on birth planet");
			BirthPlanetPatch.KimberliteOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "KimberliteOnBirthPlanet", false, "Kimberlite on birth planet");
			BirthPlanetPatch.FractalOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "FractalOnBirthPlanet", false, "Fractal silicon on birth planet");
			BirthPlanetPatch.OrganicOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "OrganicOnBirthPlanet", false, "Organic crystal on birth planet");
			BirthPlanetPatch.OpticalOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "OpticalOnBirthPlanet", false, "Optical grating crystal on birth planet");
			BirthPlanetPatch.SpiniformOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "SpiniformOnBirthPlanet", false, "Spiniform stalagmite crystal on birth planet");
			BirthPlanetPatch.UnipolarOnBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "UnipolarOnBirthPlanet", false, "Unipolar magnet on birth planet");
			BirthPlanetPatch.FlatBirthPlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "FlatBirthPlanet", false, "Birth planet is solid flat (no water at all)");
			BirthPlanetPatch.HighLuminosityBirthStar = ((BaseUnityPlugin)this).Config.Bind<bool>("Birth", "HighLuminosityBirthStar", false, "Birth star has high luminosity");
			UIConfigWindow.Init();
			MoreSettings.Init();
			EpicDifficulty.Init();
			BirthPlanetPatch.Init();
		}

		private void OnDestroy()
		{
			BirthPlanetPatch.Uninit();
			EpicDifficulty.Uninit();
			MoreSettings.Uninit();
		}

		public void Export(BinaryWriter w)
		{
			w.Write((ushort)1);
			MoreSettings.Export(w);
		}

		public void Import(BinaryReader r)
		{
			if (r.ReadUInt16() > 0)
			{
				MoreSettings.Import(r);
			}
		}

		public void IntoOtherSave()
		{
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "org.soardev.universegentweaks";

		public const string PLUGIN_NAME = "UniverseGenTweaks";

		public const string PLUGIN_VERSION = "1.2.7";
	}
}