Decompiled source of BetterLaddersFixed v2.0.2

BepInEx/plugins/BetterLadders.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using BetterLadders.NetcodePatcher;
using BetterLadders.Networking;
using BetterLadders.Patches;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
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: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("EasyTextEffects")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BetterLadders")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Configurable climbing speed, extension ladder time, and climbing with two-handed items.")]
[assembly: AssemblyFileVersion("2.0.2.0")]
[assembly: AssemblyInformationalVersion("2.0.2+dbb4f7de3c2408cc552d792cc17f8794a0ce6a4c")]
[assembly: AssemblyProduct("BetterLadders")]
[assembly: AssemblyTitle("BetterLadders")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.2.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
		NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializable<BetterLaddersData>();
		NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEquals<BetterLaddersData>();
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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;
		}
	}
}
namespace BetterLadders
{
	[BepInPlugin("e3s1.BetterLadders", "BetterLadders", "2.0.2")]
	public class BetterLadders : BaseUnityPlugin
	{
		public const string PLUGIN_GUID = "e3s1.BetterLadders";

		public const string PLUGIN_NAME = "BetterLadders";

		public const string PLUGIN_VERSION = "2.0.2";

		internal static ManualLogSource StaticLogger { get; private set; }

		internal static Config Settings { get; private set; }

		internal static Harmony Harmony { get; private set; }

		private void Awake()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			StaticLogger = ((BaseUnityPlugin)this).Logger;
			try
			{
				Settings = new Config(((BaseUnityPlugin)this).Config);
				Harmony = new Harmony("e3s1.BetterLadders");
				NetcodePatcher();
				Harmony.PatchAll(typeof(NetworkingInitPatches));
				Harmony.PatchAll(typeof(AllowTwoHandedPatch));
				Harmony.PatchAll(typeof(AnimationSpeedPatch));
				Harmony.PatchAll(typeof(ClimbSpeedPatch));
				Harmony.PatchAll(typeof(ExtLadderKillTriggerPatch));
				Harmony.PatchAll(typeof(ExtLadderTimerPatch));
				Harmony.PatchAll(typeof(HideItemsPatches));
				StaticLogger.LogInfo((object)"BetterLadders v2.0.2 loaded!");
			}
			catch (Exception arg)
			{
				StaticLogger.LogError((object)string.Format("Error while initializing '{0}': {1}", "BetterLadders", arg));
			}
		}

		private static void NetcodePatcher()
		{
			Type[] array;
			try
			{
				array = Assembly.GetExecutingAssembly().GetTypes();
			}
			catch (ReflectionTypeLoadException ex)
			{
				array = ex.Types.Where((Type type) => type != null).ToArray();
			}
			Type[] array2 = array;
			foreach (Type type2 in array2)
			{
				MethodInfo[] methods = type2.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				foreach (MethodInfo methodInfo in methods)
				{
					if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
	public class Config
	{
		public static BetterLaddersData LocalData { get; internal set; }

		public ConfigEntry<float> ClimbSpeedMultiplier { get; private set; }

		public ConfigEntry<float> ClimbSprintSpeedMultiplier { get; private set; }

		public ConfigEntry<bool> AllowTwoHanded { get; private set; }

		public ConfigEntry<bool> ScaleAnimationSpeed { get; private set; }

		public ConfigEntry<bool> HideOneHanded { get; private set; }

		public ConfigEntry<bool> HideTwoHanded { get; private set; }

		public ConfigEntry<float> ExtensionTimer { get; private set; }

		public ConfigEntry<bool> EnableKillTrigger { get; private set; }

		public Config(ConfigFile cfg)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Expected O, but got Unknown
			cfg.SaveOnConfigSet = false;
			ClimbSpeedMultiplier = cfg.Bind<float>("Speed", "climbSpeedMultiplier", 1f, new ConfigDescription("Ladder climb speed multiplier.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 10f), Array.Empty<object>()));
			ClimbSprintSpeedMultiplier = cfg.Bind<float>("Speed", "sprintingClimbSpeedMultiplier", 1.5f, new ConfigDescription("Ladder climb speed multiplier while sprinting, stacks with climbSpeedMultiplier.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 10f), Array.Empty<object>()));
			ScaleAnimationSpeed = cfg.Bind<bool>("Speed", "scaleAnimationSpeed", true, "Whether to scale the speed of the climbing animation to the climbing speed.");
			AllowTwoHanded = cfg.Bind<bool>("Items", "allowTwoHanded", true, "Whether to allow using ladders while carrying a two-handed object.");
			HideOneHanded = cfg.Bind<bool>("Items", "hideOneHanded", true, "Whether to hide one-handed items while climbing a ladder.");
			HideTwoHanded = cfg.Bind<bool>("Items", "hideTwoHanded", true, "Whether to hide two-handed items while climbing a ladder.");
			ExtensionTimer = cfg.Bind<float>("Extension Ladder", "extensionTimer", 20f, new ConfigDescription("How long (in seconds) extension ladders remain deployed. Set to 0 for permanent.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 700f), Array.Empty<object>()));
			EnableKillTrigger = cfg.Bind<bool>("Extension Ladder", "enableKillTrigger", true, "Whether extension ladders should kill players they land on.");
			ClimbSpeedMultiplier.SettingChanged += OnSettingChanged;
			ClimbSprintSpeedMultiplier.SettingChanged += OnSettingChanged;
			AllowTwoHanded.SettingChanged += OnSettingChanged;
			ScaleAnimationSpeed.SettingChanged += OnSettingChanged;
			HideOneHanded.SettingChanged += OnSettingChanged;
			HideTwoHanded.SettingChanged += OnSettingChanged;
			ExtensionTimer.SettingChanged += OnSettingChanged;
			EnableKillTrigger.SettingChanged += OnSettingChanged;
			ClearOrphanedEntries(cfg);
			cfg.SaveOnConfigSet = true;
			cfg.Save();
		}

		private void OnSettingChanged(object sender, EventArgs args)
		{
			if ((Object)(object)BetterLaddersNetworker.Instance != (Object)null && ((NetworkBehaviour)BetterLaddersNetworker.Instance).IsSpawned && ((NetworkBehaviour)BetterLaddersNetworker.Instance).IsHost)
			{
				BetterLaddersNetworker.Instance.RefreshSyncedData();
			}
		}

		private static void ClearOrphanedEntries(ConfigFile config)
		{
			PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
			((Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(config))?.Clear();
		}
	}
}
namespace BetterLadders.Patches
{
	[HarmonyPatch]
	internal sealed class AllowTwoHandedPatch
	{
		[HarmonyPatch(typeof(InteractTrigger), "Start")]
		[HarmonyPostfix]
		private static void LadderStart_Post(InteractTrigger __instance)
		{
			if (__instance.isLadder)
			{
				ModifyLadder(__instance, Config.LocalData.allowTwoHanded);
			}
		}

		internal static void RefreshAllLadders(bool allowTwoHanded)
		{
			InteractTrigger[] array = Object.FindObjectsByType<InteractTrigger>((FindObjectsInactive)0, (FindObjectsSortMode)0);
			for (int i = 0; i < array.Length; i++)
			{
				if (array[i].isLadder)
				{
					ModifyLadder(array[i], allowTwoHanded);
				}
			}
		}

		private static void ModifyLadder(InteractTrigger ladderTrigger, bool allowTwoHanded)
		{
			ladderTrigger.twoHandedItemAllowed = allowTwoHanded;
			ladderTrigger.specialCharacterAnimation = !allowTwoHanded;
		}
	}
	[HarmonyPatch]
	internal sealed class AnimationSpeedPatch
	{
		[CompilerGenerated]
		private sealed class <>c__DisplayClass2_0
		{
			public PlayerControllerB player;

			public float startTime;

			public bool isLocalPlayer;

			internal bool <ScalePlayerAnimationSpeed>b__0()
			{
				return ((Object)(object)player != (Object)null && player.isClimbingLadder) || Time.realtimeSinceStartup - startTime > 5f;
			}

			internal bool <ScalePlayerAnimationSpeed>b__1()
			{
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				if ((Object)(object)player == (Object)null || (Object)(object)player.playerBodyAnimator == (Object)null)
				{
					return false;
				}
				float @float = player.playerBodyAnimator.GetFloat(animationSpeedID);
				if (@float != 0f)
				{
					bool num;
					if (!isLocalPlayer)
					{
						AnimatorStateInfo currentAnimatorStateInfo = player.playerBodyAnimator.GetCurrentAnimatorStateInfo(0);
						num = ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsTag("Sprinting");
					}
					else
					{
						num = player.isSprinting;
					}
					bool flag = num;
					@float = Config.LocalData.climbSpeedMultiplier * (flag ? Config.LocalData.climbSprintSpeedMultiplier : 1f);
					player.playerBodyAnimator.SetFloat(animationSpeedID, @float);
				}
				return player.isClimbingLadder;
			}
		}

		[CompilerGenerated]
		private sealed class <ScalePlayerAnimationSpeed>d__2 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public PlayerControllerB player;

			private <>c__DisplayClass2_0 <>8__1;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <ScalePlayerAnimationSpeed>d__2(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>8__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a5: Expected O, but got Unknown
				//IL_0107: Unknown result type (might be due to invalid IL or missing references)
				//IL_0111: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>8__1 = new <>c__DisplayClass2_0();
					<>8__1.player = player;
					<>8__1.isLocalPlayer = <>8__1.player.actualClientId == GameNetworkManager.Instance.localPlayerController.actualClientId;
					<>8__1.startTime = Time.realtimeSinceStartup;
					<>2__current = (object)new WaitUntil((Func<bool>)(() => ((Object)(object)<>8__1.player != (Object)null && <>8__1.player.isClimbingLadder) || Time.realtimeSinceStartup - <>8__1.startTime > 5f));
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					if ((Object)(object)<>8__1.player == (Object)null || !<>8__1.player.isClimbingLadder)
					{
						BetterLadders.StaticLogger.LogWarning((object)"Timed out when syncing ladder animation speed.");
						return false;
					}
					<>2__current = (object)new WaitWhile((Func<bool>)delegate
					{
						//IL_0069: Unknown result type (might be due to invalid IL or missing references)
						//IL_006e: Unknown result type (might be due to invalid IL or missing references)
						if ((Object)(object)<>8__1.player == (Object)null || (Object)(object)<>8__1.player.playerBodyAnimator == (Object)null)
						{
							return false;
						}
						float @float = <>8__1.player.playerBodyAnimator.GetFloat(animationSpeedID);
						if (@float != 0f)
						{
							bool num;
							if (!<>8__1.isLocalPlayer)
							{
								AnimatorStateInfo currentAnimatorStateInfo = <>8__1.player.playerBodyAnimator.GetCurrentAnimatorStateInfo(0);
								num = ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsTag("Sprinting");
							}
							else
							{
								num = <>8__1.player.isSprinting;
							}
							bool flag = num;
							@float = Config.LocalData.climbSpeedMultiplier * (flag ? Config.LocalData.climbSprintSpeedMultiplier : 1f);
							<>8__1.player.playerBodyAnimator.SetFloat(animationSpeedID, @float);
						}
						return <>8__1.player.isClimbingLadder;
					});
					<>1__state = 2;
					return true;
				case 2:
					<>1__state = -1;
					return false;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}
		}

		private static readonly int animationSpeedID = Animator.StringToHash("animationSpeed");

		[HarmonyPatch(typeof(InteractTrigger), "SetUsingLadderOnLocalClient")]
		[HarmonyPriority(300)]
		[HarmonyPostfix]
		private static void SetUsingLadderOnLocalClient_Post(bool isUsing)
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			((MonoBehaviour)localPlayerController).StopCoroutine(ScalePlayerAnimationSpeed(localPlayerController));
			if (!isUsing)
			{
				if ((Object)(object)BetterLaddersNetworker.Instance != (Object)null && ((NetworkBehaviour)BetterLaddersNetworker.Instance).IsSpawned)
				{
					BetterLaddersNetworker.Instance.SetAnimationSpeedServerRpc(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)localPlayerController), stop: true);
				}
				return;
			}
			((MonoBehaviour)localPlayerController).StartCoroutine(ScalePlayerAnimationSpeed(localPlayerController));
			if ((Object)(object)BetterLaddersNetworker.Instance != (Object)null && ((NetworkBehaviour)BetterLaddersNetworker.Instance).IsSpawned)
			{
				BetterLaddersNetworker.Instance.SetAnimationSpeedServerRpc(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)localPlayerController), stop: false);
			}
		}

		[IteratorStateMachine(typeof(<ScalePlayerAnimationSpeed>d__2))]
		internal static IEnumerator ScalePlayerAnimationSpeed(PlayerControllerB player)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <ScalePlayerAnimationSpeed>d__2(0)
			{
				player = player
			};
		}
	}
	[HarmonyPatch]
	internal sealed class ClimbSpeedPatch
	{
		internal static float initialClimbSpeed = 4f;

		[HarmonyPatch(typeof(InteractTrigger), "SetUsingLadderOnLocalClient")]
		[HarmonyPostfix]
		private static void SetUsingLadderOnLocalClient_Post(bool isUsing)
		{
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if (!isUsing)
			{
				ResetPlayerClimbSpeed(localPlayerController);
				return;
			}
			initialClimbSpeed = localPlayerController.climbSpeed;
			InputAction movement_Sprint = localPlayerController.playerActions.m_Movement_Sprint;
			movement_Sprint.started += OnPlayerBeginSprint;
			movement_Sprint.canceled += OnPlayerStopSprint;
			SetPlayerClimbSpeed(localPlayerController, localPlayerController.isSprinting);
		}

		[HarmonyPatch(typeof(InteractTrigger), "CancelLadderAnimation")]
		[HarmonyPostfix]
		private static void CancelLadderAnimation_Post()
		{
			ResetPlayerClimbSpeed(GameNetworkManager.Instance.localPlayerController);
		}

		private static void OnPlayerBeginSprint(CallbackContext context)
		{
			SetPlayerClimbSpeed(GameNetworkManager.Instance.localPlayerController, isSprinting: true);
		}

		private static void OnPlayerStopSprint(CallbackContext context)
		{
			SetPlayerClimbSpeed(GameNetworkManager.Instance.localPlayerController, isSprinting: false);
		}

		private static void SetPlayerClimbSpeed(PlayerControllerB player, bool isSprinting)
		{
			player.climbSpeed = initialClimbSpeed * Config.LocalData.climbSpeedMultiplier * (isSprinting ? Config.LocalData.climbSprintSpeedMultiplier : 1f);
		}

		private static void ResetPlayerClimbSpeed(PlayerControllerB player)
		{
			player.climbSpeed = initialClimbSpeed;
			InputAction movement_Sprint = player.playerActions.m_Movement_Sprint;
			movement_Sprint.started -= OnPlayerBeginSprint;
			movement_Sprint.canceled -= OnPlayerStopSprint;
		}
	}
	[HarmonyPatch]
	internal sealed class ExtLadderKillTriggerPatch
	{
		[HarmonyPatch(typeof(ExtensionLadderItem), "StartLadderAnimation")]
		[HarmonyPrefix]
		private static void StartLadderAnimation_Pre(Collider ___killTrigger)
		{
			if ((Object)(object)___killTrigger != (Object)null && Config.LocalData.enableKillTrigger != ((Component)___killTrigger).gameObject.activeInHierarchy)
			{
				((Component)___killTrigger).gameObject.SetActive(Config.LocalData.enableKillTrigger);
			}
		}
	}
	[HarmonyPatch]
	internal sealed class ExtLadderTimerPatch
	{
		[HarmonyPatch(typeof(ExtensionLadderItem), "StartLadderAnimation")]
		[HarmonyPostfix]
		private static void StartLadderAnimation_Post(ref float ___ladderTimer)
		{
			___ladderTimer = ((Config.LocalData.extensionTimer > 0f) ? (20f - Config.LocalData.extensionTimer) : (-2.1474836E+09f));
		}
	}
	[HarmonyPatch]
	internal sealed class HideItemsPatches
	{
		[HarmonyPatch(typeof(InteractTrigger), "SetUsingLadderOnLocalClient")]
		[HarmonyPostfix]
		private static void LadderHeldItemVisibilityPatch(bool isUsing)
		{
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if (localPlayerController.isHoldingObject && (Object)(object)localPlayerController.currentlyHeldObjectServer != (Object)null && ((Config.LocalData.hideOneHanded && !localPlayerController.twoHanded) || (Config.LocalData.allowTwoHanded && Config.LocalData.hideTwoHanded && localPlayerController.twoHanded)))
			{
				localPlayerController.currentlyHeldObjectServer.EnableItemMeshes(!isUsing);
				if ((Object)(object)BetterLaddersNetworker.Instance != (Object)null && ((NetworkBehaviour)BetterLaddersNetworker.Instance).IsSpawned)
				{
					BetterLaddersNetworker.Instance.HideItemServerRpc(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)localPlayerController.currentlyHeldObjectServer), !isUsing);
				}
			}
		}

		[HarmonyPatch(typeof(InteractTrigger), "Start")]
		[HarmonyPostfix]
		private static void LadderStart_Post(InteractTrigger __instance)
		{
			if (__instance.isLadder)
			{
				__instance.hidePlayerItem = Config.LocalData.hideOneHanded && Config.LocalData.hideTwoHanded;
			}
		}

		internal static void RefreshAllLadders(bool hideItem)
		{
			InteractTrigger[] array = Object.FindObjectsByType<InteractTrigger>((FindObjectsInactive)0, (FindObjectsSortMode)0);
			for (int i = 0; i < array.Length; i++)
			{
				if (array[i].isLadder)
				{
					array[i].hidePlayerItem = hideItem;
				}
			}
		}
	}
	[HarmonyPatch]
	internal sealed class NetworkingInitPatches
	{
		[CompilerGenerated]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		private static GameObject? <NetworkerPrefab>k__BackingField;

		public static GameObject? NetworkerPrefab
		{
			get
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_002c: Expected O, but got Unknown
				if ((Object)(object)<NetworkerPrefab>k__BackingField == (Object)null)
				{
					<NetworkerPrefab>k__BackingField = new GameObject("BetterLaddersNetworker")
					{
						hideFlags = (HideFlags)61
					};
					NetworkObject val = <NetworkerPrefab>k__BackingField.AddComponent<NetworkObject>();
					try
					{
						byte[] value = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(Assembly.GetExecutingAssembly().GetName().Name));
						val.GlobalObjectIdHash = BitConverter.ToUInt32(value, 0);
					}
					catch (Exception arg)
					{
						BetterLadders.StaticLogger.LogError((object)$"Could not override default networker hash: {arg}");
					}
					<NetworkerPrefab>k__BackingField.AddComponent<BetterLaddersNetworker>();
				}
				return <NetworkerPrefab>k__BackingField;
			}
			[CompilerGenerated]
			private set
			{
				<NetworkerPrefab>k__BackingField = value;
			}
		}

		[HarmonyPatch(typeof(StartOfRound), "Awake")]
		[HarmonyPrefix]
		private static void StartOfRoundAwake_Pre()
		{
			if (NetworkManager.Singleton.IsHost)
			{
				if ((Object)(object)NetworkerPrefab == (Object)null)
				{
					BetterLadders.StaticLogger.LogWarning((object)"Networker prefab is missing and could not be created; mod won't be able to do anything.");
					return;
				}
				GameObject val = Object.Instantiate<GameObject>(NetworkerPrefab);
				((Object)val).hideFlags = (HideFlags)0;
				val.GetComponent<NetworkObject>().Spawn(true);
			}
		}

		[HarmonyPatch(typeof(GameNetworkManager), "Start")]
		[HarmonyPrefix]
		private static void GameNetworkManagerStart_Pre()
		{
			if ((Object)(object)NetworkerPrefab == (Object)null)
			{
				BetterLadders.StaticLogger.LogWarning((object)"Networker prefab is missing and could not be created; mod won't be able to do anything.");
			}
			else if (!NetworkManager.Singleton.NetworkConfig.Prefabs.Contains(NetworkerPrefab))
			{
				NetworkManager.Singleton.AddNetworkPrefab(NetworkerPrefab);
			}
		}
	}
}
namespace BetterLadders.Networking
{
	public struct BetterLaddersData : INetworkSerializable
	{
		public float climbSpeedMultiplier;

		public float climbSprintSpeedMultiplier;

		public float extensionTimer;

		public bool allowTwoHanded;

		public bool scaleAnimationSpeed;

		public bool hideOneHanded;

		public bool hideTwoHanded;

		public bool enableKillTrigger;

		public BetterLaddersData()
		{
			allowTwoHanded = false;
			scaleAnimationSpeed = false;
			hideOneHanded = false;
			hideTwoHanded = false;
			climbSpeedMultiplier = 1f;
			climbSprintSpeedMultiplier = 1f;
			extensionTimer = 20f;
			enableKillTrigger = true;
		}

		public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: 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)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: 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_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
			((BufferSerializer<float>*)(&serializer))->SerializeValue<float>(ref climbSpeedMultiplier, default(ForPrimitives));
			((BufferSerializer<float>*)(&serializer))->SerializeValue<float>(ref climbSprintSpeedMultiplier, default(ForPrimitives));
			((BufferSerializer<float>*)(&serializer))->SerializeValue<float>(ref extensionTimer, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref allowTwoHanded, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref scaleAnimationSpeed, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref hideOneHanded, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref hideTwoHanded, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref enableKillTrigger, default(ForPrimitives));
		}
	}
	public sealed class BetterLaddersNetworker : NetworkBehaviour
	{
		public static BetterLaddersNetworker? Instance { get; private set; }

		public NetworkVariable<BetterLaddersData> SyncedData { get; private set; } = new NetworkVariable<BetterLaddersData>(default(BetterLaddersData), (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);


		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			Instance = this;
			NetworkVariable<BetterLaddersData> syncedData = SyncedData;
			syncedData.OnValueChanged = (OnValueChangedDelegate<BetterLaddersData>)(object)Delegate.Combine((Delegate?)(object)syncedData.OnValueChanged, (Delegate?)(object)(OnValueChangedDelegate<BetterLaddersData>)delegate(BetterLaddersData previousData, BetterLaddersData newData)
			{
				Config.LocalData = newData;
				if (previousData.allowTwoHanded != newData.allowTwoHanded)
				{
					AllowTwoHandedPatch.RefreshAllLadders(newData.allowTwoHanded);
				}
				if (previousData.hideOneHanded != newData.hideOneHanded || previousData.hideTwoHanded != newData.hideTwoHanded)
				{
					HideItemsPatches.RefreshAllLadders(newData.hideOneHanded && newData.hideTwoHanded);
				}
			});
			RefreshSyncedData();
			Config.LocalData = SyncedData.Value;
		}

		public override void OnNetworkDespawn()
		{
			Instance = null;
			((NetworkBehaviour)this).OnNetworkDespawn();
		}

		public void RefreshSyncedData()
		{
			if (((NetworkBehaviour)this).IsSpawned && ((NetworkBehaviour)this).IsHost)
			{
				SyncedData.Value = new BetterLaddersData
				{
					climbSpeedMultiplier = BetterLadders.Settings.ClimbSpeedMultiplier.Value,
					climbSprintSpeedMultiplier = BetterLadders.Settings.ClimbSprintSpeedMultiplier.Value,
					extensionTimer = BetterLadders.Settings.ExtensionTimer.Value,
					allowTwoHanded = BetterLadders.Settings.AllowTwoHanded.Value,
					scaleAnimationSpeed = BetterLadders.Settings.ScaleAnimationSpeed.Value,
					hideOneHanded = BetterLadders.Settings.HideOneHanded.Value,
					hideTwoHanded = BetterLadders.Settings.HideTwoHanded.Value,
					enableKillTrigger = BetterLadders.Settings.EnableKillTrigger.Value
				};
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void HideItemServerRpc(NetworkBehaviourReference itemReference, bool hide)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2373942706u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref itemReference, default(ForNetworkSerializable));
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref hide, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2373942706u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					HideItemClientRpc(itemReference, hide);
				}
			}
		}

		[ClientRpc]
		public void HideItemClientRpc(NetworkBehaviourReference itemReference, bool hide)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1731537083u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref itemReference, default(ForNetworkSerializable));
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref hide, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1731537083u, val, (RpcDelivery)0);
				}
				GrabbableObject val3 = default(GrabbableObject);
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && ((NetworkBehaviourReference)(ref itemReference)).TryGet<GrabbableObject>(ref val3, (NetworkManager)null) && (Object)(object)val3.playerHeldBy != (Object)null && val3.playerHeldBy.actualClientId != GameNetworkManager.Instance.localPlayerController.actualClientId)
				{
					val3.EnableItemMeshes(hide);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void SetAnimationSpeedServerRpc(NetworkBehaviourReference playerReference, bool stop)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1125511430u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref playerReference, default(ForNetworkSerializable));
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref stop, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1125511430u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					SetAnimationSpeedClientRpc(playerReference, stop);
				}
			}
		}

		[ClientRpc]
		public void SetAnimationSpeedClientRpc(NetworkBehaviourReference playerReference, bool stop)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: 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_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(886953884u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref playerReference, default(ForNetworkSerializable));
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref stop, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 886953884u, val, (RpcDelivery)0);
			}
			PlayerControllerB val3 = default(PlayerControllerB);
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && ((NetworkBehaviourReference)(ref playerReference)).TryGet<PlayerControllerB>(ref val3, (NetworkManager)null) && val3.actualClientId != GameNetworkManager.Instance.localPlayerController.actualClientId)
			{
				((MonoBehaviour)val3).StopCoroutine(AnimationSpeedPatch.ScalePlayerAnimationSpeed(val3));
				if (!stop)
				{
					((MonoBehaviour)val3).StartCoroutine(AnimationSpeedPatch.ScalePlayerAnimationSpeed(val3));
				}
			}
		}

		protected override void __initializeVariables()
		{
			if (SyncedData == null)
			{
				throw new Exception("BetterLaddersNetworker.<SyncedData>k__BackingField cannot be null. All NetworkVariableBase instances must be initialized.");
			}
			((NetworkVariableBase)SyncedData).Initialize((NetworkBehaviour)(object)this);
			((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SyncedData, "SyncedData");
			base.NetworkVariableFields.Add((NetworkVariableBase)(object)SyncedData);
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_BetterLaddersNetworker()
		{
			//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
			NetworkManager.__rpc_func_table.Add(2373942706u, new RpcReceiveHandler(__rpc_handler_2373942706));
			NetworkManager.__rpc_func_table.Add(1731537083u, new RpcReceiveHandler(__rpc_handler_1731537083));
			NetworkManager.__rpc_func_table.Add(1125511430u, new RpcReceiveHandler(__rpc_handler_1125511430));
			NetworkManager.__rpc_func_table.Add(886953884u, new RpcReceiveHandler(__rpc_handler_886953884));
		}

		private static void __rpc_handler_2373942706(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_004a: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkBehaviourReference itemReference = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref itemReference, default(ForNetworkSerializable));
				bool hide = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref hide, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((BetterLaddersNetworker)(object)target).HideItemServerRpc(itemReference, hide);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1731537083(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_004a: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkBehaviourReference itemReference = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref itemReference, default(ForNetworkSerializable));
				bool hide = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref hide, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BetterLaddersNetworker)(object)target).HideItemClientRpc(itemReference, hide);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1125511430(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_004a: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkBehaviourReference playerReference = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref playerReference, default(ForNetworkSerializable));
				bool stop = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref stop, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((BetterLaddersNetworker)(object)target).SetAnimationSpeedServerRpc(playerReference, stop);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_886953884(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_004a: 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_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				NetworkBehaviourReference playerReference = default(NetworkBehaviourReference);
				((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref playerReference, default(ForNetworkSerializable));
				bool stop = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref stop, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((BetterLaddersNetworker)(object)target).SetAnimationSpeedClientRpc(playerReference, stop);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		protected internal override string __getTypeName()
		{
			return "BetterLaddersNetworker";
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace BetterLadders.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}