using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using DysonSphereMods.Shared;
using HarmonyLib;
using Microsoft.CodeAnalysis;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Valoneu")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyDescription("DistributeWarpers")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: AssemblyInformationalVersion("1.0.2+e138177e794fdd1ec8a99e58bf7a8b2914970e85")]
[assembly: AssemblyProduct("DysonSphereMods")]
[assembly: AssemblyTitle("DistributeWarpers")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.2.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 DistributeWarpers
{
[BepInPlugin("com.Valoneu.DistributeWarpers", "DistributeWarpers", "1.0.0")]
[BepInProcess("DSPGAME.exe")]
public class DistributeWarpersPlugin : BaseUnityPlugin
{
[HarmonyPatch(typeof(StationComponent))]
public static class StationPatch
{
[HarmonyPostfix]
[HarmonyPatch("InternalTickLocal")]
public static void InternalTickLocal_Postfix(StationComponent __instance, PlanetFactory factory)
{
if (!ModEnabled.Value || __instance.id != 1)
{
return;
}
PlanetTransport transport = factory.transport;
if (transport == null)
{
return;
}
int num = 1210;
int num2 = 0;
for (int i = 1; i < transport.stationCursor; i++)
{
StationComponent val = transport.stationPool[i];
if (val == null || val.id != i || val.isCollector)
{
continue;
}
for (int j = 0; j < val.storage.Length; j++)
{
if (val.storage[j].itemId == num && val.storage[j].count > 0)
{
num2 += val.storage[j].count;
}
}
}
if (num2 <= 0)
{
return;
}
for (int k = 1; k < transport.stationCursor; k++)
{
StationComponent val2 = transport.stationPool[k];
if (val2 == null || val2.id != k || val2.isCollector || !val2.isStellar)
{
continue;
}
int num3 = Math.Min(TargetWarperCount.Value, 50) - val2.warperCount;
if (num3 <= 0)
{
continue;
}
int num4 = Math.Min(num3, num2);
if (num4 > 0)
{
int num5 = TakeWarpersFromPlanetCargo(transport, num4);
val2.warperCount += num5;
num2 -= num5;
if (num2 <= 0)
{
break;
}
}
}
}
private static int TakeWarpersFromPlanetCargo(PlanetTransport transport, int count)
{
int num = count;
int num2 = 1210;
for (int i = 1; i < transport.stationCursor; i++)
{
StationComponent val = transport.stationPool[i];
if (val == null || val.id != i || val.isCollector)
{
continue;
}
for (int j = 0; j < val.storage.Length; j++)
{
if (val.storage[j].itemId == num2 && val.storage[j].count > 0)
{
int num3 = Math.Min(num, val.storage[j].count);
val.storage[j].count -= num3;
num -= num3;
if (num <= 0)
{
return count;
}
}
}
}
return count - num;
}
}
public const string GUID = "com.Valoneu.DistributeWarpers";
public const string NAME = "DistributeWarpers";
public const string VERSION = "1.0.0";
public static ConfigEntry<bool> ModEnabled;
public static ConfigEntry<int> TargetWarperCount;
private void Awake()
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Enable/disable automatic warper distribution");
TargetWarperCount = ((BaseUnityPlugin)this).Config.Bind<int>("General", "TargetCount", 50, "How many warpers each station should try to maintain in its internal slot (max 50)");
Log.Init(((BaseUnityPlugin)this).Logger);
new Harmony("com.Valoneu.DistributeWarpers").PatchAll(typeof(StationPatch));
((BaseUnityPlugin)this).Logger.LogInfo((object)"DistributeWarpers v1.0.0 loaded!");
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "com.Valoneu.DistributeWarpers";
public const string PLUGIN_NAME = "DistributeWarpers";
public const string PLUGIN_VERSION = "1.0.2";
}
}