using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; 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 Photon.Pun; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.atomic.ohmyfrog")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.1.0.0")] [assembly: AssemblyInformationalVersion("0.1.0")] [assembly: AssemblyProduct("com.atomic.ohmyfrog")] [assembly: AssemblyTitle("Oh_My_Frog")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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] [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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Embedded] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Embedded] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace Microsoft.CodeAnalysis { [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace Oh_My_Frog { [BepInPlugin("com.atomic.ohmyfrog", "Oh_My_Frog", "0.1.0")] public class Plugin : BaseUnityPlugin { public static ConfigEntry GlobalLickCooldown; public static ConfigEntry PerFrogLickCooldown; public static ConfigEntry FrogsPerPerson; public static ConfigEntry TimeBetweenSpawns; public const string Id = "com.atomic.ohmyfrog"; internal static ManualLogSource Log { get; private set; } private static Harmony harmony { get; set; } public static string Name => "Oh_My_Frog"; public static string Version => "0.1.0"; private void Awake() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Expected O, but got Unknown //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Expected O, but got Unknown //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Expected O, but got Unknown //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)("Plugin " + Name + " is loaded!")); harmony = new Harmony("com.atomic.ohmyfrog"); harmony.PatchAll(); GlobalLickCooldown = ((BaseUnityPlugin)this).Config.Bind("Frogs", "Global Lick Cooldown", 3f, new ConfigDescription("How long all frogs must wait once someone has been licked.", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 30f), Array.Empty())); PerFrogLickCooldown = ((BaseUnityPlugin)this).Config.Bind("Frogs", "Per Frog Lick Cooldown", 1f, new ConfigDescription("How long a single frog must wait once someone has been licked.", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 30f), Array.Empty())); FrogsPerPerson = ((BaseUnityPlugin)this).Config.Bind("Frogs", "Frogs Per Person", 5, new ConfigDescription("How many frogs will spawn on each person.", (AcceptableValueBase)(object)new AcceptableValueRange(1, 15), Array.Empty())); TimeBetweenSpawns = ((BaseUnityPlugin)this).Config.Bind("Frogs", "Time Between Spawns (seconds)", 20, new ConfigDescription("Frogs will spawn every X seconds.", (AcceptableValueBase)(object)new AcceptableValueRange(15, 600), Array.Empty())); GameObject val = new GameObject("OhMyFrogManager"); ((Object)val).hideFlags = (HideFlags)61; val.AddComponent(); } } [HarmonyPatch] public static class Frog_Patches { [HarmonyPostfix] [HarmonyPatch(typeof(RunManager), "StartRun")] public static void StartRun(RunManager __instance) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name.ToLower().Contains("level_")) { OhMyFrogManager.Instance.StartRun(); } else { OhMyFrogManager.Instance.StopRun(); } } [HarmonyPostfix] [HarmonyPatch(typeof(FrogTongue), "OnEnable")] public static void Reconfigure(FrogTongue __instance) { if (PhotonNetwork.IsMasterClient) { __instance.jumpUpwardForce *= 1.5f; __instance.jumpForwardForce *= 3f; ((Mob)__instance).inRangeForAttackTime = ((Mob)__instance).inRangeForAttackTime / 10f; ((Mob)__instance).attackCooldown = ((Mob)__instance).attackCooldown / 10f; ((Mob)__instance).movementSpeed = ((Mob)__instance).movementSpeed * 100f; ((Mob)__instance).attackTime = ((Mob)__instance).attackTime * 1.5f; __instance.curRange *= 3f; __instance.liftDragForce *= 50f; __instance.floatDrag *= 5f; __instance.extraDragLetGo *= 3f; __instance.globalFrogCooldown = Plugin.GlobalLickCooldown.Value; __instance.lickCooldown = Plugin.PerFrogLickCooldown.Value; } } } public enum FormationType { Square, Circle, Star, Triangle } public class OhMyFrogManager : MonoBehaviour { public TimeSpan CooldownDuration = TimeSpan.FromSeconds(20.0); private DateTime CooldownEndTime = DateTime.MinValue; public int NumberOfFrogs = 5; public float BaseSpacing = 1.5f; public float DelayBetweenSpawns = 0.01f; public static OhMyFrogManager Instance { get; private set; } public bool IsRunning { get; private set; } private void Start() { if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); } else { Instance = this; } } public void StartRun() { IsRunning = true; CooldownEndTime = DateTime.Now; } public void StopRun() { if (IsRunning) { IsRunning = false; } } private void Update() { if (!PhotonNetwork.IsMasterClient || !IsRunning || DateTime.Now < CooldownEndTime) { return; } CooldownEndTime = DateTime.Now + CooldownDuration; NumberOfFrogs = Plugin.FrogsPerPerson.Value; CooldownDuration = TimeSpan.FromSeconds(Plugin.TimeBetweenSpawns.Value); List allPlayerCharacters = PlayerHandler.GetAllPlayerCharacters(); if (allPlayerCharacters == null) { return; } foreach (Character item in allPlayerCharacters) { if (!((Object)(object)item == (Object)null)) { ((MonoBehaviour)this).StartCoroutine(SpawnFormationRoutine(item)); } } } private IEnumerator SpawnFormationRoutine(Character character) { Vector3 centerPosition = character.LastLivingPosition + new Vector3(0f, 10f, 0f); Quaternion rotation = ((Component)character.refs.rigCreator).transform.rotation; Random random = new Random(); int formation = random.Next(1, 4); Vector3[] offsets = GetFormationOffsets((FormationType)formation, NumberOfFrogs, BaseSpacing); for (int i = 0; i < offsets.Length; i++) { Vector3 position = centerPosition + rotation * offsets[i]; SpawnFrog(position, rotation); if (DelayBetweenSpawns > 0f) { yield return (object)new WaitForSeconds(DelayBetweenSpawns); } } } public void SpawnFrog(Vector3 position, Quaternion rotation) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) PhotonNetwork.Instantiate("0_Items/Frog", position, rotation, (byte)0, (object[])null); } private Vector3[] GetFormationOffsets(FormationType formation, int count, float spacing) { Vector3[] array = (Vector3[])(object)new Vector3[count]; if (count <= 0) { return array; } float num = spacing * Mathf.Sqrt((float)count / 10f); num = Mathf.Max(spacing, num); switch (formation) { case FormationType.Circle: Circle(array, count, num); break; case FormationType.Square: Square(array, count, num); break; case FormationType.Triangle: Triangle(array, count, num); break; case FormationType.Star: Star(array, count, num); break; } return array; } private void Circle(Vector3[] offsets, int count, float scale) { //IL_003a: 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) float num = (float)count * scale / (MathF.PI * 2f); float num2 = 360f / (float)count; for (int i = 0; i < count; i++) { float num3 = (float)i * num2 * (MathF.PI / 180f); offsets[i] = new Vector3(Mathf.Cos(num3) * num, 0f, Mathf.Sin(num3) * num); } } private void Square(Vector3[] offsets, int count, float scale) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) int num = Mathf.CeilToInt(Mathf.Sqrt((float)count)); float num2 = (float)(num - 1) * scale * 0.5f; for (int i = 0; i < count; i++) { int num3 = i / num; int num4 = i % num; float num5 = (float)num4 * scale - num2; float num6 = (float)num3 * scale - num2; offsets[i] = new Vector3(num5, 0f, num6); } } private void Triangle(Vector3[] offsets, int count, float scale) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) int num = 0; int num2 = 1; int num3 = 0; while (num3 < count) { float num4 = (float)(num2 - 1) * scale; float num5 = (0f - num4) * 0.5f; for (int i = 0; i < num2; i++) { if (num3 >= count) { break; } float num6 = num5 + (float)i * scale; float num7 = (float)(-num) * scale; offsets[num3++] = new Vector3(num6, 0f, num7); } num++; num2++; } } private void Star(Vector3[] offsets, int count, float scale) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) int num = 5; float num2 = (float)count * scale / 3f; float num3 = num2 * 0.4f; for (int i = 0; i < count; i++) { float num4 = (float)i / (float)count; float num5 = num4 * MathF.PI * 2f; float num6 = Mathf.Sin(num5 * (float)num * 0.5f); float num7 = Mathf.Lerp(num3, num2, Mathf.Abs(num6)); offsets[i] = new Vector3(Mathf.Cos(num5) * num7, 0f, Mathf.Sin(num5) * num7); } } } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ConstantExpectedAttribute : Attribute { public object? Min { get; set; } public object? Max { get; set; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ExperimentalAttribute : Attribute { public string DiagnosticId { get; } public string? UrlFormat { get; set; } public ExperimentalAttribute(string diagnosticId) { DiagnosticId = diagnosticId; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SetsRequiredMembersAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class StringSyntaxAttribute : Attribute { public const string CompositeFormat = "CompositeFormat"; public const string DateOnlyFormat = "DateOnlyFormat"; public const string DateTimeFormat = "DateTimeFormat"; public const string EnumFormat = "EnumFormat"; public const string GuidFormat = "GuidFormat"; public const string Json = "Json"; public const string NumericFormat = "NumericFormat"; public const string Regex = "Regex"; public const string TimeOnlyFormat = "TimeOnlyFormat"; public const string TimeSpanFormat = "TimeSpanFormat"; public const string Uri = "Uri"; public const string Xml = "Xml"; public string Syntax { get; } public object?[] Arguments { get; } public StringSyntaxAttribute(string syntax) { Syntax = syntax; Arguments = new object[0]; } public StringSyntaxAttribute(string syntax, params object?[] arguments) { Syntax = syntax; Arguments = arguments; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class UnscopedRefAttribute : Attribute { } } namespace System.Runtime.Versioning { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiresPreviewFeaturesAttribute : Attribute { public string? Message { get; } public string? Url { get; set; } public RequiresPreviewFeaturesAttribute() { } public RequiresPreviewFeaturesAttribute(string? message) { Message = message; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CallerArgumentExpressionAttribute : Attribute { public string ParameterName { get; } public CallerArgumentExpressionAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CollectionBuilderAttribute : Attribute { public Type BuilderType { get; } public string MethodName { get; } public CollectionBuilderAttribute(Type builderType, string methodName) { BuilderType = builderType; MethodName = methodName; } } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CompilerFeatureRequiredAttribute : Attribute { public const string RefStructs = "RefStructs"; public const string RequiredMembers = "RequiredMembers"; public string FeatureName { get; } public bool IsOptional { get; set; } public CompilerFeatureRequiredAttribute(string featureName) { FeatureName = featureName; } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute { public string[] Arguments { get; } public InterpolatedStringHandlerArgumentAttribute(string argument) { Arguments = new string[1] { argument }; } public InterpolatedStringHandlerArgumentAttribute(params string[] arguments) { Arguments = arguments; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerAttribute : Attribute { } [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal static class IsExternalInit { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ModuleInitializerAttribute : Attribute { } [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class OverloadResolutionPriorityAttribute : Attribute { public int Priority { get; } public OverloadResolutionPriorityAttribute(int priority) { Priority = priority; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)] [ExcludeFromCodeCoverage] internal sealed class ParamCollectionAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiredMemberAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal sealed class RequiresLocationAttribute : Attribute { } [AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SkipLocalsInitAttribute : Attribute { } }