using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("PackageLogistic")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("PackageLogistic")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("74d0030f-a1b3-492f-9096-cac58b128eec")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace PackageLogistic;
internal struct TransportItemIndex
{
public int planetIndex;
public int transportIndex;
public int storageIndex;
public TransportItemIndex(int planetIndex, int transportIndex, int storageIndex)
{
this = default(TransportItemIndex);
this.planetIndex = planetIndex;
this.transportIndex = transportIndex;
this.storageIndex = storageIndex;
}
}
[BepInPlugin("com.qlvlp.dsp.PackageLogistic", "PackageLogistic", "1.1.4")]
public class PackageLogistic : BaseUnityPlugin
{
public const string GUID = "com.qlvlp.dsp.PackageLogistic";
public const string NAME = "PackageLogistic";
public const string VERSION = "1.1.4";
private ConfigEntry<bool> autoSpray;
private ConfigEntry<bool> costProliferator;
private ConfigEntry<bool> infVeins;
private ConfigEntry<bool> infItems;
private ConfigEntry<bool> infSand;
private ConfigEntry<bool> infBuildings;
private ConfigEntry<bool> useStorege;
private ConfigEntry<KeyboardShortcut> hotKey;
private ConfigEntry<bool> enableMod;
private ConfigEntry<bool> autoReplenishPackage;
private ConfigEntry<bool> autoReplenishTPPFuel;
private HashSet<int> battleBaseStorgeIDs;
private DeliveryPackage deliveryPackage;
private Dictionary<int, int> deliveryPackageItems = new Dictionary<int, int>();
private Dictionary<int, List<TransportItemIndex>> galacticTransportItems = new Dictionary<int, List<TransportItemIndex>>();
private readonly List<(int, int)> proliferators = new List<(int, int)>();
private readonly Dictionary<int, int> incPool = new Dictionary<int, int>
{
{ 1141, 0 },
{ 1142, 0 },
{ 1143, 0 }
};
private Dictionary<string, bool> taskState = new Dictionary<string, bool>();
private int stackSize;
private const float hydrogenThreshold = 0.6f;
private bool showGUI;
private Rect windowRect = new Rect(700f, 250f, 500f, 400f);
private readonly Texture2D windowTexture = new Texture2D(10, 10);
private int selectedPanel;
private readonly Dictionary<int, string> fuelOptions = new Dictionary<int, string>();
private ConfigEntry<int> fuelId;
private int selectedFuelIndex;
private ConfigEntry<bool> infFleet;
private ConfigEntry<bool> infAmmo;
private Dictionary<EAmmoType, List<int>> ammos = new Dictionary<EAmmoType, List<int>>();
private void Start()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0317: Unknown result type (might be due to invalid IL or missing references)
hotKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("窗口快捷键", "Key", new KeyboardShortcut((KeyCode)108, (KeyCode[])(object)new KeyCode[1] { (KeyCode)306 }), (ConfigDescription)null);
enableMod = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "EnableMod", true, "启用MOD");
autoReplenishPackage = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "autoReplenishPackage", true, "自动补充背包中开启过滤的物品(鼠标中键点击格子即可开启过滤)");
autoSpray = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "AutoSpray", true, "自动喷涂。自动对物流背包和星际运输站内的其它物品进行喷涂");
costProliferator = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "CostProliferator", true, "消耗增产剂。自动喷涂时消耗背包或星际物流站里的增产剂");
infItems = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "InfItems", false, "无限物品。物流背包和星际运输站内所有物品无限数量(无法获取成就)");
infVeins = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "InfVeins", false, "无限矿物。物流背包和星际运输站内所有矿物无限数量");
infBuildings = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "InfBuildings", false, "无限建筑。物流背包和星际运输站内所有建筑无限数量");
infSand = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "InfSand", false, "无限沙土。沙土无限数量(固定为1G)");
useStorege = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "useStorege", true, "从储物箱和储液罐回收物品");
autoReplenishTPPFuel = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "autoReplenishTPPFuel", true, "自动为火力发电站补充燃料");
fuelId = ((BaseUnityPlugin)this).Config.Bind<int>("配置", "fuelId", 0, "火力发电站燃料ID\n0:自动选择,精炼油和氢储量超60%时,谁多使用谁,否则使用煤,可防止原油裂解反应阻塞\n1006:煤, 1109:石墨, 1007:原油, 1114:精炼油, 1120:氢气, 1801:氢燃料棒, 1011:可燃冰\n5206:能量碎片, 1128:燃烧单元, 1030:木材, 1031:植物燃料");
fuelOptions.Add(0, "自动");
fuelOptions.Add(1006, "煤");
fuelOptions.Add(1109, "石墨");
fuelOptions.Add(1007, "原油");
fuelOptions.Add(1114, "精炼油");
fuelOptions.Add(1120, "氢气");
fuelOptions.Add(1801, "氢燃料棒");
fuelOptions.Add(1011, "可燃冰");
fuelOptions.Add(5206, "能量碎片");
fuelOptions.Add(1128, "燃烧单元");
fuelOptions.Add(1030, "木材");
fuelOptions.Add(1031, "植物燃料");
selectedFuelIndex = fuelOptions.Keys.ToList().FindIndex((int id) => id == fuelId.Value);
proliferators.Add((1143, 4));
proliferators.Add((1142, 2));
proliferators.Add((1141, 1));
windowTexture.SetPixels(Enumerable.Repeat<Color>(new Color(0f, 0f, 0f, 1f), 100).ToArray());
windowTexture.Apply();
infAmmo = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "InfAmmo", false, "无限弹药。物流背包和星际运输站内弹药无限数量");
infFleet = ((BaseUnityPlugin)this).Config.Bind<bool>("配置", "infFleet", false, "无限舰队。物流背包和星际运输站内无人机与战舰无限数量");
ammos.Add((EAmmoType)1, new List<int> { 1603, 1602, 1601 });
ammos.Add((EAmmoType)5, new List<int> { 1611, 1610, 1609 });
ammos.Add((EAmmoType)3, new List<int> { 1606, 1605, 1604 });
ammos.Add((EAmmoType)4, new List<int> { 1608, 1607 });
ammos.Add((EAmmoType)6, new List<int> { 1613, 1612 });
new Thread((ThreadStart)delegate
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"PackageLogistic start!");
while (true)
{
DateTime now = DateTime.Now;
try
{
if ((Object)(object)GameMain.instance == (Object)null || GameMain.instance.isMenuDemo || GameMain.isPaused || !GameMain.isRunning || GameMain.data == null)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"Game is not running!");
}
else if (enableMod.Value)
{
if (infSand.Value && GameMain.mainPlayer.sandCount != 1000000000)
{
Traverse.Create((object)GameMain.mainPlayer).Property("sandCount", (object[])null).SetValue((object)1000000000);
}
deliveryPackage = GameMain.mainPlayer.deliveryPackage;
CreateDeliveryPackageItemIndex();
CreateTransportItemIndex();
CheckTech();
FindbattleBaseStorges();
taskState["ProcessBattleBase"] = false;
ThreadPool.QueueUserWorkItem(ProcessBattleBase, taskState);
if (useStorege.Value)
{
taskState["ProcessStorage"] = false;
ThreadPool.QueueUserWorkItem(ProcessStorage, taskState);
}
taskState["ProcessTransport"] = false;
ThreadPool.QueueUserWorkItem(ProcessTransport, taskState);
taskState["ProcessAssembler"] = false;
ThreadPool.QueueUserWorkItem(ProcessAssembler, taskState);
taskState["ProcessMiner"] = false;
ThreadPool.QueueUserWorkItem(ProcessMiner, taskState);
taskState["ProcessPowerGenerator"] = false;
ThreadPool.QueueUserWorkItem(ProcessPowerGenerator, taskState);
taskState["ProcessPowerExchanger"] = false;
ThreadPool.QueueUserWorkItem(ProcessPowerExchanger, taskState);
taskState["ProcessSilo"] = false;
ThreadPool.QueueUserWorkItem(ProcessSilo, taskState);
taskState["ProcessEjector"] = false;
ThreadPool.QueueUserWorkItem(ProcessEjector, taskState);
taskState["ProcessLab"] = false;
ThreadPool.QueueUserWorkItem(ProcessLab, taskState);
taskState["ProcessTurret"] = false;
ThreadPool.QueueUserWorkItem(ProcessTurret, taskState);
if (autoReplenishPackage.Value)
{
taskState["ProcessPackage"] = false;
ThreadPool.QueueUserWorkItem(ProcessPackage, taskState);
}
List<string> list = new List<string>(taskState.Keys);
string arg = "";
while (true)
{
bool flag = true;
DateTime now2 = DateTime.Now;
for (int i = 0; i < list.Count; i++)
{
if (!taskState[list[i]])
{
arg = list[i];
flag = false;
break;
}
}
if ((now2 - now).TotalMilliseconds >= 1000.0)
{
((BaseUnityPlugin)this).Logger.LogError((object)$"{arg} cost time >= 1000 ms");
break;
}
if (flag)
{
break;
}
Thread.Sleep(5);
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)"PackageLogistic exception!");
((BaseUnityPlugin)this).Logger.LogError((object)ex.ToString());
}
finally
{
double totalMilliseconds = (DateTime.Now - now).TotalMilliseconds;
((BaseUnityPlugin)this).Logger.LogDebug((object)$"loop cost:{totalMilliseconds}");
if (totalMilliseconds < 50.0)
{
Thread.Sleep((int)(50.0 - totalMilliseconds));
}
}
}
}).Start();
}
private void Update()
{
//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)
KeyboardShortcut value = hotKey.Value;
if (((KeyboardShortcut)(ref value)).IsDown())
{
showGUI = !showGUI;
}
}
private void OnGUI()
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
if (showGUI)
{
GUI.DrawTexture(windowRect, (Texture)(object)windowTexture);
windowRect = GUI.Window(0, windowRect, new WindowFunction(WindowFunction), string.Format("{0} {1}", "PackageLogistic", "1.1.4"));
}
}
private void WindowFunction(int windowID)
{
string[] array = new string[3] { "主选项", "物品", "战斗" };
selectedPanel = GUILayout.Toolbar(selectedPanel, array, Array.Empty<GUILayoutOption>());
switch (selectedPanel)
{
case 0:
MainPanel();
break;
case 1:
ItemPanel();
break;
case 2:
FightPanel();
break;
}
GUI.DragWindow();
}
private void MainPanel()
{
GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
GUILayout.Space(10f);
GUILayout.Label("启用或停止MOD运行", Array.Empty<GUILayoutOption>());
enableMod.Value = GUILayout.Toggle(enableMod.Value, "启用MOD", Array.Empty<GUILayoutOption>());
GUILayout.Space(10f);
GUILayout.Label("自动补充背包中开启过滤的物品", Array.Empty<GUILayoutOption>());
autoReplenishPackage.Value = GUILayout.Toggle(autoReplenishPackage.Value, "自动补充", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
GUILayout.Label("自动对物流背包和星际运输站内的其它物品进行喷涂", Array.Empty<GUILayoutOption>());
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
autoSpray.Value = GUILayout.Toggle(autoSpray.Value, "自动喷涂", Array.Empty<GUILayoutOption>());
costProliferator.Value = GUILayout.Toggle(costProliferator.Value, "消耗增产剂", Array.Empty<GUILayoutOption>());
GUILayout.EndHorizontal();
GUILayout.Space(15f);
useStorege.Value = GUILayout.Toggle(useStorege.Value, "从储物箱和储液罐回收物品", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
autoReplenishTPPFuel.Value = GUILayout.Toggle(autoReplenishTPPFuel.Value, "自动为火力发电厂补充燃料", Array.Empty<GUILayoutOption>());
if (autoReplenishTPPFuel.Value)
{
selectedFuelIndex = GUILayout.SelectionGrid(selectedFuelIndex, fuelOptions.Values.ToArray(), 4, GUI.skin.toggle, Array.Empty<GUILayoutOption>());
fuelId.Value = fuelOptions.Keys.ToArray()[selectedFuelIndex];
}
GUILayout.Space(5f);
GUILayout.EndVertical();
}
private void ItemPanel()
{
GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
GUILayout.Space(10f);
GUILayout.Label("物流背包和星际运输站内所有建筑无限数量", Array.Empty<GUILayoutOption>());
infBuildings.Value = GUILayout.Toggle(infBuildings.Value, "无限建筑", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
GUILayout.Label("物流背包和星际运输站内所有矿物无限数量", Array.Empty<GUILayoutOption>());
infVeins.Value = GUILayout.Toggle(infVeins.Value, "无限矿物", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
GUILayout.Label("物流背包和星际运输站内所有物品无限数量(无法获取成就)", Array.Empty<GUILayoutOption>());
infItems.Value = GUILayout.Toggle(infItems.Value, "无限物品", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
GUILayout.Label("沙土无限数量(固定为1G)", Array.Empty<GUILayoutOption>());
infSand.Value = GUILayout.Toggle(infSand.Value, "无限沙土", Array.Empty<GUILayoutOption>());
GUILayout.Space(5f);
GUILayout.EndVertical();
}
private void FightPanel()
{
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Expected O, but got Unknown
GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
GUILayout.Space(10f);
GUILayout.Label("物流背包和星际运输站内所有弹药无限数量", Array.Empty<GUILayoutOption>());
infAmmo.Value = GUILayout.Toggle(infAmmo.Value, "无限弹药", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
GUILayout.Label("物流背包和星际运输站内无人机与战舰无限数量", Array.Empty<GUILayoutOption>());
infFleet.Value = GUILayout.Toggle(infFleet.Value, "无限舰队", Array.Empty<GUILayoutOption>());
GUILayout.Space(15f);
if (GUILayout.Button(new GUIContent("清理战场分析基站", "设置不掉落的物品将被丢弃"), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(150f) }))
{
ClearBattleBase();
}
GUILayout.Space(5f);
GUILayout.EndVertical();
}
private void CheckTech()
{
((BaseUnityPlugin)this).Logger.LogDebug((object)"CheckTech");
if (GameMain.history.TechUnlocked(2307) && deliveryPackage.colCount < 5)
{
deliveryPackage.colCount = 5;
deliveryPackage.NotifySizeChange();
}
else if (GameMain.history.TechUnlocked(2304) && deliveryPackage.colCount < 4)
{
deliveryPackage.colCount = 4;
deliveryPackage.NotifySizeChange();
}
else if ((!GameMain.history.TechUnlocked(1608) && deliveryPackage.colCount < 3) || !deliveryPackage.unlocked)
{
deliveryPackage.colCount = 3;
if (!deliveryPackage.unlocked)
{
deliveryPackage.unlocked = true;
}
deliveryPackage.NotifySizeChange();
}
if (GameMain.history.TechUnlocked(2307))
{
stackSize = 5000;
if (GameMain.mainPlayer.package.size < 160)
{
GameMain.mainPlayer.package.SetSize(160);
}
}
else if (GameMain.history.TechUnlocked(2306))
{
stackSize = 4000;
if (GameMain.mainPlayer.package.size < 150)
{
GameMain.mainPlayer.package.SetSize(150);
}
}
else if (GameMain.history.TechUnlocked(2305))
{
stackSize = 3000;
if (GameMain.mainPlayer.package.size < 140)
{
GameMain.mainPlayer.package.SetSize(140);
}
}
else if (GameMain.history.TechUnlocked(2304))
{
stackSize = 2000;
if (GameMain.mainPlayer.package.size < 130)
{
GameMain.mainPlayer.package.SetSize(130);
}
}
else if (GameMain.history.TechUnlocked(2303))
{
stackSize = 1000;
if (GameMain.mainPlayer.package.size < 120)
{
GameMain.mainPlayer.package.SetSize(120);
}
}
else if (GameMain.history.TechUnlocked(2302))
{
stackSize = 500;
if (GameMain.mainPlayer.package.size < 110)
{
GameMain.mainPlayer.package.SetSize(110);
}
}
else if (GameMain.history.TechUnlocked(2301))
{
stackSize = 400;
if (GameMain.mainPlayer.package.size < 100)
{
GameMain.mainPlayer.package.SetSize(100);
}
}
else
{
stackSize = 300;
if (GameMain.mainPlayer.package.size < 90)
{
GameMain.mainPlayer.package.SetSize(90);
}
}
if (GameMain.history.TechUnlocked(3510))
{
GameMain.history.remoteStationExtraStorage = 40000;
}
else if (GameMain.history.TechUnlocked(3509))
{
GameMain.history.remoteStationExtraStorage = 15000;
}
}
private void CreateDeliveryPackageItemIndex()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"CreateDeliveryPackageItemIndex");
deliveryPackageItems = new Dictionary<int, int>();
for (int i = 0; i < deliveryPackage.gridLength; i++)
{
GRID val = deliveryPackage.grids[i];
int num = Math.Min(val.recycleCount, ((GRID)(ref val)).stackSizeModified);
if (val.itemId <= 0)
{
continue;
}
if (!deliveryPackageItems.ContainsKey(val.itemId))
{
deliveryPackageItems.Add(val.itemId, i);
}
else
{
deliveryPackageItems[val.itemId] = i;
}
ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val.itemId);
if (!val2.CanBuild && stackSize > val2.StackSize)
{
deliveryPackage.grids[i].stackSize = stackSize;
}
if (infItems.Value)
{
deliveryPackage.grids[i].count = num;
}
else
{
if (infVeins.Value && IsVein(val.itemId))
{
if (val.itemId == 1120)
{
num = (int)((float)num * 0.6f);
}
deliveryPackage.grids[i].count = num;
}
if (infBuildings.Value && val2.CanBuild)
{
deliveryPackage.grids[i].count = num;
}
if (infAmmo.Value && val2.isAmmo)
{
deliveryPackage.grids[i].count = num;
}
if (infFleet.Value && val2.isFighter)
{
deliveryPackage.grids[i].count = num;
}
}
SprayDeliveryPackageItem(i);
}
}
private void CreateTransportItemIndex()
{
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0271: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"CreateTransportItemIndex");
galacticTransportItems = new Dictionary<int, List<TransportItemIndex>>();
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.transport.stationPool.Length - 1; num2 >= 0; num2--)
{
StationComponent val2 = val.transport.stationPool[num2];
if (val2 != null && val2.id > 0 && val2.isStellar && !val2.isCollector && !val2.isVeinCollector)
{
for (int num3 = val2.storage.Length - 1; num3 >= 0; num3--)
{
StationStore val3 = val2.storage[num3];
if (val3.itemId > 0)
{
if (!galacticTransportItems.ContainsKey(val3.itemId))
{
galacticTransportItems[val3.itemId] = new List<TransportItemIndex>();
}
TransportItemIndex store = new TransportItemIndex(num, num2, num3);
galacticTransportItems[val3.itemId].Add(new TransportItemIndex(num, num2, num3));
ItemProto val4 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val3.itemId);
if (val4.CanBuild)
{
val2.storage[num3].max = Math.Min(val4.StackSize * 10, val3.max);
}
if (infItems.Value)
{
val2.storage[num3].count = val3.max;
}
else
{
if (infVeins.Value && IsVein(val3.itemId))
{
if (val3.itemId == 1120)
{
val2.storage[num3].count = (int)((float)val3.max * 0.6f);
}
else
{
val2.storage[num3].count = val3.max;
}
}
if (infBuildings.Value && val4.CanBuild)
{
val2.storage[num3].count = val3.max;
}
if (infAmmo.Value && val4.isAmmo)
{
val2.storage[num3].count = val3.max;
}
if (infFleet.Value && val4.isFighter)
{
val2.storage[num3].count = val3.max;
}
}
SprayTransportItem(store);
}
}
}
}
}
}
}
private void FindbattleBaseStorges()
{
((BaseUnityPlugin)this).Logger.LogDebug((object)"FindbattleBaseStorges");
battleBaseStorgeIDs = new HashSet<int>();
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.defenseSystem.battleBases.buffer.Length - 1; num2 >= 0; num2--)
{
BattleBaseComponent val2 = val.defenseSystem.battleBases.buffer[num2];
if (val2 != null)
{
battleBaseStorgeIDs.Add(val2.storageId);
}
}
}
}
}
private bool HasItem(int itemId)
{
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
if (deliveryPackageItems.ContainsKey(itemId))
{
int num = deliveryPackageItems[itemId];
if (deliveryPackage.grids[num].count > 0)
{
return true;
}
}
else if (galacticTransportItems.ContainsKey(itemId))
{
foreach (TransportItemIndex item in galacticTransportItems[itemId])
{
if (GameMain.data.factories[item.planetIndex].transport.stationPool[item.transportIndex].storage[item.storageIndex].count > 0)
{
return true;
}
}
}
return false;
}
private bool IsVein(int itemId)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
if (new int[4] { 1000, 1116, 1120, 1121 }.Contains(itemId) || (int)LDB.veins.GetVeinTypeByItemId(itemId) != 0)
{
return true;
}
return false;
}
private void SprayDeliveryPackageItem(int index)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
if (!autoSpray.Value)
{
return;
}
GRID val = deliveryPackage.grids[index];
if (val.itemId <= 0 || val.count <= 0)
{
return;
}
if (val.itemId == 1141 || val.itemId == 1142 || val.itemId == 1143)
{
deliveryPackage.grids[index].inc = deliveryPackage.grids[index].count * 4;
return;
}
ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val.itemId);
if (val2.CanBuild || val2.isFighter)
{
return;
}
if (!costProliferator.Value && val.inc < val.count * 4)
{
deliveryPackage.grids[index].inc = val.count * 4;
return;
}
foreach (var proliferator in proliferators)
{
int num = val.count * proliferator.Item2 - val.inc;
if (num <= 0)
{
break;
}
int inc = GetInc(proliferator.Item1, num);
if (inc > 0)
{
deliveryPackage.grids[index].inc += inc;
}
}
}
private void SprayTransportItem(TransportItemIndex store)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
if (!autoSpray.Value)
{
return;
}
StationComponent val = GameMain.data.factories[store.planetIndex].transport.stationPool[store.transportIndex];
StationStore val2 = val.storage[store.storageIndex];
if (val2.itemId <= 0 || val2.count <= 0)
{
return;
}
if (val2.itemId == 1141 || val2.itemId == 1142 || val2.itemId == 1143)
{
val.storage[store.storageIndex].inc = val2.count * 4;
return;
}
ItemProto val3 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val2.itemId);
if (val3.CanBuild || val3.isFighter)
{
return;
}
if (!costProliferator.Value && val2.inc < val2.count * 4)
{
val.storage[store.storageIndex].inc = val2.count * 4;
return;
}
foreach (var proliferator in proliferators)
{
int num = val2.count * proliferator.Item2 - val2.inc;
if (num <= 0)
{
break;
}
int inc = GetInc(proliferator.Item1, num);
if (inc > 0)
{
val.storage[store.storageIndex].inc += inc;
}
}
}
private int GetInc(int proliferatorId, int count)
{
int num = 0;
int num2;
switch (proliferatorId)
{
case 1143:
num2 = 75;
break;
case 1142:
num2 = 30;
break;
case 1141:
num2 = 15;
break;
default:
return 0;
}
if (count <= 0)
{
return 0;
}
while (true)
{
if (incPool[proliferatorId] >= count)
{
incPool[proliferatorId] -= count;
return num + count;
}
num += incPool[proliferatorId];
count -= incPool[proliferatorId];
incPool[proliferatorId] = 0;
int[] array = TakeItem(proliferatorId, 600 / num2);
if (array[0] == 0)
{
break;
}
incPool[proliferatorId] = array[0] * num2;
}
return num;
}
private void ProcessTransport(object state)
{
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Invalid comparison between Unknown and I4
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Invalid comparison between Unknown and I4
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessTransport");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
StationComponent[] stationPool = val.transport.stationPool;
foreach (StationComponent val2 in stationPool)
{
if (val2 == null || val2.id <= 0 || val2.isStellar || val2.isCollector || val2.isVeinCollector)
{
continue;
}
for (int num2 = val2.storage.Length - 1; num2 >= 0; num2--)
{
StationStore val3 = val2.storage[num2];
if (val3.itemId > 0)
{
if ((int)val3.localLogic == 1 && val3.count > 0)
{
int[] array = AddItem(val3.itemId, val3.count, val3.inc, assembler: false);
val2.storage[num2].count -= array[0];
val2.storage[num2].inc -= array[1];
}
else if ((int)val3.localLogic == 2)
{
int num3 = val3.max - val3.localOrder - val3.remoteOrder - val3.count;
if (num3 > 0)
{
int[] array2 = TakeItem(val3.itemId, num3);
val2.storage[num2].count += array2[0];
val2.storage[num2].inc += array2[1];
}
}
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessTransport"] = true;
}
}
private void ProcessStorage(object state)
{
//IL_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessStorage");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
StorageComponent[] storagePool = val.factoryStorage.storagePool;
foreach (StorageComponent val2 in storagePool)
{
if (val2 == null || val2.isEmpty || battleBaseStorgeIDs.Contains(val2.id))
{
continue;
}
for (int num2 = val2.grids.Length - 1; num2 >= 0; num2--)
{
GRID val3 = val2.grids[num2];
if (val3.itemId > 0 && val3.count > 0)
{
int[] array = AddItem(val3.itemId, val3.count, val3.inc, assembler: false);
if (array[0] != 0)
{
val2.grids[num2].count -= array[0];
val2.grids[num2].inc -= array[1];
if (val2.grids[num2].count <= 0)
{
val2.grids[num2].itemId = val2.grids[num2].filter;
}
}
}
}
val2.NotifyStorageChange();
}
for (int num3 = val.factoryStorage.tankPool.Length - 1; num3 >= 0; num3--)
{
TankComponent val4 = val.factoryStorage.tankPool[num3];
if (val4.id != 0 && val4.fluidId != 0 && val4.fluidCount != 0)
{
int[] array2 = AddItem(val4.fluidId, val4.fluidCount, val4.fluidInc, assembler: false);
val.factoryStorage.tankPool[num3].fluidCount -= array2[0];
val.factoryStorage.tankPool[num3].fluidInc -= array2[1];
if (val.factoryStorage.tankPool[num3].fluidCount <= 0)
{
val.factoryStorage.tankPool[num3].fluidId = 0;
val.factoryStorage.tankPool[num3].fluidInc = 0;
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessStorage"] = true;
}
}
private void ProcessAssembler(object state)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessAssembler");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
AssemblerComponent[] assemblerPool = val.factorySystem.assemblerPool;
foreach (AssemblerComponent val2 in assemblerPool)
{
if (val2.id <= 0 || val2.recipeId <= 0)
{
continue;
}
for (int num2 = val2.products.Length - 1; num2 >= 0; num2--)
{
if (val2.produced[num2] > 0)
{
val2.produced[num2] -= AddItem(val2.products[num2], val2.produced[num2], 0)[0];
}
}
for (int num3 = val2.requires.Length - 1; num3 >= 0; num3--)
{
int num4 = Math.Max(val2.requireCounts[num3] * 5 - val2.served[num3], 0);
if (num4 > 0)
{
int[] array = TakeItem(val2.requires[num3], num4);
val2.served[num3] += array[0];
val2.incServed[num3] += array[1];
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessAssembler"] = true;
}
}
private void ProcessMiner(object state)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Unknown result type (might be due to invalid IL or missing references)
//IL_0196: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a8: Invalid comparison between Unknown and I4
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Invalid comparison between Unknown and I4
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessMiner");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.factorySystem.minerPool.Length - 1; num2 >= 0; num2--)
{
MinerComponent val2 = val.factorySystem.minerPool[num2];
if (val2.id > 0 && val2.productId > 0 && val2.productCount > 0)
{
int[] array = AddItem(val2.productId, val2.productCount, 0, assembler: false);
val.factorySystem.minerPool[num2].productCount -= array[0];
}
}
StationComponent[] stationPool = val.transport.stationPool;
foreach (StationComponent val3 in stationPool)
{
if (val3 == null || val3.id <= 0)
{
continue;
}
if (val3.isStellar && val3.isCollector)
{
for (int num3 = val3.storage.Length - 1; num3 >= 0; num3--)
{
StationStore val4 = val3.storage[num3];
if (val4.itemId > 0 && val4.count > 0 && (int)val4.remoteLogic == 1)
{
int[] array2 = AddItem(val4.itemId, val4.count, 0, assembler: false);
val3.storage[num3].count -= array2[0];
}
}
}
else if (val3.isVeinCollector)
{
StationStore val5 = val3.storage[0];
if (val5.itemId > 0 && val5.count > 0 && (int)val5.localLogic == 1)
{
int[] array3 = AddItem(val5.itemId, val5.count, 0, assembler: false);
val3.storage[0].count -= array3[0];
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
taskState["ProcessMiner"] = true;
}
private int ThermalPowerPlantFuel()
{
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_0188: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Unknown result type (might be due to invalid IL or missing references)
//IL_0215: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Unknown result type (might be due to invalid IL or missing references)
//IL_0230: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"thermalPowerPlantFuel");
if (fuelId.Value != 0 && HasItem(fuelId.Value))
{
return fuelId.Value;
}
float num = 0f;
float num2 = 0f;
float num3 = 1f;
float num4 = 1f;
float num5 = 0f;
float num6 = 0f;
if (deliveryPackageItems.ContainsKey(1114))
{
GRID val = deliveryPackage.grids[deliveryPackageItems[1114]];
num3 += (float)((GRID)(ref val)).stackSizeModified;
num5 += (float)val.count;
}
if (galacticTransportItems.ContainsKey(1114))
{
foreach (TransportItemIndex item in galacticTransportItems[1114])
{
StationStore val2 = GameMain.data.factories[item.planetIndex].transport.stationPool[item.transportIndex].storage[item.storageIndex];
if (val2.itemId == 1114)
{
num3 += (float)val2.max;
num5 += (float)val2.count;
}
}
}
if (deliveryPackageItems.ContainsKey(1120))
{
GRID val3 = deliveryPackage.grids[deliveryPackageItems[1120]];
num4 += (float)((GRID)(ref val3)).stackSizeModified;
num6 += (float)val3.count;
}
if (galacticTransportItems.ContainsKey(1120))
{
foreach (TransportItemIndex item2 in galacticTransportItems[1120])
{
StationStore val4 = GameMain.data.factories[item2.planetIndex].transport.stationPool[item2.transportIndex].storage[item2.storageIndex];
if (val4.itemId == 1120)
{
num4 += (float)val4.max;
num6 += (float)val4.count;
}
}
}
num = num5 / num3;
num2 = num6 / num4;
if (num >= num2 && (double)num > 0.6)
{
return 1114;
}
if (num2 >= num && (double)num2 > 0.6)
{
return 1120;
}
return 1006;
}
private void ProcessPowerGenerator(object state)
{
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: 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_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0205: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_020d: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessPowerGenerator");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.powerSystem.genPool.Length - 1; num2 >= 0; num2--)
{
PowerGeneratorComponent val2 = val.powerSystem.genPool[num2];
if (val2.id > 0)
{
if (val2.gamma)
{
if (val2.catalystPoint + val2.catalystIncPoint < 3600)
{
int[] array = TakeItem(1209, 3);
if (array[0] > 0)
{
val.powerSystem.genPool[num2].catalystId = 1209;
val.powerSystem.genPool[num2].catalystPoint += array[0] * 3600;
val.powerSystem.genPool[num2].catalystIncPoint += array[1] * 3600;
}
}
if (val2.productId > 0 && val2.productCount >= 1f)
{
int[] array2 = AddItem(val2.productId, (int)val2.productCount, 0);
val.powerSystem.genPool[num2].productCount -= array2[0];
}
}
else
{
int num3 = 0;
switch (val2.fuelMask)
{
case 1:
if (autoReplenishTPPFuel.Value)
{
num3 = ThermalPowerPlantFuel();
}
break;
case 2:
num3 = 1802;
break;
case 4:
num3 = ((!HasItem(1804)) ? 1803 : 1804);
break;
}
if (num3 != 0)
{
if (num3 != val2.fuelId && val2.fuelCount == 0)
{
int[] array3 = TakeItem(num3, 5);
((PowerGeneratorComponent)(ref val.powerSystem.genPool[num2])).SetNewFuel(num3, (short)array3[0], (short)array3[1]);
}
else if (num3 == val2.fuelId && val2.fuelCount < 5)
{
int[] array4 = TakeItem(num3, 5 - val2.fuelCount);
val.powerSystem.genPool[num2].fuelCount += (short)array4[0];
val.powerSystem.genPool[num2].fuelInc += (short)array4[1];
}
}
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessPowerGenerator"] = true;
}
}
private void ProcessPowerExchanger(object state)
{
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: 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_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessPowerExchanger");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.powerSystem.excPool.Length - 1; num2 >= 0; num2--)
{
PowerExchangerComponent val2 = val.powerSystem.excPool[num2];
if (val2.targetState == -1f)
{
if (val2.fullCount < 3)
{
int[] array = TakeItem(val2.fullId, 3 - val2.fullCount);
val.powerSystem.excPool[num2].fullCount += (short)array[0];
}
if (val2.emptyCount > 0)
{
int[] array2 = AddItem(val2.emptyId, val2.emptyCount, 0);
val.powerSystem.excPool[num2].emptyCount -= (short)array2[0];
}
}
else if (val2.targetState == 1f)
{
if (val2.emptyCount < 5)
{
int[] array3 = TakeItem(val2.emptyId, 5 - val2.emptyCount);
val.powerSystem.excPool[num2].emptyCount += (short)array3[0];
}
if (val2.fullCount > 0)
{
int[] array4 = AddItem(val2.fullId, val2.fullCount, 0);
val.powerSystem.excPool[num2].fullCount -= (short)array4[0];
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessPowerExchanger"] = true;
}
}
private void ProcessSilo(object state)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: 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)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessSilo");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.factorySystem.siloPool.Length - 1; num2 >= 0; num2--)
{
SiloComponent val2 = val.factorySystem.siloPool[num2];
if (val2.id > 0 && val2.bulletCount <= 3)
{
int[] array = TakeItem(val2.bulletId, 10);
val.factorySystem.siloPool[num2].bulletCount += array[0];
val.factorySystem.siloPool[num2].bulletInc += array[1];
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessSilo"] = true;
}
}
private void ProcessEjector(object state)
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: 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)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessEjector");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.factorySystem.ejectorPool.Length - 1; num2 >= 0; num2--)
{
EjectorComponent val2 = val.factorySystem.ejectorPool[num2];
if (val2.id > 0 && val2.bulletCount <= 5)
{
int[] array = TakeItem(val2.bulletId, 15);
val.factorySystem.ejectorPool[num2].bulletCount += array[0];
val.factorySystem.ejectorPool[num2].bulletInc += array[1];
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessEjector"] = true;
}
}
private void ProcessLab(object state)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_0180: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessLab");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
LabComponent[] labPool = val.factorySystem.labPool;
foreach (LabComponent val2 in labPool)
{
if (val2.id <= 0)
{
continue;
}
if (val2.recipeId > 0)
{
for (int num2 = val2.products.Length - 1; num2 >= 0; num2--)
{
if (val2.produced[num2] > 0)
{
int[] array = AddItem(val2.products[num2], val2.produced[num2], 0);
val2.produced[num2] -= array[0];
}
}
for (int num3 = val2.requires.Length - 1; num3 >= 0; num3--)
{
int count = val2.requireCounts[num3] * 3 - val2.served[num3] - val2.incServed[num3];
int[] array2 = TakeItem(val2.requires[num3], count);
val2.served[num3] += array2[0];
val2.incServed[num3] += array2[1];
}
}
else
{
if (!val2.researchMode)
{
continue;
}
for (int num4 = val2.matrixPoints.Length - 1; num4 >= 0; num4--)
{
if (val2.matrixPoints[num4] > 0 && val2.matrixServed[num4] < val2.matrixPoints[num4] * 3600)
{
int[] array3 = TakeItem(LabComponent.matrixIds[num4], val2.matrixPoints[num4]);
val2.matrixServed[num4] += array3[0] * 3600;
val2.matrixIncServed[num4] += array3[1] * 3600;
}
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessLab"] = true;
}
}
private void ProcessTurret(object state)
{
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Invalid comparison between Unknown and I4
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessTurret");
try
{
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.defenseSystem.turrets.buffer.Length - 1; num2 >= 0; num2--)
{
TurretComponent val2 = val.defenseSystem.turrets.buffer[num2];
if (val2.id != 0 && (int)val2.type != 2 && (int)val2.ammoType != 0 && val2.itemCount <= 0 && val2.bulletCount <= 0)
{
foreach (int item in ammos[val2.ammoType])
{
int[] array = TakeItem(item, 50 - val2.itemCount);
if (array[0] != 0)
{
((TurretComponent)(ref val.defenseSystem.turrets.buffer[num2])).SetNewItem(item, (short)array[0], (short)array[1]);
break;
}
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessTurret"] = true;
}
}
private void ProcessBattleBase(object state)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
//IL_0209: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: 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_0220: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_0230: Unknown result type (might be due to invalid IL or missing references)
//IL_023a: Unknown result type (might be due to invalid IL or missing references)
//IL_0241: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessBattleBase");
try
{
_ = new int[3] { 5103, 5102, 5101 };
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.defenseSystem.battleBases.buffer.Length - 1; num2 >= 0; num2--)
{
BattleBaseComponent val2 = val.defenseSystem.battleBases.buffer[num2];
if (val2 != null && val2.combatModule != null)
{
ModuleFleet val3 = val2.combatModule.moduleFleets[0];
for (int num3 = val3.fighters.Length - 1; num3 >= 0; num3--)
{
ModuleFighter val4 = val3.fighters[num3];
if (val4.count == 0 && TakeItem(val4.itemId, 1)[0] != 0)
{
((ModuleFleet)(ref val3)).AddFighterToPort(num3, val4.itemId);
break;
}
}
StorageComponent storage = val2.storage;
bool flag = false;
for (int num4 = storage.grids.Length - 1 - storage.bans; num4 >= 0; num4--)
{
GRID val5 = storage.grids[num4];
if (val5.itemId > 0 && val5.count > 0)
{
int[] array = AddItem(val5.itemId, val5.count, val5.inc, assembler: false);
if (array[0] != 0)
{
flag = true;
storage.grids[num4].count -= array[0];
storage.grids[num4].inc -= array[1];
if (storage.grids[num4].count <= 0)
{
storage.grids[num4].itemId = storage.grids[num4].filter;
}
}
}
}
for (int i = storage.grids.Length - storage.bans; i < storage.grids.Length; i++)
{
GRID val6 = storage.grids[i];
if (val6.filter != 0 && val6.filter == val6.itemId && val6.count < val6.stackSize)
{
int[] array2 = TakeItem(val6.itemId, val6.stackSize - val6.count);
if (array2[0] != 0)
{
flag = true;
storage.grids[i].count += array2[0];
storage.grids[i].inc += array2[1];
}
}
}
if (flag)
{
storage.NotifyStorageChange();
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
taskState["ProcessBattleBase"] = true;
}
private void ClearBattleBase()
{
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ClearBattleBase");
try
{
HashSet<int> enemyDropBans = GameMain.data.trashSystem.enemyDropBans;
for (int num = GameMain.data.factories.Length - 1; num >= 0; num--)
{
PlanetFactory val = GameMain.data.factories[num];
if (val != null)
{
for (int num2 = val.defenseSystem.battleBases.buffer.Length - 1; num2 >= 0; num2--)
{
BattleBaseComponent val2 = val.defenseSystem.battleBases.buffer[num2];
if (val2 != null && val2.storage != null)
{
StorageComponent storage = val2.storage;
if (!storage.isEmpty)
{
for (int num3 = storage.grids.Length - 1; num3 >= 0; num3--)
{
GRID val3 = storage.grids[num3];
if (enemyDropBans.Contains(val3.itemId))
{
storage.grids[num3].count = 0;
storage.grids[num3].inc = 0;
storage.grids[num3].itemId = storage.grids[num3].filter;
}
}
storage.NotifyStorageChange();
}
}
}
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
}
private void ProcessPackage(object state)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
((BaseUnityPlugin)this).Logger.LogDebug((object)"ProcessPackage");
try
{
bool flag = false;
StorageComponent package = GameMain.mainPlayer.package;
for (int num = package.grids.Length - 1; num >= 0; num--)
{
GRID val = package.grids[num];
if (val.filter != 0 && val.count < val.stackSize)
{
int[] array = TakeItem(val.itemId, val.stackSize - val.count);
if (array[0] != 0)
{
package.grids[num].count += array[0];
package.grids[num].inc += array[1];
flag = true;
}
}
}
if (flag)
{
package.NotifyStorageChange();
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)ex);
}
finally
{
taskState["ProcessPackage"] = true;
}
}
private int[] AddItem(int itemId, int count, int inc, bool assembler = true)
{
int[] array = AddDeliveryPackageItem(itemId, count, inc, assembler);
if (array[0] == count)
{
return array;
}
int[] array2 = AddTransportItem(itemId, count - array[0], inc - array[1], assembler);
array2[0] += array[0];
array2[1] += array[1];
return array2;
}
private int[] AddDeliveryPackageItem(int itemId, int count, int inc, bool assembler = true)
{
if (itemId <= 0 || count <= 0 || !deliveryPackageItems.ContainsKey(itemId))
{
return new int[2];
}
int num = deliveryPackageItems[itemId];
if (num < 0 || deliveryPackage.grids[num].itemId != itemId)
{
return new int[2];
}
int num2 = Math.Min(deliveryPackage.grids[num].recycleCount, ((GRID)(ref deliveryPackage.grids[num])).stackSizeModified);
if (!assembler && itemId == 1120)
{
num2 = (int)((float)Math.Min(deliveryPackage.grids[num].recycleCount, ((GRID)(ref deliveryPackage.grids[num])).stackSizeModified) * 0.6f);
}
int num3 = num2 - deliveryPackage.grids[num].count;
if (num3 <= 0)
{
return new int[2];
}
if (count <= num3)
{
deliveryPackage.grids[num].count += count;
deliveryPackage.grids[num].inc += inc;
SprayDeliveryPackageItem(num);
return new int[2] { count, inc };
}
deliveryPackage.grids[num].count = num2;
int num4 = SplitInc(count, inc, num3);
deliveryPackage.grids[num].inc += num4;
SprayDeliveryPackageItem(num);
return new int[2] { num3, num4 };
}
private int[] AddTransportItem(int itemId, int count, int inc, bool assembler = true)
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
if (itemId <= 0 || count <= 0 || !galacticTransportItems.ContainsKey(itemId))
{
return new int[2];
}
int[] array = new int[2];
foreach (TransportItemIndex item in galacticTransportItems[itemId])
{
StationComponent val = GameMain.data.factories[item.planetIndex].transport.stationPool[item.transportIndex];
StationStore val2 = val.storage[item.storageIndex];
if (val2.itemId != itemId)
{
continue;
}
int num = val2.max - val2.localOrder - val2.remoteOrder - val2.count;
if (!assembler && itemId == 1120)
{
num = (int)((float)val2.max * 0.6f) - val2.localOrder - val2.remoteOrder - val2.count;
}
if (num > 0)
{
if (count <= num)
{
val.storage[item.storageIndex].count += count;
val.storage[item.storageIndex].inc += inc;
array[0] += count;
array[1] += inc;
count = 0;
inc = 0;
SprayTransportItem(item);
break;
}
val.storage[item.storageIndex].count += num;
int num2 = SplitInc(count, inc, num);
val.storage[item.storageIndex].inc += num2;
array[0] += num;
array[1] += num2;
count -= num;
inc -= num2;
SprayTransportItem(item);
}
}
return array;
}
private int[] TakeItem(int itemId, int count)
{
int[] array = TakeDeliveryPackageItem(itemId, count);
if (array[0] == count)
{
return array;
}
int[] array2 = TakeTransportItem(itemId, count - array[0]);
array2[0] += array[0];
array2[1] += array[1];
return array2;
}
private int[] TakeDeliveryPackageItem(int itemId, int count)
{
if (itemId <= 0 || count <= 0 || !deliveryPackageItems.ContainsKey(itemId))
{
return new int[2];
}
int num = deliveryPackageItems[itemId];
if (num < 0 || deliveryPackage.grids[num].itemId != itemId)
{
return new int[2];
}
if (deliveryPackage.grids[num].count <= deliveryPackage.grids[num].requireCount)
{
return new int[2];
}
int num2 = deliveryPackage.grids[num].count - deliveryPackage.grids[num].requireCount;
if (count <= num2)
{
int num3 = SplitInc(deliveryPackage.grids[num].count, deliveryPackage.grids[num].inc, count);
deliveryPackage.grids[num].count -= count;
deliveryPackage.grids[num].inc -= num3;
return new int[2] { count, num3 };
}
int num4 = SplitInc(deliveryPackage.grids[num].count, deliveryPackage.grids[num].inc, num2);
deliveryPackage.grids[num].count -= num2;
deliveryPackage.grids[num].inc -= num4;
return new int[2] { num2, num4 };
}
private int[] TakeTransportItem(int itemId, int count)
{
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
if (itemId <= 0 || count <= 0 || !galacticTransportItems.ContainsKey(itemId))
{
return new int[2];
}
int[] array = new int[2];
foreach (TransportItemIndex item in galacticTransportItems[itemId])
{
StationComponent val = GameMain.data.factories[item.planetIndex].transport.stationPool[item.transportIndex];
StationStore val2 = val.storage[item.storageIndex];
if (val2.itemId == itemId && val2.count > 0)
{
if (count <= val2.count)
{
int num = SplitInc(val2.count, val2.inc, count);
val.storage[item.storageIndex].count -= count;
val.storage[item.storageIndex].inc -= num;
array[0] += count;
array[1] += num;
break;
}
count -= val2.count;
array[0] += val2.count;
array[1] += val2.inc;
val.storage[item.storageIndex].count = 0;
val.storage[item.storageIndex].inc = 0;
}
}
return array;
}
private int SplitInc(int count, int inc, int expectCount)
{
int num = inc / count;
int num2 = inc - num * count;
count -= expectCount;
int num3 = num2 - count;
int num4 = ((num3 > 0) ? (num * expectCount + num3) : (num * expectCount));
inc -= num4;
return num4;
}
}