mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2026-08-05 16:50:21 +08:00
59 lines
2.1 KiB
C#
59 lines
2.1 KiB
C#
using HarmonyLib;
|
|
using UXAssist.Common;
|
|
|
|
namespace CheatEnabler.Patches.Factory;
|
|
|
|
internal class ArchitectMode : PatchImpl<ArchitectMode>
|
|
{
|
|
private static bool[] _canBuildItems;
|
|
|
|
protected override void OnEnable()
|
|
{
|
|
var factory = GameMain.mainPlayer?.factory;
|
|
if (factory?.planet?.data != null)
|
|
{
|
|
global::CheatEnabler.Patches.FactoryPatch.ArrivePlanet(factory);
|
|
}
|
|
}
|
|
|
|
[HarmonyPrefix]
|
|
[HarmonyPatch(typeof(StorageComponent), nameof(StorageComponent.TakeTailItems), [typeof(int), typeof(int), typeof(int), typeof(bool)],
|
|
[ArgumentType.Ref, ArgumentType.Ref, ArgumentType.Out, ArgumentType.Normal])]
|
|
[HarmonyPatch(typeof(StorageComponent), nameof(StorageComponent.TakeTailItems), [typeof(int), typeof(int), typeof(int[]), typeof(int), typeof(bool)],
|
|
[ArgumentType.Ref, ArgumentType.Ref, ArgumentType.Normal, ArgumentType.Out, ArgumentType.Normal])]
|
|
public static bool TakeTailItemsPatch(StorageComponent __instance, int itemId)
|
|
{
|
|
if (__instance == null || GameMain.mainPlayer == null || __instance.id != GameMain.mainPlayer.package.id) return true;
|
|
if (itemId <= 0) return true;
|
|
if (_canBuildItems == null)
|
|
{
|
|
DoInit();
|
|
}
|
|
|
|
return itemId >= 12000 || !_canBuildItems[itemId];
|
|
}
|
|
|
|
[HarmonyPostfix]
|
|
[HarmonyPatch(typeof(StorageComponent), nameof(StorageComponent.GetItemCount), typeof(int))]
|
|
public static void GetItemCountPatch(StorageComponent __instance, int itemId, ref int __result)
|
|
{
|
|
if (__result > 99) return;
|
|
if (__instance == null || GameMain.mainPlayer == null || __instance.id != GameMain.mainPlayer.package.id) return;
|
|
if (itemId <= 0) return;
|
|
if (_canBuildItems == null)
|
|
{
|
|
DoInit();
|
|
}
|
|
if (itemId < 12000 && _canBuildItems[itemId]) __result = 100;
|
|
}
|
|
|
|
private static void DoInit()
|
|
{
|
|
_canBuildItems = new bool[12000];
|
|
foreach (var ip in LDB.items.dataArray)
|
|
{
|
|
if ((ip.Type == EItemType.Logistics || ip.CanBuild) && ip.ID < 12000) _canBuildItems[ip.ID] = true;
|
|
}
|
|
}
|
|
}
|