Decompiled source of SlipperyFrog v1.0.1

SlipperyFrog.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("Autodesk.Fbx")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("FbxBuildTestAssets")]
[assembly: IgnoresAccessChecksTo("Klattersynth")]
[assembly: IgnoresAccessChecksTo("Photon3Unity3D")]
[assembly: IgnoresAccessChecksTo("PhotonChat")]
[assembly: IgnoresAccessChecksTo("PhotonRealtime")]
[assembly: IgnoresAccessChecksTo("PhotonUnityNetworking")]
[assembly: IgnoresAccessChecksTo("PhotonUnityNetworking.Utilities")]
[assembly: IgnoresAccessChecksTo("PhotonVoice.API")]
[assembly: IgnoresAccessChecksTo("PhotonVoice")]
[assembly: IgnoresAccessChecksTo("PhotonVoice.PUN")]
[assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime")]
[assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime.Public")]
[assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Attributes")]
[assembly: IgnoresAccessChecksTo("Sirenix.Serialization.Config")]
[assembly: IgnoresAccessChecksTo("Sirenix.Serialization")]
[assembly: IgnoresAccessChecksTo("Sirenix.Utilities")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Formats.Fbx.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Postprocessing.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Antlr3.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Core")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Flow")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.State")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("websocket-sharp")]
[assembly: AssemblyCompany("ModsByUriah")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("R.E.P.O. Slippery Frog mod")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1")]
[assembly: AssemblyProduct("SlipperyFrog")]
[assembly: AssemblyTitle("SlipperyFrog")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
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 MyFirstPlugin
{
	public static class PluginInfo2
	{
		public const string PLUGIN_GUID = "Uriah.SlipperyFrog";

		public const string PLUGIN_NAME = "SlipperyFrog";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace SlipperyFrog
{
	public class Configuration
	{
		private ConfigEntry<int> configJumpInHandChance;

		private ConfigEntry<int> configFrogSlipperiness;

		private ConfigEntry<float> configFrogInvulnTime;

		private ConfigFile pluginConfig;

		public int frogJumpInHandChance { get; private set; } = 33;


		public int frogSlipperiness { get; private set; } = 10;


		public float frogInvulnTime { get; private set; } = 10f;


		public Configuration(ConfigFile config)
		{
			pluginConfig = config;
		}

		public void Bind()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Expected O, but got Unknown
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Expected O, but got Unknown
			configJumpInHandChance = pluginConfig.Bind<int>("General", "JumpInHandChance", 33, new ConfigDescription("(of 100) How ornery is the frog when held?", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			configFrogSlipperiness = pluginConfig.Bind<int>("General", "FrogSlipperiness", 10, new ConfigDescription("(of 100) How slippery is the frog?", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
			configFrogInvulnTime = pluginConfig.Bind<float>("General", "FrogInvulnerabilityTime", 10f, new ConfigDescription("Seconds frog won't take damage if it slips through your fingers.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 20f), Array.Empty<object>()));
			pluginConfig.SettingChanged += Config_SettingChanged;
		}

		private void Config_SettingChanged(object sender, SettingChangedEventArgs e)
		{
			frogJumpInHandChance = configJumpInHandChance.Value;
			frogSlipperiness = configFrogSlipperiness.Value;
			frogInvulnTime = configFrogInvulnTime.Value;
		}
	}
	[HarmonyPatch(typeof(FrogTrap))]
	internal class FrogTrapPatch
	{
		private static double nextCheckTimer;

		[HarmonyPrefix]
		[HarmonyPatch("Update")]
		public static void PreFixUpdate(FrogTrap __instance, PhysGrabObject ___physGrabObject, PhysGrabObjectImpactDetector ___impactDetector)
		{
			PhysGrabObjectImpactDetector ___impactDetector2 = ___impactDetector;
			if ((Object)(object)__instance == (Object)null || (Object)(object)___physGrabObject == (Object)null || !___physGrabObject.grabbed || ___impactDetector2.inCart)
			{
				return;
			}
			if (nextCheckTimer > 0.0)
			{
				nextCheckTimer -= Time.deltaTime;
				return;
			}
			nextCheckTimer = 1.0;
			int num = Random.Range(0, 100);
			if (Random.Range(0, 100) <= Plugin.config.frogJumpInHandChance)
			{
				__instance.FrogJumpRPC();
			}
			if (num > Plugin.config.frogSlipperiness)
			{
				return;
			}
			___physGrabObject.playerGrabbing.ToList().ForEach(delegate(PhysGrabber physGrabber)
			{
				if (physGrabber.photonView.IsMine || physGrabber.isLocal)
				{
					___impactDetector2.ImpactDisable(Plugin.config.frogInvulnTime);
					physGrabber.ReleaseObjectRPC(true, 0.5f);
				}
			});
		}
	}
	[BepInPlugin("SlipperyFrog", "SlipperyFrog", "1.0.1")]
	public class Plugin : BaseUnityPlugin
	{
		public static Plugin PluginInstance;

		public static ManualLogSource LoggerInstance;

		private readonly Harmony harmony = new Harmony("SlipperyFrog");

		public static Configuration config;

		private void Awake()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin SlipperyFrog is loaded!");
			if ((Object)(object)PluginInstance == (Object)null)
			{
				PluginInstance = this;
			}
			LoggerInstance = ((BaseUnityPlugin)this).Logger;
			config = new Configuration(((BaseUnityPlugin)this).Config);
			config.Bind();
			harmony.PatchAll(typeof(FrogTrapPatch));
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "SlipperyFrog";

		public const string PLUGIN_NAME = "SlipperyFrog";

		public const string PLUGIN_VERSION = "1.0.1";
	}
}