Decompiled source of HookGun v1.5.0

HookGun.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using HookGun.Patches;
using LethalLib.Modules;
using ReservedItemSlotCore.Data;
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("HookGun")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HookGun")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("56cd2431-e59f-4623-8b05-4f3a954ed7df")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace HookGun
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.BLKNeko.HookGunWeapon", "HookGunWeapon", "1.5.0")]
	public class HookGunMain : BaseUnityPlugin
	{
		public class HookGunScript : GrabbableObject
		{
			private AudioSource audioSource;

			private RoundManager roundManager;

			private MeshRenderer HookGO;

			public LayerMask whatIsGrappleable = LayerMask.op_Implicit(234918656);

			public LayerMask whatIsGrappleableToPull = LayerMask.op_Implicit(1048640);

			public LayerMask whatIsGrappleableNew = LayerMask.op_Implicit(52644608);

			public LineRenderer lr;

			public float maxGrappleDistance = 60f;

			public float grappleDelayTime = 1f;

			public float overshootYAxis = 1.5f;

			public float HookSpeed = 48f;

			public float OkDistance = 1f;

			public float HookmaxTimer = 6f;

			public float HookTimer = 0f;

			public float smoothTime = 1.3f;

			public static bool grappling;

			public static bool pulling;

			public static bool shoudFall;

			public static bool DisableJump;

			public static bool DisableFall;

			private bool grapplingSlowY = false;

			private bool JumpNoDmg = true;

			public static bool isJumping;

			public static bool NoDmg;

			private Vector3 grapplePoint = Vector3.zero;

			private Vector3 targetPosition = Vector3.zero;

			private Vector3 forces = Vector3.zero;

			private Vector3 forcesP = Vector3.zero;

			private GameObject pullingGameObject;

			private RaycastHit hit;

			public void Awake()
			{
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Expected O, but got Unknown
				audioSource = ((Component)this).GetComponent<AudioSource>();
				roundManager = Object.FindObjectOfType<RoundManager>();
				base.grabbable = true;
				base.grabbableToEnemies = true;
				base.useCooldown = HookGunPlugin.itemCooldown.Value;
				base.insertedBattery = new Battery(false, 1f);
				base.mainObjectRenderer = ((Component)this).GetComponent<MeshRenderer>();
			}

			public override void Update()
			{
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//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_00d8: 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_00f1: 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_012a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0136: Unknown result type (might be due to invalid IL or missing references)
				//IL_013b: Unknown result type (might be due to invalid IL or missing references)
				//IL_015a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0161: Unknown result type (might be due to invalid IL or missing references)
				//IL_0166: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_020a: Unknown result type (might be due to invalid IL or missing references)
				//IL_020f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0236: Unknown result type (might be due to invalid IL or missing references)
				//IL_023b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0262: Unknown result type (might be due to invalid IL or missing references)
				//IL_0268: Unknown result type (might be due to invalid IL or missing references)
				//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
				//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0406: Unknown result type (might be due to invalid IL or missing references)
				//IL_040b: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
				//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
				((GrabbableObject)this).Update();
				if (!base.isHeld)
				{
					return;
				}
				if (base.currentUseCooldown <= 0f && base.insertedBattery.charge > 0f)
				{
					((Component)((Component)this).gameObject.transform.Find("HookMesh")).gameObject.active = true;
				}
				else
				{
					((Component)((Component)this).gameObject.transform.Find("HookMesh")).gameObject.active = false;
				}
				if (pulling)
				{
					_ = targetPosition;
					if (targetPosition != Vector3.zero && !base.playerHeldBy.isPlayerDead)
					{
						((Component)pullingGameObject.GetComponent<GrabbableObject>()).transform.position = ((Component)base.playerHeldBy).transform.position + new Vector3(0.2f, 0.8f, 0.2f);
						pullingGameObject.GetComponent<GrabbableObject>().FallToGround(false);
						HookTimer = 0f;
						HookSpeed = 0f;
						forcesP = Vector3.zero;
						pulling = false;
						targetPosition = Vector3.zero;
						((MonoBehaviour)this).Invoke("backToNormal", 0.5f);
					}
				}
				if (!grappling)
				{
					return;
				}
				_ = targetPosition;
				if (!(targetPosition != Vector3.zero) || base.playerHeldBy.isPlayerDead)
				{
					return;
				}
				if (!base.playerHeldBy.isInsideFactory)
				{
					NoDmg = true;
				}
				if (HookTimer >= HookmaxTimer)
				{
					((MonoBehaviour)this).Invoke("backToNormal", 1f);
					((MonoBehaviour)this).Invoke("enableDamage", 4f);
					HookTimer = 0f;
					HookSpeed = 0f;
					forces = Vector3.zero;
					grappling = false;
					targetPosition = Vector3.zero;
					base.playerHeldBy.ResetFallGravity();
					base.playerHeldBy.averageVelocity = 0f;
					base.playerHeldBy.externalForces = Vector3.zero;
				}
				else
				{
					HookTimer += Time.fixedDeltaTime;
				}
				if (Vector3.Distance(((Component)base.playerHeldBy).transform.position, targetPosition) >= OkDistance)
				{
					if (base.playerHeldBy.isInsideFactory)
					{
						HookSpeed = 38f;
					}
					else
					{
						HookSpeed = 45f;
					}
					forces = Vector3.Normalize(targetPosition - ((Component)base.playerHeldBy).transform.position) * HookSpeed;
					if (base.playerHeldBy.isInsideFactory)
					{
						forces.y *= 2f;
					}
					else
					{
						forces.y *= 1.5f;
					}
					base.playerHeldBy.externalForces.x += forces.x;
					base.playerHeldBy.externalForces.z += forces.z;
					base.playerHeldBy.externalForces.y += forces.y;
				}
				else
				{
					HookTimer = 0f;
					HookSpeed = 0f;
					forces = Vector3.zero;
					grappling = false;
					targetPosition = Vector3.zero;
					((MonoBehaviour)this).Invoke("backToNormal", 2f);
					((MonoBehaviour)this).Invoke("enableDamage", 8f);
					base.playerHeldBy.ResetFallGravity();
					base.playerHeldBy.averageVelocity = 0f;
					base.playerHeldBy.externalForces = Vector3.zero;
				}
			}

			public override void ItemActivate(bool used, bool buttonDown = true)
			{
				((GrabbableObject)this).ItemActivate(used, buttonDown);
				if (base.playerHeldBy.isInsideFactory)
				{
					OkDistance = 2f;
					HookmaxTimer = 4f;
				}
				else
				{
					OkDistance = 1f;
					HookmaxTimer = 6f;
				}
				if (base.insertedBattery.charge >= HookGunPlugin.energyCost.Value)
				{
					Battery insertedBattery = base.insertedBattery;
					insertedBattery.charge -= HookGunPlugin.energyCost.Value;
					if (base.insertedBattery.charge < HookGunPlugin.energyCost.Value)
					{
						base.insertedBattery.charge = 0f;
					}
					audioSource.PlayOneShot(HookGunPlugin.Assets.ShootSFX);
					StartGrapple();
				}
				else
				{
					audioSource.PlayOneShot(HookGunPlugin.Assets.NoAmmoSFX);
				}
			}

			private void TestGrapple()
			{
				//IL_002e: 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_0048: 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_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				LineRenderer component = ((Component)Object.Instantiate<HookGunScript>(this, ((Component)this).gameObject.transform.GetChild(0))).GetComponent<LineRenderer>();
				Debug.DrawRay(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, Color.green, 10f);
				if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref hit, maxGrappleDistance, LayerMask.op_Implicit(whatIsGrappleableNew)))
				{
					SpawnTrail(component, ((RaycastHit)(ref hit)).point);
				}
				for (int i = 0; i < 48; i++)
				{
					if (Physics.GetIgnoreLayerCollision(3, i))
					{
						Debug.Log((object)("O jogador NÃO colide com a camada " + LayerMask.LayerToName(i)));
					}
					else
					{
						Debug.Log((object)("O jogador colide com a camada " + LayerMask.LayerToName(i)));
					}
				}
			}

			private void StartGrapple()
			{
				//IL_002e: 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_0055: 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_0157: 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_0073: 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_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: 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_00ac: 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_00b4: 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_00be: 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)
				//IL_00cd: 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_00de: 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_00e4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f9: 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_0189: Unknown result type (might be due to invalid IL or missing references)
				//IL_018e: 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_01a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c2: 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_01cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0200: Unknown result type (might be due to invalid IL or missing references)
				//IL_0204: Unknown result type (might be due to invalid IL or missing references)
				//IL_0217: 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)
				LineRenderer component = ((Component)Object.Instantiate<HookGunScript>(this, ((Component)this).gameObject.transform.GetChild(0))).GetComponent<LineRenderer>();
				if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref hit, maxGrappleDistance, LayerMask.op_Implicit(whatIsGrappleableToPull)))
				{
					grapplePoint = ((RaycastHit)(ref hit)).point;
					SpawnTrail(component, ((RaycastHit)(ref hit)).point);
					targetPosition = grapplePoint;
					Vector3 position = ((Component)base.playerHeldBy).transform.position;
					Vector3 val = position - ((RaycastHit)(ref hit)).point;
					((Vector3)(ref val)).Normalize();
					val *= 1f;
					position = ((RaycastHit)(ref hit)).point + val;
					position.y *= 1.1f;
					targetPosition = position;
					pulling = true;
					pullingGameObject = ((Component)((RaycastHit)(ref hit)).transform).gameObject;
					audioSource.PlayOneShot(HookGunPlugin.Assets.HitSFX);
				}
				else if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref hit, maxGrappleDistance, LayerMask.op_Implicit(whatIsGrappleable)))
				{
					grapplePoint = ((RaycastHit)(ref hit)).point;
					SpawnTrail(component, ((RaycastHit)(ref hit)).point);
					targetPosition = grapplePoint;
					Vector3 position2 = ((Component)base.playerHeldBy).transform.position;
					Vector3 val2 = position2 - ((RaycastHit)(ref hit)).point;
					((Vector3)(ref val2)).Normalize();
					val2 *= 1f;
					position2 = ((RaycastHit)(ref hit)).point + val2;
					position2.y *= 1.1f;
					targetPosition = position2;
					grappling = true;
					audioSource.PlayOneShot(HookGunPlugin.Assets.HitSFX);
				}
				else
				{
					audioSource.PlayOneShot(HookGunPlugin.Assets.MissSFX);
					((Component)component).gameObject.AddComponent<LineRendererFadeOut>();
					Battery insertedBattery = base.insertedBattery;
					insertedBattery.charge += HookGunPlugin.energyCost.Value;
				}
			}

			private void SpawnTrail(LineRenderer Trail, Vector3 HitPoint)
			{
				//IL_001b: 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_0027: 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)
				Trail.SetPositions((Vector3[])(object)new Vector3[2]
				{
					((Component)this).gameObject.transform.GetChild(0).position,
					HitPoint
				});
				((Component)Trail).gameObject.AddComponent<LineRendererFadeOut>();
			}

			private void backToNormal()
			{
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: 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_002e: Unknown result type (might be due to invalid IL or missing references)
				//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)
				HookSpeed = 0f;
				HookTimer = 0f;
				forces = Vector3.zero;
				grappling = false;
				targetPosition = Vector3.zero;
				base.playerHeldBy.ResetFallGravity();
				base.playerHeldBy.averageVelocity = 0f;
				base.playerHeldBy.externalForces = Vector3.zero;
			}

			private void enableDamage()
			{
				NoDmg = false;
			}
		}

		public class LineRendererFadeOut : MonoBehaviour
		{
			public LineRenderer lineRenderer;

			public float fadeDuration = 1f;

			public float destroyDelay = 0.5f;

			private float elapsed = 0f;

			private bool isFading = true;

			private void Start()
			{
				lineRenderer = ((Component)this).GetComponent<LineRenderer>();
			}

			private void Update()
			{
				//IL_00c4: 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_00ee: 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_0058: 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_0082: 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)
				if (isFading)
				{
					if (elapsed < fadeDuration)
					{
						float num = Mathf.Lerp(1f, 0f, elapsed / fadeDuration);
						((Renderer)lineRenderer).material.color = new Color(((Renderer)lineRenderer).material.color.r, ((Renderer)lineRenderer).material.color.g, ((Renderer)lineRenderer).material.color.b, num);
						elapsed += Time.deltaTime;
					}
					else
					{
						((Renderer)lineRenderer).material.color = new Color(((Renderer)lineRenderer).material.color.r, ((Renderer)lineRenderer).material.color.g, ((Renderer)lineRenderer).material.color.b, 0f);
						isFading = false;
						Object.Destroy((Object)(object)((Component)this).gameObject, destroyDelay);
					}
				}
			}
		}

		private readonly Harmony harmony = new Harmony("com.BLKNeko.HookGunWeapon");

		private static HookGunMain Instance;

		internal ManualLogSource mls;

		private Item IHookGun;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = Logger.CreateLogSource("com.BLKNeko.HookGunWeapon");
			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);
					}
				}
			}
			IHookGun = HookGunPlugin.Assets.HGItem;
			HookGunScript hookGunScript = IHookGun.spawnPrefab.AddComponent<HookGunScript>();
			((GrabbableObject)hookGunScript).itemProperties = IHookGun;
			Items.RegisterShopItem(IHookGun, HookGunPlugin.itemPrice.Value);
			NetworkPrefabs.RegisterNetworkPrefab(IHookGun.spawnPrefab);
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.BLKNeko.RSHookGun", "RSHookGunWeapon", "1.5.0")]
	public class RSHookGunMain : BaseUnityPlugin
	{
		public class HookGunScript : GrabbableObject
		{
			private AudioSource audioSource;

			private RoundManager roundManager;

			private MeshRenderer HookGO;

			public LayerMask whatIsGrappleable = LayerMask.op_Implicit(234918656);

			public LayerMask whatIsGrappleableToPull = LayerMask.op_Implicit(1048640);

			public LayerMask whatIsGrappleableNew = LayerMask.op_Implicit(52644608);

			public LineRenderer lr;

			public float maxGrappleDistance = 60f;

			public float grappleDelayTime = 1f;

			public float overshootYAxis = 1.5f;

			public float HookSpeed = 48f;

			public float OkDistance = 1f;

			public float HookmaxTimer = 6f;

			public float HookTimer = 0f;

			public float smoothTime = 1.3f;

			public static bool grappling;

			public static bool pulling;

			public static bool shoudFall;

			public static bool DisableJump;

			public static bool DisableFall;

			private bool grapplingSlowY = false;

			private bool JumpNoDmg = true;

			public static bool isJumping;

			public static bool NoDmg;

			private Vector3 grapplePoint = Vector3.zero;

			private Vector3 targetPosition = Vector3.zero;

			private Vector3 forces = Vector3.zero;

			private Vector3 forcesP = Vector3.zero;

			private GameObject pullingGameObject;

			private RaycastHit hit;

			public void Awake()
			{
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Expected O, but got Unknown
				audioSource = ((Component)this).GetComponent<AudioSource>();
				roundManager = Object.FindObjectOfType<RoundManager>();
				base.grabbable = true;
				base.grabbableToEnemies = true;
				base.useCooldown = HookGunPlugin.itemCooldown.Value;
				base.insertedBattery = new Battery(false, 1f);
				base.mainObjectRenderer = ((Component)this).GetComponent<MeshRenderer>();
			}

			public override void Update()
			{
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//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_00d8: 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_00f1: 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_012a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0136: Unknown result type (might be due to invalid IL or missing references)
				//IL_013b: Unknown result type (might be due to invalid IL or missing references)
				//IL_015a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0161: Unknown result type (might be due to invalid IL or missing references)
				//IL_0166: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_020a: Unknown result type (might be due to invalid IL or missing references)
				//IL_020f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0236: Unknown result type (might be due to invalid IL or missing references)
				//IL_023b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0262: Unknown result type (might be due to invalid IL or missing references)
				//IL_0268: Unknown result type (might be due to invalid IL or missing references)
				//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
				//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0406: Unknown result type (might be due to invalid IL or missing references)
				//IL_040b: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
				//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
				((GrabbableObject)this).Update();
				if (!base.isHeld)
				{
					return;
				}
				if (base.currentUseCooldown <= 0f && base.insertedBattery.charge > 0f)
				{
					((Component)((Component)this).gameObject.transform.Find("HookMesh")).gameObject.active = true;
				}
				else
				{
					((Component)((Component)this).gameObject.transform.Find("HookMesh")).gameObject.active = false;
				}
				if (pulling)
				{
					_ = targetPosition;
					if (targetPosition != Vector3.zero && !base.playerHeldBy.isPlayerDead)
					{
						((Component)pullingGameObject.GetComponent<GrabbableObject>()).transform.position = ((Component)base.playerHeldBy).transform.position + new Vector3(0.2f, 0.8f, 0.2f);
						pullingGameObject.GetComponent<GrabbableObject>().FallToGround(false);
						HookTimer = 0f;
						HookSpeed = 0f;
						forcesP = Vector3.zero;
						pulling = false;
						targetPosition = Vector3.zero;
						((MonoBehaviour)this).Invoke("backToNormal", 0.5f);
					}
				}
				if (!grappling)
				{
					return;
				}
				_ = targetPosition;
				if (!(targetPosition != Vector3.zero) || base.playerHeldBy.isPlayerDead)
				{
					return;
				}
				if (!base.playerHeldBy.isInsideFactory)
				{
					NoDmg = true;
				}
				if (HookTimer >= HookmaxTimer)
				{
					((MonoBehaviour)this).Invoke("backToNormal", 1f);
					((MonoBehaviour)this).Invoke("enableDamage", 4f);
					HookTimer = 0f;
					HookSpeed = 0f;
					forces = Vector3.zero;
					grappling = false;
					targetPosition = Vector3.zero;
					base.playerHeldBy.ResetFallGravity();
					base.playerHeldBy.averageVelocity = 0f;
					base.playerHeldBy.externalForces = Vector3.zero;
				}
				else
				{
					HookTimer += Time.fixedDeltaTime;
				}
				if (Vector3.Distance(((Component)base.playerHeldBy).transform.position, targetPosition) >= OkDistance)
				{
					if (base.playerHeldBy.isInsideFactory)
					{
						HookSpeed = 38f;
					}
					else
					{
						HookSpeed = 45f;
					}
					forces = Vector3.Normalize(targetPosition - ((Component)base.playerHeldBy).transform.position) * HookSpeed;
					if (base.playerHeldBy.isInsideFactory)
					{
						forces.y *= 2f;
					}
					else
					{
						forces.y *= 1.5f;
					}
					base.playerHeldBy.externalForces.x += forces.x;
					base.playerHeldBy.externalForces.z += forces.z;
					base.playerHeldBy.externalForces.y += forces.y;
				}
				else
				{
					HookTimer = 0f;
					HookSpeed = 0f;
					forces = Vector3.zero;
					grappling = false;
					targetPosition = Vector3.zero;
					((MonoBehaviour)this).Invoke("backToNormal", 2f);
					((MonoBehaviour)this).Invoke("enableDamage", 8f);
					base.playerHeldBy.ResetFallGravity();
					base.playerHeldBy.averageVelocity = 0f;
					base.playerHeldBy.externalForces = Vector3.zero;
				}
			}

			public override void ItemActivate(bool used, bool buttonDown = true)
			{
				((GrabbableObject)this).ItemActivate(used, buttonDown);
				if (base.playerHeldBy.isInsideFactory)
				{
					OkDistance = 2f;
					HookmaxTimer = 4f;
				}
				else
				{
					OkDistance = 1f;
					HookmaxTimer = 6f;
				}
				if (base.insertedBattery.charge >= HookGunPlugin.energyCost.Value)
				{
					Battery insertedBattery = base.insertedBattery;
					insertedBattery.charge -= HookGunPlugin.energyCost.Value;
					if (base.insertedBattery.charge < HookGunPlugin.energyCost.Value)
					{
						base.insertedBattery.charge = 0f;
					}
					audioSource.PlayOneShot(HookGunPlugin.Assets.ShootSFX);
					StartGrapple();
				}
				else
				{
					audioSource.PlayOneShot(HookGunPlugin.Assets.NoAmmoSFX);
				}
			}

			private void TestGrapple()
			{
				//IL_002e: 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_0048: 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_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				LineRenderer component = ((Component)Object.Instantiate<HookGunScript>(this, ((Component)this).gameObject.transform.GetChild(0))).GetComponent<LineRenderer>();
				Debug.DrawRay(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, Color.green, 10f);
				if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref hit, maxGrappleDistance, LayerMask.op_Implicit(whatIsGrappleableNew)))
				{
					SpawnTrail(component, ((RaycastHit)(ref hit)).point);
				}
				for (int i = 0; i < 48; i++)
				{
					if (Physics.GetIgnoreLayerCollision(3, i))
					{
						Debug.Log((object)("O jogador NÃO colide com a camada " + LayerMask.LayerToName(i)));
					}
					else
					{
						Debug.Log((object)("O jogador colide com a camada " + LayerMask.LayerToName(i)));
					}
				}
			}

			private void StartGrapple()
			{
				//IL_002e: 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_0055: 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_0157: 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_0073: 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_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_0097: 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_00ac: 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_00b4: 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_00be: 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)
				//IL_00cd: 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_00de: 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_00e4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f9: 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_0189: Unknown result type (might be due to invalid IL or missing references)
				//IL_018e: 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_01a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c2: 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_01cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
				//IL_0200: Unknown result type (might be due to invalid IL or missing references)
				//IL_0204: Unknown result type (might be due to invalid IL or missing references)
				//IL_0217: 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)
				LineRenderer component = ((Component)Object.Instantiate<HookGunScript>(this, ((Component)this).gameObject.transform.GetChild(0))).GetComponent<LineRenderer>();
				if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref hit, maxGrappleDistance, LayerMask.op_Implicit(whatIsGrappleableToPull)))
				{
					grapplePoint = ((RaycastHit)(ref hit)).point;
					SpawnTrail(component, ((RaycastHit)(ref hit)).point);
					targetPosition = grapplePoint;
					Vector3 position = ((Component)base.playerHeldBy).transform.position;
					Vector3 val = position - ((RaycastHit)(ref hit)).point;
					((Vector3)(ref val)).Normalize();
					val *= 1f;
					position = ((RaycastHit)(ref hit)).point + val;
					position.y *= 1.1f;
					targetPosition = position;
					pulling = true;
					pullingGameObject = ((Component)((RaycastHit)(ref hit)).transform).gameObject;
					audioSource.PlayOneShot(HookGunPlugin.Assets.HitSFX);
				}
				else if (Physics.Raycast(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward, ref hit, maxGrappleDistance, LayerMask.op_Implicit(whatIsGrappleable)))
				{
					grapplePoint = ((RaycastHit)(ref hit)).point;
					SpawnTrail(component, ((RaycastHit)(ref hit)).point);
					targetPosition = grapplePoint;
					Vector3 position2 = ((Component)base.playerHeldBy).transform.position;
					Vector3 val2 = position2 - ((RaycastHit)(ref hit)).point;
					((Vector3)(ref val2)).Normalize();
					val2 *= 1f;
					position2 = ((RaycastHit)(ref hit)).point + val2;
					position2.y *= 1.1f;
					targetPosition = position2;
					grappling = true;
					audioSource.PlayOneShot(HookGunPlugin.Assets.HitSFX);
				}
				else
				{
					audioSource.PlayOneShot(HookGunPlugin.Assets.MissSFX);
					((Component)component).gameObject.AddComponent<LineRendererFadeOut>();
					Battery insertedBattery = base.insertedBattery;
					insertedBattery.charge += HookGunPlugin.energyCost.Value;
				}
			}

			private void SpawnTrail(LineRenderer Trail, Vector3 HitPoint)
			{
				//IL_001b: 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_0027: 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)
				Trail.SetPositions((Vector3[])(object)new Vector3[2]
				{
					((Component)this).gameObject.transform.GetChild(0).position,
					HitPoint
				});
				((Component)Trail).gameObject.AddComponent<LineRendererFadeOut>();
			}

			private void backToNormal()
			{
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: 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_002e: Unknown result type (might be due to invalid IL or missing references)
				//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)
				HookSpeed = 0f;
				HookTimer = 0f;
				forces = Vector3.zero;
				grappling = false;
				targetPosition = Vector3.zero;
				base.playerHeldBy.ResetFallGravity();
				base.playerHeldBy.averageVelocity = 0f;
				base.playerHeldBy.externalForces = Vector3.zero;
			}

			private void enableDamage()
			{
				NoDmg = false;
			}
		}

		public class LineRendererFadeOut : MonoBehaviour
		{
			public LineRenderer lineRenderer;

			public float fadeDuration = 1f;

			public float destroyDelay = 0.5f;

			private float elapsed = 0f;

			private bool isFading = true;

			private void Start()
			{
				lineRenderer = ((Component)this).GetComponent<LineRenderer>();
			}

			private void Update()
			{
				//IL_00c4: 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_00ee: 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_0058: 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_0082: 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)
				if (isFading)
				{
					if (elapsed < fadeDuration)
					{
						float num = Mathf.Lerp(1f, 0f, elapsed / fadeDuration);
						((Renderer)lineRenderer).material.color = new Color(((Renderer)lineRenderer).material.color.r, ((Renderer)lineRenderer).material.color.g, ((Renderer)lineRenderer).material.color.b, num);
						elapsed += Time.deltaTime;
					}
					else
					{
						((Renderer)lineRenderer).material.color = new Color(((Renderer)lineRenderer).material.color.r, ((Renderer)lineRenderer).material.color.g, ((Renderer)lineRenderer).material.color.b, 0f);
						isFading = false;
						Object.Destroy((Object)(object)((Component)this).gameObject, destroyDelay);
					}
				}
			}
		}

		private readonly Harmony harmony = new Harmony("com.BLKNeko.HookGunWeapon");

		private static RSHookGunMain Instance;

		internal ManualLogSource mls;

		public static ReservedItemSlotData HGRSSlotData;

		public static ReservedItemData HGRSData;

		public static List<ReservedItemData> HGRSadditionalItemData = new List<ReservedItemData>();

		private Item IRSHookGun;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = Logger.CreateLogSource("com.BLKNeko.HookGunWeapon");
			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);
					}
				}
			}
			IRSHookGun = HookGunPlugin.Assets.HGItemRS;
			HookGunScript hookGunScript = IRSHookGun.spawnPrefab.AddComponent<HookGunScript>();
			((GrabbableObject)hookGunScript).itemProperties = IRSHookGun;
			Items.RegisterShopItem(IRSHookGun, HookGunPlugin.itemPrice.Value);
			NetworkPrefabs.RegisterNetworkPrefab(IRSHookGun.spawnPrefab);
			CreateReservedItemSlots();
		}

		private void CreateReservedItemSlots()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			HGRSSlotData = ReservedItemSlotData.CreateReservedItemSlotData("RSHookGun", 23, HookGunPlugin.itemPrice.Value);
			HGRSData = HGRSSlotData.AddItemToReservedItemSlot(new ReservedItemData("RSHookGun", (PlayerBone)14, new Vector3(-0.2f, 0.25f, 0f), new Vector3(0f, 90f, 90f)));
		}
	}
	public static class PluginInfo
	{
		public const string MODUID = "com.BLKNeko.HookGunWeapon";

		public const string MODNAME = "HookGunWeapon";

		public const string MODUID2 = "com.BLKNeko.RSHookGun";

		public const string MODNAME2 = "RSHookGunWeapon";

		public const string MODUID3 = "com.BLKNeko.HookGun";

		public const string MODNAME3 = "HookGunPlugin";

		public const string MODVERSION = "1.5.0";
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.BLKNeko.HookGun", "HookGunPlugin", "1.5.0")]
	public class HookGunPlugin : BaseUnityPlugin
	{
		public class Assets
		{
			internal static AssetBundle mainAssetBundle;

			private const string assetbundleName = "hookgunitem";

			private static string[] assetNames = new string[0];

			public static Item HGItem;

			public static Item HGItemRS;

			public static Sprite HGSprite;

			public static AudioClip ShootSFX;

			public static AudioClip HitSFX;

			public static AudioClip MissSFX;

			public static AudioClip NoAmmoSFX;

			public static Mesh HGMesh;

			public static Mesh HOMesh;

			internal static void LoadAssetBundle()
			{
				if ((Object)(object)mainAssetBundle == (Object)null)
				{
					using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HookGun.hookgunitem");
					mainAssetBundle = AssetBundle.LoadFromStream(stream);
				}
				assetNames = mainAssetBundle.GetAllAssetNames();
			}

			internal static void PopulateAssets()
			{
				if (!Object.op_Implicit((Object)(object)mainAssetBundle))
				{
					Debug.LogError((object)"There is no AssetBundle to load assets from.");
					return;
				}
				HGSprite = mainAssetBundle.LoadAsset<Sprite>("HGSprite");
				ShootSFX = mainAssetBundle.LoadAsset<AudioClip>("ShootSFX");
				HitSFX = mainAssetBundle.LoadAsset<AudioClip>("HitSFX");
				MissSFX = mainAssetBundle.LoadAsset<AudioClip>("MissSFX");
				NoAmmoSFX = mainAssetBundle.LoadAsset<AudioClip>("NoAmmoSFX");
				HGItem = mainAssetBundle.LoadAsset<Item>("HookGunItem");
				HGItemRS = mainAssetBundle.LoadAsset<Item>("RSHookGunItem");
			}
		}

		private readonly Harmony harmony = new Harmony("com.BLKNeko.HookGunWeapon");

		private static HookGunPlugin Instance;

		internal ManualLogSource mls;

		public static ConfigEntry<int> itemPrice { get; set; }

		public static ConfigEntry<float> itemCooldown { get; set; }

		public static ConfigEntry<float> energyCost { get; set; }

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			mls = Logger.CreateLogSource("com.BLKNeko.HookGunWeapon");
			bool flag = Chainloader.PluginInfos.Any((KeyValuePair<string, PluginInfo> plugin) => plugin.Key == "FlipMods.ReservedItemSlotCore");
			Debug.Log((object)("isRSModLoaded: " + flag));
			Assets.LoadAssetBundle();
			Assets.PopulateAssets();
			harmony.PatchAll(typeof(HookGunPlugin));
			harmony.PatchAll(typeof(HookGunMain));
			harmony.PatchAll(typeof(AllowDeathPatch));
			if (flag)
			{
				try
				{
					Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => a.GetName().Name == "ReservedItemSlotCore");
					if (assembly == null)
					{
						((BaseUnityPlugin)this).Logger.LogError((object)"Assembly 'ReservedItemSlotCore' não encontrado, mesmo com mod detectado.");
						return;
					}
					Type type = assembly.GetType("ReservedItemSlotCore.Data.ReservedItemSlotData");
					Type type2 = assembly.GetType("ReservedItemSlotCore.Data.ReservedItemData");
					if (type != null)
					{
						harmony.PatchAll(type);
						((BaseUnityPlugin)this).Logger.LogInfo((object)"Patch aplicado para ReservedItemSlotData.");
					}
					else
					{
						((BaseUnityPlugin)this).Logger.LogError((object)"Tipo 'ReservedItemSlotData' não encontrado, mesmo com mod detectado.");
					}
					if (type2 != null)
					{
						harmony.PatchAll(type2);
						((BaseUnityPlugin)this).Logger.LogInfo((object)"Patch aplicado para ReservedItemSlotData.");
					}
					else
					{
						((BaseUnityPlugin)this).Logger.LogError((object)"Tipo 'ReservedItemData' não encontrado, mesmo com mod detectado.");
					}
				}
				catch (Exception ex)
				{
					((BaseUnityPlugin)this).Logger.LogError((object)("Erro ao aplicar patch para ReservedItemSlotData: " + ex.Message));
				}
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Outro mod não detectado. Prosseguindo sem ReservedItemSlotData.");
			}
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type3 in array)
			{
				MethodInfo[] methods = type3.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);
					}
				}
			}
			itemPrice = ((BaseUnityPlugin)this).Config.Bind<int>("ItemPrice", "Price", 25, "This is the item price, my default is 25, [INTEGER 1,2,30...]");
			itemCooldown = ((BaseUnityPlugin)this).Config.Bind<float>("ItemCooldown", "Cooldown", 2f, "This is the item cooldown, my default is 2, [FLOAT 0.5,1.8,18.9,...]");
			energyCost = ((BaseUnityPlugin)this).Config.Bind<float>("EnergyCost", "Cost", 0.05f, "This is the item energy cost of activation, my default is 0.05, the MAX energy is 1f so 0.05 give you 20 sucessfull activations [FLOAT 0.01,0.1,1 -- DON'T USE MORE THAN 1]");
		}
	}
}
namespace HookGun.Patches
{
	[HarmonyPatch(typeof(PlayerControllerB))]
	public class AllowDeathPatch
	{
		[HarmonyPatch("AllowPlayerDeath")]
		[HarmonyPrefix]
		private static bool ChangeAllowDeath()
		{
			if (HookGunMain.HookGunScript.NoDmg)
			{
				return false;
			}
			return true;
		}
	}
}