Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of PetDatDawg v1.1.0
PetDatDawg.dll
Decompiled 7 months agousing 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.Permissions; using BepInEx; using GlobalEnums; using HutongGames.PlayMaker; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("PetDatDawg")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright © Ruttie 2025")] [assembly: AssemblyFileVersion("1.1.0")] [assembly: AssemblyInformationalVersion("1.1.0+881a35193fbdc41ba1dd266b6ecba2bcefcf6519")] [assembly: AssemblyProduct("PetDatDawg")] [assembly: AssemblyTitle("PetDatDawg")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.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.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 PetDatDawg { public readonly struct Beast { public const string GO_NAME = "Bone Beast NPC"; public const string FSM_NAME = "Interaction"; public const string FSM_STATE_SHAKE = "Wait for Turn"; public const string FSM_STATE_ACTIVATE = "Activate"; public const string FSM_FIELD_WASASLEEP = "Was Asleep"; public const string FSM_FIELD_HASENTEREDRANGE = "Has Entered Range"; public const string FSM_FIELD_THISLOCATION = "This Location"; public readonly GameObject GO; public readonly PlayMakerFSM FSM; public readonly FsmState ActivateState; public readonly FastTravelLocations Location; private Beast(GameObject obj, PlayMakerFSM fsm, FsmState activateState, FastTravelLocations loc) { //IL_000f: 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) GO = obj; FSM = fsm; Location = loc; ActivateState = activateState; } public static Beast? Find(Scene scene) { GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects(); GameObject val = ((IEnumerable<GameObject>)rootGameObjects).FirstOrDefault((Func<GameObject, bool>)((GameObject x) => ((Object)x).name == "Bone Beast NPC")); if (val != null) { return TryCreate(val); } Transform? obj = rootGameObjects.Select((GameObject x) => x.transform.Find("Bone Beast NPC")).FirstOrDefault((Func<Transform, bool>)((Transform x) => (Object)(object)x != (Object)null)); GameObject val2 = ((obj != null) ? ((Component)obj).gameObject : null); if (val2 != null) { return TryCreate(val2); } return null; } public static Beast? TryCreate(GameObject obj) { //IL_007e: 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_00bf: Unknown result type (might be due to invalid IL or missing references) PlayMakerFSM val = ((IEnumerable<PlayMakerFSM>)obj.GetComponents<PlayMakerFSM>()).FirstOrDefault((Func<PlayMakerFSM, bool>)((PlayMakerFSM x) => x.FsmName == "Interaction")); if (val == null) { return null; } if (!HasField(val, "Was Asleep") || !HasField(val, "Has Entered Range") || !HasField(val, "This Location")) { return null; } FastTravelLocations loc = (FastTravelLocations)(object)val.FsmVariables.GetFsmEnum("This Location").Value; FsmState val2 = ((IEnumerable<FsmState>)val.FsmStates).FirstOrDefault((Func<FsmState, bool>)((FsmState x) => x.Name == "Activate")); if (val2 == null) { return null; } return new Beast(obj, val, val2, loc); static bool HasField(PlayMakerFSM fsm, string name) { return Extensions.IsVariableValid(fsm, name, true).GetValueOrDefault(); } } public void Inject() { Beast beast = this; Action<FsmState> prev = FSM.Fsm.StateChanged; bool activated = false; FSM.Fsm.StateChanged = delegate(FsmState state) { if (!activated && state.Name == "Activate") { PetManager.CreateInteract(beast); activated = true; } prev?.Invoke(state); }; } public bool IsAsleep() { if (FSM.FsmVariables.GetFsmBool("Was Asleep").Value) { return !FSM.FsmVariables.GetFsmBool("Has Entered Range").Value; } return false; } public void Rumble() { FSM.SetState("Wait for Turn"); } } [BepInPlugin("petdatdawg", "PetDatDawg", "1.1.0")] public sealed class PetDatDawg : BaseUnityPlugin { private void Awake() { SceneManager.sceneLoaded += SceneLoaded; } private void SceneLoaded(Scene scene, LoadSceneMode mode) { //IL_001a: 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_003c: Unknown result type (might be due to invalid IL or missing references) PlayerData instance = PlayerData.instance; if (instance == null || !instance.UnlockedFastTravel || instance.BellCentipedeLocked) { return; } Beast? beast = Beast.Find(scene); if (beast.HasValue) { Beast valueOrDefault = beast.GetValueOrDefault(); if (instance.FastTravelNPCLocation != valueOrDefault.Location) { valueOrDefault.Inject(); } else { PetManager.CreateInteract(valueOrDefault); } } } private void OnDestroy() { SceneManager.sceneLoaded -= SceneLoaded; } } public sealed class PetManager : InteractableBase { private readonly struct HeroFreeze : IDisposable { private readonly HeroController hc; private readonly HeroAnimationController animator; private readonly WaitForSeconds animWait; public HeroFreeze() { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown hc = HeroController.instance ?? throw new InvalidOperationException("Hero not in scene"); animator = ((Component)hc).gameObject.GetComponent<HeroAnimationController>() ?? throw new InvalidOperationException("Hero has no animator"); hc.RelinquishControl(); animator.PlayClip("Collect Stand 1"); animWait = new WaitForSeconds(animator.GetCurrentClipDuration()); animator.StopControl(); } public WaitForSeconds Wait() { return animWait; } public void Dispose() { hc.RegainControl(true); animator.StartControl(); } } public const string HORNET_PET_ANIM_NAME = "Collect Stand 1"; public const string PET_NPC_GO_NAME = "petGo"; public const float PET_DURATION = 0.4f; public const float INTERACTION_COLLIDER_HEIGHT = 10f; public const float INTERACTION_COLLIDER_WIDTH = 5f; private Beast beast; public override string InteractLabelDisplay => "Accept"; public static PetManager CreateInteract(Beast dawg) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_0077: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("petGo", new Type[2] { typeof(PetManager), typeof(BoxCollider2D) }); val.SetActive(dawg.GO.activeSelf); val.transform.SetParent(dawg.GO.transform); val.transform.localPosition = Vector2.op_Implicit(Vector2.zero); BoxCollider2D component = val.GetComponent<BoxCollider2D>(); component.size = new Vector2(5f, 10f); ((Collider2D)component).isTrigger = true; PetManager component2 = val.GetComponent<PetManager>(); component2.beast = dawg; return component2; } public override void Interact() { ((MonoBehaviour)this).StartCoroutine(HornetPet()); } private IEnumerator HornetPet() { yield return null; if ((Object)(object)beast.GO == (Object)null) { yield break; } using HeroFreeze freeze = new HeroFreeze(); yield return freeze.Wait(); if (!beast.IsAsleep()) { beast.Rumble(); } yield return (object)new WaitForSeconds(0.4f); } } public static class PluginInfo { public const string PLUGIN_GUID = "petdatdawg"; public const string PLUGIN_NAME = "PetDatDawg"; public const string PLUGIN_VERSION = "1.1.0"; } }