Decompiled source of ThumbnailCinematicPack v1.0.0
mods/com.github.chrispavs.BetterRagdoll2.dll
Decompiled 5 months agousing System; using System.Diagnostics; 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 Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; using UnityEngine.InputSystem; [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.github.chrispavs.BetterRagdoll2")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyInformationalVersion("1.0.1+28715304957ade6c75933dac4ea6e47f28121c7f")] [assembly: AssemblyProduct("com.github.chrispavs.BetterRagdoll2")] [assembly: AssemblyTitle("BetterRagdoll2")] [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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] 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")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BetterRagdoll2 { [BepInPlugin("com.github.chrispavs.BetterRagdoll2", "BetterRagdoll2", "1.0.1")] public class Plugin : BaseUnityPlugin { private ConfigEntry<float>? forceConfig; public const string Id = "com.github.chrispavs.BetterRagdoll2"; internal static ManualLogSource Log { get; private set; } public static string Name => "BetterRagdoll2"; public static string Version => "1.0.1"; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)("Plugin " + Name + " is loaded!")); forceConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Settings", "Ragdoll Force", 322f, "Force applied to the character when triggering ragdoll."); } private void Update() { //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Character.localCharacter == (Object)null || !Application.isFocused || forceConfig == null) { return; } if (Input.GetKeyDown((KeyCode)289)) { ConfigEntry<float>? obj = forceConfig; obj.Value -= 10f; Debug.Log((object)$"Force decreased to {forceConfig.Value}"); } if (Input.GetKeyDown((KeyCode)290)) { ConfigEntry<float>? obj2 = forceConfig; obj2.Value += 10f; Debug.Log((object)$"Force increased to {forceConfig.Value}"); } if (!Input.GetKeyDown((KeyCode)120) && (Gamepad.current == null || !Gamepad.current.leftShoulder.wasPressedThisFrame)) { return; } Character localCharacter = Character.localCharacter; if (localCharacter.data.fallSeconds > 0f) { Debug.Log((object)"Already in ragdoll – skipping."); return; } Debug.Log((object)"Ragdoll Key pressed"); ((MonoBehaviourPun)localCharacter).photonView.RPC("RPCA_Fall", (RpcTarget)0, new object[1] { 0.5f }); Vector3 avarageVelocity = localCharacter.data.avarageVelocity; if (((Vector3)(ref avarageVelocity)).magnitude < 0.1f) { Debug.Log((object)"Movement too small, no force applied."); return; } Vector3 val = ((Vector3)(ref avarageVelocity)).normalized * forceConfig.Value; localCharacter.AddForce(val, 1f, 1f); Debug.Log((object)$"Force applied: {val}"); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
mods/com.github.megalon.peakcinema.dll
Decompiled 5 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; 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; using UnityEngine.InputSystem; [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.github.megalon.peakcinema")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.3.2.0")] [assembly: AssemblyInformationalVersion("0.3.2+457d01ee296d440060b705e16f2198faf0130a4b")] [assembly: AssemblyProduct("com.github.megalon.peakcinema")] [assembly: AssemblyTitle("PeakCinema")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.3.2.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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] 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")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace PeakCinema { [BepInPlugin("com.github.megalon.peakcinema", "PeakCinema", "0.3.2")] public class Plugin : BaseUnityPlugin { public class PluginModConfig { public readonly ConfigEntry<KeyCode> toggleCinemaCamControlKey; public readonly ConfigEntry<KeyCode> exitCinemaCamKey; public readonly ConfigEntry<KeyCode> keyMoveForward; public readonly ConfigEntry<KeyCode> keyMoveBackward; public readonly ConfigEntry<KeyCode> keyMoveLeft; public readonly ConfigEntry<KeyCode> keyMoveRight; public readonly ConfigEntry<KeyCode> keyMoveUp; public readonly ConfigEntry<KeyCode> keyMoveDown; public readonly ConfigEntry<KeyCode> keyMoveFaster; public readonly ConfigEntry<KeyCode> keySmoothToggle; public PluginModConfig(ConfigFile config) { toggleCinemaCamControlKey = config.Bind<KeyCode>("Keybinds", "Toggle Cinema Cam Control", (KeyCode)284, ""); exitCinemaCamKey = config.Bind<KeyCode>("Keybinds", "Exit Cinema Cam", (KeyCode)27, ""); keyMoveForward = config.Bind<KeyCode>("Keybinds", "Move Forward", (KeyCode)119, ""); keyMoveBackward = config.Bind<KeyCode>("Keybinds", "Move Backward", (KeyCode)115, ""); keyMoveLeft = config.Bind<KeyCode>("Keybinds", "Move Left", (KeyCode)97, ""); keyMoveRight = config.Bind<KeyCode>("Keybinds", "Move Right", (KeyCode)100, ""); keyMoveUp = config.Bind<KeyCode>("Keybinds", "Move Up", (KeyCode)32, ""); keyMoveDown = config.Bind<KeyCode>("Keybinds", "Move Down", (KeyCode)306, ""); keyMoveFaster = config.Bind<KeyCode>("Keybinds", "Move Faster", (KeyCode)304, ""); keySmoothToggle = config.Bind<KeyCode>("Keybinds", "Toggle Camera Smoothing", (KeyCode)301, ""); } } internal static GameObject HUD = null; internal static List<VoiceObscuranceFilter> VoiceFilters = new List<VoiceObscuranceFilter>(); public const string Id = "com.github.megalon.peakcinema"; internal static ManualLogSource Log { get; private set; } = null; internal static PluginModConfig ModConfig { get; private set; } = null; internal static bool CinemaCamActive { get; private set; } internal static Transform? CamTransform { get; private set; } internal static bool CameraWasSpawned { get; private set; } internal static bool Smoothing { get; private set; } = true; internal static float HoldTimer { get; private set; } internal static float InitHoldTimer { get; private set; } = 3f; internal static Vector3 DeathLocation { get; private set; } public static string Name => "PeakCinema"; public static string Version => "0.3.2"; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)("Plugin " + Name + " is loaded!")); Harmony.CreateAndPatchAll(typeof(Plugin), (string)null); ModConfig = new PluginModConfig(((BaseUnityPlugin)this).Config); HoldTimer = InitHoldTimer; } [HarmonyPatch(typeof(VoiceObscuranceFilter), "Start")] [HarmonyPostfix] private static void VoiceObscuranceFilter_Start(VoiceObscuranceFilter __instance) { if (CinemaCamActive) { SetVoiceFilterToCinemaCam(__instance); } VoiceFilters.Add(__instance); } [HarmonyPatch(typeof(CinemaCamera), "Start")] [HarmonyPostfix] private static void CinemaCamera_Start(CinemaCamera __instance) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) CamTransform = __instance.cam; CameraWasSpawned = false; HoldTimer = InitHoldTimer; DeathLocation = Vector3.zero; } [HarmonyPatch(typeof(CinemaCamera), "Update")] [HarmonyPrefix] private static bool CinemaCameraFix(CinemaCamera __instance) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_040f: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04f2: Unknown result type (might be due to invalid IL or missing references) //IL_0502: Unknown result type (might be due to invalid IL or missing references) //IL_051e: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_0549: Unknown result type (might be due to invalid IL or missing references) //IL_0559: Unknown result type (might be due to invalid IL or missing references) //IL_056f: Unknown result type (might be due to invalid IL or missing references) //IL_057f: Unknown result type (might be due to invalid IL or missing references) //IL_0595: Unknown result type (might be due to invalid IL or missing references) //IL_05a5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)HUD == (Object)null) { HUD = GameObject.Find("Canvas_HUD"); } if (Input.GetKeyDown(ModConfig.exitCinemaCamKey.Value)) { CinemaCamActive = false; __instance.on = false; GameObject hUD = HUD; if (hUD != null) { hUD.SetActive(true); } ((Component)__instance.cam).gameObject.SetActive(false); if ((Object)(object)__instance.fog != (Object)null) { ((Component)__instance.fog).gameObject.SetActive(true); } if ((Object)(object)__instance.oldCam != (Object)null) { ((Component)__instance.oldCam).gameObject.SetActive(true); } foreach (VoiceObscuranceFilter voiceFilter in VoiceFilters) { if (!((Object)(object)voiceFilter == (Object)null)) { voiceFilter.head = ((Component)MainCamera.instance).transform; } } } else if (Input.GetKey(ModConfig.toggleCinemaCamControlKey.Value)) { HoldTimer -= Time.deltaTime; if (HoldTimer <= 0f) { MoveCameraToPlayerPosition(__instance); if (!__instance.on) { __instance.on = true; } HoldTimer = -1f; } } else if (Input.GetKeyUp(ModConfig.toggleCinemaCamControlKey.Value)) { if (!CinemaCamActive) { CinemaCamActive = true; HandleVoiceFilters(); } if (HoldTimer > -1f) { __instance.on = !__instance.on; } HoldTimer = InitHoldTimer; } if (__instance.on) { InputSystem.actions.Disable(); GameObject hUD2 = HUD; if (hUD2 != null) { hUD2.SetActive(false); } __instance.ambience.parent = ((Component)__instance).transform; if (Object.op_Implicit((Object)(object)__instance.fog)) { ((Component)__instance.fog).gameObject.SetActive(false); } if (Object.op_Implicit((Object)(object)__instance.oldCam)) { ((Component)__instance.oldCam).gameObject.SetActive(false); } ((Component)__instance).transform.parent = null; __instance.cam.parent = null; if (!CameraWasSpawned) { MoveCameraToPlayerPosition(__instance); } ((Component)__instance.cam).gameObject.SetActive(true); if (Input.GetKeyDown(ModConfig.keySmoothToggle.Value)) { Smoothing = !Smoothing; } float num = 0f; if (Smoothing) { __instance.vel = Vector3.Lerp(__instance.vel, Vector3.zero, 1f * Time.deltaTime); __instance.rot = Vector3.Lerp(__instance.rot, Vector3.zero, 2.5f * Time.deltaTime); num = (Input.GetKey(ModConfig.keyMoveFaster.Value) ? 0.2f : 0.05f); __instance.rot.y += Input.GetAxis("Mouse X") * num * 0.05f; __instance.rot.x += Input.GetAxis("Mouse Y") * num * 0.05f; } else { __instance.vel = Vector3.zero; __instance.rot = Vector3.zero; num = (Input.GetKey(ModConfig.keyMoveFaster.Value) ? 10f : 5f); __instance.rot.y += Input.GetAxis("Mouse X") * num * 0.1f; __instance.rot.x += Input.GetAxis("Mouse Y") * num * 0.1f; } float num2 = num * Time.deltaTime; if (Input.GetKey(ModConfig.keyMoveRight.Value)) { __instance.vel.x = (Smoothing ? (__instance.vel.x + num2) : num2); } if (Input.GetKey(ModConfig.keyMoveLeft.Value)) { __instance.vel.x = (Smoothing ? (__instance.vel.x - num2) : (0f - num2)); } if (Input.GetKey(ModConfig.keyMoveForward.Value)) { __instance.vel.z = (Smoothing ? (__instance.vel.z + num2) : num2); } if (Input.GetKey(ModConfig.keyMoveBackward.Value)) { __instance.vel.z = (Smoothing ? (__instance.vel.z - num2) : (0f - num2)); } if (Input.GetKey(ModConfig.keyMoveUp.Value)) { __instance.vel.y = (Smoothing ? (__instance.vel.y + num2) : num2); } if (Input.GetKey(ModConfig.keyMoveDown.Value)) { __instance.vel.y = (Smoothing ? (__instance.vel.y - num2) : (0f - num2)); } ((Component)__instance.cam).transform.Rotate(Vector3.up * __instance.rot.y, (Space)0); ((Component)__instance.cam).transform.Rotate(((Component)__instance).transform.right * (0f - __instance.rot.x)); ((Component)__instance.cam).transform.Translate(Vector3.right * __instance.vel.x, (Space)1); ((Component)__instance.cam).transform.Translate(Vector3.forward * __instance.vel.z, (Space)1); ((Component)__instance.cam).transform.Translate(Vector3.up * __instance.vel.y, (Space)0); __instance.t = true; CameraWasSpawned = true; } else { InputSystem.actions.Enable(); } return false; } private static void MoveCameraToPlayerPosition(CinemaCamera __instance) { //IL_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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) Character val = Character.AllCharacters.First((Character c) => c.IsLocal); if ((Object)(object)val != (Object)null) { if (val.data.dead) { ((Component)__instance.cam).transform.position = DeathLocation; } else { ((Component)__instance.cam).transform.position = val.refs.animationPositionTransform.position; } Transform transform = ((Component)__instance.cam).transform; transform.position += new Vector3(0f, 1.5f, -2f); } } private static void HandleVoiceFilters() { for (int num = VoiceFilters.Count - 1; num >= 0; num--) { VoiceObscuranceFilter val = VoiceFilters[num]; if ((Object)(object)val == (Object)null) { VoiceFilters.RemoveAt(num); } } foreach (VoiceObscuranceFilter voiceFilter in VoiceFilters) { if (!((Object)(object)voiceFilter == (Object)null)) { SetVoiceFilterToCinemaCam(voiceFilter); } } Log.LogInfo((object)$"Adjusted {VoiceFilters.Count} voice filters!"); } private static void SetVoiceFilterToCinemaCam(VoiceObscuranceFilter filter) { if (!((Object)(object)CamTransform == (Object)null) && !((Object)(object)filter == (Object)null)) { filter.head = CamTransform; } } [HarmonyPatch(typeof(AmbienceAudio), "FixedUpdate")] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Expected O, but got Unknown //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown List<CodeInstruction> list = new List<CodeInstruction>(instructions); MethodInfo methodInfo = AccessTools.Method(typeof(Component), "GetComponent", (Type[])null, (Type[])null).MakeGenericMethod(typeof(CharacterData)); for (int i = 0; i < list.Count - 4; i++) { if (list[i].opcode == OpCodes.Ldarg_0 && CodeInstructionExtensions.Calls(list[i + 1], AccessTools.PropertyGetter(typeof(Component), "transform")) && CodeInstructionExtensions.Calls(list[i + 2], AccessTools.PropertyGetter(typeof(Transform), "root")) && CodeInstructionExtensions.Calls(list[i + 3], methodInfo) && list[i + 4].opcode == OpCodes.Stloc_0) { list.RemoveRange(i, 5); list.InsertRange(i, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldsfld, (object)AccessTools.Field(typeof(Character), "localCharacter")), new CodeInstruction(OpCodes.Ldfld, (object)AccessTools.Field(typeof(Character), "data")), new CodeInstruction(OpCodes.Stloc_0, (object)null) })); break; } } return list; } [HarmonyPatch(typeof(Character), "RPCA_Die")] [HarmonyPrefix] private static bool Character_RPCA_Die(Character __instance) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (!__instance.IsLocal) { return true; } DeathLocation = __instance.refs.animationPositionTransform.position; return true; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } [CompilerGenerated] internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }
mods/com.github.PEAKModding.PEAKLib.Core.dll
Decompiled 5 months agousing System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; 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.Bootstrap; using BepInEx.Logging; using Microsoft.CodeAnalysis; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using MonoDetour.Reflection.Unspeakable; using MonoMod.Utils; using On.GameHandler; using On.LoadingScreenHandler; using PEAKLib.Core.Extensions; using PEAKLib.Core.UnityEditor; using Photon.Pun; using Photon.Realtime; using TMPro; using UnityEngine; using Zorro.Core; [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("PEAKModding, Hamunii, Boxofbiscuits97")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Core module of the PEAKLib community API for the game PEAK.")] [assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyInformationalVersion("1.2.0+e6bed058b9a578ac961d3a9b39267b30fb94048e")] [assembly: AssemblyProduct("com.github.PEAKModding.PEAKLib.Core")] [assembly: AssemblyTitle("PEAKLib.Core")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.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 On.LoadingScreenHandler { internal static class Awake { public delegate void PrefixSignature(LoadingScreenHandler self); public delegate ReturnFlow ControlFlowPrefixSignature(LoadingScreenHandler self); public delegate void PostfixSignature(LoadingScreenHandler self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ControlFlowPrefix(ControlFlowPrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(LoadingScreenHandler); MethodInfo method = typeFromHandle.GetMethod("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("LoadingScreenHandler", "Awake"); } return method; } } internal static class LoadSceneProcess { public delegate void PrefixSignature(LoadingScreenHandler self, ref string sceneName, ref bool networked, ref bool yieldForCharacterSpawn, ref float extraYieldTimeOnEnd); public delegate ReturnFlow ControlFlowPrefixSignature(LoadingScreenHandler self, ref string sceneName, ref bool networked, ref bool yieldForCharacterSpawn, ref float extraYieldTimeOnEnd, ref IEnumerator returnValue); public delegate void PostfixSignature(LoadingScreenHandler self, ref string sceneName, ref bool networked, ref bool yieldForCharacterSpawn, ref float extraYieldTimeOnEnd, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, LoadingScreenHandler> self); public delegate ReturnFlow ControlFlowPrefixMoveNextSignature(SpeakableEnumerator<object, LoadingScreenHandler> self, ref bool continueEnumeration); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, LoadingScreenHandler> self, ref bool continueEnumeration); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ControlFlowPrefix(ControlFlowPrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MonoDetourHook PrefixMoveNext(PrefixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>((MethodBase)StateMachineTarget(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ControlFlowPrefixMoveNext(ControlFlowPrefixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>((MethodBase)StateMachineTarget(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook PostfixMoveNext(PostfixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>((MethodBase)StateMachineTarget(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHookMoveNext(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook((MethodBase)StateMachineTarget(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(LoadingScreenHandler); MethodInfo method = typeFromHandle.GetMethod("LoadSceneProcess", (BindingFlags)(-1), null, new Type[4] { typeof(string), typeof(bool), typeof(bool), typeof(float) }, null); if ((object)method == null) { throw new MissingMethodException("LoadingScreenHandler", "LoadSceneProcess"); } return method; } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } internal static class get_loading { } internal static class set_loading { } internal static class GetLoadingScreenPrefab { } internal static class Load { } internal static class LoadingRoutine { } internal static class LoadSceneProcessNetworked { } internal static class LoadSceneProcessOffline { } internal static class _ctor { } internal static class _LoadSceneProcess_d__11 { internal static class _ctor { } internal static class System_IDisposable_Dispose { } internal static class MoveNext { } internal static class System_Collections_Generic_IEnumerator_System_Object__get_Current { } internal static class System_Collections_IEnumerator_Reset { } internal static class System_Collections_IEnumerator_get_Current { } } internal static class _LoadSceneProcessNetworked_d__12 { internal static class _ctor { } internal static class System_IDisposable_Dispose { } internal static class MoveNext { } internal static class System_Collections_Generic_IEnumerator_System_Object__get_Current { } internal static class System_Collections_IEnumerator_Reset { } internal static class System_Collections_IEnumerator_get_Current { } } internal static class _LoadSceneProcessOffline_d__13 { internal static class _ctor { } internal static class System_IDisposable_Dispose { } internal static class MoveNext { } internal static class System_Collections_Generic_IEnumerator_System_Object__get_Current { } internal static class System_Collections_IEnumerator_Reset { } internal static class System_Collections_IEnumerator_get_Current { } } internal static class _LoadingRoutine_d__10 { internal static class _ctor { } internal static class System_IDisposable_Dispose { } internal static class MoveNext { } internal static class System_Collections_Generic_IEnumerator_System_Object__get_Current { } internal static class System_Collections_IEnumerator_Reset { } internal static class System_Collections_IEnumerator_get_Current { } } } namespace On.GameHandler { internal static class Awake { public delegate void PrefixSignature(GameHandler self); public delegate void PostfixSignature(GameHandler self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(GameHandler); MethodInfo method = typeFromHandle.GetMethod("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("GameHandler", "Awake"); } return method; } } internal static class Initialize { public delegate void PrefixSignature(GameHandler self); public delegate void PostfixSignature(GameHandler self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(GameHandler); MethodInfo method = typeFromHandle.GetMethod("Initialize", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("GameHandler", "Initialize"); } return method; } } internal static class get_Instance { } internal static class get_SettingsHandler { } internal static class set_SettingsHandler { } internal static class get_Initialized { } internal static class OnDestroy { } internal static class WaitForInitialization { } internal static class ClearAllStatuses { } internal static class Update { } internal static class _ctor { } internal static class __c { internal static class _ctor { } } internal static class __c__DisplayClass14_0 { internal static class _ctor { } } internal static class _Awake_d__14 { internal static class _ctor { } internal static class MoveNext { } internal static class SetStateMachine { } } internal static class _WaitForInitialization_d__17 { internal static class _ctor { } internal static class MoveNext { } internal static class SetStateMachine { } } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public bool DistinguishOverloadsByName { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] 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")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace PEAKLib.Core { public static class BundleLoader { private class LoadOperation { public enum State { LoadingBundle, LoadingContent } public string Path { get; } public DateTime StartTime { get; } = DateTime.Now; public State CurrentState { get; set; } public bool LoadContents { get; } public ModDefinition? ModDefinition { get; } public Action<PeakBundle>? OnBundleLoaded { get; } public AssetBundleCreateRequest BundleRequest { get; } public TimeSpan ElapsedTime => DateTime.Now - StartTime; public string FileName => System.IO.Path.GetFileNameWithoutExtension(Path); internal LoadOperation(string path, Action<PeakBundle>? onBundleLoaded = null, bool loadContents = true, ModDefinition? modDefinition = null) { Path = path; OnBundleLoaded = onBundleLoaded; LoadContents = loadContents; ModDefinition = modDefinition; BundleRequest = AssetBundle.LoadFromFileAsync(path); ((AsyncOperation)BundleRequest).completed += OnLoaded; } private void OnLoaded(AsyncOperation operation) { ((MonoBehaviour)CorePlugin.Instance).StartCoroutine(FinishLoadOperation(this)); } private static IEnumerator FinishLoadOperation(LoadOperation operation) { LoadOperation operation2 = operation; AssetBundle bundle = operation2.BundleRequest.assetBundle; if ((Object)(object)bundle == (Object)null) { CorePlugin.Log.LogError((object)("Failed to load bundle " + operation2.FileName + "!")); Finish(); yield break; } operation2.CurrentState = State.LoadingContent; AssetBundleRequest assetRequest = bundle.LoadAllAssetsAsync<ScriptableObject>(); yield return assetRequest; Object[] allAssets = assetRequest.allAssets; List<ModDefinition> list; try { list = (from x in allAssets.OfType<UnityModDefinition>() select x.Resolve()).ToList(); } catch (Exception arg) { CorePlugin.Log.LogError((object)$"Failed to Resolve ModDefinition: {arg}"); Finish(); yield break; } ModDefinition modDefinition = operation2.ModDefinition; if (modDefinition != null) { list.Add(modDefinition); } int count = list.Count; if (count <= 1) { if (count == 0) { CorePlugin.Log.LogError((object)("Bundle " + operation2.FileName + " contains no mods!")); Finish(); yield break; } ModDefinition modDefinition2 = list[0]; IEnumerable<IContent> enumerable = allAssets.OfType<IContent>(); foreach (IContent item in enumerable) { modDefinition2.Content.Add(item); } if (operation2.LoadContents) { foreach (IContent item2 in enumerable) { try { modDefinition2.Register(item2); } catch (Exception ex) { try { CorePlugin.Log.LogError((object)$"Failed to register '{item2.Name}' ({item2.GetType().Name}) from bundle '{operation2.FileName}' ({modDefinition2.Id}): {ex}"); } catch (Exception arg2) { CorePlugin.Log.LogError((object)$"Failed to print error message. This should NOT throw. {arg2}"); } } } } PeakBundle t = new PeakBundle(bundle, modDefinition2); operation2.OnBundleLoaded?.SafeInvoke(t); BundleLoader.OnBundleLoaded?.SafeInvoke(t); CorePlugin.Log.LogInfo((object)$"Loaded bundle {operation2.FileName} in {operation2.ElapsedTime.TotalSeconds:N1}s"); Finish(); } else { CorePlugin.Log.LogError((object)("Bundle " + operation2.FileName + " contains more than one mod!")); Finish(); } void Finish() { _operations.Remove(operation2); InvokeOnAllBundlesLoadedIfShould(); } } } private static bool calledOnBundleLoaded; private static bool bundleLoadingWindowClosed; private static readonly List<LoadOperation> _operations = new List<LoadOperation>(); public static event Action? OnAllBundlesLoaded; public static event Action<PeakBundle>? OnBundleLoaded; private static void InvokeOnAllBundlesLoadedIfShould() { if (_operations.Count == 0 && bundleLoadingWindowClosed && !calledOnBundleLoaded) { calledOnBundleLoaded = true; BundleLoader.OnAllBundlesLoaded?.SafeInvoke(); } } internal static void CloseBundleLoadingWindow() { bundleLoadingWindowClosed = true; InvokeOnAllBundlesLoadedIfShould(); } private static void AddOperation(LoadOperation operation) { CorePlugin.Log.LogInfo((object)("Loading bundle at '" + operation.Path + "'...")); if (bundleLoadingWindowClosed) { CorePlugin.Log.LogWarning((object)("The bundle loading window has passed. Set your asset bundle to load in your plugin's Awake method " + $"for the best chances of everything working properly.\n{new StackTrace()}")); } _operations.Add(operation); } internal static void LoadAllBundles(string root, string withExtension) { CorePlugin.Log.LogInfo((object)("Loading all bundles with extension " + withExtension + " from root " + root)); string[] files = Directory.GetFiles(root, "*" + withExtension, SearchOption.AllDirectories); string[] array = files; foreach (string path in array) { LoadBundleAndContentsFromPath(path); } } public static void LoadBundleWithName(this BaseUnityPlugin baseUnityPlugin, string fileName, Action<PeakBundle> onLoaded) { baseUnityPlugin.LoadBundleWithNameInternal(fileName, onLoaded, loadContents: false); } public static void LoadBundleAndContentsWithName(this BaseUnityPlugin baseUnityPlugin, string fileName, Action<PeakBundle> onLoaded) { baseUnityPlugin.LoadBundleWithNameInternal(fileName, onLoaded, loadContents: true); } private static void LoadBundleWithNameInternal(this BaseUnityPlugin baseUnityPlugin, string fileName, Action<PeakBundle> onLoaded, bool loadContents) { ThrowHelper.ThrowIfArgumentNull<BaseUnityPlugin>(baseUnityPlugin, "baseUnityPlugin"); ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(fileName, "fileName"); ThrowHelper.ThrowIfArgumentNull(onLoaded, "onLoaded"); string directoryName = Path.GetDirectoryName(baseUnityPlugin.Info.Location); string[] files = Directory.GetFiles(directoryName, fileName, SearchOption.AllDirectories); ModDefinition orCreate = ModDefinition.GetOrCreate(baseUnityPlugin.Info); string[] array = files; foreach (string path in array) { AddOperation(new LoadOperation(path, onLoaded, loadContents, orCreate)); } } public static void LoadBundleFromPath(string path, Action<PeakBundle> onLoaded, ModDefinition? mod = null) { ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(path, "path"); ThrowHelper.ThrowIfArgumentNull(onLoaded, "onLoaded"); AddOperation(new LoadOperation(path, onLoaded, loadContents: false, mod)); } public static void LoadBundleAndContentsFromPath(string path, Action<PeakBundle>? onLoaded = null, ModDefinition? mod = null) { ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(path, "path"); AddOperation(new LoadOperation(path, onLoaded, loadContents: true, mod)); } internal static IEnumerator LoadOperationsDeadlineWait(MonoBehaviour behaviour) { (TMP_Text, Action)? tuple = SetupLoadingUI(); if (tuple.HasValue) { (TMP_Text, Action) valueOrDefault = tuple.GetValueOrDefault(); (TMP_Text, Action) tuple2 = valueOrDefault; TMP_Text text = tuple2.Item1; Action disableLoadingUI = tuple2.Item2; float startTime = Time.time; float lastUpdate = Time.time; while (_operations.Count > 0) { if (Time.time - lastUpdate <= 1f) { yield return null; } if (Time.time - startTime > 3f) { ((Component)text).gameObject.SetActive(true); } lastUpdate = Time.time; string arg = ((_operations.Count == 1) ? "bundle" : "bundles"); text.text = $"PEAKLib: Waiting for {_operations.Count} {arg} to load..."; foreach (LoadOperation operation in _operations) { string text2 = $"Loading {operation.FileName}: {operation.CurrentState}"; float? num = ((operation.CurrentState != 0) ? null : new float?(((AsyncOperation)operation.BundleRequest).progress)); float? num2 = num; if (num2.HasValue) { text2 += $" {num2.Value:P0}"; } CorePlugin.Log.LogDebug((object)text2); } yield return null; } disableLoadingUI(); CorePlugin.Log.LogInfo((object)"Bundle loading screen finished."); } else { CorePlugin.Log.LogError((object)"Loading UI failed!"); while (_operations.Count > 0) { yield return null; } } } private static (TMP_Text, Action)? SetupLoadingUI() { //IL_00d5: 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) GameObject obj = GameObject.Find("LoadingScreenSimple(Clone)"); Canvas val = ((obj != null) ? obj.GetComponent<Canvas>() : null); if ((Object)(object)val == (Object)null) { CorePlugin.Log.LogError((object)"Loading UI Canvas not found!"); return null; } Transform val2 = TransformExtensions.FindChildRecursive(((Component)val).transform, "LoadingText"); if ((Object)(object)val2 == (Object)null) { CorePlugin.Log.LogError((object)"Loading UI 'LoadingText' transform not found!"); return null; } GameObject gameObject = ((Component)val2).gameObject; GameObject textObj = Object.Instantiate<GameObject>(gameObject, gameObject.transform.parent, true); ((Object)textObj).name = "PEAKLib Loading Text"; TextMeshProUGUI text = textObj.GetComponent<TextMeshProUGUI>(); ((TMP_Text)text).text = ""; RectTransform component = textObj.GetComponent<RectTransform>(); component.anchoredPosition = new Vector2(component.anchoredPosition.x, 300f); textObj.SetActive(false); (TextMeshProUGUI, Action) tuple = (text, delegate { ((TMP_Text)text).text = "PEAKLib: All bundles loaded!"; ((MonoBehaviour)CorePlugin.Instance).StartCoroutine(WaitAndDisableText(textObj)); }); return ((TMP_Text)(object)tuple.Item1, tuple.Item2); } private static IEnumerator WaitAndDisableText(GameObject textObj) { yield return (object)new WaitForSeconds(1f); if (!((Object)(object)textObj == (Object)null)) { textObj.SetActive(false); } } } public static class ContentRegistry { internal static readonly Dictionary<IContent, IRegisteredContent> s_RegisteredContent = new Dictionary<IContent, IRegisteredContent>(); public static RegisteredContent<T> Register<T>(T modContent, ModDefinition owner) where T : IContent<T> { return new RegisteredContent<T>(modContent, owner); } public static bool IsRegistered(this IContent modContent) { return s_RegisteredContent.ContainsKey(modContent.Resolve()); } public static bool TryGetRegisteredContent<T>(this T modContent, [NotNullWhen(true)] out RegisteredContent<T>? registeredContent) where T : IContent<T> { registeredContent = null; if (!s_RegisteredContent.TryGetValue(modContent, out IRegisteredContent value)) { return false; } registeredContent = (RegisteredContent<T>)value; return true; } public static bool TryResolveAndGetRegisteredContent<T>(this T modContent, [NotNullWhen(true)] out IRegisteredContent? registeredContent) where T : IContent { registeredContent = null; if (!s_RegisteredContent.TryGetValue(modContent.Resolve(), out IRegisteredContent value)) { return false; } registeredContent = value; return true; } } internal class CustomPrefabPool : IPunPrefabPool { internal readonly Dictionary<string, GameObject> idToGameObject = new Dictionary<string, GameObject>(); internal readonly Dictionary<GameObject, string> gameObjectToId = new Dictionary<GameObject, string>(); private DefaultPool? _defaultPool; public DefaultPool DefaultPool { get { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown if (_defaultPool == null) { _defaultPool = new DefaultPool(); } return _defaultPool; } set { if (value != null) { _defaultPool = value; } } } internal CustomPrefabPool() { } public bool TryRegisterPrefab(string prefabId, GameObject prefab) { prefabId = ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(prefabId, "prefabId"); prefab = ThrowHelper.ThrowIfArgumentNull<GameObject>(prefab, "prefab"); if (HasPrefab(prefabId)) { CorePlugin.Log.LogError((object)("CustomPrefabPool: failed to register network prefab \"" + prefabId + "\". Prefab already exists in Resources with the same prefab id.")); return false; } if (idToGameObject.ContainsKey(prefabId)) { CorePlugin.Log.LogError((object)("CustomPrefabPool: failed to register network prefab \"" + prefabId + "\". There is already a prefab registered with the same prefab id.")); return false; } idToGameObject.Add(prefabId, prefab); gameObjectToId.Add(prefab, prefabId); CorePlugin.Log.LogDebug((object)("CustomPrefabPool: registered network prefab \"" + prefabId + "\"")); return true; } public bool HasPrefab(GameObject prefab) { return idToGameObject.ContainsValue(prefab); } public bool HasPrefab(string prefabId) { GameObject prefab; return TryGetPrefab(prefabId, out prefab); } public bool TryGetPrefabId(GameObject prefab, [NotNullWhen(true)] out string? id) { return gameObjectToId.TryGetValue(prefab, out id); } public bool TryGetPrefab(string prefabId, [NotNullWhen(true)] out GameObject? prefab) { prefabId = ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(prefabId, "prefabId"); if (idToGameObject.TryGetValue(prefabId, out prefab)) { return true; } prefab = Resources.Load<GameObject>(prefabId); return (Object)(object)prefab != (Object)null; } public GameObject? Instantiate(string prefabId, Vector3 position, Quaternion rotation) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) prefabId = ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(prefabId, "prefabId"); GameObject val; if (!idToGameObject.TryGetValue(prefabId, out GameObject value)) { val = DefaultPool.Instantiate(prefabId, position, rotation); if ((Object)(object)val == (Object)null) { CorePlugin.Log.LogError((object)("CustomPrefabPool: failed to spawn network prefab \"" + prefabId + "\". GameObject is null.")); } return val; } bool activeSelf = value.activeSelf; if (activeSelf) { value.SetActive(false); } val = Object.Instantiate<GameObject>(value, position, rotation); if (activeSelf) { value.SetActive(true); } CorePlugin.Log.LogInfo((object)$"CustomPrefabPool: spawned network prefab \"{prefabId}\" at position {position}, rotation {((Quaternion)(ref rotation)).eulerAngles}"); return val; } public void Destroy(GameObject gameObject) { Object.Destroy((Object)(object)gameObject); } } public interface IContent<T> : IContent where T : IContent<T> { new RegisteredContent<T> Register(ModDefinition owner); } public interface IContent { string Name { get; } IRegisteredContent Register(ModDefinition owner); IContent Resolve(); } public interface IModDefinitionResolvable { ModDefinition Resolve(); } public class ModDefinition : IModDefinitionResolvable { internal HashSet<IRegisteredContent> registeredContent = new HashSet<IRegisteredContent>(); private static readonly Dictionary<string, ModDefinition> s_guidToMod = new Dictionary<string, ModDefinition>(); public string Id { get; } public string Name { get; } public Version Version { get; } public HashSet<IContent> Content { get; } = new HashSet<IContent>(); public IEnumerable<IRegisteredContent> RegisteredContent => registeredContent; private ModDefinition(string id, string name, Version version) { Id = ThrowHelper.ThrowIfArgumentNull(id, "id"); Name = ThrowHelper.ThrowIfArgumentNull(name, "name"); Version = ThrowHelper.ThrowIfArgumentNull(version, "version"); } public static ModDefinition GetOrCreate(PluginInfo pluginInfo) { return GetOrCreate(pluginInfo.Metadata); } public static ModDefinition GetOrCreate(BepInPlugin bepInPlugin) { return GetOrCreate(bepInPlugin.GUID, bepInPlugin.Name, bepInPlugin.Version); } public static ModDefinition GetOrCreate(string id, string name, Version version) { if (s_guidToMod.TryGetValue(id, out ModDefinition value)) { return value; } value = new ModDefinition(id, name, version); s_guidToMod.Add(id, value); return value; } public static bool TryGetMod(string id, [NotNullWhen(true)] out ModDefinition? modDefinition) { return s_guidToMod.TryGetValue(id, out modDefinition); } public void RegisterContent() { foreach (IContent item in Content) { if (!item.IsRegistered()) { try { item.Register(this); } catch (Exception ex) { CorePlugin.Log.LogError((object)ex); } } } } public RegisteredContent<T> Register<T>(T content) where T : IContent<T> { return content.Register(this); } public IRegisteredContent Register(IContent content) { return content.Register(this); } public ModDefinition Resolve() { return this; } public override int GetHashCode() { return Id.GetHashCode(); } } public static class Networking { internal static readonly HashSet<string> hostPluginGuids = new HashSet<string>(); private static readonly Dictionary<string, (Action HasPlugin, Action NoPlugin)> s_OnHasPluginCallbacks = new Dictionary<string, (Action, Action)>(); internal static NetworkManager? s_NetworkManager; public static IReadOnlyCollection<string> HostPluginGuids => hostPluginGuids; public static void AddHostHasPluginListeners(string pluginGuid, Action onHasPlugin, Action onNoPlugin) { ThrowHelper.ThrowIfArgumentNull(pluginGuid, "pluginGuid"); ThrowHelper.ThrowIfArgumentNull(onHasPlugin, "onHasPlugin"); ThrowHelper.ThrowIfArgumentNull(onNoPlugin, "onNoPlugin"); if (s_OnHasPluginCallbacks.TryGetValue(pluginGuid, out (Action, Action) value)) { ref Action item = ref value.Item1; item = (Action)Delegate.Combine(item, onHasPlugin); ref Action item2 = ref value.Item2; item2 = (Action)Delegate.Combine(item2, onNoPlugin); } else { s_OnHasPluginCallbacks.Add(pluginGuid, (onHasPlugin, onNoPlugin)); } } internal static void InvokeGuidCallbacks() { foreach (KeyValuePair<string, (Action, Action)> s_OnHasPluginCallback in s_OnHasPluginCallbacks) { if (hostPluginGuids.Contains(s_OnHasPluginCallback.Key)) { CorePlugin.Log.LogDebug((object)$"Host has plugin with guid: {s_OnHasPluginCallback}"); s_OnHasPluginCallback.Value.Item1.SafeInvoke(); } else { CorePlugin.Log.LogDebug((object)$"Host does not have plugin with guid: {s_OnHasPluginCallback}"); s_OnHasPluginCallback.Value.Item2.SafeInvoke(); } } } } internal class NetworkManager : MonoBehaviourPunCallbacks { private Character? character; private void Awake() { CorePlugin.Log.LogDebug((object)"Loaded Network Component"); character = ((Component)this).GetComponent<Character>(); if ((Object)(object)character == (Object)null) { CorePlugin.Log.LogError((object)"Could not find reference to local character!"); } else { CallRPC("GetHostPluginsRPC", (RpcTarget)2); } } [PunRPC] private void GetHostPluginsRPC() { if (PhotonNetwork.IsMasterClient) { List<string> list = new List<string>(); list.AddRange(Chainloader.PluginInfos.Select((KeyValuePair<string, PluginInfo> x) => x.Value.Metadata.GUID)); string[] array = list.ToArray(); object[] parameters = array; CallRPC("ReceivePluginsFromHostRPC", (RpcTarget)0, parameters); } } [PunRPC] private void ReceivePluginsFromHostRPC(string[] guids) { CorePlugin.Log.LogDebug((object)"Received new Plugin guid list from host"); Networking.hostPluginGuids.Clear(); foreach (string text in guids) { CorePlugin.Log.LogDebug((object)("Received Plugin guid from host: " + text)); Networking.hostPluginGuids.Add(text); } Networking.InvokeGuidCallbacks(); } private void CallRPC(string methodName, RpcTarget target, params object[] parameters) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)character == (Object)null) { CorePlugin.Log.LogError((object)"Could not find reference to local character!"); } else { character.view.RPC(methodName, target, parameters); } } public override void OnMasterClientSwitched(Player newMasterClient) { CorePlugin.Log.LogDebug((object)("Master Client Switched to player: " + newMasterClient.NickName)); if (PhotonNetwork.IsMasterClient) { CallRPC("ReceivePluginsFromHostRPC", (RpcTarget)2); } } } public static class NetworkPrefabManager { private static CustomPrefabPool? _customPrefabPool; internal static CustomPrefabPool PEAKLibPrefabPool { get { if (_customPrefabPool == null) { _customPrefabPool = new CustomPrefabPool(); } return _customPrefabPool; } private set { _customPrefabPool = value; } } internal static void Initialize() { if (PhotonNetwork.PrefabPool is CustomPrefabPool) { CorePlugin.Log.LogWarning((object)"NetworkPrefabs failed to initialize. PhotonNetwork.PrefabPool is already a CustomPrefabPool."); return; } CorePlugin.Log.LogInfo((object)"Initializing NetworkPrefabs."); CorePlugin.Log.LogDebug((object)$"PhotonNetwork.PrefabPool = {((object)PhotonNetwork.PrefabPool).GetType()}"); IPunPrefabPool prefabPool = PhotonNetwork.PrefabPool; DefaultPool val = (DefaultPool)(object)((prefabPool is DefaultPool) ? prefabPool : null); if (val != null) { PEAKLibPrefabPool.DefaultPool = val; } else if (!(PhotonNetwork.PrefabPool is CustomPrefabPool)) { CorePlugin.Log.LogWarning((object)$"PhotonNetwork has an unknown prefab pool assigned. PhotonNetwork.PrefabPool = {((object)PhotonNetwork.PrefabPool).GetType()}"); } PhotonNetwork.PrefabPool = (IPunPrefabPool)(object)PEAKLibPrefabPool; CorePlugin.Log.LogInfo((object)"Replaced PhotonNetwork.PrefabPool with CustomPrefabPool."); CorePlugin.Log.LogDebug((object)$"PhotonNetwork.PrefabPool = {((object)PhotonNetwork.PrefabPool).GetType()}"); CorePlugin.Log.LogInfo((object)"Finished initializing NetworkPrefabs."); } public static void RegisterNetworkPrefab(ModDefinition mod, GameObject prefab) { RegisterNetworkPrefab(mod, "", prefab); } public static void RegisterNetworkPrefab(ModDefinition mod, string folder, GameObject prefab) { ThrowHelper.ThrowIfArgumentNull(mod, "mod"); ((Object)prefab).name = mod.Id + ":" + ((Object)prefab).name; RegisterNetworkPrefab(folder + ((Object)prefab).name, prefab); } public static void RegisterNetworkPrefab(string prefabId, GameObject prefab) { if (PEAKLibPrefabPool.TryRegisterPrefab(prefabId, prefab)) { return; } throw new Exception("Failed to register network prefab!"); } public static bool TryRegisterNetworkPrefab(string prefabId, GameObject prefab) { return PEAKLibPrefabPool.TryRegisterPrefab(prefabId, prefab); } public static bool HasNetworkPrefab(string prefabId) { return PEAKLibPrefabPool.HasPrefab(prefabId); } public static bool TryGetNetworkPrefab(string prefabId, [NotNullWhen(true)] out GameObject? prefab) { return PEAKLibPrefabPool.TryGetPrefab(prefabId, out prefab); } public static GameObject SpawnNetworkPrefab(string prefabId, Vector3 position, Quaternion rotation, byte group = 0, object[]? data = null) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(prefabId, "prefabId"); if (!HasNetworkPrefab(prefabId)) { throw new Exception("Failed to spawn network prefab \"" + prefabId + "\". PrefabId is not registered as a network prefab."); } if (!PhotonNetwork.IsMasterClient) { throw new Exception("Failed to spawn network prefab \"" + prefabId + "\". You are not the host."); } return PhotonNetwork.InstantiateRoomObject(prefabId, position, rotation, group, data); } } public sealed class PeakBundle { private readonly AssetBundle bundle; public ModDefinition Mod { get; } internal PeakBundle(AssetBundle assetBundle, ModDefinition modDefinition) { bundle = ThrowHelper.ThrowIfArgumentNull<AssetBundle>(assetBundle, "assetBundle"); Mod = ThrowHelper.ThrowIfArgumentNull(modDefinition, "modDefinition"); } public bool Contains(string name) { return bundle.Contains(name); } public Object LoadAsset(string name) { return bundle.LoadAsset(name); } public T LoadAsset<T>(string name) where T : Object { return bundle.LoadAsset<T>(name); } public AssetBundleRequest LoadAssetAsync(string name) { return bundle.LoadAssetAsync(name); } public AssetBundleRequest LoadAssetAsync<T>(string name) { return bundle.LoadAssetAsync<T>(name); } public Object[] LoadAssetWithSubAssets(string name) { return bundle.LoadAssetWithSubAssets(name); } public T[] LoadAssetWithSubAssets<T>(string name) where T : Object { return bundle.LoadAssetWithSubAssets<T>(name); } public AssetBundleRequest LoadAssetWithSubAssetsAsync(string name) { return bundle.LoadAssetWithSubAssetsAsync(name); } public AssetBundleRequest LoadAssetWithSubAssetsAsync<T>(string name) { return bundle.LoadAssetWithSubAssetsAsync<T>(name); } public Object[] LoadAllAssets() { return bundle.LoadAllAssets(); } public T[] LoadAllAssets<T>() where T : Object { return bundle.LoadAllAssets<T>(); } public AssetBundleRequest LoadAllAssetsAsync() { return bundle.LoadAllAssetsAsync(); } public AssetBundleRequest LoadAllAssetsAsync<T>() { return bundle.LoadAllAssetsAsync<T>(); } public string[] GetAllAssetNames() { return bundle.GetAllAssetNames(); } public string[] GetAllScenePaths() { return bundle.GetAllScenePaths(); } } [BepInPlugin("com.github.PEAKModding.PEAKLib.Core", "PEAKLib.Core", "1.2.0")] public class CorePlugin : BaseUnityPlugin { private static CorePlugin? _instance = null; public const string Id = "com.github.PEAKModding.PEAKLib.Core"; internal static ManualLogSource Log { get; } = Logger.CreateLogSource(Name); internal static CorePlugin Instance => _instance ?? throw new NullReferenceException("PEAKLib.Core hasn't been initialized yet! Please depend on it with [BepInDependency(CorePlugin.Id)]"); public static string Name => "PEAKLib.Core"; public static string Version => "1.2.0"; private void Awake() { _instance = this; MonoDetourManager.InvokeHookInitializers(typeof(CorePlugin).Assembly); PlayerHandler.OnCharacterRegistered = (Action<Character>)Delegate.Combine(PlayerHandler.OnCharacterRegistered, (Action<Character>)delegate(Character character) { Networking.s_NetworkManager = ((Component)character).gameObject.AddComponent<NetworkManager>(); }); BundleLoader.LoadAllBundles(Paths.PluginPath, ".autoload.peakbundle"); Log.LogInfo((object)("Plugin " + Name + " is loaded!")); } private void Start() { BundleLoader.CloseBundleLoadingWindow(); } } public class RegisteredContent<T> : IRegisteredContent where T : IContent { public T Content { get; } IContent IRegisteredContent.Content => Content; public ModDefinition Mod { get; } internal RegisteredContent(T content, ModDefinition mod) { Content = ThrowHelper.ThrowIfArgumentNull(content, "content"); Mod = ThrowHelper.ThrowIfArgumentNull(mod, "mod"); if (!ContentRegistry.s_RegisteredContent.TryAdd(content, this)) { throw new Exception($"This Content has been registered already: '{content}'"); } mod.registeredContent.Add(this); } } public interface IRegisteredContent { IContent Content { get; } ModDefinition Mod { get; } } public static class ThrowHelper { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string ThrowIfFieldNullOrWhiteSpace([NotNull] string? field, [CallerArgumentExpression("field")] string name = "") { if (string.IsNullOrWhiteSpace(field)) { throw new NullReferenceException("Field or property '" + name + "' must not be null or whitespace."); } return field; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T ThrowIfFieldNull<T>([NotNull] T? field, [CallerArgumentExpression("field")] string name = "") { if (field == null) { throw new NullReferenceException("Field or property '" + name + "' must not be null."); } return field; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static string ThrowIfArgumentNullOrWhiteSpace([NotNull] string? argument, [CallerArgumentExpression("argument")] string name = "") { if (string.IsNullOrWhiteSpace(argument)) { throw new ArgumentException("'" + name + "' must not be null or whitespace."); } return argument; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T ThrowIfArgumentNull<T>([NotNull] T? argument, [CallerArgumentExpression("argument")] string name = "") { if (argument == null) { ThrowArgumentNull(name); } return argument; } [DoesNotReturn] private static void ThrowArgumentNull(string argName) { throw new ArgumentNullException(argName); } } } namespace PEAKLib.Core.UnityEditor { [CreateAssetMenu(fileName = "ModDefinition", menuName = "PEAKLib/ModDefinition", order = 0)] public class UnityModDefinition : ScriptableObject, IModDefinitionResolvable { [SerializeField] private string modId = ""; [SerializeField] private string modName = ""; [SerializeField] private string modVersion = ""; public ModDefinition Resolve() { ThrowHelper.ThrowIfFieldNullOrWhiteSpace(modId, "modId"); ThrowHelper.ThrowIfFieldNullOrWhiteSpace(modName, "modName"); ThrowHelper.ThrowIfFieldNullOrWhiteSpace(modVersion, "modVersion"); Version version; try { version = new Version(modVersion); } catch (FormatException ex) { throw new FormatException("Version of the mod is not in a valid format!\n" + ex.Message, ex); } return ModDefinition.GetOrCreate(modId, modName, version); } } } namespace PEAKLib.Core.Hooks { [MonoDetourTargets(typeof(GameHandler))] internal static class GameHandlerHooks { private static bool patchedAwake; [MonoDetourHookInitialize] private static void Init() { On.GameHandler.Awake.Postfix(Postfix_Awake); } private static void Postfix_Awake(GameHandler self) { if (!patchedAwake) { patchedAwake = true; NetworkPrefabManager.Initialize(); } } } [MonoDetourTargets(typeof(LoadingScreenHandler), GenerateControlFlowVariants = true)] internal static class LoadingScreenHandlerHooks { private static bool loadBundlesStepInjected; private static readonly EnumeratorFieldReferenceGetter<string> sceneName = EnumeratorReflection.EnumeratorFastFieldReference<string>(LoadSceneProcess.StateMachineTarget(), "sceneName"); [MonoDetourHookInitialize] private static void Init() { LoadSceneProcess.ControlFlowPrefixMoveNext(Prefix_LoadSceneProcess_MoveNext); } private static ReturnFlow Prefix_LoadSceneProcess_MoveNext(SpeakableEnumerator<object, LoadingScreenHandler> self, ref bool continueEnumeration) { if (self.State == 0) { if (!loadBundlesStepInjected) { if (sceneName.Invoke((IEnumerator)self.Enumerator) == "Airport") { self.Current = BundleLoader.LoadOperationsDeadlineWait((MonoBehaviour)(object)self.This); loadBundlesStepInjected = true; continueEnumeration = true; return (ReturnFlow)2; } return (ReturnFlow)0; } return (ReturnFlow)0; } return (ReturnFlow)0; } } } namespace PEAKLib.Core.Extensions { internal static class ActionExtensions { public static void SafeInvoke(this Action @delegate) { foreach (Action item in @delegate.GetInvocationList().Cast<Action>()) { try { item(); } catch (Exception arg) { CorePlugin.Log.LogError((object)$"Unhandled exception in callback: {arg}"); } } } public static void SafeInvoke<T1>(this Action<T1> @delegate, T1 t1) { foreach (Action<T1> item in @delegate.GetInvocationList().Cast<Action<T1>>()) { try { item(t1); } catch (Exception arg) { CorePlugin.Log.LogError((object)$"Unhandled exception in callback: {arg}"); } } } } } 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 { } }
mods/com.github.PEAKModding.PEAKLib.ModConfig.dll
Decompiled 5 months agousing System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Microsoft.CodeAnalysis; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using On.MenuWindow; using PEAKLib.Core; using PEAKLib.ModConfig.Components; using PEAKLib.ModConfig.Hooks; using PEAKLib.ModConfig.SettingOptions; using PEAKLib.ModConfig.SettingOptions.SettingUI; using PEAKLib.UI; using PEAKLib.UI.Elements; using TMPro; using Unity.Mathematics; using UnityEngine; using UnityEngine.Events; using UnityEngine.Localization; using UnityEngine.SceneManagement; using UnityEngine.UI; using Zorro.Core; using Zorro.Settings; using Zorro.Settings.DebugUI; using Zorro.Settings.UI; using Zorro.UI; [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("PEAKModding")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0+9f92ed4622ec2139755c37f9193f7cc77e010734")] [assembly: AssemblyProduct("com.github.PEAKModding.PEAKLib.ModConfig")] [assembly: AssemblyTitle("PEAKLib.ModConfig")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.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 On.MenuWindow { internal static class Start { public delegate void PrefixSignature(MenuWindow self); public delegate void PostfixSignature(MenuWindow self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(MenuWindow); MethodInfo method = typeFromHandle.GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("MenuWindow", "Start"); } return method; } } internal static class Open { public delegate void PrefixSignature(MenuWindow self); public delegate void PostfixSignature(MenuWindow self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(MenuWindow); MethodInfo method = typeFromHandle.GetMethod("Open", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("MenuWindow", "Open"); } return method; } } internal static class Close { public delegate void PrefixSignature(MenuWindow self); public delegate void PostfixSignature(MenuWindow self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(MenuWindow); MethodInfo method = typeFromHandle.GetMethod("Close", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("MenuWindow", "Close"); } return method; } } internal static class get_openOnStart { } internal static class get_selectOnOpen { } internal static class get_objectToSelectOnOpen { } internal static class get_closeOnPause { } internal static class get_closeOnUICancel { } internal static class get_blocksPlayerInput { } internal static class get_showCursorWhileOpen { } internal static class get_autoHideOnClose { } internal static class get_isOpen { } internal static class set_isOpen { } internal static class get_inputActive { } internal static class set_inputActive { } internal static class get_initialized { } internal static class set_initialized { } internal static class get_panel { } internal static class Update { } internal static class TestCloseViaInput { } internal static class Initialize { } internal static class OnOpen { } internal static class OnDestroy { } internal static class CloseAllWindows { } internal static class StartClosed { } internal static class ForceClose { } internal static class OnClose { } internal static class Show { } internal static class Hide { } internal static class SetInputActive { } internal static class SelectStartingElement { } internal static class _ctor { } internal static class _cctor { } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public bool DistinguishOverloadsByName { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] 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")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace PEAKLib.ModConfig { internal interface IBepInExProperty { } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.github.PEAKModding.PEAKLib.ModConfig", "PEAKLib.ModConfig", "1.3.0")] public class ModConfigPlugin : BaseUnityPlugin { private static bool modSettingsLoaded = false; public const string Id = "com.github.PEAKModding.PEAKLib.ModConfig"; internal static ManualLogSource Log { get; } = Logger.CreateLogSource(Name); public static string Name => "PEAKLib.ModConfig"; public static string Version => "1.3.0"; private void Awake() { MonoDetourManager.InvokeHookInitializers(typeof(ModConfigPlugin).Assembly); Log.LogInfo((object)("Plugin " + Name + " is loaded!")); } private void Start() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown LoadModSettings(); MenuAPI.AddToSettingsMenu(new BuilderDelegate(builderDelegate)); static void builderDelegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Expected O, but got Unknown //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected O, but got Unknown //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Expected O, but got Unknown //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Expected O, but got Unknown //IL_03de: Unknown result type (might be due to invalid IL or missing references) //IL_04ab: Unknown result type (might be due to invalid IL or missing references) //IL_04c3: Unknown result type (might be due to invalid IL or missing references) //IL_04cd: Expected O, but got Unknown //IL_04e5: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); bool isTitleScreen = ((Scene)(ref activeScene)).name == "Title"; MenuWindow settingMenu = (MenuWindow)(isTitleScreen ? ((object)((Component)parent).GetComponentInParent<PauseMainMenu>()) : ((object)((Component)parent).GetComponentInParent<PauseSettingsMenu>())); PeakCustomPage obj = MenuAPI.CreatePage("ModSettings").CreateBackground(isTitleScreen ? new Color?(new Color(0f, 0f, 0f, 0.8667f)) : null); MenuWindow obj2 = settingMenu; PeakCustomPage modSettingsPage = obj.SetOnClose(new UnityAction(obj2.Open)); TranslationKey val = MenuAPI.CreateLocalization("MOD SETTINGS").AddLocalization("MOD SETTINGS", (Language)0).AddLocalization("PARAMÈTRES DU MOD", (Language)1) .AddLocalization("IMPOSTAZIONI MOD", (Language)2) .AddLocalization("MOD-EINSTELLUNGEN", (Language)3) .AddLocalization("AJUSTES DEL MOD", (Language)4) .AddLocalization("CONFIGURACIONES DEL MOD", (Language)5) .AddLocalization("CONFIGURAÇÕES DE MOD", (Language)6) .AddLocalization("НАСТРОЙКИ МОДА", (Language)7) .AddLocalization("НАЛАШТУВАННЯ МОДА", (Language)8) .AddLocalization("模组设置", (Language)9) .AddLocalization("模組設定", (Language)10) .AddLocalization("MOD設定", (Language)11) .AddLocalization("모드 설정", (Language)12); PeakElement val2 = ElementExtensions.SetSize<PeakElement>(ElementExtensions.SetPivot<PeakElement>(ElementExtensions.SetPosition<PeakElement>(ElementExtensions.SetAnchorMinMax<PeakElement>(ElementExtensions.ParentTo(new GameObject("Header"), (Component)(object)modSettingsPage).AddComponent<PeakElement>(), new Vector2(0f, 1f)), new Vector2(40f, -40f)), new Vector2(0f, 1f)), new Vector2(360f, 100f)); PeakText val3 = ElementExtensions.SetLocalizationIndex<PeakText>(ElementExtensions.ExpandToParent<PeakText>(ElementExtensions.ParentTo<PeakText>(MenuAPI.CreateText("Mod Settings", "HeaderText").SetFontSize(48f), (Component)(object)val2)), val); ((PeakLocalizableElement)val3).Text.fontSizeMax = 48f; ((PeakLocalizableElement)val3).Text.fontSizeMin = 24f; ((PeakLocalizableElement)val3).Text.enableAutoSizing = true; ((PeakLocalizableElement)val3).Text.alignment = (TextAlignmentOptions)514; ElementExtensions.SetPosition<PeakMenuButton>(ElementExtensions.ParentTo<PeakMenuButton>(ElementExtensions.SetLocalizationIndex<PeakMenuButton>(MenuAPI.CreateMenuButton("Back"), "BACK").SetColor(new Color(1f, 0.5f, 0.2f), true), (Component)(object)modSettingsPage), new Vector2(225f, -180f)).SetWidth(200f).OnClick(new UnityAction(((MenuWindow)modSettingsPage).Close)); ElementExtensions.SetPosition<PeakText>(ElementExtensions.ParentTo<PeakText>(MenuAPI.CreateText("Search"), (Component)(object)modSettingsPage), new Vector2(90f, -210f)); PeakElement val4 = ElementExtensions.SetSize<PeakElement>(ElementExtensions.SetPosition<PeakElement>(ElementExtensions.SetAnchorMax<PeakElement>(ElementExtensions.SetAnchorMin<PeakElement>(ElementExtensions.SetPivot<PeakElement>(ElementExtensions.ParentTo<PeakElement>(new GameObject("Content").AddComponent<PeakElement>(), (Component)(object)modSettingsPage), new Vector2(0f, 1f)), new Vector2(0f, 1f)), new Vector2(0f, 1f)), new Vector2(428f, -70f)), new Vector2(1360f, 980f)); ModdedSettingsMenu moddedSettingsMenu = ((Component)val4).gameObject.AddComponent<ModdedSettingsMenu>(); PeakTextInput val5 = ElementExtensions.SetPosition<PeakTextInput>(ElementExtensions.SetSize<PeakTextInput>(ElementExtensions.ParentTo<PeakTextInput>(MenuAPI.CreateTextInput("SearchInput"), (Component)(object)modSettingsPage), new Vector2(300f, 70f)), new Vector2(230f, -300f)).SetPlaceholder("Search here").OnValueChanged((UnityAction<string>)moddedSettingsMenu.SetSearch); PeakHorizontalTabs val6 = ElementExtensions.ParentTo(new GameObject("TABS"), (Component)(object)val4).AddComponent<PeakHorizontalTabs>(); ModdedSettingsTABS moddedSettingsTABS = ((Component)val6).gameObject.AddComponent<ModdedSettingsTABS>(); moddedSettingsTABS.SettingsMenu = moddedSettingsMenu; PeakScrollableContent val7 = ElementExtensions.SetOffsetMax<PeakScrollableContent>(ElementExtensions.ExpandToParent<PeakScrollableContent>(ElementExtensions.ParentTo<PeakScrollableContent>(MenuAPI.CreateScrollableContent("TabContent"), (Component)(object)val4)), new Vector2(0f, -60f)); moddedSettingsMenu.Content = (Transform)(object)val7.Content; moddedSettingsMenu.Tabs = moddedSettingsTABS; foreach (KeyValuePair<string, ConfigEntryBase[]> modConfigEntry in GetModConfigEntries()) { modConfigEntry.Deconstruct(out var key, out var value); string text = key; ConfigEntryBase[] array = value; GameObject val8 = val6.AddTab(text); ModdedTABSButton moddedTABSButton = val8.AddComponent<ModdedTABSButton>(); moddedTABSButton.category = text; ((TAB_Button)moddedTABSButton).text = val8.GetComponentInChildren<TextMeshProUGUI>(); moddedTABSButton.SelectedGraphic = ((Component)val8.transform.Find("Selected")).gameObject; } PeakMenuButton val9 = ElementExtensions.ParentTo<PeakMenuButton>(ElementExtensions.SetLocalizationIndex<PeakMenuButton>(MenuAPI.CreatePauseMenuButton("MOD SETTINGS"), val).SetColor(new Color(0.15f, 0.75f, 0.85f), true), parent).OnClick((UnityAction)delegate { UIInputHandler.SetSelectedObject((GameObject)null); MenuWindow obj3 = settingMenu; if (obj3 != null) { obj3.Close(); } if (!isTitleScreen) { MenuWindow obj4 = settingMenu; PauseSettingsMenu val10 = (PauseSettingsMenu)(object)((obj4 is PauseSettingsMenu) ? obj4 : null); if (val10 != null) { MenuWindow optionsMenu = val10.optionsMenu; if (optionsMenu != null) { optionsMenu.Close(); } } } ((MenuWindow)modSettingsPage).Open(); }); if ((Object)(object)val9 != (Object)null) { ElementExtensions.SetPosition<PeakMenuButton>(val9, new Vector2(171f, -230f)).SetWidth(220f); } } } private static void LoadModSettings() { //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) if (modSettingsLoaded) { return; } modSettingsLoaded = true; bool flag = default(bool); bool flag2 = default(bool); foreach (KeyValuePair<string, ConfigEntryBase[]> modConfigEntry in GetModConfigEntries()) { modConfigEntry.Deconstruct(out var key, out var value); string text = key; ConfigEntryBase[] array = value; ConfigEntryBase[] array2 = array; foreach (ConfigEntryBase configEntry in array2) { try { if (configEntry.SettingType == typeof(bool)) { object defaultValue = configEntry.DefaultValue; int num; if (defaultValue is bool) { flag = (bool)defaultValue; num = 1; } else { num = 0; } bool defaultValue2 = (byte)((uint)num & (flag ? 1u : 0u)) != 0; defaultValue = configEntry.BoxedValue; int num2; if (defaultValue is bool) { flag2 = (bool)defaultValue; num2 = 1; } else { num2 = 0; } bool currentValue = (byte)((uint)num2 & (flag2 ? 1u : 0u)) != 0; SettingsHandlerUtility.AddBoolToTab(configEntry.Definition.Key, defaultValue2, text, currentValue, delegate(bool newVal) { configEntry.BoxedValue = newVal; }); } else if (configEntry.SettingType == typeof(float)) { float defaultValue3 = ((configEntry.DefaultValue is float num3) ? num3 : 0f); float currentValue2 = ((configEntry.BoxedValue is float num4) ? num4 : 0f); float minValue = 0f; float maxValue = 1000f; if (configEntry.Description.AcceptableValues is AcceptableValueRange<float> val) { minValue = val.MinValue; maxValue = val.MaxValue; } SettingsHandlerUtility.AddFloatToTab(configEntry.Definition.Key, defaultValue3, text, minValue, maxValue, currentValue2, delegate(float newVal) { configEntry.BoxedValue = newVal; }); } else if (configEntry.SettingType == typeof(int)) { int defaultValue4 = ((configEntry.DefaultValue is int num5) ? num5 : 0); int currentValue3 = ((configEntry.BoxedValue is int num6) ? num6 : 0); SettingsHandlerUtility.AddIntToTab(configEntry.Definition.Key, defaultValue4, text, currentValue3, delegate(int newVal) { configEntry.BoxedValue = newVal; }); } else if (configEntry.SettingType == typeof(string)) { string defaultValue5 = ((configEntry.DefaultValue is string text2) ? text2 : ""); string currentValue4 = ((configEntry.BoxedValue is string text3) ? text3 : ""); SettingsHandlerUtility.AddStringToTab(configEntry.Definition.Key, defaultValue5, text, currentValue4, delegate(string newVal) { configEntry.BoxedValue = newVal; }); } else if (configEntry.SettingType == typeof(KeyCode)) { KeyCode defaultValue6 = (KeyCode)((configEntry.DefaultValue is KeyCode val2) ? ((int)val2) : 0); KeyCode currentValue5 = (KeyCode)((configEntry.BoxedValue is KeyCode val3) ? ((int)val3) : 0); SettingsHandlerUtility.AddKeybindToTab(configEntry.Definition.Key, defaultValue6, text, currentValue5, delegate(KeyCode newVal) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) configEntry.BoxedValue = newVal; }); } else if (configEntry.SettingType.IsEnum) { object defaultValue7 = configEntry.DefaultValue; object value2 = ((defaultValue7 != null) ? defaultValue7 : Enum.ToObject(configEntry.SettingType, 0)); object boxedValue = configEntry.BoxedValue; object value3 = ((boxedValue != null) ? boxedValue : Enum.ToObject(configEntry.SettingType, 0)); string name = Enum.GetName(configEntry.SettingType, value2); string name2 = Enum.GetName(configEntry.SettingType, value3); List<string> options = new List<string>(Enum.GetNames(configEntry.SettingType)); SettingsHandlerUtility.AddEnumToTab(configEntry.Definition.Key, options, text, name2, delegate(string newVal) { if (Enum.TryParse(configEntry.SettingType, newVal, out object result)) { configEntry.BoxedValue = result; } }); } else { Log.LogWarning((object)$"Missing SettingType: [Mod: {text}] {configEntry.Definition.Key} (Type: {configEntry.SettingType})"); } } catch (Exception ex) { Log.LogError((object)ex); } } } } private static Dictionary<string, ConfigEntryBase[]> GetModConfigEntries() { Dictionary<string, ConfigEntryBase[]> dictionary = new Dictionary<string, ConfigEntryBase[]>(); foreach (PluginInfo item in Chainloader.PluginInfos.Values.OrderBy((PluginInfo p) => p.Metadata.Name)) { List<ConfigEntryBase> list = new List<ConfigEntryBase>(); foreach (ConfigEntryBase item2 in ((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)item.Instance.Config).Select((KeyValuePair<ConfigDefinition, ConfigEntryBase> configEntry) => configEntry.Value)) { ConfigDescription description = item2.Description; object[] array = ((description != null) ? description.Tags : null); if (array == null || !array.Contains("Hidden")) { list.Add(item2); } } if (list.Count > 0) { dictionary.TryAdd(FixNaming(item.Metadata.Name), list.ToArray()); } } return dictionary; } private static string FixNaming(string input) { input = Regex.Replace(input, "([a-z])([A-Z])", "$1 $2"); input = Regex.Replace(input, "([A-Z])([A-Z][a-z])", "$1 $2"); input = Regex.Replace(input, "\\s+", " "); input = Regex.Replace(input, "([A-Z]\\.)\\s([A-Z]\\.)", "$1$2"); return input.Trim(); } } internal static class SettingsHandlerUtility { internal static void AddBoolToTab(string displayName, bool defaultValue, string tabName, bool currentValue = false, Action<bool>? saveCallback = null) { if (SettingsHandler.Instance == null) { throw new Exception("You're registering options too early! Use the Start() function to create new options!"); } SettingsHandler.Instance.AddSetting((Setting)(object)new BepInExOffOn(displayName, defaultValue, tabName, currentValue, saveCallback)); } internal static void AddFloatToTab(string displayName, float defaultValue, string tabName, float minValue = 0f, float maxValue = 1f, float currentValue = 0f, Action<float>? applyCallback = null) { if (SettingsHandler.Instance == null) { throw new Exception("You're registering options too early! Use the Start() function to create new options!"); } SettingsHandler.Instance.AddSetting((Setting)(object)new BepInExFloat(displayName, defaultValue, tabName, minValue, maxValue, currentValue, applyCallback)); } internal static void AddIntToTab(string displayName, int defaultValue, string tabName, int currentValue = 0, Action<int>? saveCallback = null) { if (SettingsHandler.Instance == null) { throw new Exception("You're registering options too early! Use the Start() function to create new options!"); } SettingsHandler.Instance.AddSetting((Setting)(object)new BepInExInt(displayName, tabName, defaultValue, currentValue, saveCallback)); } internal static void AddStringToTab(string displayName, string defaultValue, string tabName, string currentValue = "", Action<string>? saveCallback = null) { if (SettingsHandler.Instance == null) { throw new Exception("You're registering options too early! Use the Start() function to create new options!"); } SettingsHandler.Instance.AddSetting((Setting)(object)new BepInExString(displayName, tabName, defaultValue, currentValue, saveCallback)); } internal static void AddKeybindToTab(string displayName, KeyCode defaultValue, string tabName, KeyCode currentValue, Action<KeyCode>? saveCallback) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (SettingsHandler.Instance == null) { throw new Exception("You're registering options too early! Use the Start() function to create new options!"); } SettingsHandler.Instance.AddSetting((Setting)(object)new BepInExKeyCode(displayName, tabName, defaultValue, currentValue, saveCallback)); } internal static void AddEnumToTab(string displayName, List<string> options, string tabName, string currentValue, Action<string>? saveCallback) { if (SettingsHandler.Instance == null) { throw new Exception("You're registering options too early! Use the Start() function to create new options!"); } SettingsHandler.Instance.AddSetting((Setting)(object)new BepInExEnum(displayName, options, currentValue, tabName, saveCallback)); } } } namespace PEAKLib.ModConfig.SettingOptions { internal class BepInExEnum : Setting, IEnumSetting, IExposedSetting, IBepInExProperty { [CompilerGenerated] private string <displayName>P; [CompilerGenerated] private List<string> <options>P; [CompilerGenerated] private string <currentValue>P; [CompilerGenerated] private string <category>P; [CompilerGenerated] private Action<string>? <saveCallback>P; [CompilerGenerated] private Action<BepInExEnum>? <onApply>P; public string Value { get; protected set; } public BepInExEnum(string displayName, List<string> options, string currentValue, string category = "Mods", Action<string>? saveCallback = null, Action<BepInExEnum>? onApply = null) { <displayName>P = displayName; <options>P = options; <currentValue>P = currentValue; <category>P = category; <saveCallback>P = saveCallback; <onApply>P = onApply; Value = ""; ((Setting)this)..ctor(); } public string GetDisplayName() { return <displayName>P; } public string GetCategory() { return <category>P; } public override void Load(ISettingsSaveLoad loader) { Value = <currentValue>P; } public override void Save(ISettingsSaveLoad saver) { <saveCallback>P?.Invoke(Value); } public override GameObject GetSettingUICell() { return SingletonAsset<InputCellMapper>.Instance.EnumSettingCell; } public virtual List<string> GetUnlocalizedChoices() { return <options>P; } public List<LocalizedString> GetLocalizedChoices() { return null; } public int GetValue() { return <options>P.IndexOf(Value); } public void SetValue(int v, ISettingHandler settingHandler, bool fromUI) { Value = <options>P[v]; ((Setting)this).ApplyValue(); settingHandler.SaveSetting((Setting)(object)this); if (!fromUI) { ((Setting)this).OnSettingChangedExternal(); } ((Setting)this).OnSettingChanged(); } public override void ApplyValue() { <onApply>P?.Invoke(this); } public override SettingUI GetDebugUI(ISettingHandler settingHandler) { return null; } } internal class BepInExFloat : FloatSetting, IBepInExProperty, IExposedSetting { [CompilerGenerated] private string <displayName>P; [CompilerGenerated] private float <defaultValue>P; [CompilerGenerated] private string <categoryName>P; [CompilerGenerated] private float <minValue>P; [CompilerGenerated] private float <maxValue>P; [CompilerGenerated] private float <currentValue>P; [CompilerGenerated] private Action<float>? <saveCallback>P; [CompilerGenerated] private Action<BepInExFloat>? <onApply>P; public BepInExFloat(string displayName, float defaultValue = 0f, string categoryName = "Mods", float minValue = 0f, float maxValue = 1f, float currentValue = 0f, Action<float>? saveCallback = null, Action<BepInExFloat>? onApply = null) { <displayName>P = displayName; <defaultValue>P = defaultValue; <categoryName>P = categoryName; <minValue>P = minValue; <maxValue>P = maxValue; <currentValue>P = currentValue; <saveCallback>P = saveCallback; <onApply>P = onApply; ((FloatSetting)this)..ctor(); } public override void Load(ISettingsSaveLoad loader) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) ((FloatSetting)this).Value = <currentValue>P; float2 minMaxValue = ((FloatSetting)this).GetMinMaxValue(); ((FloatSetting)this).MinValue = minMaxValue.x; ((FloatSetting)this).MaxValue = minMaxValue.y; } public override void Save(ISettingsSaveLoad saver) { <saveCallback>P?.Invoke(((FloatSetting)this).Value); } public override void ApplyValue() { <onApply>P?.Invoke(this); } public string GetDisplayName() { return <displayName>P; } public string GetCategory() { return <categoryName>P; } protected override float GetDefaultValue() { return <defaultValue>P; } protected override float2 GetMinMaxValue() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) return new float2(<minValue>P, <maxValue>P); } } internal class BepInExInt : IntSetting, IBepInExProperty, IExposedSetting { [CompilerGenerated] private string <displayName>P; [CompilerGenerated] private string <category>P; [CompilerGenerated] private int <defaultValue>P; [CompilerGenerated] private int <currentValue>P; [CompilerGenerated] private Action<int>? <saveCallback>P; [CompilerGenerated] private Action<BepInExInt>? <onApply>P; private static GameObject? _settingUICell; public static GameObject? SettingUICell { get { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_settingUICell == (Object)null) { if ((Object)(object)SingletonAsset<InputCellMapper>.Instance == (Object)null || (Object)(object)SingletonAsset<InputCellMapper>.Instance.FloatSettingCell == (Object)null) { return null; } _settingUICell = Object.Instantiate<GameObject>(SingletonAsset<InputCellMapper>.Instance.FloatSettingCell); ((Object)_settingUICell).name = "BepInExIntCell"; FloatSettingUI component = _settingUICell.GetComponent<FloatSettingUI>(); BepInExInt_SettingUI bepInExInt_SettingUI = _settingUICell.AddComponent<BepInExInt_SettingUI>(); bepInExInt_SettingUI.inputField = component.inputField; Object.DestroyImmediate((Object)(object)((Component)component.slider).gameObject); Object.DestroyImmediate((Object)(object)component); bepInExInt_SettingUI.inputField.characterValidation = (CharacterValidation)2; RectTransform component2 = ((Component)bepInExInt_SettingUI.inputField).GetComponent<RectTransform>(); component2.pivot = new Vector2(0.5f, 0.5f); component2.offsetMin = new Vector2(20f, -25f); component2.offsetMax = new Vector2(380f, 25f); Object.DontDestroyOnLoad((Object)(object)_settingUICell); } return _settingUICell; } } public BepInExInt(string displayName, string category, int defaultValue = 0, int currentValue = 0, Action<int>? saveCallback = null, Action<BepInExInt>? onApply = null) { <displayName>P = displayName; <category>P = category; <defaultValue>P = defaultValue; <currentValue>P = currentValue; <saveCallback>P = saveCallback; <onApply>P = onApply; ((IntSetting)this)..ctor(); } public override void Load(ISettingsSaveLoad loader) { ((IntSetting)this).Value = <currentValue>P; } public override void Save(ISettingsSaveLoad saver) { <saveCallback>P?.Invoke(((IntSetting)this).Value); } public override void ApplyValue() { <onApply>P?.Invoke(this); } public override GameObject? GetSettingUICell() { return SettingUICell; } public string GetCategory() { return <category>P; } public string GetDisplayName() { return <displayName>P; } protected override int GetDefaultValue() { return <defaultValue>P; } } internal class BepInExKeyCode : Setting, IBepInExProperty, IExposedSetting { [CompilerGenerated] private string <displayName>P; [CompilerGenerated] private string <category>P; [CompilerGenerated] private KeyCode <defaultValue>P; [CompilerGenerated] private KeyCode <currentValue>P; [CompilerGenerated] private Action<KeyCode>? <saveCallback>P; [CompilerGenerated] private Action<BepInExKeyCode>? <onApply>P; private static GameObject? _settingUICell; public KeyCode Value { get; set; } public static GameObject? SettingUICell { get { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_settingUICell == (Object)null) { if ((Object)(object)SingletonAsset<InputCellMapper>.Instance == (Object)null || (Object)(object)SingletonAsset<InputCellMapper>.Instance.FloatSettingCell == (Object)null) { return null; } _settingUICell = Object.Instantiate<GameObject>(SingletonAsset<InputCellMapper>.Instance.FloatSettingCell); ((Object)_settingUICell).name = "BepInExKeyCodeCell"; FloatSettingUI component = _settingUICell.GetComponent<FloatSettingUI>(); BepInExKeyCode_SettingUI bepInExKeyCode_SettingUI = _settingUICell.AddComponent<BepInExKeyCode_SettingUI>(); RectTransform component2 = ((Component)component.inputField).GetComponent<RectTransform>(); component2.pivot = new Vector2(0.5f, 0.5f); component2.offsetMin = new Vector2(20f, -25f); component2.offsetMax = new Vector2(380f, 25f); bepInExKeyCode_SettingUI.button = _settingUICell.AddComponent<Button>(); ((Object)component.inputField).name = "Button"; Object.DestroyImmediate((Object)(object)((Component)component.inputField.placeholder).gameObject); Object.Destroy((Object)(object)component.inputField); Object.DestroyImmediate((Object)(object)((Component)component.slider).gameObject); Object.DestroyImmediate((Object)(object)component); TextMeshProUGUI componentInChildren = ((Component)bepInExKeyCode_SettingUI.button).GetComponentInChildren<TextMeshProUGUI>(); float num2 = (((TMP_Text)componentInChildren).fontSizeMax = 22f); float fontSize = (((TMP_Text)componentInChildren).fontSizeMin = num2); ((TMP_Text)componentInChildren).fontSize = fontSize; ((TMP_Text)componentInChildren).alignment = (TextAlignmentOptions)514; bepInExKeyCode_SettingUI.text = componentInChildren; Object.DontDestroyOnLoad((Object)(object)_settingUICell); } return _settingUICell; } } public BepInExKeyCode(string displayName, string category, KeyCode defaultValue = 0, KeyCode currentValue = 0, Action<KeyCode>? saveCallback = null, Action<BepInExKeyCode>? onApply = null) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) <displayName>P = displayName; <category>P = category; <defaultValue>P = defaultValue; <currentValue>P = currentValue; <saveCallback>P = saveCallback; <onApply>P = onApply; ((Setting)this)..ctor(); } public override void Load(ISettingsSaveLoad loader) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) Value = <currentValue>P; } public override void Save(ISettingsSaveLoad saver) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) <saveCallback>P?.Invoke(Value); } public override void ApplyValue() { <onApply>P?.Invoke(this); } public override GameObject? GetSettingUICell() { return SettingUICell; } public string GetCategory() { return <category>P; } public string GetDisplayName() { return <displayName>P; } protected KeyCode GetDefaultValue() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return <defaultValue>P; } public override SettingUI GetDebugUI(ISettingHandler settingHandler) { return null; } public void SetValue(KeyCode newValue, ISettingHandler settingHandler) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) Value = newValue; ((Setting)this).ApplyValue(); settingHandler.SaveSetting((Setting)(object)this); } } internal class BepInExOffOn : OffOnSetting, IBepInExProperty, IExposedSetting { [CompilerGenerated] private string <displayName>P; [CompilerGenerated] private bool <defaultValue>P; [CompilerGenerated] private string <category>P; [CompilerGenerated] private bool <currentValue>P; [CompilerGenerated] private Action<bool>? <saveCallback>P; [CompilerGenerated] private Action<BepInExOffOn>? <onApply>P; public BepInExOffOn(string displayName, bool defaultValue = false, string category = "Mods", bool currentValue = false, Action<bool>? saveCallback = null, Action<BepInExOffOn>? onApply = null) { <displayName>P = displayName; <defaultValue>P = defaultValue; <category>P = category; <currentValue>P = currentValue; <saveCallback>P = saveCallback; <onApply>P = onApply; ((OffOnSetting)this)..ctor(); } public override void Load(ISettingsSaveLoad loader) { ((EnumSetting<OffOnMode>)this).Value = (OffOnMode)(<currentValue>P ? 1 : 0); } public override void Save(ISettingsSaveLoad saver) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Invalid comparison between Unknown and I4 <saveCallback>P?.Invoke((int)((EnumSetting<OffOnMode>)this).Value == 1); } public override void ApplyValue() { <onApply>P?.Invoke(this); } protected override OffOnMode GetDefaultValue() { if (<defaultValue>P) { return (OffOnMode)1; } return (OffOnMode)0; } public string GetDisplayName() { return <displayName>P; } public string GetCategory() { return <category>P; } public override List<LocalizedString>? GetLocalizedChoices() { return null; } } internal class BepInExString : StringSetting, IBepInExProperty, IExposedSetting { [CompilerGenerated] private string <displayName>P; [CompilerGenerated] private string <category>P; [CompilerGenerated] private string <defaultValue>P; [CompilerGenerated] private string <currentValue>P; [CompilerGenerated] private Action<string>? <saveCallback>P; [CompilerGenerated] private Action<BepInExString>? <onApply>P; private static GameObject? _settingUICell; public string PlaceholderText { get; set; } public static GameObject? SettingUICell { get { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_settingUICell == (Object)null) { if ((Object)(object)SingletonAsset<InputCellMapper>.Instance == (Object)null || (Object)(object)SingletonAsset<InputCellMapper>.Instance.FloatSettingCell == (Object)null) { return null; } _settingUICell = Object.Instantiate<GameObject>(SingletonAsset<InputCellMapper>.Instance.FloatSettingCell); ((Object)_settingUICell).name = "BepInExStringCell"; FloatSettingUI component = _settingUICell.GetComponent<FloatSettingUI>(); StringSettingUI stringSettingUI = _settingUICell.AddComponent<StringSettingUI>(); stringSettingUI.inputField = component.inputField; Object.DestroyImmediate((Object)(object)((Component)component.slider).gameObject); Object.DestroyImmediate((Object)(object)component); stringSettingUI.inputField.characterValidation = (CharacterValidation)0; RectTransform component2 = ((Component)stringSettingUI.inputField).GetComponent<RectTransform>(); component2.pivot = new Vector2(0.5f, 0.5f); component2.offsetMin = new Vector2(20f, -25f); component2.offsetMax = new Vector2(380f, 25f); TextMeshProUGUI[] componentsInChildren = ((Component)stringSettingUI.inputField).GetComponentsInChildren<TextMeshProUGUI>(); TextMeshProUGUI[] array = componentsInChildren; foreach (TextMeshProUGUI val in array) { float num2 = (((TMP_Text)val).fontSizeMax = 22f); float fontSize = (((TMP_Text)val).fontSizeMin = num2); ((TMP_Text)val).fontSize = fontSize; ((TMP_Text)val).alignment = (TextAlignmentOptions)4097; } Object.DontDestroyOnLoad((Object)(object)_settingUICell); } return _settingUICell; } } public BepInExString(string displayName, string category, string defaultValue = "", string currentValue = "", Action<string>? saveCallback = null, Action<BepInExString>? onApply = null) { <displayName>P = displayName; <category>P = category; <defaultValue>P = defaultValue; <currentValue>P = currentValue; <saveCallback>P = saveCallback; <onApply>P = onApply; PlaceholderText = <defaultValue>P ?? ""; ((StringSetting)this)..ctor(); } public override void Load(ISettingsSaveLoad loader) { ((StringSetting)this).Value = <currentValue>P; } public override void Save(ISettingsSaveLoad saver) { <saveCallback>P?.Invoke(((StringSetting)this).Value); } public override void ApplyValue() { <onApply>P?.Invoke(this); } public override GameObject? GetSettingUICell() { return SettingUICell; } public string GetCategory() { return <category>P; } public string GetDisplayName() { return <displayName>P; } protected override string GetDefaultValue() { return <defaultValue>P; } } public class StringSettingUI : SettingInputUICell { public TMP_InputField? inputField; public override void Setup(Setting setting, ISettingHandler settingHandler) { ISettingHandler settingHandler2 = settingHandler; if (setting == null) { return; } BepInExString stringSetting = setting as BepInExString; if (stringSetting == null) { return; } ((SettingInputUICell)this).RegisterSettingListener(setting); if ((Object)(object)inputField == (Object)null) { return; } inputField.SetTextWithoutNotify(((StringSetting)stringSetting).Value); ((UnityEvent<string>)(object)inputField.onValueChanged).AddListener((UnityAction<string>)OnChanged); TextMeshProUGUI[] componentsInChildren = ((Component)inputField).GetComponentsInChildren<TextMeshProUGUI>(); TextMeshProUGUI[] array = componentsInChildren; foreach (TextMeshProUGUI val in array) { if (((Object)val).name == "Placeholder") { ((TMP_Text)val).text = stringSetting.PlaceholderText; } } void OnChanged(string str) { inputField.SetTextWithoutNotify(str); ((StringSetting)stringSetting).SetValue(str, settingHandler2); } } protected override void OnSettingChangedExternal(Setting setting) { ((SettingInputUICell)this).OnSettingChangedExternal(setting); if ((Object)(object)inputField != (Object)null && setting is BepInExString bepInExString) { inputField.SetTextWithoutNotify(((StringSetting)bepInExString).Value); } } } } namespace PEAKLib.ModConfig.SettingOptions.SettingUI { internal class BepInExInt_SettingUI : SettingInputUICell { public TMP_InputField? inputField; public override void Setup(Setting setting, ISettingHandler settingHandler) { ISettingHandler settingHandler2 = settingHandler; BepInExInt intSetting; if (!((Object)(object)inputField == (Object)null) && setting != null) { intSetting = setting as BepInExInt; if (intSetting != null) { ((SettingInputUICell)this).RegisterSettingListener(setting); inputField.SetTextWithoutNotify(((IntSetting)intSetting).Expose(((IntSetting)intSetting).Value)); ((UnityEvent<string>)(object)inputField.onValueChanged).AddListener((UnityAction<string>)OnChanged); } } void OnChanged(string str) { if (int.TryParse(str, out var result)) { inputField.SetTextWithoutNotify(((IntSetting)intSetting).Expose(result)); ((IntSetting)intSetting).SetValue(result, settingHandler2); } } } protected override void OnSettingChangedExternal(Setting setting) { ((SettingInputUICell)this).OnSettingChangedExternal(setting); if ((Object)(object)inputField != (Object)null && setting is BepInExInt bepInExInt) { inputField.SetTextWithoutNotify(((IntSetting)bepInExInt).Expose(((IntSetting)bepInExInt).Value)); } } } internal class BepInExKeyCode_SettingUI : SettingInputUICell { public Button? button; public TextMeshProUGUI? text; private static BepInExKeyCode_SettingUI? detectingKey = null; internal static KeyCode[] BlackListed = (KeyCode[])(object)new KeyCode[1] { (KeyCode)27 }; public override void Setup(Setting setting, ISettingHandler settingHandler) { //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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown ISettingHandler settingHandler2 = settingHandler; ThrowHelper.ThrowIfFieldNull<Button>(button, "button"); ThrowHelper.ThrowIfFieldNull<TextMeshProUGUI>(text, "text"); if (setting == null) { return; } BepInExKeyCode keyCodeSetting = setting as BepInExKeyCode; if (keyCodeSetting != null) { ((SettingInputUICell)this).RegisterSettingListener(setting); TextMeshProUGUI? obj = text; KeyCode value = keyCodeSetting.Value; ((TMP_Text)obj).text = ((object)(KeyCode)(ref value)).ToString(); ((UnityEvent)button.onClick).AddListener((UnityAction)delegate { StartKeybindCapture(keyCodeSetting, settingHandler2); }); } } protected override void OnSettingChangedExternal(Setting setting) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) ((SettingInputUICell)this).OnSettingChangedExternal(setting); if ((Object)(object)text != (Object)null && setting is BepInExKeyCode bepInExKeyCode) { TextMeshProUGUI? obj = text; KeyCode value = bepInExKeyCode.Value; ((TMP_Text)obj).text = ((object)(KeyCode)(ref value)).ToString(); } } protected override void OnDestroy() { if ((Object)(object)detectingKey == (Object)(object)this) { detectingKey = null; } } private static IEnumerator WaitForKey(Action<KeyCode> onKeyDetected) { while ((Object)(object)detectingKey != (Object)null) { foreach (KeyCode value in Enum.GetValues(typeof(KeyCode))) { if (Input.GetKeyDown(value)) { onKeyDetected?.Invoke(value); yield break; } } yield return null; } } private void StartKeybindCapture(BepInExKeyCode setting, ISettingHandler settingHandler) { BepInExKeyCode setting2 = setting; ISettingHandler settingHandler2 = settingHandler; if ((Object)(object)detectingKey != (Object)null) { return; } detectingKey = this; if ((Object)(object)text != (Object)null) { ((TMP_Text)text).text = "SELECT A KEY"; } ((MonoBehaviour)this).StartCoroutine(WaitForKey(delegate(KeyCode key) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (!BlackListed.Contains(key)) { setting2.SetValue(key, settingHandler2); } ((SettingInputUICell)this).OnSettingChangedExternal((Setting)(object)setting2); detectingKey = null; })); } } } namespace PEAKLib.ModConfig.Hooks { [MonoDetourTargets(typeof(MenuWindow))] internal static class MenuWindowHooks { public static GameObject? SettingsCellPrefab { get; internal set; } [MonoDetourHookInitialize] private static void Init() { Start.Prefix(Prefix_Start); } private static void Prefix_Start(MenuWindow self) { MainMenu val = (MainMenu)(object)((self is MainMenu) ? self : null); if (val == null) { return; } MenuWindow settingsMenu = val.settingsMenu; PauseMainMenu val2 = (PauseMainMenu)(object)((settingsMenu is PauseMainMenu) ? settingsMenu : null); if (val2 != null) { SharedSettingsMenu componentInChildren = ((Component)val2).GetComponentInChildren<SharedSettingsMenu>(); if ((Object)(object)componentInChildren != (Object)null) { SettingsCellPrefab = componentInChildren.m_settingsCellPrefab; } } } } } namespace PEAKLib.ModConfig.Components { internal class ModdedSettingsTABS : TABS<ModdedTABSButton> { public ModdedSettingsMenu? SettingsMenu; public override void OnSelected(ModdedTABSButton button) { ThrowHelper.ThrowIfFieldNull<ModdedSettingsMenu>(SettingsMenu, "SettingsMenu"); SettingsMenu.ShowSettings(button.category); } } internal class ModdedTABSButton : TAB_Button { public string category = ""; public GameObject? SelectedGraphic; private void Update() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) ((Graphic)base.text).color = Color.Lerp(((Graphic)base.text).color, ((TAB_Button)this).Selected ? Color.black : Color.white, Time.unscaledDeltaTime * 7f); if ((Object)(object)SelectedGraphic != (Object)null) { SelectedGraphic.gameObject.SetActive(((TAB_Button)this).Selected); } } } internal class ModdedSettingsMenu : MonoBehaviour { private List<IExposedSetting>? settings; private readonly List<SettingsUICell> m_spawnedCells = new List<SettingsUICell>(); private Coroutine? m_fadeInCoroutine; private string search = ""; public ModdedSettingsTABS Tabs { get; set; } public Transform Content { get; set; } private void OnEnable() { RefreshSettings(); if ((Object)(object)Tabs != (Object)null && (Object)(object)((TABS<ModdedTABSButton>)(object)Tabs).selectedButton != (Object)null) { ((TABS<ModdedTABSButton>)(object)Tabs).Select(((TABS<ModdedTABSButton>)(object)Tabs).selectedButton); } } public void SetSearch(string search) { this.search = search.ToLower(); ShowSettings(((TABS<ModdedTABSButton>)(object)Tabs).selectedButton.category); } public void ShowSettings(string category) { string category2 = category; if (m_fadeInCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(m_fadeInCoroutine); m_fadeInCoroutine = null; } foreach (SettingsUICell spawnedCell in m_spawnedCells) { Object.Destroy((Object)(object)((Component)spawnedCell).gameObject); } m_spawnedCells.Clear(); RefreshSettings(); if (settings == null) { return; } bool isSearching = !string.IsNullOrEmpty(search); foreach (IExposedSetting item in from <>h__TransparentIdentifier1 in (from <>h__TransparentIdentifier0 in settings.Where((IExposedSetting setting) => setting != null && setting is IBepInExProperty).Select(delegate(IExposedSetting setting) { int searchCheck; if (isSearching) { string displayName = setting.GetDisplayName(); searchCheck = ((displayName != null && (displayName.ToLower()?.Contains(search)).GetValueOrDefault()) ? 1 : 0); } else { searchCheck = 0; } return new { setting = setting, searchCheck = ((byte)searchCheck != 0) }; }) let notSearching = !isSearching && setting.GetCategory() == category2.ToString() where searchCheck || notSearching select <>h__TransparentIdentifier1).Where(<>h__TransparentIdentifier1 => { IExposedSetting setting2 = <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.setting; IConditionalSetting val2 = (IConditionalSetting)(object)((setting2 is IConditionalSetting) ? setting2 : null); return val2 == null || val2.ShouldShow(); }) select <>h__TransparentIdentifier1.<>h__TransparentIdentifier0.setting) { if ((Object)(object)MenuWindowHooks.SettingsCellPrefab == (Object)null) { ModConfigPlugin.Log.LogError((object)"SettingsCellPrefab has not been loaded."); return; } Setting val = (Setting)(object)((item is Setting) ? item : null); if (val == null) { ModConfigPlugin.Log.LogError((object)"Invalid IExposedSetting"); return; } SettingsUICell component = Object.Instantiate<GameObject>(MenuWindowHooks.SettingsCellPrefab, Content).GetComponent<SettingsUICell>(); m_spawnedCells.Add(component); ((TMP_Text)component.m_text).text = item.GetDisplayName(); component.m_canvasGroup = ((Component)component).GetComponent<CanvasGroup>(); component.m_canvasGroup.alpha = 0f; Object.Instantiate<GameObject>(val.GetSettingUICell(), component.m_settingsContentParent).GetComponent<SettingInputUICell>().Setup(val, (ISettingHandler)(object)GameHandler.Instance.SettingsHandler); } m_fadeInCoroutine = ((MonoBehaviour)this).StartCoroutine(FadeInCells()); } public void RefreshSettings() { if ((Object)(object)GameHandler.Instance != (Object)null) { settings = ISettingsHandlerExtensions.GetSettingsThatImplements<IExposedSetting>((ISettingHandler)(object)GameHandler.Instance.SettingsHandler); } } private IEnumerator FadeInCells() { int i = 0; foreach (SettingsUICell spawnedCell in m_spawnedCells) { spawnedCell.FadeIn(); yield return (object)new WaitForSecondsRealtime(0.05f); i++; } m_fadeInCoroutine = null; } } } 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 { } }
mods/com.github.PEAKModding.PEAKLib.UI.dll
Decompiled 5 months agousing System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; 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.Logging; using Microsoft.CodeAnalysis; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using On.MenuWindow; using On.PauseOptionsMenu; using PEAKLib.Core; using PEAKLib.UI.Elements; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.TextCore; using UnityEngine.UI; using Zorro.Core; using Zorro.Settings; using Zorro.Settings.UI; [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("PEAKModding, Rafa")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("UI module of the PEAKLib community API for the game PEAK.")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0+9f92ed4622ec2139755c37f9193f7cc77e010734")] [assembly: AssemblyProduct("com.github.PEAKModding.PEAKLib.UI")] [assembly: AssemblyTitle("PEAKLib.UI")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.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 On.PauseOptionsMenu { internal static class Initialize { public delegate void PrefixSignature(PauseOptionsMenu self); public delegate void PostfixSignature(PauseOptionsMenu self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(PauseOptionsMenu); MethodInfo method = typeFromHandle.GetMethod("Initialize", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("PauseOptionsMenu", "Initialize"); } return method; } } internal static class get_openOnStart { } internal static class get_selectOnOpen { } internal static class get_objectToSelectOnOpen { } internal static class get_closeOnPause { } internal static class get_closeOnUICancel { } internal static class InviteFriends { } internal static class OnOpen { } internal static class OnClose { } internal static class OpenBadgeMenu { } internal static class OpenSettingsMenu { } internal static class OpenControlsMenu { } internal static class _ctor { } } namespace On.MenuWindow { internal static class Start { public delegate void PrefixSignature(MenuWindow self); public delegate void PostfixSignature(MenuWindow self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(MenuWindow); MethodInfo method = typeFromHandle.GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("MenuWindow", "Start"); } return method; } } internal static class Initialize { public delegate void PrefixSignature(MenuWindow self); public delegate void PostfixSignature(MenuWindow self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (MethodBase)hook.Method, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(MenuWindow); MethodInfo method = typeFromHandle.GetMethod("Initialize", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("MenuWindow", "Initialize"); } return method; } } internal static class get_openOnStart { } internal static class get_selectOnOpen { } internal static class get_objectToSelectOnOpen { } internal static class get_closeOnPause { } internal static class get_closeOnUICancel { } internal static class get_blocksPlayerInput { } internal static class get_showCursorWhileOpen { } internal static class get_autoHideOnClose { } internal static class get_isOpen { } internal static class set_isOpen { } internal static class get_inputActive { } internal static class set_inputActive { } internal static class get_initialized { } internal static class set_initialized { } internal static class get_panel { } internal static class Update { } internal static class TestCloseViaInput { } internal static class Open { } internal static class OnOpen { } internal static class OnDestroy { } internal static class CloseAllWindows { } internal static class StartClosed { } internal static class Close { } internal static class ForceClose { } internal static class OnClose { } internal static class Show { } internal static class Hide { } internal static class SetInputActive { } internal static class SelectStartingElement { } internal static class _ctor { } internal static class _cctor { } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public bool DistinguishOverloadsByName { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] 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")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace PEAKLib.UI { public static class ElementExtensions { public static T ParentTo<T>(this T instance, Transform transform) where T : PeakElement { ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); ThrowHelper.ThrowIfArgumentNull<Transform>(transform, "transform"); ((Component)instance).transform.SetParent(transform, false); return instance; } public static T ParentTo<T>(this T instance, Component component) where T : PeakElement { ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); ThrowHelper.ThrowIfArgumentNull<Component>(component, "component"); Transform val = ThrowHelper.ThrowIfFieldNull<Transform>(component.transform, "component.transform"); ((Component)instance).transform.SetParent(val, false); return instance; } public static GameObject ParentTo(this GameObject instance, Transform transform) { ThrowHelper.ThrowIfArgumentNull<GameObject>(instance, "instance"); ThrowHelper.ThrowIfArgumentNull<Transform>(transform, "transform"); instance.transform.SetParent(transform, false); return instance; } public static GameObject ParentTo(this GameObject instance, Component component) { ThrowHelper.ThrowIfArgumentNull<GameObject>(instance, "instance"); ThrowHelper.ThrowIfArgumentNull<Component>(component, "component"); Transform val = ThrowHelper.ThrowIfFieldNull<Transform>(component.transform, "component.transform"); instance.transform.SetParent(val, false); return instance; } public static T SetSiblingIndex<T>(this T instance, int index) where T : PeakElement { ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); ((Component)instance).transform.SetSiblingIndex(index); return instance; } public static GameObject SetSiblingIndex(this GameObject instance, int index) { ThrowHelper.ThrowIfArgumentNull<GameObject>(instance, "instance"); instance.transform.SetSiblingIndex(index); return instance; } public static T SetPosition<T>(this T instance, Vector2 position) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.anchoredPosition = position; return instance; } public static T SetSize<T>(this T instance, Vector2 size) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.sizeDelta = size; return instance; } public static T SetOffsetMin<T>(this T instance, Vector2 offsetMin) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.offsetMin = offsetMin; return instance; } public static T SetOffsetMax<T>(this T instance, Vector2 offsetMax) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.offsetMax = offsetMax; return instance; } public static T SetAnchorMin<T>(this T instance, Vector2 anchorMin) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.anchorMin = anchorMin; return instance; } public static T SetAnchorMax<T>(this T instance, Vector2 anchorMax) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.anchorMax = anchorMax; return instance; } public static T SetAnchorMinMax<T>(this T instance, Vector2 anchorValue) where T : PeakElement { //IL_0017: 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) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.anchorMin = anchorValue; instance.RectTransform.anchorMax = anchorValue; return instance; } public static T SetPivot<T>(this T instance, Vector2 pivot) where T : PeakElement { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); instance.RectTransform.pivot = pivot; return instance; } public static T AlignToParent<T>(this T instance, UIAlignment alignment) where T : PeakElement { //IL_0051: 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_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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010b: 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_0119: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); ThrowHelper.ThrowIfArgumentNull<UIAlignment>(alignment, "alignment"); Vector2 val = (Vector2)(alignment switch { UIAlignment.TopLeft => new Vector2(0f, 1f), UIAlignment.TopCenter => new Vector2(0.5f, 1f), UIAlignment.TopRight => new Vector2(1f, 1f), UIAlignment.MiddleLeft => new Vector2(0f, 0.5f), UIAlignment.MiddleCenter => new Vector2(0.5f, 0.5f), UIAlignment.MiddleRight => new Vector2(1f, 0.5f), UIAlignment.BottomLeft => new Vector2(0f, 0f), UIAlignment.BottomCenter => new Vector2(0.5f, 0f), UIAlignment.BottomRight => new Vector2(1f, 0f), _ => Vector2.zero, }); RectTransform rectTransform = instance.RectTransform; rectTransform.anchorMin = val; rectTransform.anchorMax = val; rectTransform.pivot = val; rectTransform.anchoredPosition = Vector2.zero; return instance; } public static T ExpandToParent<T>(this T instance) where T : PeakElement { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); RectTransform rectTransform = instance.RectTransform; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; return instance; } public static GameObject ExpandToParent(this GameObject instance) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<GameObject>(instance, "instance"); Transform transform = instance.transform; RectTransform val = (RectTransform)(object)((transform is RectTransform) ? transform : null); if (val == null) { throw new Exception("[" + ((Object)instance).name + "] does not contain a RectTransform"); } val.anchorMin = Vector2.zero; val.anchorMax = Vector2.one; val.offsetMin = Vector2.zero; val.offsetMax = Vector2.zero; return instance; } public static T AddLocalization<T>(this T instance, string text, Language language) where T : PeakLocalizableElement { //IL_00ba: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); if (((Object)instance).name == "UI_PeakText") { throw new Exception("You need to use a unique name to use localization. E.g. MenuAPI.CreateText(\"my cool text\", \"mymod_my_unique_name\")"); } TMP_Text val = ThrowHelper.ThrowIfFieldNull<TMP_Text>(instance.Text, "instance.Text"); string index = ((Object)instance).name.ToUpperInvariant(); LocalizedText val2 = instance.localizedText; if ((Object)(object)val2 == (Object)null) { val2 = ((Component)val).gameObject.AddComponent<LocalizedText>(); val2.index = index; val2.tmp = instance.Text; instance.localizedText = val2; } if (string.IsNullOrEmpty(instance.unlocalizedText)) { instance.unlocalizedText = text; } MenuAPI.CreateLocalizationInternal(index, text, language); val.text = val2.GetText(); return instance; } public static T SetLocalizationIndex<T>(this T instance, string index) where T : PeakLocalizableElement { ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); TMP_Text val = ThrowHelper.ThrowIfFieldNull<TMP_Text>(instance.Text, "instance.Text"); LocalizedText val2 = instance.localizedText; if ((Object)(object)val2 == (Object)null) { val2 = ((Component)val).gameObject.AddComponent<LocalizedText>(); val2.tmp = instance.Text; instance.localizedText = val2; } val2.index = index; val.text = val2.GetText(); return instance; } public static T SetLocalizationIndex<T>(this T instance, TranslationKey translationKey) where T : PeakLocalizableElement { ThrowHelper.ThrowIfArgumentNull<T>(instance, "instance"); ThrowHelper.ThrowIfArgumentNull<TranslationKey>(translationKey, "translationKey"); instance.SetLocalizationIndex(translationKey.Index); return instance; } } public static class MenuAPI { public delegate void BuilderDelegate(Transform transform); internal static BuilderDelegate? pauseMenuBuilderDelegate; internal static BuilderDelegate? mainMenuBuilderDelegate; internal static BuilderDelegate? settingsMenuBuilderDelegate; public const float OPTIONS_WIDTH = 277f; public static void AddToMainMenu(BuilderDelegate builderDelegate) { mainMenuBuilderDelegate = (BuilderDelegate)Delegate.Combine(mainMenuBuilderDelegate, builderDelegate); } public static void AddToPauseMenu(BuilderDelegate builderDelegate) { pauseMenuBuilderDelegate = (BuilderDelegate)Delegate.Combine(pauseMenuBuilderDelegate, builderDelegate); } public static void AddToSettingsMenu(BuilderDelegate builderDelegate) { settingsMenuBuilderDelegate = (BuilderDelegate)Delegate.Combine(settingsMenuBuilderDelegate, builderDelegate); } public static PeakCustomPage CreatePage(string pageName) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(pageName, "pageName"); return new GameObject(pageName).AddComponent<PeakCustomPage>(); } public static PeakCustomPage CreatePageWithBackground(string pageName) { return CreatePage(pageName).CreateBackground(); } public static PeakMenuButton CreateMenuButton(string buttonName) { ThrowHelper.ThrowIfFieldNull<string>(buttonName, "buttonName"); if ((Object)(object)Templates.ButtonTemplate == (Object)null) { throw new Exception("You're creating MenuButton too early! Prefab hasn't been loaded yet."); } GameObject val = Object.Instantiate<GameObject>(Templates.ButtonTemplate); ((Object)val).name = "UI_MainMenuButton_" + buttonName; PeakMenuButton peakMenuButton = val.AddComponent<PeakMenuButton>(); return peakMenuButton.SetText(buttonName); } public static PeakMenuButton CreatePauseMenuButton(string buttonName) { return CreateMenuButton(buttonName).SetWidth(277f); } public static PeakText CreateText(string displayText) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown GameObject val = new GameObject("UI_PeakText", new Type[1] { typeof(PeakText) }); return val.GetComponent<PeakText>().SetText(displayText); } public static PeakText CreateText(string displayText, string objectName = "UI_PeakText") { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown ThrowHelper.ThrowIfArgumentNull<string>(displayText, "displayText"); ThrowHelper.ThrowIfArgumentNullOrWhiteSpace(objectName, "objectName"); GameObject val = new GameObject(objectName, new Type[1] { typeof(PeakText) }); return val.GetComponent<PeakText>().SetText(displayText); } public static PeakButton CreateButton(string buttonName) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown ThrowHelper.ThrowIfFieldNullOrWhiteSpace(buttonName, "buttonName"); GameObject val = new GameObject(buttonName); return val.AddComponent<PeakButton>(); } public static PeakScrollableContent CreateScrollableContent(string scrollableName) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return new GameObject(scrollableName).AddComponent<PeakScrollableContent>(); } public static PeakTextInput CreateTextInput(string inputName) { PeakTextInput peakTextInput = PeakTextInput.Create(); ((Object)peakTextInput).name = inputName; return peakTextInput; } internal static void CreateLocalizationInternal(string index, string translation, Language language) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected I4, but got Unknown string translation2 = translation; index = index.ToUpperInvariant(); if (!LocalizedText.MAIN_TABLE.TryGetValue(index, out var value)) { value = new List<string>(); value.AddRange(from Language _ in Enum.GetValues(typeof(Language)) select translation2); LocalizedText.MAIN_TABLE.Add(index, value); } else { value[(int)language] = translation2; } } public static TranslationKey CreateLocalization(string index) { if (string.IsNullOrEmpty(index)) { throw new ArgumentNullException("index"); } return new TranslationKey(index); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.github.PEAKModding.PEAKLib.UI", "PEAKLib.UI", "1.3.0")] public class UIPlugin : BaseUnityPlugin { public const string Id = "com.github.PEAKModding.PEAKLib.UI"; internal static ManualLogSource Log { get; } = Logger.CreateLogSource(Name); public static string Name => "PEAKLib.UI"; public static string Version => "1.3.0"; private void Awake() { MonoDetourManager.InvokeHookInitializers(typeof(UIPlugin).Assembly); Log.LogInfo((object)("Plugin " + Name + " is loaded!")); } } public record TranslationKey(string Index) { public TranslationKey AddLocalization(string text, Language language) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) MenuAPI.CreateLocalizationInternal(Index, text, language); return this; } } public enum UIAlignment { TopLeft, TopCenter, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight } public static class Utilities { public static Color GetContrastingColor(Color input, float shiftAmount = 0.2f) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) float num = default(float); float num2 = default(float); float num3 = default(float); Color.RGBToHSV(input, ref num, ref num2, ref num3); num3 = ((!(num3 > 0.5f)) ? Mathf.Clamp01(num3 + shiftAmount) : Mathf.Clamp01(num3 - shiftAmount)); return Color.HSVToRGB(num, num2, num3); } public static void ExpandToParent(RectTransform target) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0047: Unknown result type (might be due to invalid IL or missing references) ThrowHelper.ThrowIfArgumentNull<RectTransform>(target, "target"); if ((Object)(object)((Transform)target).parent == (Object)null) { throw new NullReferenceException("field target.parent is null!"); } target.anchorMin = Vector2.zero; target.anchorMax = Vector2.one; target.offsetMin = Vector2.zero; target.offsetMax = Vector2.zero; } } } namespace PEAKLib.UI.Hooks { [MonoDetourTargets(typeof(MenuWindow))] internal static class MenuWindowHooks { [MonoDetourHookInitialize] private static void Init() { Start.Prefix(Prefix_Start); } private static void Prefix_Start(MenuWindow self) { PauseMainMenu val = (PauseMainMenu)(object)((self is PauseMainMenu) ? self : null); if (val != null) { SharedSettingsMenu componentInChildren = ((Component)val).GetComponentInChildren<SharedSettingsMenu>(); if ((Object)(object)componentInChildren != (Object)null) { MenuAPI.settingsMenuBuilderDelegate?.Invoke(((Component)componentInChildren).transform); } } else { PauseSettingsMenu val2 = (PauseSettingsMenu)(object)((self is PauseSettingsMenu) ? self : null); if (val2 != null) { SharedSettingsMenu componentInChildren2 = ((Component)val2).GetComponentInChildren<SharedSettingsMenu>(); if ((Object)(object)componentInChildren2 != (Object)null) { MenuAPI.settingsMenuBuilderDelegate?.Invoke(((Component)componentInChildren2).transform); } } } MainMenu val3 = (MainMenu)(object)((self is MainMenu) ? self : null); if (val3 == null) { return; } MenuWindow settingsMenu = val3.settingsMenu; PauseMainMenu val4 = (PauseMainMenu)(object)((settingsMenu is PauseMainMenu) ? settingsMenu : null); if (val4 == null) { return; } SharedSettingsMenu componentInChildren3 = ((Component)val4).GetComponentInChildren<SharedSettingsMenu>(); if ((Object)(object)componentInChildren3 != (Object)null) { Templates.SettingsCellPrefab = componentInChildren3.m_settingsCellPrefab; } else { UIPlugin.Log.LogError((object)"Failed to find SharedSettingsMenu in MenuWindowHooks.Prefix_Start. This should not occur, please report it on PeakLib GitHub."); } if ((Object)(object)Templates.ButtonTemplate == (Object)null) { Templates.ButtonTemplate = Object.Instantiate<GameObject>(((Component)val4.backButton).gameObject); ((Object)Templates.ButtonTemplate).name = "PeakUIButton"; LocalizedText componentInChildren4 = Templates.ButtonTemplate.GetComponentInChildren<LocalizedText>(); if ((Object)(object)componentInChildren4 != (Object)null) { Object.DestroyImmediate((Object)(object)componentInChildren4); } Object.DontDestroyOnLoad((Object)(object)Templates.ButtonTemplate); } MenuAPI.mainMenuBuilderDelegate?.Invoke(((Component)val3.playWithFriendsButton).transform.parent); } } [MonoDetourTargets(typeof(PauseOptionsMenu))] internal static class PauseMenuHooks { [MonoDetourHookInitialize] private static void Init() { On.PauseOptionsMenu.Initialize.Prefix(Prefix_Initialize); } private static void Prefix_Initialize(PauseOptionsMenu self) { Transform val = ((Component)self).transform.Find("MainPage/Options"); if ((Object)(object)val != (Object)null) { MenuAPI.pauseMenuBuilderDelegate?.Invoke(val); } else { UIPlugin.Log.LogError((object)"Failed to find \"MainPage/Options\" in PauseMenuHooks.Prefix_Initialize. This should not occur, please report it on PeakLib GitHub."); } } } } namespace PEAKLib.UI.Elements { [RequireComponent(typeof(Button))] public class PeakButton : PeakElement { public Button Button { get; set; } public PeakText Text { get; set; } private void Awake() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0054: 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) base.RectTransform = ((Component)this).GetComponent<RectTransform>(); Image component = ElementExtensions.ParentTo(new GameObject("Image", new Type[1] { typeof(Image) }), ((Component)this).transform).ExpandToParent().GetComponent<Image>(); ((Graphic)component).color = new Color(0.1792453f, 0.1253449f, 0.09046815f, 62f / 85f); Text = MenuAPI.CreateText(((Object)this).name, "Text (TMP)").ParentTo(((Component)this).transform).ExpandToParent() .SetPosition(Vector2.zero); Button = ((Component)this).GetComponent<Button>(); ((Selectable)Button).image = component; TextMeshProUGUI textMesh = Text.TextMesh; ((TMP_Text)textMesh).enableAutoSizing = true; ((TMP_Text)textMesh).fontSizeMin = 18f; ((TMP_Text)textMesh).fontSizeMax = 22f; ((TMP_Text)textMesh).fontSize = 22f; ((TMP_Text)textMesh).fontStyle = (FontStyles)16; ((TMP_Text)textMesh).alignment = (TextAlignmentOptions)514; } public PeakButton SetWidth(float width) { //IL_001e: 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) ThrowHelper.ThrowIfFieldNull<RectTransform>(base.RectTransform, "RectTransform"); base.RectTransform.sizeDelta = new Vector2(width, base.RectTransform.sizeDelta.y); return this; } public PeakButton SetHeight(float height) { //IL_001d: 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) ThrowHelper.ThrowIfFieldNull<RectTransform>(base.RectTransform, "RectTransform"); base.RectTransform.sizeDelta = new Vector2(base.RectTransform.sizeDelta.x, height); return this; } public PeakButton OnClick(UnityAction onClickEvent) { ThrowHelper.ThrowIfArgumentNull<UnityAction>(onClickEvent, "onClickEvent"); ((UnityEvent)Button.onClick).AddListener(onClickEvent); return this; } } [RequireComponent(typeof(RectTransform))] [RequireComponent(typeof(Canvas))] [RequireComponent(typeof(CanvasScaler))] [RequireComponent(typeof(GraphicRaycaster))] public class PeakCustomPage : MenuWindow { public static readonly Color DEFAULT_BACKGROUND_COLOR = new Color(0f, 0f, 0f, 0.9569f); private UnityAction? onCloseAction; private UnityAction? onOpenAction; private Canvas Canvas { get; set; } private CanvasScaler Scaler { get; set; } private Image? Background { get; set; } public override bool openOnStart => OpenOnStart; public override bool selectOnOpen => SelectOnOpen; public override bool closeOnPause => CloseOnPause; public override bool closeOnUICancel => CloseOnUICancel; public override bool autoHideOnClose => AutoHideOnClose; public override bool blocksPlayerInput => BlocksPlayerInput; public override bool showCursorWhileOpen => ShowCursorWhileOpen; public bool OpenOnStart { get; set; } public bool SelectOnOpen { get; set; } = true; public bool CloseOnPause { get; set; } = true; public bool CloseOnUICancel { get; set; } = true; public bool AutoHideOnClose { get; set; } = true; public bool BlocksPlayerInput { get; set; } = true; public bool ShowCursorWhileOpen { get; set; } = true; private void Awake() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) Canvas = ((Component)this).GetComponent<Canvas>(); Canvas.renderMode = (RenderMode)0; Canvas.additionalShaderChannels = (AdditionalCanvasShaderChannels)31; Canvas.sortingOrder = 1; Scaler = ((Component)this).GetComponent<CanvasScaler>(); Scaler.uiScaleMode = (ScaleMode)1; Scaler.referenceResolution = new Vector2(1920f, 1080f); Scaler.matchWidthOrHeight = 1f; } public PeakCustomPage CreateBackground(Color? backgroundColor = null) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_0067: 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) //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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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) if ((Object)(object)Background == (Object)null) { GameObject val = new GameObject("Background", new Type[2] { typeof(CanvasRenderer), typeof(Image) }); val.transform.SetParent(((Component)this).transform, false); Background = val.GetComponent<Image>(); RectTransform rectTransform = ((Graphic)Background).rectTransform; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; Vector2 offsetMin = (rectTransform.offsetMax = Vector2.zero); rectTransform.offsetMin = offsetMin; if (!backgroundColor.HasValue) { backgroundColor = DEFAULT_BACKGROUND_COLOR; } ((Graphic)Background).color = backgroundColor.Value; } return this; } public override void OnClose() { UnityAction? obj = onCloseAction; if (obj != null) { obj.Invoke(); } } public override void OnOpen() { UnityAction? obj = onOpenAction; if (obj != null) { obj.Invoke(); } } public PeakCustomPage SetOnClose(UnityAction onCloseEvent) { onCloseAction = onCloseEvent; return this; } public PeakCustomPage SetOnOpen(UnityAction onOpenEvent) { onOpenAction = onOpenEvent; return this; } } [RequireComponent(typeof(RectTransform))] public class PeakElement : MonoBehaviour { public RectTransform RectTransform { get; internal set; } private void Awake() { RectTransform = ((Component)this).GetComponent<RectTransform>(); } } [RequireComponent(typeof(ScrollRect))] [RequireComponent(typeof(RectMask2D))] public class PeakHorizontalTabs : PeakElement { private RectTransform Content { get; set; } private void Awake() { //IL_001c: 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_0050: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00f1: Unknown result type (might be due to invalid IL or missing references) base.RectTransform = ((Component)this).GetComponent<RectTransform>(); base.RectTransform.anchoredPosition = new Vector2(0f, 0f); base.RectTransform.sizeDelta = new Vector2(0f, 40f); base.RectTransform.pivot = new Vector2(0.5f, 1f); base.RectTransform.anchorMin = new Vector2(0f, 1f); base.RectTransform.anchorMax = new Vector2(1f, 1f); ScrollRect component = ((Component)this).GetComponent<ScrollRect>(); GameObject val = new GameObject("Content", new Type[3] { typeof(RectTransform), typeof(HorizontalLayoutGroup), typeof(ContentSizeFitter) }); Content = val.GetComponent<RectTransform>(); ((Transform)Content).SetParent(((Component)this).transform, false); Content.pivot = Vector2.zero; Utilities.ExpandToParent(Content); component.content = Content; component.scrollSensitivity = 50f; component.elasticity = 0f; component.vertical = false; component.horizontal = true; component.movementType = (MovementType)2; HorizontalLayoutGroup component2 = ((Component)Content).GetComponent<HorizontalLayoutGroup>(); ((HorizontalOrVerticalLayoutGroup)component2).spacing = 20f; ((HorizontalOrVerticalLayoutGroup)component2).childControlWidth = true; ((HorizontalOrVerticalLayoutGroup)component2).childForceExpandWidth = true; ((HorizontalOrVerticalLayoutGroup)component2).childForceExpandHeight = true; ((HorizontalOrVerticalLayoutGroup)component2).childControlHeight = true; ContentSizeFitter component3 = ((Component)Content).GetComponent<ContentSizeFitter>(); component3.horizontalFit = (FitMode)2; } public GameObject AddTab(string tabName) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Expected O, but got Unknown //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(tabName, new Type[3] { typeof(RectTransform), typeof(Button), typeof(LayoutElement) }); val.transform.SetParent((Transform)(object)Content, false); LayoutElement component = val.GetComponent<LayoutElement>(); component.minWidth = 220f; component.flexibleWidth = 1f; component.preferredHeight = 40f; RectTransform component2 = ElementExtensions.ParentTo(new GameObject("Image", new Type[2] { typeof(RectTransform), typeof(Image) }), val.transform).GetComponent<RectTransform>(); Utilities.ExpandToParent(component2); Image component3 = ((Component)component2).GetComponent<Image>(); ((Graphic)component3).color = new Color(0.1792453f, 0.1253449f, 0.09046815f, 62f / 85f); RectTransform component4 = ElementExtensions.ParentTo(new GameObject("Selected", new Type[2] { typeof(RectTransform), typeof(Image) }), val.transform).GetComponent<RectTransform>(); Utilities.ExpandToParent(component4); PeakText peakText = new GameObject("Text (TMP)", new Type[1] { typeof(PeakText) }).GetComponent<PeakText>().ParentTo(val.transform); RectTransform component5 = ((Component)peakText).GetComponent<RectTransform>(); component5.anchorMin = Vector2.zero; component5.anchorMax = Vector2.one; component5.pivot = Vector2.zero; component5.anchoredPosition = Vector2.zero; ((TMP_Text)peakText.TextMesh).enableAutoSizing = true; ((TMP_Text)peakText.TextMesh).fontSizeMin = 18f; ((TMP_Text)peakText.TextMesh).fontSizeMax = 22f; ((TMP_Text)peakText.TextMesh).fontSize = 22f; ((TMP_Text)peakText.TextMesh).fontStyle = (FontStyles)16; ((TMP_Text)peakText.TextMesh).alignment = (TextAlignmentOptions)514; ((TMP_Text)peakText.TextMesh).text = tabName; return val; } } [RequireComponent(typeof(RectTransform))] public class PeakLocalizableElement : PeakElement { internal string unlocalizedText = ""; internal LocalizedText? localizedText; public TMP_Text Text { get; internal set; } internal void SetTextInternal(string text) { ThrowHelper.ThrowIfFieldNull<TMP_Text>(Text, "Text").text = text; unlocalizedText = text; } } public class PeakMenuButton : PeakLocalizableElement { public Button Button { get; private set; } public Image Panel { get; private set; } public Image BorderTop { get; private set; } public Image BorderBottom { get; private set; } private void Awake() { base.RectTransform = ((Component)this).GetComponent<RectTransform>(); Button = ((Component)this).GetComponent<Button>(); Panel = ((Component)((Component)this).transform.Find("Panel")).GetComponent<Image>(); base.Text = (TMP_Text)(object)((Component)((Component)this).transform.Find("Text")).GetComponent<TextMeshProUGUI>(); BorderTop = ((Component)((Component)this).transform.Find("Border")).GetComponent<Image>(); BorderBottom = ((Component)((Component)this).transform.GetChild(((Component)BorderTop).transform.GetSiblingIndex() + 1)).GetComponent<Image>(); } public PeakMenuButton SetText(string text) { SetTextInternal(text); return this; } public PeakMenuButton SetColor(Color color, bool automaticBorderColor = true) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) ((Graphic)ThrowHelper.ThrowIfFieldNull<Image>(Panel, "Panel")).color = color; if (automaticBorderColor) { SetBorderColor(Utilities.GetContrastingColor(color)); } return this; } public PeakMenuButton SetBorderColor(Color color) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) ((Graphic)ThrowHelper.ThrowIfFieldNull<Image>(BorderTop, "BorderTop")).color = color; ((Graphic)ThrowHelper.ThrowIfFieldNull<Image>(BorderBottom, "BorderBottom")).color = color; return this; } public PeakMenuButton SetWidth(float width) { //IL_001e: 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) ThrowHelper.ThrowIfFieldNull<RectTransform>(base.RectTransform, "RectTransform"); base.RectTransform.sizeDelta = new Vector2(width, base.RectTransform.sizeDelta.y); return this; } public PeakMenuButton OnClick(UnityAction onClickEvent) { ThrowHelper.ThrowIfArgumentNull<UnityAction>(onClickEvent, "onClickEvent"); ((UnityEvent)Button.onClick).AddListener(onClickEvent); return this; } } [RequireComponent(typeof(RectTransform))] [RequireComponent(typeof(RectMask2D))] [RequireComponent(typeof(ScrollRect))] public class PeakScrollableContent : PeakElement { public RectTransform Content { get; private set; } private void Awake() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) base.RectTransform = ((Component)this).GetComponent<RectTransform>(); ScrollRect component = ((Component)this).GetComponent<ScrollRect>(); component.scrollSensitivity = 50f; component.elasticity = 0f; component.vertical = true; component.horizontal = false; component.movementType = (MovementType)2; GameObject val = new GameObject("Content", new Type[3] { typeof(RectTransform), typeof(VerticalLayoutGroup), typeof(ContentSizeFitter) }); Content = val.GetComponent<RectTransform>(); ((Transform)Content).SetParent(((Component)this).transform, false); Content.pivot = new Vector2(0.5f, 1f); VerticalLayoutGroup component2 = val.GetComponent<VerticalLayoutGroup>(); ((HorizontalOrVerticalLayoutGroup)component2).childControlHeight = false; ((HorizontalOrVerticalLayoutGroup)component2).childForceExpandHeight = false; Utilities.ExpandToParent(Content); ContentSizeFitter component3 = val.GetComponent<ContentSizeFitter>(); component3.verticalFit = (FitMode)2; component.content = Content; } } [RequireComponent(typeof(CanvasRenderer))] [RequireComponent(typeof(TextMeshProUGUI))] public class PeakText : PeakLocalizableElement { private static TMP_FontAsset? _darumaFontAsset; private static TMP_FontAsset DarumaDropOne { get { if ((Object)(object)_darumaFontAsset == (Object)null) { TMP_FontAsset[] source = Resources.FindObjectsOfTypeAll<TMP_FontAsset>(); _darumaFontAsset = ((IEnumerable<TMP_FontAsset>)source).FirstOrDefault((Func<TMP_FontAsset, bool>)delegate(TMP_FontAsset fontAsset) { //IL_0001: 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) FaceInfo faceInfo = ((TMP_Asset)fontAsset).faceInfo; return ((FaceInfo)(ref faceInfo)).familyName == "Daruma Drop One"; }); } return _darumaFontAsset; } } public TextMeshProUGUI TextMesh => (TextMeshProUGUI)base.Text; private void Awake() { //IL_0035: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) base.RectTransform = ((Component)this).GetComponent<RectTransform>(); base.Text = (TMP_Text)(object)((Component)this).GetComponent<TextMeshProUGUI>(); RectTransform rectTransform = base.RectTransform; RectTransform rectTransform2 = base.RectTransform; Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0f, 1f); rectTransform2.anchorMax = val; rectTransform.anchorMin = val; base.RectTransform.pivot = new Vector2(0f, 1f); ((TMP_Text)TextMesh).font = DarumaDropOne; ((Graphic)TextMesh).color = Color.white; base.RectTransform.sizeDelta = ((TMP_Text)TextMesh).GetPreferredValues(); } public PeakText SetText(string text) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) SetTextInternal(text); ThrowHelper.ThrowIfFieldNull<RectTransform>(base.RectTransform, "RectTransform").sizeDelta = ((TMP_Text)TextMesh).GetPreferredValues(); return this; } public PeakText SetFontSize(float size) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) ((TMP_Text)ThrowHelper.ThrowIfFieldNull<TextMeshProUGUI>(TextMesh, "TextMesh")).fontSize = size; ThrowHelper.ThrowIfFieldNull<RectTransform>(base.RectTransform, "RectTransform").sizeDelta = ((TMP_Text)TextMesh).GetPreferredValues(); return this; } public PeakText SetColor(Color color) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) ((Graphic)ThrowHelper.ThrowIfFieldNull<TextMeshProUGUI>(TextMesh, "TextMesh")).color = color; return this; } } public class PeakTextInput : PeakElement { private static GameObject? _textInputPrefab; internal static GameObject TextInputPrefab { get { //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: 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) if ((Object)(object)_textInputPrefab == (Object)null) { if ((Object)(object)SingletonAsset<InputCellMapper>.Instance == (Object)null || (Object)(object)SingletonAsset<InputCellMapper>.Instance.FloatSettingCell == (Object)null) { throw new Exception("Tried to create a TextInput but prefab was not found. Please wait until the game fully loads to create UI elements."); } _textInputPrefab = Object.Instantiate<GameObject>(SingletonAsset<InputCellMapper>.Instance.FloatSettingCell); ((Object)_textInputPrefab).name = "PeakTextInput"; Transform transform = _textInputPrefab.transform; RectTransform val = (RectTransform)(object)((transform is RectTransform) ? transform : null); if (val != null) { val.anchorMin = new Vector2(0f, 1f); val.anchorMax = new Vector2(0f, 1f); val.offsetMin = Vector2.zero; val.offsetMax = Vector2.zero; val.pivot = new Vector2(0.5f, 0.5f); val.sizeDelta = new Vector2(200f, 80f); } FloatSettingUI component = _textInputPrefab.GetComponent<FloatSettingUI>(); TMP_InputField inputField = component.inputField; Object.DestroyImmediate((Object)(object)((Component)component.slider).gameObject); Object.DestroyImmediate((Object)(object)component); inputField.characterValidation = (CharacterValidation)0; RectTransform component2 = ((Component)inputField).GetComponent<RectTransform>(); component2.pivot = new Vector2(0.5f, 0.5f); Utilities.ExpandToParent(component2); TextMeshProUGUI[] componentsInChildren = ((Component)inputField).GetComponentsInChildren<TextMeshProUGUI>(); TextMeshProUGUI[] array = componentsInChildren; foreach (TextMeshProUGUI val2 in array) { float num2 = (((TMP_Text)val2).fontSizeMax = 22f); float fontSize = (((TMP_Text)val2).fontSizeMin = num2); ((TMP_Text)val2).fontSize = fontSize; ((TMP_Text)val2).alignment = (TextAlignmentOptions)4097; } Object.DontDestroyOnLoad((Object)(object)_textInputPrefab); } return _textInputPrefab; } } public TMP_InputField InputField { get; private set; } private TextMeshProUGUI Placeholder { get; set; } internal static PeakTextInput Create() { return Object.Instantiate<GameObject>(TextInputPrefab).AddComponent<PeakTextInput>(); } private void Awake() { base.RectTransform = ((Component)this).GetComponent<RectTransform>(); InputField = ((Component)this).GetComponentInChildren<TMP_InputField>(); Placeholder = ((Component)InputField.placeholder).GetComponent<TextMeshProUGUI>(); ((TMP_Text)Placeholder).text = ""; } public PeakTextInput OnValueChanged(UnityAction<string> onValueChanged) { ThrowHelper.ThrowIfArgumentNull<UnityAction<string>>(onValueChanged, "onValueChanged"); ((UnityEvent<string>)(object)InputField.onValueChanged).AddListener(onValueChanged); return this; } public PeakTextInput SetPlaceholder(string placeholder) { ((TMP_Text)Placeholder).text = placeholder; return this; } } internal static class Templates { internal static GameObject? ButtonTemplate { get; set; } internal static GameObject? SettingsCellPrefab { get; set; } } } 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 { } }
mods/com.github.PEAKModding.SoftDependencyFix.dll
Decompiled 5 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 BepInEx.Logging; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoDetour; using MonoDetour.Cil; using MonoDetour.HookGen; using MonoMod.Cil; using Zorro.Core; using Zorro.Core.CLI; [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.github.PEAKModding.SoftDependencyFix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+ee09ae38ab0d2f0cd373140fafd8d926693d9b2e")] [assembly: AssemblyProduct("com.github.PEAKModding.SoftDependencyFix")] [assembly: AssemblyTitle("SoftDependencyFix")] [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.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 MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public bool DistinguishOverloadsByName { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] 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")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace SoftDependencyFix { [BepInPlugin("com.github.PEAKModding.SoftDependencyFix", "SoftDependencyFix", "1.0.0")] public class Plugin : BaseUnityPlugin { public const string Id = "com.github.PEAKModding.SoftDependencyFix"; internal static ManualLogSource Log { get; private set; } public static string Name => "SoftDependencyFix"; public static string Version => "1.0.0"; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; ReflectionUtilityHooks.Init(); Log.LogInfo((object)("Plugin " + Name + " is loaded!")); } } internal static class ReflectionUtilityHooks { [CompilerGenerated] private static class <>O { public static Func<(MethodInfo, ConsoleCommandAttribute)[]> <0>__GetMethodsWithAttribute; public static Manipulator <1>__WrapTryCatch; public static Func<ReflectionTypeLoadException, Type[]> <2>__GetTypesFromException; } internal static void Init() { //IL_0030: 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_003b: Expected O, but got Unknown //IL_0089: 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_0094: Expected O, but got Unknown MonoDetourManager instance = DefaultMonoDetourManager.Instance; Func<(MethodInfo, ConsoleCommandAttribute)[]> func = ReflectionUtility.GetMethodsWithAttribute<ConsoleCommandAttribute>; object obj = <>O.<1>__WrapTryCatch; if (obj == null) { Manipulator val = WrapTryCatch; <>O.<1>__WrapTryCatch = val; obj = (object)val; } instance.ILHook((Delegate)func, (Manipulator)obj, (MonoDetourConfig)null, true); MonoDetourManager instance2 = DefaultMonoDetourManager.Instance; MethodInfo methodInfo = typeof(ReflectionUtility).GetMethod("GetClassesWithAttribute", Array.Empty<Type>()).MakeGenericMethod(typeof(TypeParserAttribute)); object obj2 = <>O.<1>__WrapTryCatch; if (obj2 == null) { Manipulator val2 = WrapTryCatch; <>O.<1>__WrapTryCatch = val2; obj2 = (object)val2; } instance2.ILHook((MethodBase)methodInfo, (Manipulator)obj2, (MonoDetourConfig)null, true); } private static void WrapTryCatch(ILManipulationInfo info) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) ILWeaver w = new ILWeaver(info); int locAssemblyTypes = 0; ILWeaverResult val = default(ILWeaverResult); w.MatchRelaxed(new Predicate<Instruction>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Assembly>(x, "GetTypes") && w.SetCurrentTo(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref locAssemblyTypes) }).Extract(ref val); if (!val.IsValid) { Plugin.Log.LogError((object)val.FailureMessage); return; } w.HandlerWrapTryCatchStackSizeNonZeroOnCurrent(typeof(ReflectionTypeLoadException), (IEnumerable<Instruction>)new <>z__ReadOnlyArray<Instruction>((Instruction[])(object)new Instruction[2] { w.CreateCall((Delegate)new Func<ReflectionTypeLoadException, Type[]>(GetTypesFromException)), w.Create(OpCodes.Stloc, locAssemblyTypes) })); } private static Type[] GetTypesFromException(ReflectionTypeLoadException ex) { List<Type> list = new List<Type>(); list.AddRange(ex.Types.Where((Type type) => (object)type != null)); return list.ToArray(); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } [CompilerGenerated] internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }
mods/Fly Mod.dll
Decompiled 5 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Photon.Pun; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Fly Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Fly Mod")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("7dfa9d89-00a3-42d6-aa91-7d70ee301435")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("com.lamia.flymod", "FlyMod", "1.2.1")] public class FlyMod : BaseUnityPlugin { internal static ConfigEntry<float> BaseForce; internal static ConfigEntry<float> VerticalForce; internal static ConfigEntry<float> SprintMultiplier; internal static ConfigEntry<float> GravityPull; internal static ConfigEntry<float> MaxClamp; internal static ConfigEntry<KeyCode> FlyKey; internal static ConfigEntry<bool> ToggleFly; internal static ConfigEntry<bool> CreativeFlyMode; internal static ManualLogSource Log; private void Awake() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)"FlyMod loaded."); Harmony val = new Harmony("com.lamia.flymod"); val.PatchAll(); CreativeFlyMode = ((BaseUnityPlugin)this).Config.Bind<bool>("FlyMod", "CreativeFlyMode", true, "If true, flying feels more like noclipping in Garry's Mod or manuevering a 3d environment. Setting this to false makes flying feel more like a superhero or being boosted by a Jetpack."); FlyKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("FlyMod", "FlyKey", (KeyCode)118, "Key to activate flying (default: Mouse3/Middle mouse button)."); ToggleFly = ((BaseUnityPlugin)this).Config.Bind<bool>("FlyMod", "ToggleFly", true, "If true, fly is toggled on/off with the key instead of holding."); BaseForce = ((BaseUnityPlugin)this).Config.Bind<float>("FlyMod", "BaseForce", 800f, "Base force applied when flying forward/backward/sideways."); VerticalForce = ((BaseUnityPlugin)this).Config.Bind<float>("FlyMod", "VerticalForce", 800f, "Force applied when flying up or down."); SprintMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("FlyMod", "SprintMultiplier", 4f, "Multiplier when holding shift."); MaxClamp = ((BaseUnityPlugin)this).Config.Bind<float>("FlyMod", "MaxClamp", 4000f, "Clamp for maximum fly speed in any direction."); } } [HarmonyPatch(typeof(Character), "Awake")] public static class PalThrow { [HarmonyPostfix] public static void AwakePatch(Character __instance) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (__instance.IsLocal && (Object)((Component)__instance).GetComponent<FlyModPatch>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<FlyModPatch>(); FlyMod.Log.LogInfo((object)("FlyModPatch added to: " + ((Object)__instance).name)); } } } public class FlyModPatch : MonoBehaviourPun { private Character character; private CharacterMovement charMovement; private bool flyActive = false; private void Start() { character = ((Component)this).GetComponent<Character>(); charMovement = ((Component)this).GetComponent<CharacterMovement>(); } private void Update() { //IL_0051: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_034f: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Unknown result type (might be due to invalid IL or missing references) //IL_042f: Unknown result type (might be due to invalid IL or missing references) if (!character.IsLocal) { return; } if (FlyMod.ToggleFly.Value && Input.GetKeyDown(FlyMod.FlyKey.Value)) { flyActive = !flyActive; } if (!Input.GetKey(FlyMod.FlyKey.Value) && !flyActive) { return; } if (FlyMod.CreativeFlyMode.Value) { character.data.isGrounded = true; } else { character.data.sinceGrounded = 0.5f; } Vector3 val = character.data.lookDirection; if (Input.GetKey((KeyCode)119) || !FlyMod.CreativeFlyMode.Value) { val *= FlyMod.VerticalForce.Value; } else if (Input.GetKey((KeyCode)115) && FlyMod.CreativeFlyMode.Value) { val *= 0f - FlyMod.VerticalForce.Value; } Vector3 val2 = Vector3.Cross(Vector3.up, character.data.lookDirection); Vector3 val3 = ((Vector3)(ref val2)).normalized * FlyMod.VerticalForce.Value; if (Input.GetKey((KeyCode)100)) { val = ((!FlyMod.CreativeFlyMode.Value) ? (val + val3 / 8f) : (val + val3)); } if (Input.GetKey((KeyCode)97)) { val = ((!FlyMod.CreativeFlyMode.Value) ? (val - val3 / 8f) : (val - val3)); } if (Input.GetKey((KeyCode)32)) { val = ((!FlyMod.CreativeFlyMode.Value) ? (val + Vector3.up * (FlyMod.VerticalForce.Value / 8f)) : (val + Vector3.up * FlyMod.VerticalForce.Value)); } else if (Input.GetKey((KeyCode)306) && FlyMod.CreativeFlyMode.Value) { val += Vector3.down * FlyMod.VerticalForce.Value; } if (Input.GetKey((KeyCode)304)) { character.AddStamina(charMovement.sprintStaminaUsage * Time.deltaTime); val *= FlyMod.SprintMultiplier.Value; } val = ((!FlyMod.CreativeFlyMode.Value) ? (val + Vector3.up * 240f) : (val + Vector3.down * 100f)); val.x = Mathf.Clamp(val.x, 0f - FlyMod.MaxClamp.Value, FlyMod.MaxClamp.Value); val.y = Mathf.Clamp(val.y, 0f - FlyMod.MaxClamp.Value, FlyMod.MaxClamp.Value); val.z = Mathf.Clamp(val.z, 0f - FlyMod.MaxClamp.Value, FlyMod.MaxClamp.Value); foreach (Bodypart part in character.refs.ragdoll.partList) { if (FlyMod.CreativeFlyMode.Value) { part.AddForce(val, (ForceMode)0); } else if (!((object)(BodypartType)(ref part.partType)).ToString().Contains("Leg") && !((object)(BodypartType)(ref part.partType)).ToString().Contains("Knee") && !((object)(BodypartType)(ref part.partType)).ToString().Contains("Foot")) { part.AddForce(val / 7f, (ForceMode)5); } } } }
mods/PEAK-AIO.dll
Decompiled 5 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Numerics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using DearImGuiInjection; using DearImGuiInjection.BepInEx; using HarmonyLib; using ImGuiNET; using Photon.Pun; using Photon.Realtime; using UnityEngine; using UnityEngine.SceneManagement; using Zorro.Core.Serizalization; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("PEAK-AIO")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("PEAK-AIO")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("0e070e16-c355-4db0-804c-0510a5aa436e")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.2.0")] public static class ConfigManager { public static ManualLogSource Logger; public static ConfigEntry<bool> InfiniteStamina; public static ConfigEntry<bool> FlyMod; public static ConfigEntry<float> FlySpeed; public static ConfigEntry<float> FlyAcceleration; public static ConfigEntry<bool> LockStatus; public static ConfigEntry<bool> NoWeight; public static ConfigEntry<bool> SpeedMod; public static ConfigEntry<bool> JumpMod; public static ConfigEntry<bool> NoFallDmg; public static ConfigEntry<bool> ClimbMod; public static ConfigEntry<bool> VineClimbMod; public static ConfigEntry<bool> RopeClimbMod; public static ConfigEntry<float> SpeedAmount; public static ConfigEntry<float> JumpAmount; public static ConfigEntry<float> ClimbAmount; public static ConfigEntry<float> VineClimbAmount; public static ConfigEntry<float> RopeClimbAmount; public static ConfigEntry<float> RechargeAmountSlot1; public static ConfigEntry<float> RechargeAmountSlot2; public static ConfigEntry<float> RechargeAmountSlot3; public static ConfigEntry<bool> TeleportToPing; public static void Init(ConfigFile config, ManualLogSource logger) { //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Expected O, but got Unknown //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Expected O, but got Unknown Logger = logger; InfiniteStamina = config.Bind<bool>("Cheats", "InfiniteStamina", false, "Enable infinite stamina"); TeleportToPing = config.Bind<bool>("Cheats", "TeleportToPing", false, "Automatically teleport to ping location"); FlyMod = config.Bind<bool>("Cheats", "Fly Mod", false, "Enables fly mode when checked."); FlySpeed = config.Bind<float>("Cheats", "Fly Speed", 100f, "Speed used when flying."); FlyAcceleration = config.Bind<float>("Cheats", "Fly Acceleration", 300f, "Acceleration used when flying."); LockStatus = config.Bind<bool>("Afflictions", "LockStatus", false, (ConfigDescription)null); NoWeight = config.Bind<bool>("Afflictions", "NoWeight", false, (ConfigDescription)null); SpeedMod = config.Bind<bool>("Character", "SpeedMod", false, (ConfigDescription)null); JumpMod = config.Bind<bool>("Character", "JumpMod", false, (ConfigDescription)null); NoFallDmg = config.Bind<bool>("Character", "NoFallDmg", false, (ConfigDescription)null); ClimbMod = config.Bind<bool>("Character", "ClimbMod", false, (ConfigDescription)null); VineClimbMod = config.Bind<bool>("Character", "VineClimbMod", false, (ConfigDescription)null); RopeClimbMod = config.Bind<bool>("Character", "RopeClimbMod", false, (ConfigDescription)null); SpeedAmount = config.Bind<float>("Character", "SpeedAmount", 1f, (ConfigDescription)null); JumpAmount = config.Bind<float>("Character", "JumpAmount", 10f, (ConfigDescription)null); ClimbAmount = config.Bind<float>("Character", "ClimbAmount", 1f, (ConfigDescription)null); VineClimbAmount = config.Bind<float>("Character", "VineClimbAmount", 1f, (ConfigDescription)null); RopeClimbAmount = config.Bind<float>("Character", "RopeClimbAmount", 1f, (ConfigDescription)null); RechargeAmountSlot1 = config.Bind<float>("Inventory", "RechargeAmountSlot1", 100f, new ConfigDescription("Recharge amount for slot 1", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 999f), Array.Empty<object>())); RechargeAmountSlot2 = config.Bind<float>("Inventory", "RechargeAmountSlot2", 100f, new ConfigDescription("Recharge amount for slot 2", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 999f), Array.Empty<object>())); RechargeAmountSlot3 = config.Bind<float>("Inventory", "RechargeAmountSlot3", 100f, new ConfigDescription("Recharge amount for slot 3", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 999f), Array.Empty<object>())); Logger.LogInfo((object)"[PEAK AIO][ConfigManager] Config Loaded."); } } internal static class ConstantFields { private static PropertyInfo infiniteStaminaProp; private static PropertyInfo statusLockProp; private static FieldInfo fallDamageTimeField; private static FieldInfo staminaField; private static FieldInfo movementModifierField; private static FieldInfo jumpGravityField; private static FieldInfo climbSpeedModField; private static FieldInfo vineClimbSpeedModField; private static FieldInfo ropeClimbSpeedModField; private static MethodInfo setStatusMethod; private static Array statusEnumValues; public static PropertyInfo GetInfiniteStaminaProperty() { if (infiniteStaminaProp == null) { infiniteStaminaProp = typeof(Character).GetProperty("infiniteStam", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return infiniteStaminaProp; } public static PropertyInfo GetStatusLockProperty() { if (statusLockProp == null) { statusLockProp = typeof(Character).GetProperty("statusesLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return statusLockProp; } public static FieldInfo GetFallDamageTimeField() { if (fallDamageTimeField == null) { fallDamageTimeField = typeof(CharacterMovement).GetField("fallDamageTime", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return fallDamageTimeField; } public static FieldInfo GetStaminaField() { if (staminaField == null) { staminaField = typeof(CharacterData).GetField("_stam", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return staminaField; } public static FieldInfo GetMovementModifierField() { if (movementModifierField == null) { movementModifierField = typeof(CharacterMovement).GetField("movementModifier", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return movementModifierField; } public static FieldInfo GetJumpGravityField() { if (jumpGravityField == null) { jumpGravityField = typeof(CharacterMovement).GetField("jumpGravity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return jumpGravityField; } public static FieldInfo GetClimbSpeedModField() { if (climbSpeedModField == null) { climbSpeedModField = typeof(CharacterClimbing).GetField("climbSpeedMod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return climbSpeedModField; } public static FieldInfo GetVineClimbSpeedModField() { if (vineClimbSpeedModField == null) { vineClimbSpeedModField = typeof(CharacterVineClimbing).GetField("climbSpeedMod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return vineClimbSpeedModField; } public static FieldInfo GetRopeClimbSpeedModField() { if (ropeClimbSpeedModField == null) { ropeClimbSpeedModField = typeof(CharacterRopeHandling).GetField("climbSpeedMod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return ropeClimbSpeedModField; } public static MethodInfo GetSetStatusMethod() { if (setStatusMethod == null) { setStatusMethod = typeof(CharacterAfflictions).GetMethod("SetStatus", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return setStatusMethod; } public static Array GetStatusEnumValues() { if (statusEnumValues == null) { statusEnumValues = Enum.GetValues(typeof(STATUSTYPE)); } return statusEnumValues; } public static void RefreshAll() { infiniteStaminaProp = null; statusLockProp = null; fallDamageTimeField = null; staminaField = null; movementModifierField = null; jumpGravityField = null; climbSpeedModField = null; vineClimbSpeedModField = null; ropeClimbSpeedModField = null; setStatusMethod = null; statusEnumValues = null; } } public class EventComponent : MonoBehaviour { private void Update() { CharacterMovement movementComponent = GameHelpers.GetMovementComponent(); if ((Object)(object)movementComponent != (Object)null) { if (ConfigManager.SpeedMod.Value) { ConstantFields.GetMovementModifierField()?.SetValue(movementComponent, ConfigManager.SpeedAmount.Value); } if (ConfigManager.JumpMod.Value) { ConstantFields.GetJumpGravityField()?.SetValue(movementComponent, ConfigManager.JumpAmount.Value); if (ConfigManager.NoFallDmg.Value) { ConstantFields.GetFallDamageTimeField()?.SetValue(movementComponent, 999f); } } } Character characterComponent = GameHelpers.GetCharacterComponent(); if ((Object)(object)characterComponent != (Object)null) { if (ConfigManager.InfiniteStamina.Value) { ConstantFields.GetInfiniteStaminaProperty()?.SetValue(characterComponent, true); } if (ConfigManager.LockStatus.Value) { ConstantFields.GetStatusLockProperty()?.SetValue(characterComponent, true); } } CharacterClimbing climbingComponent = GameHelpers.GetClimbingComponent(); if ((Object)(object)climbingComponent != (Object)null && ConfigManager.ClimbMod.Value) { ConstantFields.GetClimbSpeedModField()?.SetValue(climbingComponent, ConfigManager.ClimbAmount.Value); } CharacterVineClimbing vineClimbComponent = GameHelpers.GetVineClimbComponent(); if ((Object)(object)vineClimbComponent != (Object)null && ConfigManager.VineClimbMod.Value) { ConstantFields.GetVineClimbSpeedModField()?.SetValue(vineClimbComponent, ConfigManager.VineClimbAmount.Value); } CharacterRopeHandling ropeClimbComponent = GameHelpers.GetRopeClimbComponent(); if ((Object)(object)ropeClimbComponent != (Object)null && ConfigManager.RopeClimbMod.Value) { ConstantFields.GetRopeClimbSpeedModField()?.SetValue(ropeClimbComponent, ConfigManager.RopeClimbAmount.Value); } } } internal static class GameHelpers { private static Character character; private static CharacterData characterData; private static CharacterMovement movementComponent; private static CharacterAfflictions afflictionsComponent; private static CharacterClimbing climbingComponent; private static CharacterVineClimbing vineClimbingComponent; private static CharacterRopeHandling ropeClimbingComponent; public static Character GetCharacterComponent() { if ((Object)(object)character == (Object)null || !((Behaviour)character).isActiveAndEnabled) { character = Character.localCharacter; } return character; } public static CharacterData GetCharacterData() { if ((Object)(object)characterData == (Object)null || !((Behaviour)characterData).isActiveAndEnabled) { characterData = Object.FindFirstObjectByType<CharacterData>(); } return characterData; } public static CharacterMovement GetMovementComponent() { if ((Object)(object)movementComponent == (Object)null || !((Behaviour)movementComponent).isActiveAndEnabled) { Character characterComponent = GetCharacterComponent(); movementComponent = ((characterComponent != null) ? ((Component)characterComponent).GetComponent<CharacterMovement>() : null); } return movementComponent; } public static CharacterAfflictions GetAfflictionsComponent() { if ((Object)(object)afflictionsComponent == (Object)null || !((Behaviour)afflictionsComponent).isActiveAndEnabled) { Character characterComponent = GetCharacterComponent(); afflictionsComponent = ((characterComponent != null) ? ((Component)characterComponent).GetComponent<CharacterAfflictions>() : null); } return afflictionsComponent; } public static CharacterClimbing GetClimbingComponent() { if ((Object)(object)climbingComponent == (Object)null || !((Behaviour)climbingComponent).isActiveAndEnabled) { Character characterComponent = GetCharacterComponent(); climbingComponent = ((characterComponent != null) ? ((Component)characterComponent).GetComponent<CharacterClimbing>() : null); } return climbingComponent; } public static CharacterVineClimbing GetVineClimbComponent() { if ((Object)(object)vineClimbingComponent == (Object)null || !((Behaviour)vineClimbingComponent).isActiveAndEnabled) { Character characterComponent = GetCharacterComponent(); vineClimbingComponent = ((characterComponent != null) ? ((Component)characterComponent).GetComponent<CharacterVineClimbing>() : null); } return vineClimbingComponent; } public static CharacterRopeHandling GetRopeClimbComponent() { if ((Object)(object)ropeClimbingComponent == (Object)null || !((Behaviour)ropeClimbingComponent).isActiveAndEnabled) { Character characterComponent = GetCharacterComponent(); ropeClimbingComponent = ((characterComponent != null) ? ((Component)characterComponent).GetComponent<CharacterRopeHandling>() : null); } return ropeClimbingComponent; } public static void Refresh() { character = null; characterData = null; movementComponent = null; afflictionsComponent = null; climbingComponent = null; vineClimbingComponent = null; ropeClimbingComponent = null; } } public static class Globals { public static bool anyAfflictionEnabled; public static Character character; public static CharacterData characterData; public static FieldInfo staminaField; public static PropertyInfo infiniteStamProp; public static FieldInfo sinceFallSlideField; public static FieldInfo sinceGroundedField; public static object movementComp; public static FieldInfo movementModifierField; public static FieldInfo jumpGravityField; public static FieldInfo fallDamageTimeField; public static object characterClimb; public static FieldInfo climbSpeedModifierField; public static object characterVineClimb; public static FieldInfo vineClimbSpeedModifierField; public static object characterRopeHandling; public static FieldInfo ropeClimbSpeedModifierField; public static object afflictionsObj; public static MethodInfo setStatusMethod; public static object weightEnumValue; public static object poisonEnumValue; public static object hotEnumValue; public static object coldEnumValue; public static object curseEnumValue; public static object injuryEnumValue; public static object drowsyEnumValue; public static object hungerEnumValue; public static List<Item> items = new List<Item>(); public static List<string> itemNames = new List<string>(); public static int[] selectedItems = new int[3] { -1, -1, -1 }; public static string[] itemDisplayNames = new string[3] { "None", "None", "None" }; public static string[] itemSearchBuffers = new string[3]; public static Player playerObj; public static List<Character> allPlayers = new List<Character>(); public static List<string> playerNames = new List<string>(); public static int selectedPlayer = -1; public static bool excludeSelfFromAllActions = true; public static bool teleportToPingEnabled = false; public static float teleportX = 0f; public static float teleportY = 0f; public static float teleportZ = 0f; public static int selectedLuggageIndex = -1; public static List<string> luggageLabels = new List<string>(); public static List<Luggage> luggageObject = new List<Luggage>(); public static List<Luggage> allOpenedLuggage = new List<Luggage>(); } [HarmonyPatch(typeof(PointPinger), "ReceivePoint_Rpc")] public class PointPingPatch { private static void Postfix(Vector3 point, Vector3 hitNormal, PointPinger __instance) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0064: 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) try { if (ConfigManager.TeleportToPing.Value) { Character character = __instance.character; object obj; if (character == null) { obj = null; } else { PhotonView photonView = ((MonoBehaviourPun)character).photonView; obj = ((photonView != null) ? photonView.Owner : null); } Player val = (Player)obj; if (val != null && val == PhotonNetwork.LocalPlayer && (Object)(object)Character.localCharacter != (Object)null && !Character.localCharacter.data.dead) { Vector3 val2 = point + Vector3.up; ((MonoBehaviourPun)Character.localCharacter).photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { val2, true }); ConfigManager.Logger.LogInfo((object)"[Patch] Teleported to ping!"); } } } catch (Exception ex) { ConfigManager.Logger.LogError((object)("[Patch] Exception: " + ex)); } } } [HarmonyPatch(typeof(Character), "Update")] public class FlyPatch { private static bool isFlying = false; private static Vector3 flyVelocity = Vector3.zero; public static bool IsFlying => isFlying; public static void SetFlying(bool enable) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) isFlying = enable; flyVelocity = Vector3.zero; ConfigManager.Logger.LogInfo((object)("[FlyMod] Flight " + (enable ? "enabled" : "disabled") + ".")); } private static void Postfix(Character __instance) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) if (!__instance.IsLocal) { return; } if (!ConfigManager.FlyMod.Value) { if (isFlying) { isFlying = false; flyVelocity = Vector3.zero; ConfigManager.Logger.LogInfo((object)"[FlyMod] Flight disabled."); } return; } if (!isFlying) { isFlying = true; ConfigManager.Logger.LogInfo((object)"[FlyMod] Flight enabled."); } __instance.data.isGrounded = true; __instance.data.sinceGrounded = 0f; __instance.data.sinceJump = 0f; Vector3 val = Vector2.op_Implicit(__instance.input.movementInput); Vector3 normalized = ((Vector3)(ref __instance.data.lookDirection_Flat)).normalized; Vector3 val2 = Vector3.Cross(Vector3.up, normalized); Vector3 normalized2 = ((Vector3)(ref val2)).normalized; Vector3 val3 = normalized * val.y + normalized2 * val.x; if (__instance.input.jumpIsPressed) { val3 += Vector3.up; } if (__instance.input.crouchIsPressed) { val3 += Vector3.down; } float value = ConfigManager.FlySpeed.Value; float value2 = ConfigManager.FlyAcceleration.Value; flyVelocity = Vector3.Lerp(flyVelocity, ((Vector3)(ref val3)).normalized * value, Time.deltaTime * value2); foreach (Bodypart part in __instance.refs.ragdoll.partList) { if ((Object)(object)((part != null) ? part.Rig : null) != (Object)null) { part.Rig.linearVelocity = flyVelocity; } } } } [HarmonyPatch(typeof(CharacterAfflictions), "UpdateWeight")] public class Patch_UpdateWeight { private static void Postfix(CharacterAfflictions __instance) { if (ConfigManager.NoWeight.Value) { __instance.SetStatus((STATUSTYPE)7, 0f); } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.onigremlin.peakaio", "PEAK AIO Mod", "1.0.2")] public class PeakMod : BaseUnityPlugin { private bool styleApplied; private int selectedTab = 1; private void ApplyCustomStyle() { //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) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) ImGuiStylePtr style = ImGui.GetStyle(); RangeAccessor<Vector4> colors = ((ImGuiStylePtr)(ref style)).Colors; Vector4 vector = new Vector4(0.953f, 0.941f, 0.902f, 1f); Vector4 vector2 = new Vector4(0.361f, 0.294f, 0.231f, 1f); Vector4 vector3 = new Vector4(0.18f, 0.18f, 0.18f, 1f); Vector4 vector4 = new Vector4(0.18f, 0.28f, 0.22f, 1f); Vector4 vector5 = new Vector4(0.866f, 0.827f, 0.741f, 1f); Vector4 vector6 = new Vector4(0.8f, 0.78f, 0.65f, 1f); Vector4 vector7 = new Vector4(0.75f, 0.72f, 0.61f, 1f); Vector4 vector8 = new Vector4(0.55f, 0.42f, 0.28f, 1f); new Vector4(0.75f, 0.6f, 0.5f, 1f); new Vector4(0.76f, 0.44f, 0.39f, 1f); Vector4 vector9 = new Vector4(0.318f, 0.569f, 0.384f, 1f); colors[2] = vector; colors[5] = vector3; colors[10] = vector9; colors[11] = vector9; colors[0] = vector3; colors[1] = vector8; colors[18] = vector4; colors[7] = vector5; colors[8] = vector6; colors[9] = vector7; colors[5] = vector8; colors[4] = vector; colors[44] = vector9; colors[45] = vector8; colors[46] = vector8; colors[3] = vector5; colors[21] = vector5; colors[22] = vector6; colors[23] = vector7; colors[24] = vector5; colors[25] = vector5; colors[26] = vector5; colors[27] = vector8; colors[14] = vector2; colors[15] = vector4; colors[16] = new Vector4(vector4.X + 0.1f, vector4.Y + 0.1f, vector4.Z + 0.1f, 1f); colors[17] = new Vector4(vector4.X - 0.05f, vector4.Y - 0.05f, vector4.Z - 0.05f, 1f); colors[19] = vector4; colors[20] = new Vector4(vector4.X - 0.05f, vector4.Y - 0.05f, vector4.Z - 0.05f, 1f); ((ImGuiStylePtr)(ref style)).WindowRounding = 6f; ((ImGuiStylePtr)(ref style)).FrameRounding = 4f; ((ImGuiStylePtr)(ref style)).ChildRounding = 4f; ((ImGuiStylePtr)(ref style)).FrameBorderSize = 1f; ((ImGuiStylePtr)(ref style)).GrabRounding = 4f; ((ImGuiStylePtr)(ref style)).WindowPadding = new Vector2(4f, 4f); ((ImGuiStylePtr)(ref style)).CellPadding = new Vector2(4f, 4f); ((ImGuiStylePtr)(ref style)).FrameBorderSize = 1f; ((ImGuiStylePtr)(ref style)).ItemSpacing = new Vector2(2f, 4f); } private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Mod Initialized"); ((Component)this).gameObject.AddComponent<EventComponent>(); } private void OnEnable() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) ((BaseUnityPlugin)this).Logger.LogInfo((object)"[PEAK AIO] OnEnable called"); Globals.itemSearchBuffers = new string[3] { "", "", "" }; ConfigManager.Init(((BaseUnityPlugin)this).Config, ((BaseUnityPlugin)this).Logger); DearImGuiInjection.Render += MyUI; new Harmony("com.onigremlin.peakaio").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Harmony patches applied."); } private void OnDisable() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"[PEAK AIO] OnDisable called"); DearImGuiInjection.Render -= MyUI; } private void DrawCheckbox(ConfigEntry<bool> config, string label, Action<bool> mainThreadAction = null) { bool value = config.Value; if (!ImGui.Checkbox(label, ref value)) { return; } config.Value = value; ((BaseUnityPlugin)this).Logger.LogInfo((object)("[Menu] " + label + " toggled to " + (value ? "ON" : "OFF"))); if (mainThreadAction != null) { UnityMainThreadDispatcher.Enqueue((Action)delegate { mainThreadAction(value); }); } } private void DrawSliderFloat(ConfigEntry<float> config, string label, float min, float max, string format = "%.2f") { float value = config.Value; if (ImGui.SliderFloat(label, ref value, min, max, format)) { config.Value = value; } } private bool DrawSearchableCombo(string label, ref int selectedIndex, List<string> items, ref string searchBuffer) { bool result = false; string text = "Search##" + label; ImGui.PushItemWidth(ImGui.GetContentRegionAvail().X - 4f); ImGui.InputText("##" + text, ref searchBuffer, 100u); ImGui.PopItemWidth(); if (string.IsNullOrEmpty(searchBuffer) && !ImGui.IsItemActive()) { Vector2 itemRectMin = ImGui.GetItemRectMin(); ImGui.SameLine(); ImGui.SetCursorScreenPos(itemRectMin + new Vector2(4f, 2f)); ImGui.PushStyleColor((ImGuiCol)0, new Vector4(0.18f, 0.18f, 0.18f, 1f)); ImGui.TextUnformatted("Search items..."); ImGui.PopStyleColor(); } if (ImGui.BeginCombo(label, (selectedIndex >= 0 && selectedIndex < items.Count) ? items[selectedIndex] : "None")) { for (int i = 0; i < items.Count; i++) { if (string.IsNullOrEmpty(searchBuffer) || items[i].ToLower().Contains(searchBuffer.ToLower())) { bool flag = selectedIndex == i; if (ImGui.Selectable($"{items[i]}##{i}", flag)) { selectedIndex = i; result = true; } if (flag) { ImGui.SetItemDefaultFocus(); } } } ImGui.EndCombo(); } return result; } private void DrawToolTip(string text) { ImGui.SameLine(); ImGui.TextDisabled("(?)"); if (ImGui.IsItemHovered()) { ImGui.PushStyleColor((ImGuiCol)4, new Vector4(0.89f, 0.82f, 0.7f, 1f)); ImGui.PushStyleColor((ImGuiCol)0, new Vector4(0.18f, 0.18f, 0.18f, 1f)); ImGui.PushStyleVar((ImGuiStyleVar)4, 1f); ImGui.BeginTooltip(); ImGui.PushTextWrapPos(450f); ImGui.TextUnformatted(text); ImGui.PopTextWrapPos(); ImGui.EndTooltip(); ImGui.PopStyleVar(); ImGui.PopStyleColor(2); } } private void MyUI() { //IL_0f5c: Unknown result type (might be due to invalid IL or missing references) //IL_0f61: Unknown result type (might be due to invalid IL or missing references) //IL_0f73: Unknown result type (might be due to invalid IL or missing references) //IL_0f7a: Unknown result type (might be due to invalid IL or missing references) //IL_0f81: Unknown result type (might be due to invalid IL or missing references) try { if (!DearImGuiInjection.IsCursorVisible) { return; } if (!styleApplied) { ApplyCustomStyle(); styleApplied = true; } ImGui.SetNextWindowPos(new Vector2(20f, 20f), (ImGuiCond)2); ImGui.SetNextWindowSize(new Vector2(500f, 300f), (ImGuiCond)2); if (ImGui.Begin("PEAK AIO##Main", (ImGuiWindowFlags)32)) { ImGui.BeginChild("Sidebar", new Vector2(85f, 0f), true); ImGui.Dummy(new Vector2(4f, 2f)); string[] array = new string[5] { "PLAYER", "ITEMS", "LOBBY", "WORLD", "ABOUT" }; for (int i = 0; i < array.Length; i++) { bool flag = selectedTab == i + 1; string obj = array[i]; Vector4 vector = (flag ? new Vector4(0.318f, 0.569f, 0.384f, 1f) : new Vector4(0.18f, 0.18f, 0.18f, 1f)); ImGui.PushStyleColor((ImGuiCol)0, vector); float x = ImGui.CalcTextSize(obj).X; ImGui.SetCursorPosX((ImGui.GetContentRegionAvail().X - x) * 0.5f); if (ImGui.Selectable(obj, flag)) { selectedTab = i + 1; } ImGui.PopStyleColor(); } ImGui.EndChild(); ImGui.SameLine(); ImGui.BeginChild("MainArea"); if (selectedTab == 1) { float num = ImGui.GetContentRegionAvail().X / 2f; ImGui.BeginChild("PlayerColumn", new Vector2(num, 0f), true); ImGui.Indent(4f); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.CollapsingHeader("Self Mods##SelfMods", (ImGuiTreeNodeFlags)32)) { DrawCheckbox(ConfigManager.InfiniteStamina, "Infinite Stamina", delegate(bool val) { Character characterComponent2 = GameHelpers.GetCharacterComponent(); PropertyInfo infiniteStaminaProperty = ConstantFields.GetInfiniteStaminaProperty(); if ((Object)(object)characterComponent2 != (Object)null && infiniteStaminaProperty != null) { infiniteStaminaProperty.SetValue(characterComponent2, val); } }); ImGui.SameLine(); DrawToolTip("Prevents stamina from decreasing, allowing unlimited sprinting and actions."); DrawCheckbox(ConfigManager.LockStatus, "Freeze Afflictions", delegate(bool val) { Character characterComponent = GameHelpers.GetCharacterComponent(); PropertyInfo statusLockProperty = ConstantFields.GetStatusLockProperty(); if ((Object)(object)characterComponent != (Object)null && statusLockProperty != null) { statusLockProperty.SetValue(characterComponent, val); } }); ImGui.SameLine(); DrawToolTip("Prevents your statuses from changing."); DrawCheckbox(ConfigManager.NoWeight, "No Weight"); ImGui.SameLine(); DrawToolTip("Disables weight penalties from carried items and backpack."); DrawCheckbox(ConfigManager.SpeedMod, "Change Speed", delegate { CharacterMovement movementComponent2 = GameHelpers.GetMovementComponent(); FieldInfo movementModifierField = ConstantFields.GetMovementModifierField(); if ((Object)(object)movementComponent2 != (Object)null && movementModifierField != null) { movementModifierField.SetValue(movementComponent2, ConfigManager.SpeedAmount.Value); } }); ImGui.SameLine(); DrawToolTip("Overrides your character's movement speed with a custom multiplier."); DrawCheckbox(ConfigManager.JumpMod, "Change Jump", delegate { CharacterMovement movementComponent = GameHelpers.GetMovementComponent(); FieldInfo jumpGravityField = ConstantFields.GetJumpGravityField(); FieldInfo fallDamageTimeField = ConstantFields.GetFallDamageTimeField(); if ((Object)(object)movementComponent != (Object)null && jumpGravityField != null) { jumpGravityField.SetValue(movementComponent, ConfigManager.JumpAmount.Value); } if ((Object)(object)movementComponent != (Object)null && fallDamageTimeField != null) { fallDamageTimeField.SetValue(movementComponent, ConfigManager.NoFallDmg.Value ? 999f : 1.5f); } }); ImGui.SameLine(); DrawToolTip("Modifies jump height, allowing higher or lower jumps depending on your settings."); DrawCheckbox(ConfigManager.ClimbMod, "Change Climb", delegate { CharacterClimbing climbingComponent = GameHelpers.GetClimbingComponent(); FieldInfo climbSpeedModField = ConstantFields.GetClimbSpeedModField(); if ((Object)(object)climbingComponent != (Object)null && climbSpeedModField != null) { climbSpeedModField.SetValue(climbingComponent, ConfigManager.ClimbAmount.Value); } }); ImGui.SameLine(); DrawToolTip("Adjusts the speed at which you climb ladders and surfaces."); DrawCheckbox(ConfigManager.VineClimbMod, "Change Vine Climb", delegate { CharacterVineClimbing vineClimbComponent = GameHelpers.GetVineClimbComponent(); FieldInfo vineClimbSpeedModField = ConstantFields.GetVineClimbSpeedModField(); if ((Object)(object)vineClimbComponent != (Object)null && vineClimbSpeedModField != null) { vineClimbSpeedModField.SetValue(vineClimbComponent, ConfigManager.VineClimbAmount.Value); } }); ImGui.SameLine(); DrawToolTip("Changes climbing speed specifically for vines."); DrawCheckbox(ConfigManager.RopeClimbMod, "Change Rope Climb", delegate { CharacterRopeHandling ropeClimbComponent = GameHelpers.GetRopeClimbComponent(); FieldInfo ropeClimbSpeedModField = ConstantFields.GetRopeClimbSpeedModField(); if ((Object)(object)ropeClimbComponent != (Object)null && ropeClimbSpeedModField != null) { ropeClimbSpeedModField.SetValue(ropeClimbComponent, ConfigManager.RopeClimbAmount.Value); } }); ImGui.SameLine(); DrawToolTip("Modifies climbing speed when using ropes or rope-based obstacles."); DrawCheckbox(ConfigManager.TeleportToPing, "Teleport to Ping"); ImGui.SameLine(); DrawToolTip("Teleports your character to the pinged location on the map."); DrawCheckbox(ConfigManager.FlyMod, "Fly Mode", FlyPatch.SetFlying); ImGui.SameLine(); DrawToolTip("Allows free movement in all directions while ignoring gravity."); } ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); if (ImGui.CollapsingHeader("Teleport##PlayerTeleport", (ImGuiTreeNodeFlags)32)) { ImGui.InputFloat("X", ref Globals.teleportX); ImGui.InputFloat("Y", ref Globals.teleportY); ImGui.InputFloat("Z", ref Globals.teleportZ); if (ImGui.Button("Teleport to coords")) { ((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Teleport] Requested to X:{Globals.teleportX} Y:{Globals.teleportY} Z:{Globals.teleportZ}"); Utilities.TeleportToCoords(Globals.teleportX, Globals.teleportY, Globals.teleportZ); } } ImGui.EndChild(); ImGui.Unindent(); ImGui.SameLine(); ImGui.BeginChild("PlayerDetailsColumn", new Vector2(num - 10f, 0f), true); ImGui.Indent(4f); ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.CollapsingHeader("Details", (ImGuiTreeNodeFlags)32)) { if (ConfigManager.JumpMod.Value) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawCheckbox(ConfigManager.NoFallDmg, "No Fall Dmg"); DrawSliderFloat(ConfigManager.JumpAmount, "##jump_amt", 10f, 500f, "Jump Mult: %.2f"); } if (ConfigManager.SpeedMod.Value) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(ConfigManager.SpeedAmount, "##speed_amt", 1f, 20f, "Move Speed: %.2f"); } if (ConfigManager.ClimbMod.Value) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(ConfigManager.ClimbAmount, "##climb_amt", 1f, 20f, "Climb Speed: %.2f"); } if (ConfigManager.VineClimbMod.Value) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(ConfigManager.VineClimbAmount, "##vine_climb_amt", 1f, 20f, "Vine Speed: %.2f"); } if (ConfigManager.RopeClimbMod.Value) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(ConfigManager.RopeClimbAmount, "##rope_climb_amt", 1f, 20f, "Rope Speed: %.2f"); } if (ConfigManager.FlyMod.Value) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(ConfigManager.FlySpeed, "##fly_speed", 10f, 100f, "Fly Speed: %.2f"); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(ConfigManager.FlyAcceleration, "##fly_acceleration", 10f, 300f, "Fly Acceleration: %.2f"); } } ImGui.Unindent(); ImGui.EndChild(); } else if (selectedTab == 2) { if (Globals.itemNames.Count == 0) { Utilities.UpdateItems(); } List<(int, int)> list = new List<(int, int)>(); ImGui.Indent(4f); ImGui.Dummy(new Vector2(4f, 2f)); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); if (ImGui.BeginTable("InventorySlots", 3, (ImGuiTableFlags)1984)) { ImGui.TableSetupColumn("Slot 1"); ImGui.TableSetupColumn("Slot 2"); ImGui.TableSetupColumn("Slot 3"); ImGui.TableHeadersRow(); ImGui.TableNextRow(); for (int j = 0; j < 3; j++) { ImGui.TableSetColumnIndex(j); ImGui.PushID(j); string text = "None"; if (Player.localPlayer?.itemSlots != null && Player.localPlayer.itemSlots.Length > j && (Object)(object)Player.localPlayer.itemSlots[j]?.prefab != (Object)null) { text = Player.localPlayer.itemSlots[j].prefab.GetName(); } ImGui.Text($"Item {j + 1}:"); ImGui.SameLine(); ImGui.Text(text); ImGui.Spacing(); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); int selectedIndex = Globals.selectedItems[j]; if (DrawSearchableCombo($"##Combo{j}", ref selectedIndex, Globals.itemNames, ref Globals.itemSearchBuffers[j])) { Globals.selectedItems[j] = selectedIndex; list.Add((j, selectedIndex)); } ImGui.SameLine(); DrawToolTip("Search and assign any available item to this slot."); ImGui.Spacing(); ConfigEntry<float> val2 = (ConfigEntry<float>)(j switch { 0 => ConfigManager.RechargeAmountSlot1, 1 => ConfigManager.RechargeAmountSlot2, 2 => ConfigManager.RechargeAmountSlot3, _ => ConfigManager.RechargeAmountSlot1, }); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); DrawSliderFloat(val2, $"##recharge_mount##{j}", 0f, 100f, "Charge: %.1f"); if (ImGui.Button($"Recharge##{j}")) { Utilities.RechargeInventorySlot(j, val2.Value); } ImGui.SameLine(); DrawToolTip("Set how much to recharge the item’s charges when clicking 'Recharge'."); ImGui.PopID(); } ImGui.EndTable(); } foreach (var (slot, itemIndex) in list) { Utilities.AssignInventoryItem(slot, itemIndex); } ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.Button("Refresh Item List")) { Utilities.UpdateItems(); } ImGui.SameLine(); DrawToolTip("Reloads the list of available items in case something was missed or updated."); ImGui.Unindent(); } else if (selectedTab == 3) { float num2 = ImGui.GetContentRegionAvail().X / 2f; if (Globals.allPlayers.Count == 0) { Utilities.RefreshPlayerList(); } ImGui.BeginChild("Lobby_PlayerList", new Vector2(num2, 0f), true); ImGui.Indent(4f); ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.CollapsingHeader("Lobby Players", (ImGuiTreeNodeFlags)32)) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); if (ImGui.BeginCombo("Select Player", (Globals.selectedPlayer >= 0 && Globals.selectedPlayer < Globals.playerNames.Count) ? Globals.playerNames[Globals.selectedPlayer] : "None")) { for (int k = 0; k < Globals.playerNames.Count; k++) { bool flag2 = Globals.selectedPlayer == k; if (ImGui.Selectable($"{Globals.playerNames[k]}##{k}", flag2)) { Globals.selectedPlayer = k; } if (flag2) { ImGui.SetItemDefaultFocus(); } } ImGui.EndCombo(); } ImGui.Dummy(new Vector2(4f, 4f)); ImGui.Separator(); ImGui.Text("All Players"); if (ImGui.Button("Revive All")) { Utilities.ReviveAllPlayers(); } ImGui.SameLine(); if (ImGui.Button("Kill All")) { Utilities.KillAllPlayers(); } bool excludeSelfFromAllActions = Globals.excludeSelfFromAllActions; if (ImGui.Checkbox("Exclude Self from Kill All##KillAll", ref excludeSelfFromAllActions)) { Globals.excludeSelfFromAllActions = excludeSelfFromAllActions; } if (ImGui.Button("Warp All To Me")) { Utilities.WarpAllPlayersToMe(); } } ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.Button("Refresh Players List")) { Utilities.RefreshPlayerList(); } ImGui.SameLine(); DrawToolTip("Manually reloads the list of players in case it didn’t update automatically."); ImGui.Unindent(); ImGui.EndChild(); ImGui.SameLine(); ImGui.BeginChild("Lobby_PlayerActions", new Vector2(num2 - 10f, 0f), true); ImGui.Indent(4f); ImGui.Dummy(new Vector2(0f, 4f)); if (ImGui.CollapsingHeader("Actions", (ImGuiTreeNodeFlags)32)) { if (Globals.selectedPlayer >= 0 && Globals.selectedPlayer < Globals.allPlayers.Count) { if (ImGui.Button("Revive")) { Utilities.ReviveSelectedPlayer(); } ImGui.SameLine(); if (ImGui.Button("Kill")) { Utilities.KillSelectedPlayer(); } if (ImGui.Button("Warp To")) { Utilities.WarpToSelectedPlayer(); } ImGui.SameLine(); if (ImGui.Button("Warp To Me")) { Utilities.WarpSelectedPlayerToMe(); } ImGui.Dummy(new Vector2(4f, 2f)); ImGui.Separator(); ImGui.Text("Special Actions"); if (ImGui.Button("Spawn Scoutmaster")) { Utilities.SpawnScoutmasterForPlayer(Globals.selectedPlayer); } ImGui.SameLine(); DrawToolTip("Spawns a Scoutmaster near the selected player. Only works for host. Forces aggro."); } else { ImGui.Text("No player selected."); } } ImGui.Unindent(); ImGui.EndChild(); } else if (selectedTab == 4) { float num3 = ImGui.GetContentRegionAvail().X / 2f; Utilities.EnsureLuggageListInitialized(); ImGui.BeginChild("World_LuggageList", new Vector2(num3, 0f), true); ImGui.Indent(4f); ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.CollapsingHeader("Containers", (ImGuiTreeNodeFlags)32)) { ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - 4f); string text2 = ((Globals.selectedLuggageIndex >= 0 && Globals.selectedLuggageIndex < Globals.luggageLabels.Count) ? Globals.luggageLabels[Globals.selectedLuggageIndex] : "None"); if (ImGui.BeginCombo("Select Container", text2)) { if (Globals.luggageLabels.Count > 0) { for (int l = 0; l < Globals.luggageLabels.Count; l++) { bool flag3 = Globals.selectedLuggageIndex == l; if (ImGui.Selectable($"{Globals.luggageLabels[l]}##{l}", flag3)) { Globals.selectedLuggageIndex = l; } if (flag3) { ImGui.SetItemDefaultFocus(); } } } else { ImGui.TextDisabled("No containers found."); } ImGui.EndCombo(); } ImGui.Dummy(new Vector2(4f, 2f)); if (ImGui.Button("Refresh Luggage List")) { Utilities.hasInitializedLuggageList = false; Utilities.RefreshLuggageList(); } ImGui.SameLine(); DrawToolTip("Reloads the list of luggage within 300m of your position."); ImGui.Dummy(new Vector2(4f, 4f)); ImGui.Separator(); ImGui.Text("All Nearby Containers"); if (ImGui.Button("Open All Nearby")) { Utilities.OpenAllNearbyLuggage(); } } ImGui.Unindent(); ImGui.EndChild(); ImGui.SameLine(); ImGui.BeginChild("World_LuggageActions", new Vector2(num3 - 10f, 0f), true); ImGui.Indent(4f); ImGui.Dummy(new Vector2(0f, 4f)); if (ImGui.CollapsingHeader("Actions", (ImGuiTreeNodeFlags)32)) { if (Globals.selectedLuggageIndex >= 0 && Globals.selectedLuggageIndex < Globals.luggageLabels.Count) { string arg = Globals.luggageLabels[Globals.selectedLuggageIndex]; if (ImGui.Button("Warp To Luggage")) { ((BaseUnityPlugin)this).Logger.LogInfo((object)$"[UI] Warp requested for index {Globals.selectedLuggageIndex} - {arg}"); Vector3 val3 = Globals.luggageObject[Globals.selectedLuggageIndex].Center(); val3.y += 1.5f; Utilities.TeleportToCoords(val3.x, val3.y, val3.z); } if (ImGui.Button("Open Luggage")) { Utilities.OpenLuggage(Globals.selectedLuggageIndex); } } else { ImGui.Text("No luggage selected."); } } ImGui.Unindent(); ImGui.EndChild(); } else if (selectedTab == 5) { ImGui.Indent(4f); ImGui.Dummy(new Vector2(4f, 2f)); ImGui.Text("PEAK AIO Mod"); ImGui.Separator(); ImGui.Text("Version: 1.0.2"); ImGui.Text("Author: OniGremlin"); ImGui.Spacing(); ImGui.TextWrapped("PEAK AIO is a quality-of-life and utility mod designed for the game PEAK. It brings together a wide range of player enhancements, inventory tools, world manipulation, and lobby control features in one sleek ImGui-powered interface."); ImGui.Spacing(); ImGui.Text("Key Features:"); ImGui.BulletText("Infinite stamina and affliction immunity"); ImGui.BulletText("Adjustable movement: speed, jump, and climb mods"); ImGui.BulletText("Real-time inventory editing and recharge"); ImGui.BulletText("Player-to-player warp, revive, and kill tools"); ImGui.BulletText("Custom teleportation and ping-based movement"); ImGui.BulletText("Stylized UI with tabbed interface"); ImGui.Spacing(); ImGui.Text("Special Thanks:"); ImGui.BulletText("Penswer for insight, and guidance"); ImGui.BulletText("BepInEx team for the modding framework"); ImGui.BulletText("DearImGuiInjection for seamless UI integration"); ImGui.BulletText("HarmonyX for runtime patching support"); ImGui.Spacing(); ImGui.Separator(); ImGui.TextWrapped("This mod is provided as-is for educational and personal use. Not affiliated with or endorsed by the developers of PEAK. Use responsibly."); ImGui.Unindent(); } ImGui.EndChild(); } ImGui.End(); } catch (Exception ex) { ConfigManager.Logger.LogError((object)("[UI ERROR] Exception in MyUI: " + ex)); } } } public static class Utilities { public static ManualLogSource Logger; public static bool hasInitializedLuggageList; public static void GetPlayer() { if ((Object)(object)Globals.playerObj == (Object)null) { Globals.playerObj = Player.localPlayer; } } public static void UpdateItems() { UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_006f: Unknown result type (might be due to invalid IL or missing references) Globals.items.Clear(); Globals.itemNames.Clear(); for (int i = 0; i < 3; i++) { Globals.selectedItems[i] = -1; } Object[] array = Resources.FindObjectsOfTypeAll(typeof(Item)); foreach (Object obj in array) { Item val = (Item)(object)((obj is Item) ? obj : null); if ((Object)(object)val != (Object)null) { Scene scene = ((Component)val).gameObject.scene; if (((Scene)(ref scene)).handle == 0) { scene = ((Component)val).gameObject.scene; if (string.IsNullOrEmpty(((Scene)(ref scene)).name)) { Globals.items.Add(val); Globals.itemNames.Add(val.GetName()); } } } } }); } public static void AssignInventoryItem(int slot, int itemIndex) { GetPlayer(); if ((Object)(object)Globals.playerObj == (Object)null) { Logger.LogError((object)"[PEAK AIO] Player is null during inventory operation"); } else if ((Object)(object)Globals.playerObj != (Object)null && Globals.playerObj.itemSlots != null && Globals.playerObj.itemSlots.Length > slot && itemIndex >= 0 && itemIndex < Globals.items.Count) { UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) ItemSlot obj = Globals.playerObj.itemSlots[slot]; obj.prefab = Globals.items[itemIndex]; obj.data = new ItemInstanceData(Guid.NewGuid()); ItemInstanceDataHandler.AddInstanceData(obj.data); byte[] array = IBinarySerializable.ToManagedArray<InventorySyncData>(new InventorySyncData(Globals.playerObj.itemSlots, Globals.playerObj.backpackSlot, Globals.playerObj.tempFullSlot)); ((MonoBehaviourPun)Globals.playerObj).photonView.RPC("SyncInventoryRPC", (RpcTarget)1, new object[2] { array, true }); }); Logger.LogInfo((object)$"[Inventory] Assigned {Globals.itemNames[itemIndex]} to slot {slot}"); } } public static void RechargeInventorySlot(int slot, float rechargeValue) { GetPlayer(); if ((Object)(object)Globals.playerObj == (Object)null) { Logger.LogError((object)"[PEAK AIO] Player is null during inventory operation"); } else { if (!((Object)(object)Globals.playerObj != (Object)null) || Globals.playerObj.itemSlots == null || Globals.playerObj.itemSlots.Length <= slot) { return; } UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Invalid comparison between Unknown and I4 //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Invalid comparison between Unknown and I4 //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Invalid comparison between Unknown and I4 ItemSlot val = Globals.playerObj.itemSlots[slot]; if (val?.data?.data != null) { foreach (KeyValuePair<DataEntryKey, DataEntryValue> datum in val.data.data) { if ((int)datum.Key == 12) { DataEntryValue value = datum.Value; IntItemData val2 = (IntItemData)(object)((value is IntItemData) ? value : null); if (val2 != null) { val2.Value = (int)rechargeValue; } } else if ((int)datum.Key == 10) { DataEntryValue value2 = datum.Value; FloatItemData val3 = (FloatItemData)(object)((value2 is FloatItemData) ? value2 : null); if (val3 != null) { val3.Value = rechargeValue; } } else if ((int)datum.Key == 11) { DataEntryValue value3 = datum.Value; FloatItemData val4 = (FloatItemData)(object)((value3 is FloatItemData) ? value3 : null); if (val4 != null) { val4.Value = rechargeValue; } } else if ((int)datum.Key == 2) { DataEntryValue value4 = datum.Value; OptionableIntItemData val5 = (OptionableIntItemData)(object)((value4 is OptionableIntItemData) ? value4 : null); if (val5 != null) { val5.Value = (int)rechargeValue; } } } } }); Logger.LogInfo((object)$"[Inventory] Recharged slot {slot} to {rechargeValue}"); } } public static void RefreshPlayerList() { UnityMainThreadDispatcher.Enqueue((Action)delegate { try { Globals.allPlayers.Clear(); Globals.playerNames.Clear(); Globals.selectedPlayer = -1; foreach (Character allCharacter in Character.AllCharacters) { Globals.allPlayers.Add(allCharacter); Globals.playerNames.Add(allCharacter.characterName); } Logger.LogInfo((object)$"[PlayerList] Found {Globals.allPlayers.Count} players."); } catch (Exception ex) { ConfigManager.Logger.LogError((object)ex); } }); } public static void ReviveAllPlayers() { UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) foreach (Character allCharacter in Character.AllCharacters) { Vector3 val = (((Object)(object)allCharacter.Ghost != (Object)null) ? ((Component)allCharacter.Ghost).transform.position : allCharacter.Head); ((MonoBehaviourPun)allCharacter).photonView.RPC("RPCA_ReviveAtPosition", (RpcTarget)0, new object[2] { val + new Vector3(0f, 4f, 0f), false }); } Logger.LogInfo((object)"[Lobby] Revive All triggered."); }); } public static void KillAllPlayers() { UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) foreach (Character allCharacter in Character.AllCharacters) { if (!Globals.excludeSelfFromAllActions || !allCharacter.IsLocal) { Vector3 position = ((Component)allCharacter).transform.position; ((MonoBehaviourPun)allCharacter).photonView.RPC("RPCA_Die", (RpcTarget)0, new object[1] { position }); } } Logger.LogInfo((object)$"[Lobby] Kill All triggered. ExcludeSelf: {Globals.excludeSelfFromAllActions}"); }); } public static void WarpAllPlayersToMe() { UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //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_0023: 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) Vector3 val = Character.localCharacter.Head + new Vector3(0f, 4f, 0f); foreach (Character allCharacter in Character.AllCharacters) { ((MonoBehaviourPun)allCharacter).photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { val, true }); } Logger.LogInfo((object)"[Lobby] Warp All To Me triggered."); }); } public static void ReviveSelectedPlayer() { if (Globals.selectedPlayer < 0 || Globals.selectedPlayer >= Globals.allPlayers.Count) { return; } UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) try { Character val = Globals.allPlayers[Globals.selectedPlayer]; Vector3 val2 = (((Object)(object)val.Ghost != (Object)null) ? ((Component)val.Ghost).transform.position : val.Head); ((MonoBehaviourPun)val).photonView.RPC("RPCA_ReviveAtPosition", (RpcTarget)0, new object[2] { val2 + new Vector3(0f, 4f, 0f), false }); Logger.LogInfo((object)$"[Lobby] Revive requested for player index {Globals.selectedPlayer}"); } catch (Exception ex) { ConfigManager.Logger.LogError((object)ex); } }); } public static void KillSelectedPlayer() { if (Globals.selectedPlayer < 0 || Globals.selectedPlayer >= Globals.allPlayers.Count) { return; } UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) try { Character obj = Globals.allPlayers[Globals.selectedPlayer]; Vector3 position = ((Component)obj).transform.position; ((MonoBehaviourPun)obj).photonView.RPC("RPCA_Die", (RpcTarget)0, new object[1] { position }); Logger.LogInfo((object)$"[Lobby] Kill requested for player index {Globals.selectedPlayer}"); } catch (Exception ex) { ConfigManager.Logger.LogError((object)ex); } }); } public static void WarpToSelectedPlayer() { if (Globals.selectedPlayer < 0 || Globals.selectedPlayer >= Globals.allPlayers.Count) { return; } UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_002d: 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) try { Vector3 val = Globals.allPlayers[Globals.selectedPlayer].Head + new Vector3(0f, 4f, 0f); ((MonoBehaviourPun)Character.localCharacter).photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { val, true }); Logger.LogInfo((object)$"[Lobby] Warp to requested for player index {Globals.selectedPlayer}"); } catch (Exception ex) { ConfigManager.Logger.LogError((object)ex); } }); } public static void WarpSelectedPlayerToMe() { if (Globals.selectedPlayer < 0 || Globals.selectedPlayer >= Globals.allPlayers.Count) { return; } UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_0014: 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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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) try { Character obj = Globals.allPlayers[Globals.selectedPlayer]; Vector3 val = Character.localCharacter.Head + new Vector3(0f, 4f, 0f); ((MonoBehaviourPun)obj).photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { val, true }); Logger.LogInfo((object)$"[Lobby] Warp to me requested for player index {Globals.selectedPlayer}"); } catch (Exception ex) { ConfigManager.Logger.LogError((object)ex); } }); } public static void TeleportToCoords(float x, float y, float z) { UnityMainThreadDispatcher.Enqueue((Action)delegate { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) try { Character localCharacter = Character.localCharacter; if ((Object)(object)localCharacter == (Object)null || localCharacter.data.dead) { Logger.LogWarning((object)"[Teleport] Local character is null or dead. Aborting teleport."); } else { PhotonView photonView = ((MonoBehaviourPun)localCharacter).photonView; if (!((Object)(object)photonView == (Object)null)) { Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(x, y, z); photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { val, true }); ConfigManager.Logger.LogInfo((object)$"[Teleport] Teleported to {val}"); } } } catch (Exception ex) { ConfigManager.Logger.LogError((object)("[Teleport] Exception: " + ex)); } }); } public static void EnsureLuggageListInitialized() { if (!hasInitializedLuggageList) { hasInitializedLuggageList = true; RefreshLuggageList(); } } public static void RefreshLuggageList() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) Globals.luggageLabels.Clear(); Globals.luggageObject.Clear(); Globals.selectedLuggageIndex = -1; List<(Luggage, float)> list = new List<(Luggage, float)>(); foreach (Luggage item3 in Luggage.ALL_LUGGAGE) { if (!((Object)(object)item3 == (Object)null)) { float num = Vector3.Distance(Character.localCharacter.Head, item3.Center()); if (num <= 300f) { list.Add((item3, num)); } } } list.Sort(((Luggage lug, float distance) a, (Luggage lug, float distance) b) => a.distance.CompareTo(b.distance)); foreach (var item4 in list) { Luggage item = item4.Item1; float item2 = item4.Item2; string arg = item.displayName ?? "Unnamed"; Globals.luggageLabels.Add($"{arg} [{item2:F1}m]"); Globals.luggageObject.Add(item); } Logger.LogInfo((object)$"[Luggage] Refreshed. Found {Globals.luggageLabels.Count} nearby."); } public static void OpenAllNearbyLuggage() { UnityMainThreadDispatcher.Enqueue((Action)delegate { int num = 0; for (int i = 0; i < Globals.luggageObject.Count; i++) { Luggage val = Globals.luggageObject[i]; if (!((Object)(object)val == (Object)null)) { PhotonView component = ((Component)val).GetComponent<PhotonView>(); if ((Object)(object)component != (Object)null) { component.RPC("OpenLuggageRPC", (RpcTarget)0, new object[1] { true }); num++; } } } Logger.LogInfo((object)$"[Luggage] Requested open for {num} nearby containers."); }); } public static void OpenLuggage(int index) { if (index < 0 || index >= Globals.luggageObject.Count) { return; } Luggage luggage = Globals.luggageObject[index]; if ((Object)(object)luggage == (Object)null) { return; } UnityMainThreadDispatcher.Enqueue((Action)delegate { try { PhotonView component = ((Component)luggage).GetComponent<PhotonView>(); if ((Object)(object)component != (Object)null) { component.RPC("OpenLuggageRPC", (RpcTarget)0, new object[1] { true }); Logger.LogInfo((object)("[Luggage] Sent OpenLuggageRPC for: " + luggage.displayName)); } } catch (Exception arg) { Logger.LogError((object)$"[Luggage] Open failed: {arg}"); } }); } public static void SpawnScoutmasterForPlayer(int playerIndex) { UnityMainThreadDispatcher.Enqueue((Action)async delegate { if (!PhotonNetwork.IsMasterClient) { Logger.LogWarning((object)"[Scoutmaster] Only the MasterClient can spawn the Scoutmaster."); } else if (playerIndex < 0 || playerIndex >= Character.AllCharacters.Count) { Logger.LogWarning((object)"[Scoutmaster] Invalid player index."); } else { Character targetCharacter = Character.AllCharacters[playerIndex]; Vector3 val = ((Component)targetCharacter).transform.position + new Vector3(Random.Range(-10f, 10f), 25f, Random.Range(-10f, 10f)); Vector3 down = Vector3.down; RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, down, ref val2, 100f, -1)) { Vector3 val3 = ((RaycastHit)(ref val2)).point + Vector3.up * 1f; Quaternion identity = Quaternion.identity; GameObject scoutObj = PhotonNetwork.InstantiateRoomObject("Character_Scoutmaster", val3, identity, (byte)0, (object[])null); Character component = scoutObj.GetComponent<Character>(); if ((Object)(object)component != (Object)null) { component.data.spawnPoint = ((Component)component).transform; } await Task.Delay(100); Scoutmaster component2 = scoutObj.GetComponent<Scoutmaster>(); if ((Object)(object)component2 != (Object)null) { try { MethodInfo method = typeof(Scoutmaster).GetMethod("SetCurrentTarget", BindingFlags.Instance | BindingFlags.NonPublic); if (method != null) { method.Invoke(component2, new object[2] { targetCharacter, 15f }); Logger.LogInfo((object)("[Scoutmaster] Target set to " + targetCharacter.characterName)); } else { Logger.LogWarning((object)"[Scoutmaster] Reflection failed — method not found."); } } catch (Exception ex) { Logger.LogError((object)("[Scoutmaster] Reflection error: " + ex)); } } } else { Logger.LogWarning((object)"[Scoutmaster] No valid ground to spawn."); } } }); } }