using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using SuperFantasyKingdom; using SuperFantasyKingdom.UI; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("RightClickSkip")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: AssemblyInformationalVersion("1.1.0+66fc831e2d07ffd4f0e39ceffd8b1e95bb0e6dc0")] [assembly: AssemblyProduct("Right Click Skip")] [assembly: AssemblyTitle("RightClickSkip")] [assembly: AssemblyVersion("1.1.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace RightClickSkip { [BepInPlugin("ownly.rightclickskip", "Right Click Skip", "1.1.0")] public class Plugin : BaseUnityPlugin { private const int IntervalMs = 25; private const int MaxMs = 20000; private const int VK_RBUTTON = 2; private static volatile bool s_Running; [DllImport("user32.dll")] private static extern short GetAsyncKeyState(int vKey); private void Awake() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID).PatchAll(); Thread thread = new Thread(SplashPump); thread.IsBackground = true; thread.Start(); } private void Update() { s_Running = true; } private static void SplashPump() { Stopwatch stopwatch = Stopwatch.StartNew(); bool flag = false; try { while (stopwatch.ElapsedMilliseconds < 20000 && !s_Running) { if ((GetAsyncKeyState(2) & 0x8000) != 0) { flag = true; } if (flag) { SplashScreen.Stop((StopBehavior)0); } Thread.Sleep(25); } } catch { } } } internal static class Skipper { internal const float Sentinel = -1f; internal static readonly FieldInfo JustSkipped = AccessTools.Field(typeof(GameInputManager), "m_JustSkipped"); internal static readonly FieldInfo CaptionTimer = AccessTools.Field(typeof(UINewDayCaption), "m_WaitTimer"); internal static UINewDayCaption Caption; internal static bool CaptionArmed; internal static bool VanillaSkipped(GameInputManager input) { return !(-1f).Equals(JustSkipped.GetValue(input)); } internal static bool TrySkipDayCaption() { if (!CaptionArmed || CaptionTimer == null || (Object)(object)Caption == (Object)null || !((Component)Caption).gameObject.activeSelf) { return false; } CaptionTimer.SetValue(Caption, 0.0001f); return true; } } [HarmonyPatch(typeof(UINewDayCaption), "Awake")] internal static class Patch_LearnDayCaption { private static void Postfix(UINewDayCaption __instance) { Skipper.Caption = __instance; Skipper.CaptionArmed = false; } } [HarmonyPatch(typeof(UINewDayCaption), "AfterGameStarting")] internal static class Patch_ArmDayCaption { private static void Postfix() { Skipper.CaptionArmed = true; } } [HarmonyPatch(typeof(GameInputManager), "Skip")] internal static class Patch_SkipDayCaption { private static void Prefix(GameInputManager __instance) { try { if (Skipper.JustSkipped != null) { Skipper.JustSkipped.SetValue(__instance, -1f); } } catch { } } private static void Postfix(GameInputManager __instance, CallbackContext context) { try { if (((CallbackContext)(ref context)).performed && !(Skipper.JustSkipped == null) && !PauseMenuManger.Instance.InMenu() && !Skipper.VanillaSkipped(__instance) && Skipper.TrySkipDayCaption()) { Skipper.JustSkipped.SetValue(__instance, Time.time); } } catch { } } } [HarmonyPatch(typeof(GameInputManager), "GameCancel")] internal static class Patch_RightClickSkips { private static bool Prefix(GameInputManager __instance, CallbackContext context) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) try { if (!((CallbackContext)(ref context)).performed || Skipper.JustSkipped == null || PauseMenuManger.Instance.InMenu()) { return true; } if (((CallbackContext)(ref context)).control == null || !(((CallbackContext)(ref context)).control.device is Mouse)) { return true; } object value = Skipper.JustSkipped.GetValue(__instance); __instance.Skip(context); if (Skipper.VanillaSkipped(__instance)) { return false; } Skipper.JustSkipped.SetValue(__instance, value); } catch { } return true; } } }