Decompiled source of MultipleTools v0.0.6

MultipleTools.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Multifunction_mod.API;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("MultipleTools")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MultipleTools")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ff4e4061-daae-44bf-aa52-a71e9ff67624")]
[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 MultipleTools;

[BepInPlugin("cn.blacksnipe.dsp.MultipleTools", "MultipleTools", "0.0.6")]
public class MultipleTools : BaseUnityPlugin
{
	public const string GUID = "cn.blacksnipe.dsp.MultipleTools";

	public const string NAME = "MultipleTools";

	public const string VERSION = "0.0.6";

	public static ConfigEntry<int> TeslaTowerConnectDistanceMultiple;

	public static ConfigEntry<int> TeslaTowerCoverDistanceMultiple;

	public static ConfigEntry<int> WirelexxPowerTowerConnectDistanceMultiple;

	public static ConfigEntry<int> WirelexxPowerTowerCoverDistanceMultiple;

	public static ConfigEntry<int> SatelliteSubstationConnectDistanceMultiple;

	public static ConfigEntry<int> SatelliteSubstationCoverDistanceMultiple;

	public static ConfigEntry<int> WindTurbineConnectDistanceMultiple;

	public static ConfigEntry<int> WindTurbineCoverDistanceMultiple;

	public static ConfigEntry<int> WindTurbineGenerateMultiple;

	public static ConfigEntry<int> ThermalPowerPlantConnectDistanceMultiple;

	public static ConfigEntry<int> ThermalPowerPlantCoverDistanceMultiple;

	public static ConfigEntry<int> ThermalPowerPlantGenerateMultiple;

	public static ConfigEntry<int> SolarPanelGenerateMultiple;

	public static ConfigEntry<int> RayreceiverGenerateMultiple;

	public static ConfigEntry<int> GeothermalPowerStationConnectDistanceMultiple;

	public static ConfigEntry<int> GeothermalPowerStationCoverDistanceMultiple;

	public static ConfigEntry<int> GeothermalPowerStationGenerateMultiple;

	public static ConfigEntry<int> MiniFusionPowerPlantConnectDistanceMultiple;

	public static ConfigEntry<int> MiniFusionPowerPlantCoverDistanceMultiple;

	public static ConfigEntry<int> MiniFusionPowerPlantGenerateMultiple;

	public static ConfigEntry<int> ArtificialstarsGenerateMultiple;

	public static ConfigEntry<int> ArtificialstarsCoverDistanceMultiple;

	public static ConfigEntry<int> ArtificialstarsConnectDistanceMultiple;

	public static ConfigEntry<int> StationCollectSpeedMultiple;

	public static ConfigEntry<int> BattleBaseComponentPickRangeMultiple;

	private void Start()
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		new Harmony("cn.blacksnipe.dsp.MultipleTools").PatchAll(typeof(MultipleToolsPatch));
		TeslaTowerConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("电力感应塔连接距离倍率", "TeslaTowerConnectDistanceMultiple", 1, (ConfigDescription)null);
		TeslaTowerCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("电力感应塔覆盖距离倍率", "TeslaTowerCoverDistanceMultiple", 1, (ConfigDescription)null);
		WirelexxPowerTowerConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("无线输电塔连接距离倍率", "WirelexxPowerTowerConnectDistanceMultiple", 1, (ConfigDescription)null);
		WirelexxPowerTowerCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("无线输电塔覆盖距离倍率", "WirelexxPowerTowerCoverDistanceMultiple", 1, (ConfigDescription)null);
		SatelliteSubstationConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("卫星配电站连接距离倍率", "SatelliteSubstationConnectDistanceMultiple", 1, (ConfigDescription)null);
		SatelliteSubstationCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("卫星配电站覆盖距离倍率", "SatelliteSubstationCoverDistanceMultiple", 1, (ConfigDescription)null);
		WindTurbineConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("风力涡轮机连接距离倍率", "WindTurbineConnectDistanceMultiple", 1, (ConfigDescription)null);
		WindTurbineCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("风力涡轮机覆盖距离倍率", "WindTurbineCoverDistanceMultiple", 1, (ConfigDescription)null);
		WindTurbineGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("风力涡轮机发电倍率", "WindTurbineGenerateMultiple", 1, (ConfigDescription)null);
		ThermalPowerPlantConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("火力发电厂连接距离倍率", "ThermalPowerPlantConnectDistanceMultiple", 1, (ConfigDescription)null);
		ThermalPowerPlantCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("火力发电厂覆盖距离倍率", "ThermalPowerPlantCoverDistanceMultiple", 1, (ConfigDescription)null);
		ThermalPowerPlantGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("火力发电厂发电倍率", "ThermalPowerPlantGenerateMultiple", 1, (ConfigDescription)null);
		GeothermalPowerStationConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("地热发电站连接距离倍率", "GeothermalPowerStationConnectDistanceMultiple", 1, (ConfigDescription)null);
		GeothermalPowerStationCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("地热发电站覆盖距离倍率", "GeothermalPowerStationCoverDistanceMultiple", 1, (ConfigDescription)null);
		GeothermalPowerStationGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("地热发电站发电倍率", "GeothermalPowerStationGenerateMultiple", 1, (ConfigDescription)null);
		MiniFusionPowerPlantConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("微型聚变发电站连接距离倍率", "MiniFusionPowerPlantConnectDistanceMultiple", 1, (ConfigDescription)null);
		MiniFusionPowerPlantCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("微型聚变发电站覆盖距离倍率", "MiniFusionPowerPlantCoverDistanceMultiple", 1, (ConfigDescription)null);
		MiniFusionPowerPlantGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("微型聚变发电站发电倍率", "MiniFusionPowerPlantGenerateMultiple", 1, (ConfigDescription)null);
		SolarPanelGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("太阳能板发电倍率", "SolarPanelGenerateMultiple", 1, (ConfigDescription)null);
		RayreceiverGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("射线接收器发电倍率", "RayreceiverGenerateMultiple", 1, (ConfigDescription)null);
		ArtificialstarsGenerateMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("人造恒星发电倍率", "ArtificialstarsGenerateMultiple", 1, (ConfigDescription)null);
		ArtificialstarsCoverDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("人造恒星覆盖距离倍率", "ArtificialstarsCoverDistanceMultiple", 1, (ConfigDescription)null);
		ArtificialstarsConnectDistanceMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("人造恒星连接距离倍率", "ArtificialstarsConnectDistanceMultiple", 1, (ConfigDescription)null);
		StationCollectSpeedMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("轨道采集器采集速度倍率", "StationCollectSpeedMultiple", 1, (ConfigDescription)null);
		BattleBaseComponentPickRangeMultiple = ((BaseUnityPlugin)this).Config.Bind<int>("战场分析基站采集半径倍率", "BattleBaseComponentPickRangeMultiple", 1, (ConfigDescription)null);
		try
		{
			RegisterMultifunctionMod();
		}
		catch (Exception ex)
		{
			((BaseUnityPlugin)this).Logger.LogWarning((object)("无法注册 Multifunction_mod 菜单: " + ex.Message));
		}
	}

	[MethodImpl(MethodImplOptions.NoInlining)]
	private void RegisterMultifunctionMod()
	{
		MultifunctionAPI.RegisterMenu("倍率工具", (Action)MultipleToolsPannel);
	}

	private void MultipleToolsPannel()
	{
		GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		GUILayout.Label("建筑名称", (GUILayoutOption[])(object)new GUILayoutOption[2]
		{
			GUILayout.Width(150f),
			GUILayout.ExpandWidth(false)
		});
		GUILayout.Label("连接距离", (GUILayoutOption[])(object)new GUILayoutOption[2]
		{
			GUILayout.Width(100f),
			GUILayout.ExpandWidth(false)
		});
		GUILayout.Label("覆盖距离", (GUILayoutOption[])(object)new GUILayoutOption[2]
		{
			GUILayout.Width(100f),
			GUILayout.ExpandWidth(false)
		});
		GUILayout.Label("发电倍率", (GUILayoutOption[])(object)new GUILayoutOption[2]
		{
			GUILayout.Width(100f),
			GUILayout.ExpandWidth(false)
		});
		GUILayout.Label("采集速率", (GUILayoutOption[])(object)new GUILayoutOption[2]
		{
			GUILayout.Width(100f),
			GUILayout.ExpandWidth(false)
		});
		GUILayout.EndHorizontal();
		DrawMultipleToolsRow("电力感应塔", TeslaTowerConnectDistanceMultiple, TeslaTowerCoverDistanceMultiple, null);
		DrawMultipleToolsRow("无线输电塔", WirelexxPowerTowerConnectDistanceMultiple, WirelexxPowerTowerCoverDistanceMultiple, null);
		DrawMultipleToolsRow("卫星配电站", SatelliteSubstationConnectDistanceMultiple, SatelliteSubstationCoverDistanceMultiple, null);
		DrawMultipleToolsRow("风力涡轮机", WindTurbineConnectDistanceMultiple, WindTurbineCoverDistanceMultiple, WindTurbineGenerateMultiple);
		DrawMultipleToolsRow("火力发电厂", ThermalPowerPlantConnectDistanceMultiple, ThermalPowerPlantCoverDistanceMultiple, ThermalPowerPlantGenerateMultiple);
		DrawMultipleToolsRow("地热发电站", GeothermalPowerStationConnectDistanceMultiple, GeothermalPowerStationCoverDistanceMultiple, GeothermalPowerStationGenerateMultiple);
		DrawMultipleToolsRow("微型聚变发电站", MiniFusionPowerPlantConnectDistanceMultiple, MiniFusionPowerPlantCoverDistanceMultiple, MiniFusionPowerPlantGenerateMultiple);
		DrawMultipleToolsRow("人造恒星", ArtificialstarsConnectDistanceMultiple, ArtificialstarsCoverDistanceMultiple, ArtificialstarsGenerateMultiple);
		DrawMultipleToolsRow("太阳能板", null, null, SolarPanelGenerateMultiple);
		DrawMultipleToolsRow("射线接收器", null, null, RayreceiverGenerateMultiple);
		DrawMultipleToolsRow("轨道采集器", null, null, null, StationCollectSpeedMultiple);
		DrawMultipleToolsRow("战场分析基站", null, BattleBaseComponentPickRangeMultiple, null);
		GUILayout.EndVertical();
	}

	private void DrawMultipleToolsRow(string label, ConfigEntry<int> connect, ConfigEntry<int> cover, ConfigEntry<int> generate, ConfigEntry<int> collectSpeed = null)
	{
		GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
		GUILayout.Label(label, (GUILayoutOption[])(object)new GUILayoutOption[2]
		{
			GUILayout.Width(150f),
			GUILayout.ExpandWidth(false)
		});
		DrawMultipleToolsCell(connect);
		DrawMultipleToolsCell(cover);
		DrawMultipleToolsCell(generate);
		DrawMultipleToolsCell(collectSpeed);
		GUILayout.EndHorizontal();
	}

	private void DrawMultipleToolsCell(ConfigEntry<int> entry)
	{
		int result;
		if (entry == null)
		{
			GUILayout.Label("-", (GUILayoutOption[])(object)new GUILayoutOption[2]
			{
				GUILayout.Width(100f),
				GUILayout.ExpandWidth(false)
			});
		}
		else if (int.TryParse(GUILayout.TextField(entry.Value.ToString(), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(100f) }), out result))
		{
			if (result < 1)
			{
				result = 1;
			}
			if (result > 10000)
			{
				result = 10000;
			}
			if (result != entry.Value)
			{
				entry.Value = result;
			}
		}
	}
}
public class MultipleToolsPatch
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(PowerSystem), "NewNodeComponent")]
	public static void NewNodeComponentPatchPrefix(PowerSystem __instance, ref int entityId, ref float conn, ref float cover)
	{
		short protoId = __instance.factory.entityPool[entityId].protoId;
		int powerGenId = __instance.factory.entityPool[entityId].powerGenId;
		switch (protoId)
		{
		case 2201:
			conn *= MultipleTools.TeslaTowerConnectDistanceMultiple.Value;
			cover *= MultipleTools.TeslaTowerCoverDistanceMultiple.Value;
			break;
		case 2202:
			conn *= MultipleTools.WirelexxPowerTowerConnectDistanceMultiple.Value;
			cover *= MultipleTools.WirelexxPowerTowerCoverDistanceMultiple.Value;
			break;
		case 2212:
			conn *= MultipleTools.SatelliteSubstationConnectDistanceMultiple.Value;
			cover *= MultipleTools.SatelliteSubstationCoverDistanceMultiple.Value;
			break;
		case 2203:
			conn *= MultipleTools.WindTurbineConnectDistanceMultiple.Value;
			cover *= MultipleTools.WindTurbineCoverDistanceMultiple.Value;
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.WindTurbineGenerateMultiple.Value;
			break;
		case 2204:
			conn *= MultipleTools.ThermalPowerPlantConnectDistanceMultiple.Value;
			cover *= MultipleTools.ThermalPowerPlantCoverDistanceMultiple.Value;
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.ThermalPowerPlantGenerateMultiple.Value;
			__instance.genPool[powerGenId].useFuelPerTick *= MultipleTools.ThermalPowerPlantGenerateMultiple.Value;
			break;
		case 2205:
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.SolarPanelGenerateMultiple.Value;
			break;
		case 2208:
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.RayreceiverGenerateMultiple.Value;
			break;
		case 2210:
			conn *= MultipleTools.ArtificialstarsConnectDistanceMultiple.Value;
			cover *= MultipleTools.ArtificialstarsCoverDistanceMultiple.Value;
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.ArtificialstarsGenerateMultiple.Value;
			__instance.genPool[powerGenId].useFuelPerTick *= MultipleTools.ArtificialstarsGenerateMultiple.Value;
			break;
		case 2211:
			conn *= MultipleTools.MiniFusionPowerPlantConnectDistanceMultiple.Value;
			cover *= MultipleTools.MiniFusionPowerPlantCoverDistanceMultiple.Value;
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.MiniFusionPowerPlantGenerateMultiple.Value;
			__instance.genPool[powerGenId].useFuelPerTick *= MultipleTools.MiniFusionPowerPlantGenerateMultiple.Value;
			break;
		case 2213:
			conn *= MultipleTools.GeothermalPowerStationConnectDistanceMultiple.Value;
			cover *= MultipleTools.GeothermalPowerStationCoverDistanceMultiple.Value;
			__instance.genPool[powerGenId].genEnergyPerTick *= MultipleTools.GeothermalPowerStationGenerateMultiple.Value;
			break;
		case 2206:
		case 2207:
		case 2209:
			break;
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(PlanetTransport), "NewStationComponent")]
	public static void UpdateCollectionPatch(PrefabDesc _desc, ref StationComponent __result)
	{
		if (_desc.isCollectStation)
		{
			for (int i = 0; i < __result.collectionPerTick.Length; i++)
			{
				__result.collectionPerTick[i] *= MultipleTools.StationCollectSpeedMultiple.Value;
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(BattleBaseComponent), "Init")]
	public static void BattleBaseComponentModify(ref BattleBaseComponent __instance)
	{
		BattleBaseComponent obj = __instance;
		obj.pickRange *= (float)MultipleTools.BattleBaseComponentPickRangeMultiple.Value;
	}
}