using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using Mirror; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("GWYF.AutoPhone")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyInformationalVersion("1.0.1+3ea0761173a791d5fd7817926d25acc0b2ea7026")] [assembly: AssemblyProduct("GWYF.AutoPhone")] [assembly: AssemblyTitle("GWYF.AutoPhone")] [assembly: AssemblyVersion("1.0.1.0")] namespace GWYF.AutoPhone; [BepInProcess("Gamble With Your Friends.exe")] [BepInPlugin("GWYF.Epoch.AutoPhone", "Auto Phone!", "1.0.1")] public class Plugin : BaseUnityPlugin { [CompilerGenerated] private sealed class d__4 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Plugin <>4__this; private float 5__1; private float 5__2; private bool 5__3; private Dictionary.ValueCollection.Enumerator <>s__4; private NetworkConnectionToClient 5__5; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__4 = default(Dictionary.ValueCollection.Enumerator); 5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!NetworkServer.active) { Logger.LogInfo((object)"[AutoPhone] Not the server – skipping."); return false; } Logger.LogInfo((object)"[AutoPhone] Waiting for at least one ready client..."); 5__1 = 30f; 5__2 = 0f; goto IL_013d; case 1: <>1__state = -1; goto IL_013d; case 2: { <>1__state = -1; <>4__this.TriggerAllPhoneBooths(); return false; } IL_013d: if (5__2 < 5__1) { 5__3 = false; <>s__4 = NetworkServer.connections.Values.GetEnumerator(); try { while (<>s__4.MoveNext()) { 5__5 = <>s__4.Current; if (5__5 != null && ((NetworkConnection)5__5).isReady) { 5__3 = true; break; } 5__5 = null; } } finally { ((IDisposable)<>s__4).Dispose(); } <>s__4 = default(Dictionary.ValueCollection.Enumerator); if (!5__3) { 5__2 += Time.deltaTime; <>2__current = null; <>1__state = 1; return true; } } if (5__2 >= 5__1) { Logger.LogWarning((object)"[AutoPhone] Timed out waiting for a ready client. Triggering anyway."); } else { Logger.LogInfo((object)$"[AutoPhone] Client ready after ~{5__2:F1}s. Triggering PhoneBooths."); } <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 2; return true; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal static ManualLogSource Logger; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; SceneManager.sceneLoaded += OnSceneLoaded; Logger.LogInfo((object)"[AutoPhone] Plugin is loaded!"); } private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { Logger.LogInfo((object)("[AutoPhone] Scene loaded: " + ((Scene)(ref scene)).name + ". Will wait for clients before triggering PhoneBooths.")); ((MonoBehaviour)this).StartCoroutine(WaitForClientsAndTrigger()); } [IteratorStateMachine(typeof(d__4))] private IEnumerator WaitForClientsAndTrigger() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__4(0) { <>4__this = this }; } private void TriggerAllPhoneBooths() { PhoneBooth[] array = Object.FindObjectsByType((FindObjectsSortMode)0); if (array.Length == 0) { Logger.LogInfo((object)"[AutoPhone] No PhoneBooths found in scene."); return; } MethodInfo method = typeof(PhoneBooth).GetMethod("ServerFirstInteraction", BindingFlags.Instance | BindingFlags.NonPublic); if (method == null) { Logger.LogError((object)"[AutoPhone] Could not find ServerFirstInteraction. Dumping PhoneBooth methods:"); MethodInfo[] methods = typeof(PhoneBooth).GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { Logger.LogInfo((object)(" [" + methodInfo.DeclaringType?.Name + "] " + methodInfo.Name)); } return; } Logger.LogInfo((object)$"[AutoPhone] Triggering ServerFirstInteraction on {array.Length} PhoneBooth(s)."); PhoneBooth[] array2 = array; foreach (PhoneBooth val in array2) { if (!((Object)(object)val == (Object)null)) { Logger.LogInfo((object)("[AutoPhone] Triggering: " + ((Object)((Component)val).gameObject).name)); method.Invoke(val, null); } } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "GWYF.Epoch.AutoPhone"; public const string PLUGIN_NAME = "Auto Phone!"; public const string PLUGIN_VERSION = "1.0.1"; }