Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of REPOAutoGACHA v1.0.4
BepInEx/plugins/REPOAutoGACHA.dll
Decompiled 5 hours agousing System; using System.Collections; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace REPOAutoGACHA; [BepInPlugin("dev.yourname.repoautogacha", "REPO AutoGACHA", "1.0.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource ModLogger; internal static ConfigEntry<float> PullDelaySeconds; internal static ConfigEntry<KeyCode> StartKey; internal static ConfigEntry<KeyCode> StopKey; private static MethodInfo _getKeyDown; internal static bool GetKeyDown(KeyCode key) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) if (_getKeyDown == null) { Type type = Type.GetType("UnityEngine.Input, UnityEngine.InputLegacyModule") ?? Type.GetType("UnityEngine.Input, UnityEngine"); if (type != null) { _getKeyDown = type.GetMethod("GetKeyDown", new Type[1] { typeof(KeyCode) }); } } if (_getKeyDown == null) { return false; } return (bool)_getKeyDown.Invoke(null, new object[1] { key }); } private void Awake() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) ModLogger = ((BaseUnityPlugin)this).Logger; PullDelaySeconds = ((BaseUnityPlugin)this).Config.Bind<float>("General", "PullDelaySeconds", 0.15f, new ConfigDescription("各ガチャ間のウェイト秒数", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), Array.Empty<object>())); StartKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "StartKey", (KeyCode)111, "オートガチャ開始キー"); StopKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "StopKey", (KeyCode)105, "オートガチャ停止キー"); new Harmony("dev.yourname.repoautogacha").PatchAll(typeof(CosmeticMachinePatch)); ((Component)this).gameObject.AddComponent<GachaUIBehaviour>(); ModLogger.LogInfo((object)string.Concat("[REPOAutoGACHA] Loaded! Start=", StartKey.Value, " Stop=", StopKey.Value)); } } [HarmonyPatch] internal static class CosmeticMachinePatch { private static Type MachineType => AccessTools.TypeByName("CosmeticShopMachine"); [HarmonyTargetMethod] private static MethodBase TargetMethod() { return AccessTools.Method(MachineType, "Update", (Type[])null, (Type[])null); } [HarmonyPostfix] private static void Update_Postfix(MonoBehaviour __instance) { //IL_0033: 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) bool flag = IsNearMachine(__instance); GachaUIBehaviour.SetVisible(flag); if (flag) { GachaUIBehaviour.SetRunning(TenPullRunner.IsRunning); } if (!flag) { return; } if (!TenPullRunner.IsRunning && Plugin.GetKeyDown(Plugin.StartKey.Value)) { FieldInfo fieldInfo = AccessTools.Field(((object)__instance).GetType(), "interactingPlayer"); if (fieldInfo != null && fieldInfo.GetValue(__instance) != null) { Plugin.ModLogger.LogInfo((object)"[REPOAutoGACHA] 他のプレイヤーがガチャ中です"); return; } Plugin.ModLogger.LogInfo((object)"[REPOAutoGACHA] オートガチャ開始"); __instance.StartCoroutine(TenPullRunner.RunLoop(__instance)); } if (TenPullRunner.IsRunning && Plugin.GetKeyDown(Plugin.StopKey.Value)) { Plugin.ModLogger.LogInfo((object)"[REPOAutoGACHA] 停止リクエスト"); TenPullRunner.StopRequest = true; } } private static bool IsNearMachine(MonoBehaviour machine) { FieldInfo fieldInfo = AccessTools.Field(((object)machine).GetType(), "infoTextTrigger"); if (fieldInfo == null) { return true; } object? value = fieldInfo.GetValue(machine); Component val = (Component)((value is Component) ? value : null); if ((Object)(object)val == (Object)null) { return true; } FieldInfo fieldInfo2 = AccessTools.Field(((object)val).GetType(), "active"); if (fieldInfo2 == null) { return true; } object value2 = fieldInfo2.GetValue(val); return !(value2 is bool) || (bool)value2; } } internal static class TenPullRunner { public static bool StopRequest; public static bool IsRunning { get; private set; } private static Type MachineType => AccessTools.TypeByName("CosmeticShopMachine"); private static Type MetaType => AccessTools.TypeByName("MetaManager"); public static IEnumerator RunLoop(MonoBehaviour machine) { IsRunning = true; StopRequest = false; object metaInstance = GetMetaInstance(); if (metaInstance == null) { Plugin.ModLogger.LogError((object)"[REPOAutoGACHA] MetaManager.instance が null"); IsRunning = false; yield break; } FieldInfo tokensField = AccessTools.Field(MetaType, "cosmeticTokens"); MethodInfo interactMethod = AccessTools.Method(MachineType, "Interact", (Type[])null, (Type[])null); FieldInfo interactingField = AccessTools.Field(MachineType, "interactingPlayer"); if (tokensField == null || interactMethod == null) { Plugin.ModLogger.LogError((object)"[REPOAutoGACHA] 必要なフィールド/メソッドが見つかりません"); IsRunning = false; yield break; } int pulled = 0; while (!StopRequest) { if (!(tokensField.GetValue(metaInstance) is IList { Count: not 0 })) { Plugin.ModLogger.LogInfo((object)"[REPOAutoGACHA] トークンがなくなりました"); break; } float waited = 0f; while (interactingField != null && interactingField.GetValue(machine) != null && waited < 10f) { if (StopRequest) { goto end_IL_0301; } yield return (object)new WaitForSeconds(0.1f); waited += 0.1f; } if (StopRequest) { break; } try { interactMethod.Invoke(machine, null); pulled++; int num = ((tokensField.GetValue(metaInstance) is IList list) ? list.Count : 0); Plugin.ModLogger.LogInfo((object)("[REPOAutoGACHA] " + pulled + "回目 (残: " + num + ")")); GachaUIBehaviour.SetCount(pulled, num); } catch (Exception ex) { Plugin.ModLogger.LogError((object)("[REPOAutoGACHA] Interact 失敗: " + (ex.InnerException ?? ex))); break; } float delay = Plugin.PullDelaySeconds.Value; if (delay > 0f) { yield return (object)new WaitForSeconds(delay); } else { yield return null; } continue; end_IL_0301: break; } Plugin.ModLogger.LogInfo((object)("[REPOAutoGACHA] 合計 " + pulled + " 回引きました")); IsRunning = false; StopRequest = false; GachaUIBehaviour.SetRunning(r: false); } private static object GetMetaInstance() { Type metaType = MetaType; if (metaType == null) { return null; } FieldInfo fieldInfo = AccessTools.Field(metaType, "instance"); if (fieldInfo != null) { return fieldInfo.GetValue(null); } return Object.FindObjectOfType(metaType); } } public class GachaUIBehaviour : MonoBehaviour { private static bool _visible; private static bool _running; private static int _pulled; private static int _remaining; private Texture2D _bgTex; public static void SetVisible(bool v) { _visible = v; } public static void SetRunning(bool r) { _running = r; } public static void SetCount(int p, int r) { _pulled = p; _remaining = r; } private void OnGUI() { //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_0078: 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) //IL_00ca: 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) //IL_00eb: Expected O, but got Unknown //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Expected O, but got Unknown //IL_0145: 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_0029: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0172: 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) if (_visible) { if ((Object)(object)_bgTex == (Object)null) { _bgTex = new Texture2D(1, 1); _bgTex.SetPixel(0, 0, new Color(0f, 0f, 0f, 0.72f)); _bgTex.Apply(); } string text = ((object)Plugin.StartKey.Value/*cast due to .constrained prefix*/).ToString(); string text2 = ((object)Plugin.StopKey.Value/*cast due to .constrained prefix*/).ToString(); float num = 240f; float num2 = 60f; float num3 = (float)Screen.width / 2f - num / 2f; float num4 = (float)Screen.height - num2 - 60f; GUI.DrawTexture(new Rect(num3, num4, num, num2), (Texture)(object)_bgTex); GUIStyle val = new GUIStyle(GUI.skin.label); val.fontSize = 15; val.fontStyle = (FontStyle)1; val.normal.textColor = new Color(1f, 0.85f, 0.2f); val.alignment = (TextAnchor)4; GUIStyle val2 = new GUIStyle(GUI.skin.label); val2.fontSize = 13; val2.normal.textColor = Color.white; val2.alignment = (TextAnchor)4; if (_running) { GUI.Label(new Rect(num3, num4 + 4f, num, 24f), "AUTO GACHA 実行中", val); GUI.Label(new Rect(num3, num4 + 32f, num, 20f), _pulled + "回 / 残: " + _remaining + " [" + text2 + "] 停止", val2); } else { GUI.Label(new Rect(num3, num4 + 4f, num, 24f), "AUTO GACHA", val); GUI.Label(new Rect(num3, num4 + 32f, num, 20f), "[" + text + "] 開始", val2); } } } } internal static class MyPluginInfo { public const string PLUGIN_GUID = "dev.yourname.repoautogacha"; public const string PLUGIN_NAME = "REPO AutoGACHA"; public const string PLUGIN_VERSION = "1.0.0"; }