From f224b7283831dbb01bae202c233292f50387639d Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Sun, 12 Jan 2025 14:24:04 +0800 Subject: [PATCH] UXAssist 1.2.13 --- CheatEnabler/Patches/FactoryPatch.cs | 25 ++++++++++++++++---- UXAssist/CHANGELOG.md | 8 +++++++ UXAssist/Patches/FactoryPatch.cs | 34 +++++++++++++++++++++++++++- UXAssist/UXAssist.csproj | 2 +- UXAssist/package/manifest.json | 2 +- 5 files changed, 64 insertions(+), 7 deletions(-) diff --git a/CheatEnabler/Patches/FactoryPatch.cs b/CheatEnabler/Patches/FactoryPatch.cs index ba4f46d..16a59e7 100644 --- a/CheatEnabler/Patches/FactoryPatch.cs +++ b/CheatEnabler/Patches/FactoryPatch.cs @@ -849,21 +849,33 @@ public class FactoryPatch: PatchImpl public static void ProcessBeltSignals() { if (!_initialized) return; - var factories = GameMain.data?.factories; + var data = GameMain.data; + var factories = data?.factories; if (factories == null) return; PerformanceMonitor.BeginSample(ECpuWorkEntry.Belt); - foreach (var factory in factories) + for (var index = data.factoryCount - 1; index >= 0; index--) { + var factory = factories[index]; if (factory == null) continue; - var belts = GetSignalBelts(factory.index); + var belts = GetSignalBelts(index); if (belts == null || belts.Count == 0) continue; - var factoryProductionStat = GameMain.statistics.production.factoryStatPool[factory.index]; + var factoryProductionStat = GameMain.statistics.production.factoryStatPool[index]; var productRegister = factoryProductionStat.productRegister; var consumeRegister = factoryProductionStat.consumeRegister; var countRecipe = BeltSignalCountRecipeEnabled.Value; var cargoTraffic = factory.cargoTraffic; + var beltCount = cargoTraffic.beltCursor; + List beltsToRemove = null; foreach (var pair in belts) { + if (pair.Key >= beltCount) + { + if (beltsToRemove == null) + beltsToRemove = [pair.Key]; + else + beltsToRemove.Add(pair.Key); + continue; + } var beltSignal = pair.Value; var signalId = beltSignal.SignalId; switch (signalId) @@ -961,6 +973,11 @@ public class FactoryPatch: PatchImpl } } } + if (beltsToRemove == null) continue; + foreach (var beltId in beltsToRemove) + { + belts.Remove(beltId); + } } PerformanceMonitor.EndSample(ECpuWorkEntry.Belt); diff --git a/UXAssist/CHANGELOG.md b/UXAssist/CHANGELOG.md index c196fe3..50c16f4 100644 --- a/UXAssist/CHANGELOG.md +++ b/UXAssist/CHANGELOG.md @@ -1,5 +1,9 @@ ## Changlog +* 1.2.13 + + `Belt signals for buy out dark fog items automatically`: Fix possible crashes. + + `Logistics Control Panel Improvement`: Auto apply filter with in-hand item now. + + Fix an alignment issue on UI panel. * 1.2.12 + `Construct only structure points but frames`: Fix a bug that frames are still not constructed when this function is disabled. + `Drag building power poles in maximum connection range`: Fix a bug that single power pole cannot be placed at some positions. @@ -229,6 +233,10 @@ ## 更新日志 +* 1.2.13 + + `用于自动购买黑雾物品的传送带信号`:修复了可能导致崩溃的问题 + + `物流控制面板改进`:现在也自动将拿着的物品设为筛选条件 + + 修复了UI面板上的对齐问题 * 1.2.12 + `只建造节点不建造框架`:修复了关闭此功能时框架不进行建造的问题 + `拖动建造电线杆时自动使用最大连接距离间隔`:修复了某些位置无法放置单个电线杆的问题 diff --git a/UXAssist/Patches/FactoryPatch.cs b/UXAssist/Patches/FactoryPatch.cs index 93162b9..8539985 100644 --- a/UXAssist/Patches/FactoryPatch.cs +++ b/UXAssist/Patches/FactoryPatch.cs @@ -1750,17 +1750,36 @@ public class FactoryPatch : PatchImpl { var factories = GameMain.data?.factories; if (factories == null) return; + var factoriesCount = factories.Length; var propertySystem = DSPGame.propertySystem; + List factoriesToRemove = null; foreach (var factoryIndex in SignalBeltFactoryIndices) { - if (factoryIndex >= factories.Length) continue; + if (factoryIndex >= factoriesCount) + { + if (factoriesToRemove == null) + factoriesToRemove = [factoryIndex]; + else + factoriesToRemove.Add(factoryIndex); + continue; + } var signalBelts = GetSignalBelts(factoryIndex); if (signalBelts == null) continue; var factory = factories[factoryIndex]; if (factory == null) continue; var cargoTraffic = factory.cargoTraffic; + var beltCount = cargoTraffic.beltCursor; + List beltsToRemove = null; foreach (var kvp in signalBelts) { + if (kvp.Key >= beltCount) + { + if (beltsToRemove == null) + beltsToRemove = [kvp.Key]; + else + beltsToRemove.Add(kvp.Key); + continue; + } ref var belt = ref cargoTraffic.beltPool[kvp.Key]; var cargoPath = cargoTraffic.GetCargoPath(belt.segPathId); var itemIdx = kvp.Value; @@ -1787,6 +1806,19 @@ public class FactoryPatch : PatchImpl if (consume > 0 && cargoPath.TryInsertItem(belt.segIndex + belt.segPivotOffset, itemId, consume, 0)) DarkFogItemsInVoid[itemIdx] -= consume; } + if (beltsToRemove == null) continue; + foreach (var beltId in beltsToRemove) + signalBelts.Remove(beltId); + if (signalBelts.Count > 0) continue; + if (factoriesToRemove == null) + factoriesToRemove = [factoryIndex]; + else + factoriesToRemove.Add(factoryIndex); + } + if (factoriesToRemove == null) return; + foreach (var factoryIndex in factoriesToRemove) + { + RemovePlanetSignalBelts(factoryIndex); } }) ); diff --git a/UXAssist/UXAssist.csproj b/UXAssist/UXAssist.csproj index 71983a2..e0209fa 100644 --- a/UXAssist/UXAssist.csproj +++ b/UXAssist/UXAssist.csproj @@ -4,7 +4,7 @@ net472 org.soardev.uxassist DSP MOD - UXAssist - 1.2.12 + 1.2.13 true latest UXAssist diff --git a/UXAssist/package/manifest.json b/UXAssist/package/manifest.json index 45ffd42..67d4694 100644 --- a/UXAssist/package/manifest.json +++ b/UXAssist/package/manifest.json @@ -1,6 +1,6 @@ { "name": "UXAssist", - "version_number": "1.2.12", + "version_number": "1.2.13", "website_url": "https://github.com/soarqin/DSP_Mods/tree/master/UXAssist", "description": "Some functions and patches for better user experience / 一些提升用户体验的功能和补丁", "dependencies": [