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 Password Lock v1.0.0
PasswordLock.dll
Decompiled 6 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.Cryptography; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; [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: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Omniscye")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("PasswordLock")] [assembly: AssemblyTitle("PasswordLock")] [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 Omniscye.RepoPasswordLock { [BepInPlugin("Omniscye.RepoPasswordLock", "RepoPasswordLock", "1.0.0")] public class RepoPasswordLock : BaseUnityPlugin { [HarmonyPatch(typeof(SplashScreen), "Awake")] private static class SplashScreen_Awake_Patch { private static void Postfix() { try { PasswordGate.SpawnOrWake(); } catch (Exception arg) { Logger.LogError((object)$"Failed to spawn PasswordGate: {arg}"); } } } public const string PluginGuid = "Omniscye.RepoPasswordLock"; public const string PluginName = "RepoPasswordLock"; public const string PluginVersion = "1.0.0"; internal static ConfigEntry<string> PasswordHash; internal static ConfigEntry<string> PasswordSalt; internal static RepoPasswordLock Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; PasswordHash = ((BaseUnityPlugin)this).Config.Bind<string>("Security", "PasswordHash", string.Empty, "SHA256(salt+password). Stored as hex."); PasswordSalt = ((BaseUnityPlugin)this).Config.Bind<string>("Security", "Salt", string.Empty, "Random 16-byte salt (hex)."); Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} loaded."); } internal void Patch() { //IL_001a: 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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } internal static string ComputeHash(string saltHex, string password) { string saltHex2 = saltHex; if (string.IsNullOrEmpty(saltHex2)) { return string.Empty; } byte[] array = (from i in Enumerable.Range(0, saltHex2.Length / 2) select Convert.ToByte(saltHex2.Substring(i * 2, 2), 16)).ToArray(); using SHA256 sHA = SHA256.Create(); byte[] array2 = new byte[array.Length + Encoding.UTF8.GetByteCount(password)]; Buffer.BlockCopy(array, 0, array2, 0, array.Length); Encoding.UTF8.GetBytes(password, 0, password.Length, array2, array.Length); byte[] array3 = sHA.ComputeHash(array2); StringBuilder stringBuilder = new StringBuilder(array3.Length * 2); byte[] array4 = array3; foreach (byte b in array4) { stringBuilder.Append(b.ToString("x2")); } return stringBuilder.ToString(); } internal static string NewSalt() { byte[] array = new byte[16]; RandomNumberGenerator.Fill(array); StringBuilder stringBuilder = new StringBuilder(array.Length * 2); byte[] array2 = array; foreach (byte b in array2) { stringBuilder.Append(b.ToString("x2")); } return stringBuilder.ToString(); } } internal class PasswordGate : MonoBehaviour { private enum Phase { Hello, Create, Confirm, Enter, Done } [CompilerGenerated] private sealed class <FadeCanvas>d__34 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float target; public float duration; public PasswordGate <>4__this; private float <start>5__1; private float <t>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FadeCanvas>d__34(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <start>5__1 = <>4__this._group.alpha; <t>5__2 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__2 < duration) { <t>5__2 += Time.unscaledDeltaTime; <>4__this._group.alpha = Mathf.Lerp(<start>5__1, target, Mathf.SmoothStep(0f, 1f, <t>5__2 / duration)); <>2__current = null; <>1__state = 1; return true; } <>4__this._group.alpha = target; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <FadeGrid>d__33 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float target; public float duration; public PasswordGate <>4__this; private float <start>5__1; private Graphic[] <imgs>5__2; private float <t>5__3; private float <a>5__4; private Graphic[] <>s__5; private int <>s__6; private Graphic <g>5__7; private Graphic[] <>s__8; private int <>s__9; private Graphic <g>5__10; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FadeGrid>d__33(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <imgs>5__2 = null; <>s__5 = null; <g>5__7 = null; <>s__8 = null; <g>5__10 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <start>5__1 = 1f; <imgs>5__2 = ((Component)<>4__this._grid).GetComponentsInChildren<Graphic>(true); <start>5__1 = ((<imgs>5__2.Length != 0) ? <imgs>5__2[0].canvasRenderer.GetAlpha() : 1f); <t>5__3 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__3 < duration) { <t>5__3 += Time.unscaledDeltaTime; <a>5__4 = Mathf.Lerp(<start>5__1, target, Mathf.SmoothStep(0f, 1f, <t>5__3 / duration)); <>s__5 = <imgs>5__2; for (<>s__6 = 0; <>s__6 < <>s__5.Length; <>s__6++) { <g>5__7 = <>s__5[<>s__6]; <g>5__7.canvasRenderer.SetAlpha(<a>5__4); <g>5__7 = null; } <>s__5 = null; <>2__current = null; <>1__state = 1; return true; } <>s__8 = <imgs>5__2; for (<>s__9 = 0; <>s__9 < <>s__8.Length; <>s__9++) { <g>5__10 = <>s__8[<>s__9]; <g>5__10.canvasRenderer.SetAlpha(target); <g>5__10 = null; } <>s__8 = null; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <FadeTitle>d__32 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float target; public float duration; public PasswordGate <>4__this; private float <start>5__1; private float <t>5__2; private float <a>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FadeTitle>d__32(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <start>5__1 = <>4__this._title.alpha; <t>5__2 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__2 < duration) { <t>5__2 += Time.unscaledDeltaTime; <a>5__3 = Mathf.Lerp(<start>5__1, target, Mathf.SmoothStep(0f, 1f, <t>5__2 / duration)); <>4__this._title.alpha = <a>5__3; <>2__current = null; <>1__state = 1; return true; } <>4__this._title.alpha = target; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <HandleFourDigits>d__30 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PasswordGate <>4__this; private Button[] <>s__1; private int <>s__2; private Button <b>5__3; private bool <ok>5__4; private Button[] <>s__5; private int <>s__6; private Button <b>5__7; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <HandleFourDigits>d__30(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = null; <b>5__3 = null; <>s__5 = null; <b>5__7 = null; <>1__state = -2; } private bool MoveNext() { //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>s__1 = <>4__this._digitButtons; for (<>s__2 = 0; <>s__2 < <>s__1.Length; <>s__2++) { <b>5__3 = <>s__1[<>s__2]; ((Selectable)<b>5__3).interactable = false; <b>5__3 = null; } <>s__1 = null; <>2__current = Hold(0.05f); <>1__state = 1; return true; case 1: <>1__state = -1; if (<>4__this._phase == Phase.Create) { <>4__this._firstSet = <>4__this._entry; <>4__this._entry = string.Empty; <>4__this._progressDots.text = string.Empty; <>2__current = <>4__this.FadeGrid(0f, 0.25f); <>1__state = 2; return true; } if (<>4__this._phase == Phase.Confirm) { if (<>4__this._entry == <>4__this._firstSet) { if (string.IsNullOrEmpty(RepoPasswordLock.PasswordSalt.Value)) { RepoPasswordLock.PasswordSalt.Value = RepoPasswordLock.NewSalt(); } RepoPasswordLock.PasswordHash.Value = RepoPasswordLock.ComputeHash(RepoPasswordLock.PasswordSalt.Value, <>4__this._entry); ((BaseUnityPlugin)RepoPasswordLock.Instance).Config.Save(); <>2__current = <>4__this.FadeGrid(0f, 0.25f); <>1__state = 5; return true; } ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.TitleFlash("Mismatch. Try again", new Color(0.8f, 0.2f, 0.2f, 1f))); <>4__this._entry = string.Empty; <>4__this._progressDots.text = string.Empty; } else if (<>4__this._phase == Phase.Enter) { <ok>5__4 = RepoPasswordLock.ComputeHash(RepoPasswordLock.PasswordSalt.Value, <>4__this._entry) == RepoPasswordLock.PasswordHash.Value; if (<ok>5__4) { <>2__current = <>4__this.FadeGrid(0f, 0.2f); <>1__state = 7; return true; } ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.TitleFlash("Nope.", new Color(0.8f, 0.2f, 0.2f, 1f))); <>4__this._entry = string.Empty; <>4__this._progressDots.text = string.Empty; } break; case 2: <>1__state = -1; <>4__this._title.text = "Confirm Password"; <>2__current = Hold(0.2f); <>1__state = 3; return true; case 3: <>1__state = -1; <>2__current = <>4__this.FadeGrid(1f, 0.25f); <>1__state = 4; return true; case 4: <>1__state = -1; <>4__this._phase = Phase.Confirm; break; case 5: <>1__state = -1; <>4__this._title.text = "Welcome to R.E.P.O"; <>2__current = Hold(0.6f); <>1__state = 6; return true; case 6: <>1__state = -1; <>4__this._phase = Phase.Done; break; case 7: <>1__state = -1; <>4__this._title.text = "Welcome to R.E.P.O"; <>2__current = Hold(0.6f); <>1__state = 8; return true; case 8: <>1__state = -1; <>4__this._phase = Phase.Done; break; } <>s__5 = <>4__this._digitButtons; for (<>s__6 = 0; <>s__6 < <>s__5.Length; <>s__6++) { <b>5__7 = <>s__5[<>s__6]; ((Selectable)<b>5__7).interactable = true; <b>5__7 = null; } <>s__5 = null; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <Hold>d__35 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float t; private float <e>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Hold>d__35(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <e>5__1 = 0f; break; case 1: <>1__state = -1; break; } if (<e>5__1 < t) { <e>5__1 += Time.unscaledDeltaTime; <>2__current = null; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <Run>d__27 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PasswordGate <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Run>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this._phase = Phase.Hello; <>2__current = <>4__this.FadeCanvas(1f, 0.35f); <>1__state = 1; return true; case 1: <>1__state = -1; ((Component)<>4__this._grid).gameObject.SetActive(false); ((Component)<>4__this._progressDots).gameObject.SetActive(false); <>4__this._title.text = "Hello"; <>2__current = Hold(0.6f); <>1__state = 2; return true; case 2: <>1__state = -1; <>2__current = <>4__this.FadeTitle(0f, 0.6f); <>1__state = 3; return true; case 3: <>1__state = -1; if (<>4__this._hasSaved) { <>4__this._phase = Phase.Enter; <>4__this._title.text = "Enter Password"; } else { <>4__this._phase = Phase.Create; <>4__this._title.text = "Create a Password"; } <>4__this._progressDots.text = string.Empty; ((Component)<>4__this._progressDots).gameObject.SetActive(true); ((Component)<>4__this._grid).gameObject.SetActive(true); <>2__current = <>4__this.FadeTitle(1f, 0.6f); <>1__state = 4; return true; case 4: <>1__state = -1; goto IL_01f9; case 5: <>1__state = -1; goto IL_01f9; case 6: { <>1__state = -1; <>4__this.CleanupAndClose(); return false; } IL_01f9: if (<>4__this._phase != Phase.Done) { <>2__current = null; <>1__state = 5; return true; } <>2__current = <>4__this.FadeCanvas(0f, 0.4f); <>1__state = 6; 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(); } } [CompilerGenerated] private sealed class <TitleFlash>d__31 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string text; public Color color; public PasswordGate <>4__this; private Color <original>5__1; private string <originalText>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TitleFlash>d__31(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <originalText>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_00d6: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <original>5__1 = ((Graphic)<>4__this._title).color; <originalText>5__2 = <>4__this._title.text; <>4__this._title.text = text; ((Graphic)<>4__this._title).color = color; <>4__this.PlayClick(0.5f, 200f); <>2__current = Hold(0.5f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this._title.text = <originalText>5__2; ((Graphic)<>4__this._title).color = <original>5__1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static PasswordGate? _instance; private Canvas _canvas = null; private CanvasGroup _group = null; private Image _backdrop = null; private RectTransform _panel = null; private TMP_Text _title = null; private GridLayoutGroup _grid = null; private Button[] _digitButtons = Array.Empty<Button>(); private TMP_Text _progressDots = null; private AudioSource _audio = null; private string _entry = string.Empty; private string _firstSet = string.Empty; private float _prevTimeScale; private bool _uiBuilt = false; private CursorLockMode _prevCursorLock; private bool _prevCursorVisible; private Phase _phase; private bool _hasSaved => !string.IsNullOrEmpty(RepoPasswordLock.PasswordHash.Value); public static void SpawnOrWake() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown if ((Object)(object)_instance != (Object)null) { ((Component)_instance).gameObject.SetActive(true); _instance.Begin(); return; } GameObject val = new GameObject("RepoPasswordGate", new Type[1] { typeof(PasswordGate) }); Object.DontDestroyOnLoad((Object)(object)val); _instance = val.GetComponent<PasswordGate>(); _instance.Begin(); } private void Begin() { //IL_0035: 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) if (!_uiBuilt) { BuildUI(); } else { ResetUIState(); } _prevTimeScale = Time.timeScale; Time.timeScale = 0f; _prevCursorLock = Cursor.lockState; _prevCursorVisible = Cursor.visible; Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; EventSystemEnsure(); ((MonoBehaviour)this).StopAllCoroutines(); ((MonoBehaviour)this).StartCoroutine(Run()); } private void OnDestroy() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) if (Mathf.Approximately(Time.timeScale, 0f)) { Time.timeScale = (Mathf.Approximately(_prevTimeScale, 0f) ? 1f : _prevTimeScale); } Cursor.lockState = _prevCursorLock; Cursor.visible = _prevCursorVisible; _instance = null; } private void ResetUIState() { _entry = string.Empty; _firstSet = string.Empty; if ((Object)(object)_progressDots != (Object)null) { _progressDots.text = string.Empty; _progressDots.alpha = 1f; } if ((Object)(object)_title != (Object)null) { _title.alpha = 1f; } if ((Object)(object)_group != (Object)null) { _group.alpha = 0f; } if ((Object)(object)_grid != (Object)null) { ((Component)_grid).gameObject.SetActive(false); Graphic[] componentsInChildren = ((Component)_grid).GetComponentsInChildren<Graphic>(true); foreach (Graphic val in componentsInChildren) { val.canvasRenderer.SetAlpha(1f); } } if (_digitButtons != null) { Button[] digitButtons = _digitButtons; foreach (Button val2 in digitButtons) { ((Selectable)val2).interactable = true; } } } private void BuildUI() { //IL_004f: 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_00b9: Expected O, but got Unknown //IL_00f7: 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_0116: 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_012e: 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_0144: Expected O, but got Unknown //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Expected O, but got Unknown //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Expected O, but got Unknown //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0342: 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_036a: 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) _canvas = ((Component)this).gameObject.AddComponent<Canvas>(); _canvas.renderMode = (RenderMode)0; _canvas.sortingOrder = 32767; CanvasScaler val = ((Component)this).gameObject.AddComponent<CanvasScaler>(); val.uiScaleMode = (ScaleMode)1; val.referenceResolution = new Vector2(1920f, 1080f); val.matchWidthOrHeight = 0.5f; ((Component)this).gameObject.AddComponent<GraphicRaycaster>(); _group = ((Component)this).gameObject.AddComponent<CanvasGroup>(); _group.alpha = 0f; _group.interactable = true; _group.blocksRaycasts = true; GameObject val2 = new GameObject("Backdrop"); val2.transform.SetParent(((Component)_canvas).transform, false); _backdrop = val2.AddComponent<Image>(); ((Graphic)_backdrop).color = new Color(0f, 0f, 0f, 0.98f); RectTransform component = val2.GetComponent<RectTransform>(); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; component.offsetMin = Vector2.zero; component.offsetMax = Vector2.zero; GameObject val3 = new GameObject("Panel"); val3.transform.SetParent(((Component)_canvas).transform, false); _panel = val3.AddComponent<RectTransform>(); _panel.anchorMin = new Vector2(0.5f, 0.5f); _panel.anchorMax = new Vector2(0.5f, 0.5f); _panel.pivot = new Vector2(0.5f, 0.5f); _panel.sizeDelta = new Vector2(900f, 800f); _panel.anchoredPosition = Vector2.zero; VerticalLayoutGroup val4 = val3.AddComponent<VerticalLayoutGroup>(); ((LayoutGroup)val4).childAlignment = (TextAnchor)4; ((HorizontalOrVerticalLayoutGroup)val4).spacing = 24f; ((LayoutGroup)val4).padding = new RectOffset(20, 20, 20, 20); ((HorizontalOrVerticalLayoutGroup)val4).childControlWidth = false; ((HorizontalOrVerticalLayoutGroup)val4).childControlHeight = false; ((HorizontalOrVerticalLayoutGroup)val4).childForceExpandWidth = false; ((HorizontalOrVerticalLayoutGroup)val4).childForceExpandHeight = false; _title = MakeText(val3.transform, "Hello", 64, (FontStyles)17); ((Graphic)_title).color = new Color(0.85f, 0.85f, 0.85f, 1f); _progressDots = MakeText(val3.transform, "", 42, (FontStyles)1); ((Graphic)_progressDots).color = new Color(0.8f, 0.8f, 0.8f, 1f); GameObject val5 = new GameObject("DigitGrid"); val5.transform.SetParent(val3.transform, false); _grid = val5.AddComponent<GridLayoutGroup>(); RectTransform component2 = val5.GetComponent<RectTransform>(); component2.anchorMin = new Vector2(0.5f, 0.5f); component2.anchorMax = new Vector2(0.5f, 0.5f); component2.pivot = new Vector2(0.5f, 0.5f); component2.sizeDelta = new Vector2(600f, 600f); component2.anchoredPosition = Vector2.zero; _grid.cellSize = new Vector2(170f, 170f); _grid.spacing = new Vector2(30f, 30f); _grid.constraint = (Constraint)1; _grid.constraintCount = 3; _digitButtons = Enumerable.Range(1, 9).Select(MakeDigitButton).ToArray(); _audio = ((Component)this).gameObject.AddComponent<AudioSource>(); _audio.playOnAwake = false; _audio.spatialBlend = 0f; _uiBuilt = true; } private TMP_Text MakeText(Transform parent, string content, int size, FontStyles styles) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0057: 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) GameObject val = new GameObject("TMPText"); val.transform.SetParent(parent, false); TextMeshProUGUI val2 = val.AddComponent<TextMeshProUGUI>(); ((TMP_Text)val2).text = content; ((TMP_Text)val2).fontSize = size; ((TMP_Text)val2).alignment = (TextAlignmentOptions)514; ((TMP_Text)val2).enableAutoSizing = false; ((TMP_Text)val2).enableWordWrapping = false; ((TMP_Text)val2).overflowMode = (TextOverflowModes)1; ((TMP_Text)val2).fontStyle = styles; RectTransform rectTransform = ((TMP_Text)val2).rectTransform; rectTransform.sizeDelta = new Vector2(1000f, (float)(size + 60)); return (TMP_Text)(object)val2; } private Button MakeDigitButton(int digit) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //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_00a9: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Expected O, but got Unknown GameObject val = new GameObject($"Digit_{digit}"); val.transform.SetParent(((Component)_grid).transform, false); Image val2 = val.AddComponent<Image>(); ((Graphic)val2).color = new Color(0.1f, 0.1f, 0.1f, 0.85f); ((Graphic)val2).raycastTarget = true; Button val3 = val.AddComponent<Button>(); ColorBlock val4 = default(ColorBlock); ((ColorBlock)(ref val4)).colorMultiplier = 1f; ((ColorBlock)(ref val4)).normalColor = new Color(0.1f, 0.1f, 0.1f, 0.85f); ((ColorBlock)(ref val4)).highlightedColor = new Color(0.2f, 0.2f, 0.2f, 0.95f); ((ColorBlock)(ref val4)).pressedColor = new Color(0.6f, 0.6f, 0.1f, 1f); ((ColorBlock)(ref val4)).selectedColor = new Color(0.2f, 0.2f, 0.2f, 0.95f); ((ColorBlock)(ref val4)).disabledColor = new Color(0.05f, 0.05f, 0.05f, 0.5f); ColorBlock colors = val4; ((Selectable)val3).colors = colors; TextMeshProUGUI val5 = new GameObject("Label").AddComponent<TextMeshProUGUI>(); ((TMP_Text)val5).transform.SetParent(val.transform, false); ((TMP_Text)val5).text = digit.ToString(); ((TMP_Text)val5).alignment = (TextAlignmentOptions)514; ((TMP_Text)val5).fontSize = 64f; ((TMP_Text)val5).fontStyle = (FontStyles)1; ((Graphic)val5).color = new Color(0.85f, 0.85f, 0.85f, 1f); RectTransform rectTransform = ((TMP_Text)val5).rectTransform; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; ((UnityEvent)val3.onClick).AddListener((UnityAction)delegate { OnDigit(digit); }); return val3; } [IteratorStateMachine(typeof(<Run>d__27))] private IEnumerator Run() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Run>d__27(0) { <>4__this = this }; } private void CleanupAndClose() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) Time.timeScale = (Mathf.Approximately(_prevTimeScale, 0f) ? 1f : _prevTimeScale); Cursor.lockState = _prevCursorLock; Cursor.visible = _prevCursorVisible; _instance = null; Object.Destroy((Object)(object)((Component)this).gameObject); } private void OnDigit(int d) { PlayClick(); if (_phase == Phase.Create || _phase == Phase.Confirm || _phase == Phase.Enter) { _entry += d; _progressDots.text = new string('•', _entry.Length); if (_entry.Length >= 4) { ((MonoBehaviour)this).StartCoroutine(HandleFourDigits()); } } } [IteratorStateMachine(typeof(<HandleFourDigits>d__30))] private IEnumerator HandleFourDigits() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <HandleFourDigits>d__30(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<TitleFlash>d__31))] private IEnumerator TitleFlash(string text, Color color) { //IL_0015: 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) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <TitleFlash>d__31(0) { <>4__this = this, text = text, color = color }; } [IteratorStateMachine(typeof(<FadeTitle>d__32))] private IEnumerator FadeTitle(float target, float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FadeTitle>d__32(0) { <>4__this = this, target = target, duration = duration }; } [IteratorStateMachine(typeof(<FadeGrid>d__33))] private IEnumerator FadeGrid(float target, float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FadeGrid>d__33(0) { <>4__this = this, target = target, duration = duration }; } [IteratorStateMachine(typeof(<FadeCanvas>d__34))] private IEnumerator FadeCanvas(float target, float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FadeCanvas>d__34(0) { <>4__this = this, target = target, duration = duration }; } [IteratorStateMachine(typeof(<Hold>d__35))] private static IEnumerator Hold(float t) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Hold>d__35(0) { t = t }; } private void EventSystemEnsure() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (!((Object)(object)EventSystem.current != (Object)null)) { GameObject val = new GameObject("EventSystem", new Type[2] { typeof(EventSystem), typeof(StandaloneInputModule) }); Object.DontDestroyOnLoad((Object)(object)val); } } private void PlayClick(float volume = 1f, float hz = 440f) { int num = 22050; float num2 = 0.06f; int num3 = Mathf.CeilToInt((float)num * num2); float[] array = new float[num3]; for (int i = 0; i < num3; i++) { float num4 = (float)i / (float)num; float num5 = Mathf.Clamp01(Mathf.Min(num4 * 40f, (num2 - num4) * 60f)); array[i] = Mathf.Sin(MathF.PI * 2f * hz * num4) * num5 * 0.5f; } AudioClip val = AudioClip.Create("ui_click", num3, 1, num, false); val.SetData(array, 0); _audio.pitch = Random.Range(0.95f, 1.05f); _audio.PlayOneShot(val, volume); } } }