Decompiled source of GoOutWithABang v1.0.1

GoOutWithABang.dll

Decompiled 8 months ago
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using GoOutWithABang.Patches;
using HarmonyLib;
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("GoOutWithABang")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("GoOutWithABang")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("0535b7f0-8a10-494c-8f5b-e28692a0449c")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace GoOutWithABang
{
	[BepInPlugin("Chrigi.GoOutWithABangMod", "Go Out With A Bang Mod", "1.0.1")]
	public class GoOutWithABangModBase : BaseUnityPlugin
	{
		private const string modGUID = "Chrigi.GoOutWithABangMod";

		private const string modName = "Go Out With A Bang Mod";

		private const string modVersion = "1.0.1";

		private readonly Harmony harmony = new Harmony("Chrigi.GoOutWithABangMod");

		private static GoOutWithABangModBase Instance;

		internal static ConfigEntry<bool> SuffocationSetting;

		internal static ConfigEntry<bool> BlastSetting;

		internal static ConfigEntry<bool> UnknownSetting;

		internal static ConfigEntry<bool> StrangulationSetting;

		internal static ConfigEntry<bool> MaulingSetting;

		internal static ConfigEntry<bool> BludgeoningSetting;

		internal static ConfigEntry<bool> GravitySetting;

		internal static ConfigEntry<bool> GunshotsSetting;

		internal static ConfigEntry<bool> CrushingSetting;

		internal static ConfigEntry<bool> DrowningSetting;

		internal static ConfigEntry<bool> AbandonedSetting;

		internal static ConfigEntry<bool> ElectrocutionSetting;

		internal static ConfigEntry<bool> KickingSetting;

		public static ManualLogSource mls;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = Logger.CreateLogSource("Chrigi.GoOutWithABangMod");
			mls.LogInfo((object)"Time to go out with a bang!");
			SuffocationSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Suffocation", true, "Enable Explosion on Suffocation");
			BlastSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Blast", false, "Enable Explosion on Blast");
			UnknownSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Unknown", false, "Enable Explosion on Unknown");
			StrangulationSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Strangulation", true, "Enable Explosion on Strangulation");
			MaulingSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Mauling", true, "Enable Explosion on Mauling");
			BludgeoningSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Bludgeoning", true, "Enable Explosion on Bludgeoning");
			GravitySetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Gravity", true, "Enable Explosion on Gravity");
			GunshotsSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Gunshots", true, "Enable Explosion on Gunshots");
			CrushingSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Crushing", true, "Enable Explosion on Crushing");
			DrowningSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Drowning", true, "Enable Explosion on Drowning");
			AbandonedSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Abandoned", true, "Enable Explosion on Abandoned");
			ElectrocutionSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Electrocution", true, "Enable Explosion on Electrocution");
			KickingSetting = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Kicking", true, "Enable Explosion on Kicking");
			harmony.PatchAll(typeof(LandMinePatch));
			harmony.PatchAll(typeof(GoOutWithABangModBase));
		}
	}
}
namespace GoOutWithABang.Patches
{
	internal class LandMinePatch
	{
		private static ManualLogSource logger = GoOutWithABangModBase.mls;

		private static bool ded;

		private static RoundManager currentRound;

		private static bool server = false;

		private static bool isLevelLoaded = false;

		private static bool deathMineSpawned = false;

		private static int mine = 0;

		private static bool suff;

		private static bool blast;

		private static bool unknown;

		private static bool strang;

		private static bool maul;

		private static bool bludg;

		private static bool grav;

		private static bool gun;

		private static bool crush;

		private static bool drown;

		private static bool aban;

		private static bool electro;

		private static bool kick;

		[HarmonyPatch(typeof(RoundManager), "LoadNewLevel")]
		[HarmonyPrefix]
		private static void LoadNewLevelPatch()
		{
			server = false;
			isLevelLoaded = false;
			currentRound = RoundManager.Instance;
			if (((NetworkBehaviour)currentRound).IsServer)
			{
				server = true;
			}
			ded = false;
			suff = GoOutWithABangModBase.SuffocationSetting.Value;
			blast = GoOutWithABangModBase.BlastSetting.Value;
			unknown = GoOutWithABangModBase.UnknownSetting.Value;
			strang = GoOutWithABangModBase.StrangulationSetting.Value;
			maul = GoOutWithABangModBase.MaulingSetting.Value;
			bludg = GoOutWithABangModBase.BludgeoningSetting.Value;
			grav = GoOutWithABangModBase.GravitySetting.Value;
			gun = GoOutWithABangModBase.GunshotsSetting.Value;
			crush = GoOutWithABangModBase.CrushingSetting.Value;
			drown = GoOutWithABangModBase.DrowningSetting.Value;
			aban = GoOutWithABangModBase.AbandonedSetting.Value;
			electro = GoOutWithABangModBase.ElectrocutionSetting.Value;
			kick = GoOutWithABangModBase.KickingSetting.Value;
		}

		[HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")]
		[HarmonyPostfix]
		private static void FinishGeneratingNewLevelClientRpcPatch()
		{
			isLevelLoaded = true;
			logger.LogInfo((object)"Level Loaded, any new mine spawned will blow up instantly");
			int num = currentRound.currentLevel.spawnableMapObjects.Count();
			for (int i = 0; i < num; i++)
			{
				if (((Object)currentRound.currentLevel.spawnableMapObjects[i].prefabToSpawn).name == "Landmine")
				{
					logger.LogInfo((object)("Found Mine Index: " + i));
					mine = i;
					break;
				}
			}
		}

		[HarmonyPatch(typeof(Landmine), "Start")]
		[HarmonyPrefix]
		private static void LandminePatch(ref Landmine __instance)
		{
			logger.LogInfo((object)"Landmine Spawned");
			if (isLevelLoaded && deathMineSpawned)
			{
				logger.LogInfo((object)"Forcing mine explosion");
				__instance.ExplodeMineServerRpc();
				deathMineSpawned = false;
				logger.LogInfo((object)"Mine forcefully activated");
			}
		}

		[HarmonyPatch(typeof(PlayerControllerB))]
		[HarmonyPatch("KillPlayerServerRpc")]
		[HarmonyPostfix]
		private static void PlayerControllerBPatch(PlayerControllerB __instance)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Invalid comparison between Unknown and I4
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Invalid comparison between Unknown and I4
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Invalid comparison between Unknown and I4
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Invalid comparison between Unknown and I4
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Invalid comparison between Unknown and I4
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Invalid comparison between Unknown and I4
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Invalid comparison between Unknown and I4
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Invalid comparison between Unknown and I4
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Invalid comparison between Unknown and I4
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Invalid comparison between Unknown and I4
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Invalid comparison between Unknown and I4
			if (server && __instance.isPlayerDead && (!((NetworkBehaviour)__instance).IsOwnedByServer || !ded) && ((int)__instance.causeOfDeath != 5 || suff) && ((int)__instance.causeOfDeath != 6 || maul) && ((int)__instance.causeOfDeath != 1 || bludg) && ((int)__instance.causeOfDeath != 2 || grav) && ((int)__instance.causeOfDeath != 7 || gun) && ((int)__instance.causeOfDeath != 8 || crush) && ((int)__instance.causeOfDeath != 9 || drown) && ((int)__instance.causeOfDeath != 10 || aban) && ((int)__instance.causeOfDeath != 11 || electro) && ((int)__instance.causeOfDeath != 12 || kick) && ((int)__instance.causeOfDeath != 4 || strang) && ((int)__instance.causeOfDeath != 0 || unknown) && ((int)__instance.causeOfDeath != 3 || blast))
			{
				if (((NetworkBehaviour)__instance).IsOwnedByServer)
				{
					ded = true;
				}
				logger.LogInfo((object)"Spawning mine on dead player");
				deathMineSpawned = true;
				GameObject val = Object.Instantiate<GameObject>(currentRound.currentLevel.spawnableMapObjects[mine].prefabToSpawn, __instance.placeOfDeath, Quaternion.identity, currentRound.mapPropsContainer.transform);
				val.GetComponent<NetworkObject>().Spawn(true);
			}
		}
	}
}