using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using HarmonyLib; using Il2Cpp; using Il2CppFemur; using Il2CppInterop.Runtime.InteropTypes.Arrays; using MelonLoader; using Microsoft.CodeAnalysis; using SpawnGBShark; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(SpawnGBSharkMod), "SpawnGBShark", "1.0.0", "Zooks", null)] [assembly: MelonGame("Boneloaf", "Gang Beasts")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("SpawnGBSharks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("SpawnGBSharks for GB")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SpawnGBSharks")] [assembly: AssemblyTitle("SpawnGBSharks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SpawnGBShark { public class SpawnGBSharkMod : MelonMod { private GameObject template = null; private bool hasAutoSpawned = false; public static SpawnGBSharkMod Instance { get; private set; } public override void OnInitializeMelon() { Instance = this; ((MelonBase)this).HarmonyInstance.PatchAll(Assembly.GetExecutingAssembly()); MelonLogger.Msg("SpawnGBShark Loaded"); } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { template = null; hasAutoSpawned = false; } public override void OnUpdate() { if (Keyboard.current != null && (((ButtonControl)Keyboard.current.minusKey).wasPressedThisFrame || ((ButtonControl)Keyboard.current.numpadMinusKey).wasPressedThisFrame)) { TriggerSharkSpawn(); } } public void OnNativeSharkDiscovered(GameObject original) { if (!(((Object)original).name == "GB_Shark_Template") && !(((Object)original).name == "Spawned_Shark") && !((Object)(object)template != (Object)null)) { template = Object.Instantiate(original); ((Object)template).name = "GB_Shark_Template"; template.SetActive(false); Object.DontDestroyOnLoad((Object)(object)template); if (!hasAutoSpawned) { hasAutoSpawned = true; AutoSpawnSceneSharks(original); } } } private void AutoSpawnSceneSharks(GameObject original) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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) Vector3 val = default(Vector3); for (int i = 0; i < 2; i++) { ((Vector3)(ref val))..ctor(Random.Range(-6f, 6f), 10f, Random.Range(-6f, 6f)); SpawnAt(original.transform.position + val, original.transform.rotation); } } private Actor DeepFindPlayer() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) Actor val = Object.FindObjectOfType(); if ((Object)(object)val != (Object)null) { return val; } Il2CppArrayBase val2 = Resources.FindObjectsOfTypeAll(); foreach (GameObject item in val2) { Scene scene = item.scene; if (((Scene)(ref scene)).name != null) { Actor component = item.GetComponent(); if ((Object)(object)component != (Object)null) { return component; } } } return null; } private void TriggerSharkSpawn() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)template == (Object)null) { return; } Vector3 val = Vector3.zero; Camera main = Camera.main; if ((Object)(object)main != (Object)null && Mouse.current != null) { Vector2 val2 = ((InputControl)(object)((Pointer)Mouse.current).position).ReadValue(); Ray val3 = main.ScreenPointToRay(new Vector3(val2.x, val2.y, 0f)); RaycastHit val4 = default(RaycastHit); if (Physics.Raycast(val3, ref val4)) { val = ((RaycastHit)(ref val4)).point + Vector3.up * 10f; } } if (val == Vector3.zero) { Actor val5 = DeepFindPlayer(); if ((Object)(object)val5 != (Object)null) { val = ((Component)val5).transform.position + Vector3.up * 12f; } } if (val == Vector3.zero) { ((Vector3)(ref val))..ctor(0f, 18f, 0f); } SpawnAt(val, Quaternion.identity); } private void SpawnAt(Vector3 position, Quaternion rotation) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate(template); ((Object)val).name = "Spawned_Shark"; val.transform.position = position; val.transform.rotation = rotation; SharkActor componentInChildren = val.GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.startDelay = 0; } Il2CppArrayBase componentsInChildren = val.GetComponentsInChildren(); foreach (Rigidbody item in componentsInChildren) { item.isKinematic = false; item.velocity = Vector3.zero; item.angularVelocity = Vector3.zero; item.WakeUp(); } Il2CppArrayBase componentsInChildren2 = val.GetComponentsInChildren(); foreach (SimpleBuoyancy item2 in componentsInChildren2) { ((Behaviour)item2).enabled = true; } Il2CppArrayBase componentsInChildren3 = val.GetComponentsInChildren(); foreach (MonoBehaviour item3 in componentsInChildren3) { ((Behaviour)item3).enabled = true; } val.SetActive(true); SharkActor componentInChildren2 = val.GetComponentInChildren(); if (!((Object)(object)componentInChildren2 != (Object)null)) { return; } componentInChildren2.startDelay = 0; componentInChildren2.minSleepingTime = 0f; componentInChildren2.maxSleepingTime = 0f; componentInChildren2.sleepTime = 0f; componentInChildren2.stateTimer = 0f; componentInChildren2.unconsciousTimer = 0f; componentInChildren2.health = componentInChildren2.maxHealth; componentInChildren2.target = null; componentInChildren2.rigidbodyInMouth = null; componentInChildren2.biteJoint = null; componentInChildren2.useBuoyancy = true; componentInChildren2.currentState = (State)1; componentInChildren2.nextState = (State)1; componentInChildren2.DelayedStart(); bool flag = false; if (componentInChildren2.searchNodes != null && ((Il2CppArrayBase)(object)componentInChildren2.searchNodes).Count > 0) { Transform val2 = ((Il2CppArrayBase)(object)componentInChildren2.searchNodes)[0]; if ((Object)(object)val2 != (Object)null && (Object)(object)((Component)val2).gameObject != (Object)null) { flag = true; } } if (!flag) { componentInChildren2.searchNodes = new Il2CppReferenceArray(0L); componentInChildren2.retreatNodes = new Il2CppReferenceArray(0L); componentInChildren2.diveNodes = new Il2CppReferenceArray(0L); componentInChildren2.breachNodes = new Il2CppReferenceArray(0L); } } } [HarmonyPatch(typeof(SharkActor), "Start")] public static class SharkActorStartPatch { public static void Prefix(SharkActor __instance) { __instance.startDelay = 0; __instance.minSleepingTime = 0f; __instance.maxSleepingTime = 0f; __instance.sleepTime = 0f; if (SpawnGBSharkMod.Instance != null) { SpawnGBSharkMod.Instance.OnNativeSharkDiscovered(((Component)__instance).gameObject); } } } [HarmonyPatch(typeof(SharkActor), "Sleeping")] public static class SharkActorSleepingPatch { public static bool Prefix(SharkActor __instance) { __instance.currentState = (State)1; __instance.nextState = (State)1; return false; } } }