Decompiled source of MultiCruiser v1.0.0

BepInEx/plugins/MultiCruiser/MultiTruck.dll

Decompiled 5 months 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 BepInEx.Logging;
using HarmonyLib;
using MultiTruck.Patches;
using Unity.Netcode;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("MultiTruck")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MultiTruck")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c13d4b45-4d56-40ef-8f2b-402fbbd30b1f")]
[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 MultiTruck
{
	[BepInPlugin("JacobG5.MultiCruiser", "MultiCruiser", "1.0.0")]
	public class MultiTruckBase : BaseUnityPlugin
	{
		private const string modGUID = "JacobG5.MultiCruiser";

		private const string modName = "MultiCruiser";

		private const string modVersion = "1.0.0";

		private readonly Harmony harmony = new Harmony("JacobG5.MultiCruiser");

		private static MultiTruckBase Instance;

		public static ManualLogSource mls;

		public static ConfigEntry<bool> enableCruiserCollision;

		public static ConfigEntry<bool> enableCruiserCollisionDamage;

		public static ConfigEntry<int> cruiserCollisionBaseDamage;

		public static ConfigEntry<int> cruiserCollisionSelfDamage;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			enableCruiserCollision = ((BaseUnityPlugin)this).Config.Bind<bool>("Main", "enableCruiserCollision", true, "Enables Cruisers to collide with each-other by 'pushing' each-other when collision detected.");
			enableCruiserCollisionDamage = ((BaseUnityPlugin)this).Config.Bind<bool>("Main", "enableCruiserCollisionDamage", true, "If Cruisers should Damage eachother when colliding. Requires CruiserCollision to be enabled.");
			cruiserCollisionBaseDamage = ((BaseUnityPlugin)this).Config.Bind<int>("Main", "cruiserCollisionBaseDamage", 2, "Amount of damage Cruiser-on-Cruiser Collisions deal to the other Cruiser. (+2 for Medium Speed Collisions & +4 for High Speed Collisions)");
			cruiserCollisionSelfDamage = ((BaseUnityPlugin)this).Config.Bind<int>("Main", "cruiserCollisionSelfDamage", 1, "Amount of damage Cruiser-on-Cruiser Collisions deal to themselves. (+1 for Medium Speed Collisions & +2 for High Speed Collisions)");
			mls = Logger.CreateLogSource("JacobG5.MultiCruiser");
			mls.LogInfo((object)"Patching Terminal");
			harmony.PatchAll(typeof(TerminalPatch));
			harmony.PatchAll(typeof(VehicleControllerPatch));
			harmony.PatchAll(typeof(VehicleCollisionTriggerPatch));
		}
	}
}
namespace MultiTruck.Patches
{
	[HarmonyPatch(typeof(Terminal))]
	internal class TerminalPatch
	{
		[HarmonyPatch("LoadNewNodeIfAffordable")]
		[HarmonyPrefix]
		public static bool patchPurchase(TerminalNode node, Terminal __instance, ref bool ___vehicleInDropship, ref TerminalNodesList ___terminalNodes, ref int ___totalCostOfItems, ref Item[] ___buyableItemsList, ref int[] ___itemSalesPercentages, ref int ___groupCredits, ref bool ___hasWarrantyTicket, ref int ___numberOfItemsInDropship, ref int ___orderedVehicleFromTerminal)
		{
			if (node.buyVehicleIndex == -1)
			{
				return true;
			}
			int num = ___buyableItemsList.Length + node.buyVehicleIndex;
			___totalCostOfItems = (int)((float)node.itemCost * ((float)___itemSalesPercentages[num] / 100f));
			if (___groupCredits < ___totalCostOfItems && !___hasWarrantyTicket)
			{
				__instance.LoadNewNode(___terminalNodes.specialNodes[2]);
				return false;
			}
			if (___numberOfItemsInDropship > 0)
			{
				__instance.LoadNewNode(___terminalNodes.specialNodes[27]);
				return false;
			}
			if (___vehicleInDropship && node.buyItemIndex != -1)
			{
				__instance.LoadNewNode(___terminalNodes.specialNodes[25]);
				return false;
			}
			ItemDropship val = Object.FindObjectOfType<ItemDropship>();
			if (___vehicleInDropship || ((Object)(object)val != (Object)null && val.deliveringVehicle))
			{
				__instance.LoadNewNode(___terminalNodes.specialNodes[26]);
				return false;
			}
			if (!node.isConfirmationNode)
			{
				if (!___hasWarrantyTicket)
				{
					___groupCredits = Mathf.Clamp(___groupCredits - ___totalCostOfItems, 0, 10000000);
				}
				___orderedVehicleFromTerminal = node.buyVehicleIndex;
				___vehicleInDropship = true;
				Debug.Log((object)$"Is server?: {((NetworkBehaviour)__instance).IsServer}");
				if (!((NetworkBehaviour)__instance).IsServer)
				{
					SyncBoughtVehicleWithServer(__instance, ___orderedVehicleFromTerminal);
				}
				else
				{
					___hasWarrantyTicket = !___hasWarrantyTicket;
					BuyVehicleClientRpc(__instance, ___groupCredits, ___hasWarrantyTicket);
				}
			}
			__instance.LoadNewNode(node);
			return false;
		}

		[HarmonyReversePatch(/*Could not decode attribute arguments.*/)]
		[HarmonyPatch(typeof(Terminal), "SyncBoughtVehicleWithServer")]
		public static void SyncBoughtVehicleWithServer(object instance, int vehicleID)
		{
			throw new NotImplementedException("It's a stub");
		}

		[HarmonyReversePatch(/*Could not decode attribute arguments.*/)]
		[HarmonyPatch(typeof(Terminal), "BuyVehicleClientRpc")]
		public static void BuyVehicleClientRpc(object instance, int newGroupCredits, bool giveWarranty)
		{
			throw new NotImplementedException("It's a stub");
		}
	}
	[HarmonyPatch(typeof(VehicleCollisionTrigger))]
	internal class VehicleCollisionTriggerPatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		public static void patchStart()
		{
			if (MultiTruckBase.enableCruiserCollision.Value)
			{
				Physics.IgnoreLayerCollision(30, 13, false);
			}
		}

		[HarmonyPatch("OnTriggerEnter")]
		[HarmonyPrefix]
		public static void patchOnTriggerEnter(Collider other, ref VehicleController ___mainScript)
		{
			//IL_0052: 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_0069: 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_0104: 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)
			//IL_012b: 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)
			VehicleController val = default(VehicleController);
			if (((Component)other).gameObject.layer != 30 || !MultiTruckBase.enableCruiserCollision.Value || !((Component)other).gameObject.TryGetComponent<VehicleController>(ref val) || !((Object)(object)val != (Object)(object)___mainScript))
			{
				return;
			}
			val.PushTruckServerRpc(((Component)___mainScript).transform.position, ((Component)val).transform.position - ((Component)___mainScript).transform.position);
			if (MultiTruckBase.enableCruiserCollisionDamage.Value)
			{
				int num = 0;
				if (((Vector3)(ref ___mainScript.averageVelocity)).magnitude > 27f)
				{
					num += 4;
				}
				else if (((Vector3)(ref ___mainScript.averageVelocity)).magnitude > 19f)
				{
					num += 2;
				}
				if (((Vector3)(ref ___mainScript.averageVelocity)).magnitude > 11f)
				{
					VehicleControllerPatch.DealPermanentDamage(val, Math.Max(0, MultiTruckBase.cruiserCollisionBaseDamage.Value + num));
					VehicleControllerPatch.DealPermanentDamage(___mainScript, Math.Max(0, MultiTruckBase.cruiserCollisionSelfDamage.Value + num / 2));
				}
			}
		}
	}
	[HarmonyPatch(typeof(VehicleController))]
	internal class VehicleControllerPatch
	{
		[HarmonyReversePatch(/*Could not decode attribute arguments.*/)]
		[HarmonyPatch(typeof(VehicleController), "DealPermanentDamage")]
		public static void DealPermanentDamage(object instance, int damageAmount, Vector3 damagePosition = default(Vector3))
		{
			throw new NotImplementedException("It's a stub");
		}
	}
}