JBLM.dll

Decompiled 4 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using GameNetcodeStuff;
using JBLM.NetcodePatcher;
using LethalCompanyTemplate.Behaviours;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("JBLM")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("JB Lethal Mod")]
[assembly: AssemblyFileVersion("2.3.0.0")]
[assembly: AssemblyInformationalVersion("2.3.0+96b67800dfc884c5fa84388de7e0637cf35b75ab")]
[assembly: AssemblyProduct("JBLM")]
[assembly: AssemblyTitle("JBLM")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.3.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
public class CrolardBehaviour : PhysicsProp
{
	private InteractTrigger[] triggers;

	private BoxCollider container;

	private AudioSource ganjaSource;

	public AudioClip ganjaCrolard;

	public AudioClip ganjaNoiseLow;

	public AudioClip ganjaNoiseMedium;

	public AudioClip ganjaNoiseHigh;

	public AudioClip ganjaExplosion;

	private float w1 = 1f;

	private float w2 = 3f;

	private float chanceMin = 0.005f;

	private float chanceMax = 0.2f;

	private float addedWeight = 0f;

	public override void Start()
	{
		((GrabbableObject)this).Start();
		triggers = ((Component)this).GetComponentsInChildren<InteractTrigger>();
		ganjaSource = ((Component)this).GetComponentInChildren<AudioSource>();
		BoxCollider[] componentsInChildren = ((Component)this).GetComponentsInChildren<BoxCollider>();
		foreach (BoxCollider val in componentsInChildren)
		{
			Debug.LogError((object)("Box collider found : " + ((Object)val).name + " !"));
			if (!(((Object)val).name != "PlaceableBounds"))
			{
				container = val;
				break;
			}
		}
		if ((Object)(object)container == (Object)null)
		{
			Debug.LogError((object)"Couldn't find BoxCollider component in the prefab...");
		}
		if (triggers == null)
		{
			Debug.LogError((object)"Couldn't find InteractTrigger components in the prefab...");
		}
		InteractTrigger[] array = triggers;
		foreach (InteractTrigger val2 in array)
		{
			((UnityEvent<PlayerControllerB>)(object)val2.onInteract).AddListener((UnityAction<PlayerControllerB>)InteractCrolard);
			((Component)val2).tag = "InteractTrigger";
			Debug.Log((object)"The tag is InteractTrigger");
			val2.interactCooldown = false;
			val2.cooldownTime = 0f;
			val2.timeToHold = 1.2f;
			val2.oneHandedItemAllowed = true;
			val2.twoHandedItemAllowed = true;
			val2.disableTriggerMesh = true;
			val2.holdInteraction = true;
		}
	}

	public override void ItemActivate(bool used, bool buttonDown = true)
	{
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		((GrabbableObject)this).ItemActivate(used, buttonDown);
		if (buttonDown && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null)
		{
			if (w1 < addedWeight && addedWeight <= w2)
			{
				ganjaSource.PlayOneShot(ganjaNoiseMedium, 0.8f);
			}
			else if (addedWeight <= w1)
			{
				ganjaSource.PlayOneShot(ganjaNoiseLow, 0.6f);
			}
			else
			{
				ganjaSource.PlayOneShot(ganjaNoiseHigh, 1f);
			}
			RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 60f, 1f, 0, ((GrabbableObject)this).isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
		}
	}

	public override void Update()
	{
		((GrabbableObject)this).Update();
		UpdateInteractTriggers();
	}

	private void UpdateInteractTriggers()
	{
		PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
		if ((Object)(object)localPlayerController == (Object)null)
		{
			return;
		}
		if (!localPlayerController.isHoldingObject)
		{
			SetInteractTriggers(interactable: false, "No item to feed");
			return;
		}
		GrabbableObject currentlyHeldObjectServer = localPlayerController.currentlyHeldObjectServer;
		if (!((Object)(object)((Component)currentlyHeldObjectServer).GetComponent<CrolardBehaviour>() != (Object)null))
		{
			if (!currentlyHeldObjectServer.itemProperties.isScrap)
			{
				SetInteractTriggers(interactable: false, "You can only feed scrap to Crolard");
			}
			else if ((Object)(object)RoundManager.Instance == (Object)null || (Object)(object)RoundManager.Instance.dungeonGenerator == (Object)null || !RoundManager.Instance.dungeonCompletedGenerating)
			{
				SetInteractTriggers(interactable: false, "You're not on a planet");
			}
			else
			{
				SetInteractTriggers(interactable: true, "Feed Crolard [LMB]");
			}
		}
	}

	private void SetInteractTriggers(bool interactable = false, string hoverTip = "Default text")
	{
		InteractTrigger[] array = triggers;
		foreach (InteractTrigger val in array)
		{
			val.interactable = interactable;
			if (interactable)
			{
				val.hoverTip = hoverTip;
			}
			else
			{
				val.disabledHoverTip = hoverTip;
			}
		}
	}

	[ServerRpc(RequireOwnership = false)]
	public void UpdateInternalWeightServerRpc(float newWeight)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Invalid comparison between Unknown and I4
		//IL_005f: 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_006d: 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_0083: 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)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2671713532u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref newWeight, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2671713532u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				UpdateInternalWeightClientRpc(newWeight);
			}
		}
	}

	[ClientRpc]
	public void UpdateInternalWeightClientRpc(float newWeight)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Invalid comparison between Unknown and I4
		//IL_005f: 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_006d: 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_0083: 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)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2516328432u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref newWeight, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2516328432u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				addedWeight = newWeight;
			}
		}
	}

	[ServerRpc(RequireOwnership = false)]
	public void UpdateValueServerRpc(int newValue)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(811550316u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, newValue);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 811550316u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				UpdateValueClientRpc(newValue);
			}
		}
	}

	[ClientRpc]
	public void UpdateValueClientRpc(int newValue)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4289962534u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, newValue);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4289962534u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				((GrabbableObject)this).scrapValue = newValue;
				((GrabbableObject)this).SetScrapValue(((GrabbableObject)this).scrapValue);
			}
		}
	}

	[ServerRpc(RequireOwnership = false)]
	public void ExplodeServerRpc(Vector3 location)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3046441327u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref location);
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3046441327u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				ExplodeClientRpc(location);
			}
		}
	}

	[ClientRpc]
	public void ExplodeClientRpc(Vector3 location)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4123934730u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref location);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4123934730u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				ganjaSource.pitch = Random.Range(0.93f, 1.07f);
				ganjaSource.PlayOneShot(ganjaExplosion, 1.2f);
				SpawnExplosion(location, spawnExplosionEffect: false, 5.7f, 6.4f);
			}
		}
	}

	private void InteractCrolard(PlayerControllerB playerInteractor)
	{
		//IL_00cd: 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_01f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
		if (!playerInteractor.isHoldingObject)
		{
			return;
		}
		if ((Object)(object)playerInteractor.currentlyHeldObjectServer == (Object)null)
		{
			Debug.LogError((object)"Item is null");
			return;
		}
		if (!playerInteractor.currentlyHeldObjectServer.itemProperties.isScrap)
		{
			Debug.LogError((object)"This is not scrap");
			return;
		}
		int num = (int)((double)playerInteractor.currentlyHeldObjectServer.scrapValue * 1.3);
		float num2 = (playerInteractor.currentlyHeldObjectServer.itemProperties.weight - 1f) * 1.25f;
		if ((Object)(object)((Component)playerInteractor.currentlyHeldObjectServer).GetComponent<SaucisseBehaviour>() != (Object)null)
		{
			ganjaSource.PlayOneShot(ganjaCrolard, 0.8f);
			RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 800f, 1f, 0, ((GrabbableObject)this).isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
			UpdateValueServerRpc(((GrabbableObject)this).scrapValue + 70);
			playerInteractor.DespawnHeldObject();
			return;
		}
		playerInteractor.DespawnHeldObject();
		UpdateInternalWeightServerRpc(addedWeight + num2);
		UpdateValueServerRpc(((GrabbableObject)this).scrapValue + num);
		float num3 = ((w1 < addedWeight && addedWeight <= w2) ? (chanceMin + (addedWeight - w1) * (chanceMax - chanceMin) / (w2 - w1)) : ((!(addedWeight <= w1)) ? chanceMax : chanceMin));
		if (Random.Range(0f, 1f) < num3)
		{
			ExplodeServerRpc(((Component)this).transform.position + Vector3.up);
			UpdateInternalWeightServerRpc(0f);
			UpdateValueServerRpc((((GrabbableObject)this).scrapValue - num) / 2);
		}
	}

	public static void SpawnExplosion(Vector3 explosionPosition, bool spawnExplosionEffect = false, float killRange = 1f, float damageRange = 1f)
	{
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: 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_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: 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_02ab: 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_00f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0100: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0257: Unknown result type (might be due to invalid IL or missing references)
		//IL_025d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018d: 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_0198: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b9: 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_01e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		Debug.Log((object)"Spawning explosion at pos: {explosionPosition}");
		if (spawnExplosionEffect)
		{
			Object.Instantiate<GameObject>(StartOfRound.Instance.explosionPrefab, explosionPosition, Quaternion.Euler(-90f, 0f, 0f), RoundManager.Instance.mapPropsContainer.transform).SetActive(true);
		}
		float num = Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, explosionPosition);
		if ((double)num < 14.0)
		{
			HUDManager.Instance.ShakeCamera((ScreenShakeType)1);
		}
		else if ((double)num < 25.0)
		{
			HUDManager.Instance.ShakeCamera((ScreenShakeType)0);
		}
		Collider[] array = Physics.OverlapSphere(explosionPosition, 6f, 2621448, (QueryTriggerInteraction)2);
		for (int i = 0; i < array.Length; i++)
		{
			float num2 = Vector3.Distance(explosionPosition, ((Component)array[i]).transform.position);
			if (!((double)num2 <= 4.0) && Physics.Linecast(explosionPosition, ((Component)array[i]).transform.position + Vector3.up * 0.3f, 256, (QueryTriggerInteraction)1))
			{
				continue;
			}
			if (((Component)array[i]).gameObject.layer == 3)
			{
				PlayerControllerB component = ((Component)array[i]).gameObject.GetComponent<PlayerControllerB>();
				if ((Object)(object)component != (Object)null && ((NetworkBehaviour)component).IsOwner)
				{
					if ((double)num2 < (double)killRange)
					{
						Vector3 val = (((Component)component.gameplayCamera).transform.position - explosionPosition) * 80f / Vector3.Distance(((Component)component.gameplayCamera).transform.position, explosionPosition);
						component.KillPlayer(val, true, (CauseOfDeath)3, 0);
					}
					else if ((double)num2 < (double)damageRange)
					{
						component.DamagePlayer(50, true, true, (CauseOfDeath)0, 0, false, default(Vector3));
					}
				}
			}
			else if (((Component)array[i]).gameObject.layer == 19)
			{
				EnemyAICollisionDetect componentInChildren = ((Component)array[i]).gameObject.GetComponentInChildren<EnemyAICollisionDetect>();
				if ((Object)(object)componentInChildren != (Object)null && ((NetworkBehaviour)componentInChildren.mainScript).IsOwner && (double)num2 < 4.5)
				{
					componentInChildren.mainScript.HitEnemyOnLocalClient(6, default(Vector3), (PlayerControllerB)null, false);
				}
			}
		}
		int num3 = ~LayerMask.GetMask(new string[1] { "Room" });
		int num4 = ~LayerMask.GetMask(new string[1] { "Colliders" });
		Collider[] array2 = Physics.OverlapSphere(explosionPosition, 10f, num4);
		for (int j = 0; j < array2.Length; j++)
		{
			Component val2 = (Component)(object)array2[j];
			Rigidbody component2 = val2.GetComponent<Rigidbody>();
			if ((Object)(object)component2 != (Object)null)
			{
				component2.AddExplosionForce(70f, explosionPosition, 10f);
			}
		}
	}

	public override void GrabItem()
	{
		((GrabbableObject)this).GrabItem();
		if (Object.op_Implicit((Object)(object)((GrabbableObject)this).playerHeldBy) && (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)(object)((GrabbableObject)this).playerHeldBy)
		{
			PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy;
			playerHeldBy.carryWeight += Mathf.Clamp(addedWeight, 0f, 10f);
		}
	}

	public override void DiscardItem()
	{
		if (Object.op_Implicit((Object)(object)((GrabbableObject)this).playerHeldBy) && (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)(object)((GrabbableObject)this).playerHeldBy)
		{
			PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy;
			playerHeldBy.carryWeight -= Mathf.Clamp(addedWeight, 0f, 10f);
		}
		((GrabbableObject)this).DiscardItem();
	}

	public override void OnBroughtToShip()
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		((GrabbableObject)this).OnBroughtToShip();
		ganjaSource.PlayOneShot(ganjaCrolard, 1f);
		RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 300f, 1f, 0, ((GrabbableObject)this).isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0);
	}

	protected override void __initializeVariables()
	{
		((PhysicsProp)this).__initializeVariables();
	}

	[RuntimeInitializeOnLoadMethod]
	internal static void InitializeRPCS_CrolardBehaviour()
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Expected O, but got Unknown
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Expected O, but got Unknown
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Expected O, but got Unknown
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Expected O, but got Unknown
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Expected O, but got Unknown
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Expected O, but got Unknown
		NetworkManager.__rpc_func_table.Add(2671713532u, new RpcReceiveHandler(__rpc_handler_2671713532));
		NetworkManager.__rpc_func_table.Add(2516328432u, new RpcReceiveHandler(__rpc_handler_2516328432));
		NetworkManager.__rpc_func_table.Add(811550316u, new RpcReceiveHandler(__rpc_handler_811550316));
		NetworkManager.__rpc_func_table.Add(4289962534u, new RpcReceiveHandler(__rpc_handler_4289962534));
		NetworkManager.__rpc_func_table.Add(3046441327u, new RpcReceiveHandler(__rpc_handler_3046441327));
		NetworkManager.__rpc_func_table.Add(4123934730u, new RpcReceiveHandler(__rpc_handler_4123934730));
	}

	private static void __rpc_handler_2671713532(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			float newWeight = default(float);
			((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref newWeight, default(ForPrimitives));
			target.__rpc_exec_stage = (__RpcExecStage)1;
			((CrolardBehaviour)(object)target).UpdateInternalWeightServerRpc(newWeight);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_2516328432(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			float newWeight = default(float);
			((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref newWeight, default(ForPrimitives));
			target.__rpc_exec_stage = (__RpcExecStage)2;
			((CrolardBehaviour)(object)target).UpdateInternalWeightClientRpc(newWeight);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_811550316(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: 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)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			int newValue = default(int);
			ByteUnpacker.ReadValueBitPacked(reader, ref newValue);
			target.__rpc_exec_stage = (__RpcExecStage)1;
			((CrolardBehaviour)(object)target).UpdateValueServerRpc(newValue);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_4289962534(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: 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)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			int newValue = default(int);
			ByteUnpacker.ReadValueBitPacked(reader, ref newValue);
			target.__rpc_exec_stage = (__RpcExecStage)2;
			((CrolardBehaviour)(object)target).UpdateValueClientRpc(newValue);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_3046441327(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: 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)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			Vector3 location = default(Vector3);
			((FastBufferReader)(ref reader)).ReadValueSafe(ref location);
			target.__rpc_exec_stage = (__RpcExecStage)1;
			((CrolardBehaviour)(object)target).ExplodeServerRpc(location);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	private static void __rpc_handler_4123934730(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: 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)
		NetworkManager networkManager = target.NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			Vector3 location = default(Vector3);
			((FastBufferReader)(ref reader)).ReadValueSafe(ref location);
			target.__rpc_exec_stage = (__RpcExecStage)2;
			((CrolardBehaviour)(object)target).ExplodeClientRpc(location);
			target.__rpc_exec_stage = (__RpcExecStage)0;
		}
	}

	protected internal override string __getTypeName()
	{
		return "CrolardBehaviour";
	}
}
namespace LethalCompanyTemplate
{
	[BepInPlugin("JBLM", "JBLM", "2.3.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public static AssetBundle crolard_bundle;

		private void Awake()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin JBLM start loading!");
			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);
					}
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin JBLM loaded netcode patcher !");
			string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
			crolard_bundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "crolard"));
			if ((Object)(object)crolard_bundle == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load custom assets.");
				return;
			}
			int num = 3;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading Crolard Item");
			Item val = crolard_bundle.LoadAsset<Item>("Assets/CrolardMod/Items/Scraps/crolard/CrolardItem.asset");
			CrolardBehaviour crolardBehaviour = val.spawnPrefab.AddComponent<CrolardBehaviour>();
			((GrabbableObject)crolardBehaviour).grabbable = true;
			((GrabbableObject)crolardBehaviour).grabbableToEnemies = true;
			((GrabbableObject)crolardBehaviour).itemProperties = val;
			crolardBehaviour.ganjaCrolard = crolard_bundle.LoadAsset<AudioClip>("Assets/CrolardMod/Items/Scraps/crolard/MoaningFar.mp3");
			crolardBehaviour.ganjaNoiseLow = crolard_bundle.LoadAsset<AudioClip>("Assets/CrolardMod/Items/Scraps/crolard/crilow.mp3");
			crolardBehaviour.ganjaNoiseMedium = crolard_bundle.LoadAsset<AudioClip>("Assets/CrolardMod/Items/Scraps/crolard/crimid.mp3");
			crolardBehaviour.ganjaNoiseHigh = crolard_bundle.LoadAsset<AudioClip>("Assets/CrolardMod/Items/Scraps/crolard/crihigh.mp3");
			crolardBehaviour.ganjaExplosion = crolard_bundle.LoadAsset<AudioClip>("Assets/CrolardMod/Items/Scraps/crolard/explosion.mp3");
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Registering Crolard as scrap");
			Utilities.FixMixerGroups(val.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab);
			Items.RegisterScrap(val, num, (LevelTypes)(-1));
			int num2 = 20;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading Saucisse Item");
			Item val2 = crolard_bundle.LoadAsset<Item>("Assets/CrolardMod/Items/Scraps/saucisse/SaucisseItem.asset");
			SaucisseBehaviour saucisseBehaviour = val2.spawnPrefab.AddComponent<SaucisseBehaviour>();
			((GrabbableObject)saucisseBehaviour).grabbable = true;
			((GrabbableObject)saucisseBehaviour).grabbableToEnemies = true;
			((GrabbableObject)saucisseBehaviour).itemProperties = val2;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Registering Saucisse as scrap");
			Utilities.FixMixerGroups(val2.spawnPrefab);
			NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab);
			Items.RegisterScrap(val2, num2, (LevelTypes)(-1));
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin JBLM is loaded!");
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "JBLM";

		public const string PLUGIN_NAME = "JBLM";

		public const string PLUGIN_VERSION = "2.3.0";
	}
}
namespace LethalCompanyTemplate.Behaviours
{
	public class SaucisseBehaviour : PhysicsProp
	{
		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
		}

		protected override void __initializeVariables()
		{
			((PhysicsProp)this).__initializeVariables();
		}

		protected internal override string __getTypeName()
		{
			return "SaucisseBehaviour";
		}
	}
}
namespace JBLM.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}