diff --git a/CheatEnabler/CHANGELOG.md b/CheatEnabler/CHANGELOG.md index 87bcfbd..a2e8053 100644 --- a/CheatEnabler/CHANGELOG.md +++ b/CheatEnabler/CHANGELOG.md @@ -1,5 +1,11 @@ +
+Read me in English + ## Changlog +* 2.3.30 + + Fix a warning issue while `No condition build` or `No collision` is enabled. + + Optimized `Finish build immediately` for better performance. * 2.3.29 + Fix compatibility with game update 0.10.32.25779 * 2.3.28 @@ -15,14 +21,10 @@ + New feature: `Enable warp without space warpers` + New feature: `Wind Turbines do global power coverage` + Fix an issue that `Complete Dyson Sphere Shells instantly` does not generate production records for solar sails. - -
-Older versions - * 2.3.24 + `Complete Dyson Sphere Shells instantly`: Fix a bug that may cause negative power in some cases * 2.3.23 - + New feature: `Complete Dyson Sphere Shells instantly` + + New feature: `Complete Dyson Sphere Shells instantly` + Fix a crash when config panel is opened before game is fully loaded * 2.3.22 + Fix `Pump Anywhere` @@ -146,8 +148,14 @@
+
+中文读我 + ## 更新日志 +* 2.3.30 + + 修复了启用`无条件建造`或`无碰撞`时的警告问题 + + 优化了`立即完成建造`的性能表现 * 2.3.29 + 修复了与游戏更新0.10.32.25779的兼容性 * 2.3.28 @@ -163,10 +171,6 @@ + 新功能:`无需空间翘曲器即可曲速飞行` + 新功能:`风力涡轮机供电覆盖全球` + 修复了`立即完成戴森壳建造`未生成太阳帆生产记录的问题 - -
-更早的版本 - * 2.3.24 + `立即完成戴森壳建造`:修复了在某些情况下可能导致发电为负的问题 * 2.3.23 diff --git a/CheatEnabler/CheatEnabler.cs b/CheatEnabler/CheatEnabler.cs index f6c2ce4..8a57c9c 100644 --- a/CheatEnabler/CheatEnabler.cs +++ b/CheatEnabler/CheatEnabler.cs @@ -106,6 +106,6 @@ public class CheatEnabler : BaseUnityPlugin private void Update() { if (VFInput.inputing) return; - FactoryPatch.OnUpdate(); + FactoryPatch.OnInputUpdate(); } } \ No newline at end of file diff --git a/CheatEnabler/CheatEnabler.csproj b/CheatEnabler/CheatEnabler.csproj index 4bf1230..f64313f 100644 --- a/CheatEnabler/CheatEnabler.csproj +++ b/CheatEnabler/CheatEnabler.csproj @@ -5,7 +5,7 @@ net472 org.soardev.cheatenabler DSP MOD - CheatEnabler - 2.3.29 + 2.3.30 true latest CheatEnabler @@ -19,7 +19,7 @@ - + diff --git a/CheatEnabler/Patches/DysonSpherePatch.cs b/CheatEnabler/Patches/DysonSpherePatch.cs index 3151063..61a47ad 100644 --- a/CheatEnabler/Patches/DysonSpherePatch.cs +++ b/CheatEnabler/Patches/DysonSpherePatch.cs @@ -37,7 +37,7 @@ public class DysonSpherePatch: PatchImpl OverclockSilo.Enable(OverclockSiloEnabled.Value); Enable(true); } - + public static void Uninit() { Enable(false); @@ -48,7 +48,7 @@ public class DysonSpherePatch: PatchImpl OverclockEjector.Enable(false); OverclockSilo.Enable(false); } - + [HarmonyTranspiler] [HarmonyPatch(typeof(DysonNode), nameof(DysonNode.OrderConstructCp))] private static IEnumerable DysonNode_OrderConstructCp_Transpiler(IEnumerable instructions, ILGenerator generator) @@ -88,7 +88,7 @@ public class DysonSpherePatch: PatchImpl private static long _sailLifeTime; private static DysonSailCache[][] _sailsCache; private static int[] _sailsCacheLen, _sailsCacheCapacity; - + private struct DysonSailCache { public DysonSail Sail; @@ -136,7 +136,7 @@ public class DysonSpherePatch: PatchImpl Array.Clear(_sailsCacheLen, 0, starCount); Array.Clear(_sailsCacheCapacity, 0, starCount); } - + private static void SetSailsCacheCapacity(int index, int capacity) { var newCache = new DysonSailCache[capacity]; @@ -164,7 +164,7 @@ public class DysonSpherePatch: PatchImpl UpdateSailLifeTime(); } } - + [HarmonyTranspiler] [HarmonyPatch(typeof(EjectorComponent), nameof(EjectorComponent.InternalUpdate))] private static IEnumerable EjectorComponent_InternalUpdate_Transpiler(IEnumerable instructions, ILGenerator generator) @@ -280,7 +280,7 @@ public class DysonSpherePatch: PatchImpl } } } - + private class SkipAbsorbPatch: PatchImpl { protected override void OnEnable() @@ -319,12 +319,12 @@ public class DysonSpherePatch: PatchImpl new CodeInstruction(OpCodes.Ldc_I4_1), new CodeInstruction(OpCodes.Add), new CodeInstruction(OpCodes.Stind_I4), - + // this.RemoveSolarSail(index); new CodeInstruction(OpCodes.Ldarg_0).WithLabels(label1), new CodeInstruction(OpCodes.Ldloc_1), new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(DysonSwarm), nameof(DysonSwarm.RemoveSolarSail))), - + // return false; new CodeInstruction(OpCodes.Ldc_I4_1), new CodeInstruction(OpCodes.Ret) @@ -332,7 +332,7 @@ public class DysonSpherePatch: PatchImpl return matcher.InstructionEnumeration(); } } - + private class QuickAbsorbPatch: PatchImpl { protected override void OnEnable() @@ -363,7 +363,7 @@ public class DysonSpherePatch: PatchImpl /* Insert a RETURN before old absorption functions */ return matcher.InstructionEnumeration(); } - + private static void DoAbsorb(DysonSphereLayer layer, long gameTick) { var nodeCount = layer.nodeCursor - 1; @@ -383,7 +383,7 @@ public class DysonSpherePatch: PatchImpl } } } - + private class EjectAnywayPatch: PatchImpl { [HarmonyTranspiler] diff --git a/CheatEnabler/Patches/FactoryPatch.cs b/CheatEnabler/Patches/FactoryPatch.cs index 8766688..685e8f6 100644 --- a/CheatEnabler/Patches/FactoryPatch.cs +++ b/CheatEnabler/Patches/FactoryPatch.cs @@ -122,7 +122,7 @@ public class FactoryPatch: PatchImpl _beltIds ??= [..LDB.items.dataArray.Where(i => i.prefabDesc.isBelt).Select(i => i.ID)]; } - public static void OnUpdate() + public static void OnInputUpdate() { if (_noConditionKey.keyValue) { @@ -154,43 +154,32 @@ public class FactoryPatch: PatchImpl public static void ArrivePlanet(PlanetFactory factory) { + if (factory.prebuildCount <= 0) return; var imm = ImmediateEnabled.Value; var architect = ArchitectModeEnabled.Value; if ((!imm && !architect) || GameMain.gameScenario == null) return; var prebuilds = factory.prebuildPool; - var anyBelt = false; if (imm) { + var anyBelt = false; + var anyBuilt = false; factory.BeginFlattenTerrain(); factory.cargoTraffic._batch_buffer_no_refresh = true; - } - for (var i = factory.prebuildCursor - 1; i > 0; i--) - { - if (prebuilds[i].id != i) continue; - if (prebuilds[i].itemRequired > 0) + PlanetFactory.batchBuild = true; + for (var i = factory.prebuildCursor - 1; i > 0; i--) { - if (!architect) continue; - prebuilds[i].itemRequired = 0; - if (imm) + ref var pb = ref prebuilds[i]; + if (pb.id != i || pb.isDestroyed) continue; + if (pb.itemRequired > 0) { - anyBelt = anyBelt || _beltIds.Contains(prebuilds[i].protoId); - factory.BuildFinally(GameMain.mainPlayer, i, false); + if (!architect) continue; + pb.itemRequired = 0; } - else - factory.AlterPrebuildModelState(i); + anyBelt = anyBelt || _beltIds.Contains(pb.protoId); + factory.BuildFinally(GameMain.mainPlayer, i, false); + anyBuilt = true; } - else - { - if (imm) - { - anyBelt = anyBelt || _beltIds.Contains(prebuilds[i].protoId); - factory.BuildFinally(GameMain.mainPlayer, i, false); - } - } - } - - if (imm) - { + PlanetFactory.batchBuild = false; if (anyBelt) { factory.cargoTraffic.RefreshBeltBatchesBuffers(); @@ -198,6 +187,21 @@ public class FactoryPatch: PatchImpl } factory.cargoTraffic._batch_buffer_no_refresh = false; factory.EndFlattenTerrain(); + if (anyBuilt) + { + factory.planet.physics?.raycastLogic?.NotifyBatchObjectRemove(); + factory.planet.audio?.SetPlanetAudioDirty(); + } + } + else if (architect) + { + for (var i = factory.prebuildCursor - 1; i > 0; i--) + { + ref var pb = ref prebuilds[i]; + if (pb.id != i || pb.isDestroyed || pb.itemRequired == 0) continue; + pb.itemRequired = 0; + factory.AlterPrebuildModelState(i); + } } } @@ -214,6 +218,7 @@ public class FactoryPatch: PatchImpl private static void GameMain_Begin_Postfix_For_ImmBuild() { + if (DSPGame.IsMenuDemo) return; var factory = GameMain.mainPlayer?.factory; if (factory != null) { @@ -752,6 +757,7 @@ public class FactoryPatch: PatchImpl private static void GameMain_Begin_Postfix() { + if (DSPGame.IsMenuDemo) return; if (BeltSignalGeneratorEnabled.Value) InitSignalBelts(); InitItemSources(); } diff --git a/CheatEnabler/README.md b/CheatEnabler/README.md index 8fd3013..6ef553f 100644 --- a/CheatEnabler/README.md +++ b/CheatEnabler/README.md @@ -1,7 +1,9 @@ # CheatEnabler +
+Read me in English + #### Add various cheat functions while disabling abnormal determinants -#### 添加一些作弊功能,同时屏蔽异常检测 ## Usage @@ -63,6 +65,12 @@ * [BepInEx](https://bepinex.dev/): Base modding framework * [Multifunction_mod](https://github.com/blacksnipebiu/Multifunction_mod): Some cheat functions +
+ +
+中文读我 + +#### 添加一些作弊功能,同时屏蔽异常检测 ## 使用说明 @@ -123,3 +131,5 @@ * [戴森球计划](https://store.steampowered.com/app/1366540): 伟大的游戏 * [BepInEx](https://bepinex.dev/): 基础模组框架 * [Multifunction_mod](https://github.com/blacksnipebiu/Multifunction_mod): 一些作弊功能 + +
diff --git a/CheatEnabler/package/manifest.json b/CheatEnabler/package/manifest.json index 7ebfc26..42a0ae8 100644 --- a/CheatEnabler/package/manifest.json +++ b/CheatEnabler/package/manifest.json @@ -1,6 +1,6 @@ { "name": "CheatEnabler", - "version_number": "2.3.29", + "version_number": "2.3.30", "website_url": "https://github.com/soarqin/DSP_Mods/tree/master/CheatEnabler", "description": "Add various cheat functions while disabling abnormal determinants / 添加一些作弊功能,同时屏蔽异常检测", "dependencies": [ diff --git a/UXAssist/Functions/UIFunctions.cs b/UXAssist/Functions/UIFunctions.cs index 265cd61..6ad33b3 100644 --- a/UXAssist/Functions/UIFunctions.cs +++ b/UXAssist/Functions/UIFunctions.cs @@ -205,45 +205,45 @@ public static class UIFunctions var uiRoot = UIRoot.instance; if (!uiRoot) return; var rtrans = uiRoot.uiGame.starmap.transform as RectTransform; - var cornerComboBox = UI.MyCornerComboBox.CreateComboBox(135, 5, rtrans, true).WithItems("Show original name".Translate(), "Show distance".Translate(), "Show planet count".Translate(), "Show all information".Translate()); + var cornerComboBox = UI.MyCornerComboBox.CreateComboBox(135, 0, rtrans, true).WithItems("Show original name".Translate(), "Show distance".Translate(), "Show planet count".Translate(), "Show all information".Translate()); cornerComboBox.SetIndex(Functions.UIFunctions.CornerComboBoxIndex); cornerComboBox.OnSelChanged += (index) => { Functions.UIFunctions.CornerComboBoxIndex = index; }; - _starmapFilterToggler = UI.MyCheckButton.CreateCheckButton(5, 5, rtrans, false, ">>").WithSize(24, 24); + _starmapFilterToggler = UI.MyCheckButton.CreateCheckButton(0, 0, rtrans, false, ">>").WithSize(24, 24); MyCheckButton[] buttons = [ - UI.MyCheckButton.CreateCheckButton(29, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Kimberlite - UI.MyCheckButton.CreateCheckButton(53, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Fractal Silicon - UI.MyCheckButton.CreateCheckButton(77, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Organic Crystal - UI.MyCheckButton.CreateCheckButton(101, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Grating Crystal - UI.MyCheckButton.CreateCheckButton(125, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Stalagmite Crystal - UI.MyCheckButton.CreateCheckButton(149, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Unipolar Magnet - UI.MyCheckButton.CreateCheckButton(173, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Crude Oil - UI.MyCheckButton.CreateCheckButton(197, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Fire Ice - UI.MyCheckButton.CreateCheckButton(221, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Sulfuric Acid - UI.MyCheckButton.CreateCheckButton(245, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Water - UI.MyCheckButton.CreateCheckButton(269, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Hydrogen - UI.MyCheckButton.CreateCheckButton(293, 5, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Deuterium + UI.MyCheckButton.CreateCheckButton(24, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Kimberlite + UI.MyCheckButton.CreateCheckButton(48, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Fractal Silicon + UI.MyCheckButton.CreateCheckButton(72, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Organic Crystal + UI.MyCheckButton.CreateCheckButton(96, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Grating Crystal + UI.MyCheckButton.CreateCheckButton(120, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Stalagmite Crystal + UI.MyCheckButton.CreateCheckButton(144, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Unipolar Magnet + UI.MyCheckButton.CreateCheckButton(168, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Crude Oil + UI.MyCheckButton.CreateCheckButton(192, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Fire Ice + UI.MyCheckButton.CreateCheckButton(216, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Sulfuric Acid + UI.MyCheckButton.CreateCheckButton(240, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Water + UI.MyCheckButton.CreateCheckButton(264, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Hydrogen + UI.MyCheckButton.CreateCheckButton(288, 0, rtrans, false).WithIcon().WithSize(24, 24).WithIconWidth(24), // Deuterium - UI.MyCheckButton.CreateCheckButton(29, 29, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 53, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 77, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 101, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 125, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 149, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 173, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 197, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 221, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 24, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 48, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 72, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 96, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 120, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 144, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 168, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 192, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 216, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 263, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 287, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 311, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 335, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 359, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), - UI.MyCheckButton.CreateCheckButton(29, 383, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 258, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 282, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 306, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 330, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 354, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), + UI.MyCheckButton.CreateCheckButton(24, 378, rtrans, false).WithIcon().WithSize(150, 24).WithIconWidth(24), ]; - var allOresText = MyWindow.AddText(25, 243, rtrans, "All 6 Basic Ores".Translate(), 12); + var allOresText = MyWindow.AddText(20, 238, rtrans, "All 6 Basic Ores".Translate(), 12); allOresText.gameObject.SetActive(false); _starmapFilterToggler.OnChecked += UpdateButtons; foreach (var button in buttons) diff --git a/UXAssist/Patches/DysonSpherePatch.cs b/UXAssist/Patches/DysonSpherePatch.cs index cea31a8..b254828 100644 --- a/UXAssist/Patches/DysonSpherePatch.cs +++ b/UXAssist/Patches/DysonSpherePatch.cs @@ -497,7 +497,7 @@ public class DysonSpherePatch: PatchImpl { RecheckDysonSphereAutoNodes(); } - + protected override void OnDisable() { RecheckDysonSphereAutoNodes(); diff --git a/UXAssist/Patches/FactoryPatch.cs b/UXAssist/Patches/FactoryPatch.cs index e3cf051..7f280e4 100644 --- a/UXAssist/Patches/FactoryPatch.cs +++ b/UXAssist/Patches/FactoryPatch.cs @@ -261,6 +261,7 @@ public class FactoryPatch : PatchImpl protected override void OnDisable() { + GameLogic.OnGameEnd -= GameMain_End_Postfix; if (_sunlight) { _sunlight.transform.localEulerAngles = new Vector3(0f, 180f); diff --git a/UXAssist/Patches/LogisticsPatch.cs b/UXAssist/Patches/LogisticsPatch.cs index 01efbc7..07b98a8 100644 --- a/UXAssist/Patches/LogisticsPatch.cs +++ b/UXAssist/Patches/LogisticsPatch.cs @@ -171,7 +171,6 @@ public static class LogisticsPatch new CodeMatch(OpCodes.Ldlen), new CodeMatch(OpCodes.Conv_I4) ); - UXAssist.Logger.LogDebug($"Patch ILS ship count: {matcher.Pos}"); matcher.Repeat(m => m.Advance(4).InsertAndAdvance( new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(LogisticsPatch), nameof(AutoConfigILSShipCount))), new CodeInstruction(OpCodes.Call, AccessTools.PropertyGetter(typeof(ConfigEntry), nameof(ConfigEntry.Value))),