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 GameNetcodeStuff;
using HarmonyLib;
using LC_Adrenaline_Mod.Patches;
using LethalCompanyInputUtils.Api;
using StaticNetcodeLib;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("LC Adrenaline Mod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LC Adrenaline Mod")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ad3922ac-8aa3-49ba-ad8e-1b889e62c85e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace LC_Adrenaline_Mod
{
[BepInPlugin("Fury.AdrenalineMod", "AdrenalineMod", "1.0.1")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class AdrenalineModBase : BaseUnityPlugin
{
public class InputClass : LcInputActions
{
[InputAction(/*Could not decode attribute arguments.*/)]
public InputAction AdrenalineModExplodeKey { get; set; }
}
private const string modGUID = "Fury.AdrenalineMod";
private const string modName = "AdrenalineMod";
private const string modVersion = "1.0.1";
internal static InputClass InputActionsInstance;
private readonly Harmony harmony = new Harmony("Fury.AdrenalineMod");
private static AdrenalineModBase Instance;
internal ManualLogSource mls;
private ConfigEntry<bool> configCanKillOtherPlayers;
public static bool canKillOtherPlayers;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
mls = Logger.CreateLogSource("Fury.AdrenalineMod");
mls.LogInfo((object)"The adrenaline mod has awoken :)");
harmony.PatchAll(typeof(AdrenalineModBase));
harmony.PatchAll(typeof(AdrenalineModPlayerControllerBPatch));
configCanKillOtherPlayers = ((BaseUnityPlugin)this).Config.Bind<bool>("Adrenaline Overdose", "Can kill other players", true, "Determines if the adrenaline overdose explosion can kill other players.");
canKillOtherPlayers = configCanKillOtherPlayers.Value;
InputActionsInstance = new InputClass();
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
Type[] array = types;
foreach (Type type in array)
{
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
MethodInfo[] array2 = methods;
foreach (MethodInfo methodInfo in array2)
{
object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
if (customAttributes.Length != 0)
{
methodInfo.Invoke(null, null);
}
}
}
}
}
}
namespace LC_Adrenaline_Mod.Patches
{
[HarmonyPatch(typeof(PlayerControllerB))]
[StaticNetcode]
internal class AdrenalineModPlayerControllerBPatch : NetworkBehaviour
{
private static float adrenalineTimer;
private static float adrenalineCooldown;
[HarmonyPatch("Update")]
[HarmonyPostfix]
public static void adrenalinePatch(ref int ___health, ref float ___sprintMultiplier, ref bool ___isSprinting, PlayerControllerB __instance)
{
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: 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)
adrenalineCooldown = Mathf.Clamp(adrenalineCooldown - Time.deltaTime, 0f, 100f);
if (adrenalineTimer > 0f)
{
if (___isSprinting)
{
___sprintMultiplier = Mathf.Lerp(2.25f, 3f, adrenalineTimer);
}
else
{
___sprintMultiplier = Mathf.Lerp(1f, 1.5f, adrenalineTimer);
}
adrenalineTimer -= Time.deltaTime;
adrenalineCooldown = 5f;
}
if (AdrenalineModBase.InputActionsInstance.AdrenalineModExplodeKey.triggered && ((NetworkBehaviour)__instance).IsOwner && __instance.isPlayerControlled && __instance.AllowPlayerDeath() && !__instance.isTestingPlayer && !__instance.inTerminalMenu && !__instance.isTypingChat)
{
AdrenalineModExplodeServerRpc(((Component)__instance).transform.position, AdrenalineModBase.canKillOtherPlayers);
if (!AdrenalineModBase.canKillOtherPlayers)
{
Landmine.SpawnExplosion(((Component)__instance).transform.position + Vector3.up, false, 0f, 10f, 100000, 0f, (GameObject)null, false);
}
}
}
[ServerRpc(RequireOwnership = false)]
public static void AdrenalineModExplodeServerRpc(Vector3 pos, bool canKillOtherPlayers)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
AdrenalineModExplodeClientRpc(pos, canKillOtherPlayers);
}
[ClientRpc]
public static void AdrenalineModExplodeClientRpc(Vector3 pos, bool canKillOtherPlayers)
{
//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_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
if (canKillOtherPlayers)
{
Landmine.SpawnExplosion(pos + Vector3.up, true, 0f, 10f, 100000, 0f, (GameObject)null, false);
}
else
{
Landmine.SpawnExplosion(pos + Vector3.up, true, 0f, 0f, 0, 0f, (GameObject)null, false);
}
}
[HarmonyPatch("DamagePlayer")]
[HarmonyPostfix]
private static void setAdrenalineTimer()
{
if (adrenalineCooldown <= 0f)
{
adrenalineTimer = 3f;
}
}
}
}