using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.Networking; 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(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("Antro.FurnitureDeconstructor")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Antro.FurnitureDeconstructor")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0.0")] [assembly: AssemblyProduct("Antro.FurnitureDeconstructor")] [assembly: AssemblyTitle("Antro.FurnitureDeconstructor")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [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 FurnitureDeconstructMod { [BepInPlugin("Antro.gnome_deconstruct", "Furniture Deconstruct Mod", "1.7.0")] public class FurnitureDeconstructPlugin : BaseUnityPlugin { private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown Harmony val = new Harmony("Antro.gnome_deconstruct"); val.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Furniture Deconstruct Mod 1.7.0 loaded!"); } } [HarmonyPatch(typeof(PlayerNetworking), "OnEntitySpawned")] public class PlayerSpawnPatch { private static void Postfix(PlayerNetworking __instance) { if (((NetworkBehaviour)__instance).IsServer && ((NetworkBehaviour)__instance).IsLocalPlayer) { ((Component)__instance).gameObject.AddComponent(); } } } public class FurnitureDeconstructComponent : MonoBehaviour { [Header("Settings")] public KeyCode deconstructKey = (KeyCode)102; public float requiredHoldTime = 1.5f; public float interactionDistance = 4f; private float currentHoldTime = 0f; private Furniture targetFurniture = null; private bool isUiOpen = false; private bool isLookingAtValidFurniture = false; private bool uiStolen = false; private PlayerNetworking localPlayer; private CraftingRecipes allRecipes; private AllItems allItemsManager; private Sprite customPanelSprite; private Sprite customButtonSprite; private readonly List blacklist = new List { "stockpile", "gamebutton", "medicalterminal", "gnomehouse", "graphics" }; private void Start() { localPlayer = ((Component)this).GetComponent(); } private void EnsureManagersLoaded() { if ((Object)(object)allRecipes == (Object)null) { CraftingRecipes[] array = Resources.FindObjectsOfTypeAll(); if (array.Length != 0) { allRecipes = array[0]; } } if ((Object)(object)allItemsManager == (Object)null) { AllItems[] array2 = Resources.FindObjectsOfTypeAll(); if (array2.Length != 0) { allItemsManager = array2[0]; } } } private void TryStealUI() { if (uiStolen) { return; } Image[] array = Resources.FindObjectsOfTypeAll(); Image[] array2 = array; foreach (Image val in array2) { if (!((Object)(object)val.sprite == (Object)null) && !((Object)(object)((Component)val).transform.parent == (Object)null)) { if (((Object)((Component)val).gameObject).name == "Image" && ((Object)((Component)val).transform.parent).name == "Settings") { customPanelSprite = val.sprite; } if (((Object)((Component)val).gameObject).name == "Bg" && ((Object)((Component)val).transform.parent).name.Contains("SGButtonPrimaryUGUI")) { customButtonSprite = val.sprite; } } } if ((Object)(object)customPanelSprite != (Object)null || (Object)(object)customButtonSprite != (Object)null) { uiStolen = true; } } private void Update() { //IL_006e: 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_007a: 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) //IL_0082: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_018e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)localPlayer == (Object)null || !((NetworkBehaviour)localPlayer).IsServer || !((NetworkBehaviour)localPlayer).IsLocalPlayer || isUiOpen) { return; } Camera main = Camera.main; if ((Object)(object)main == (Object)null) { return; } EnsureManagersLoaded(); Vector3 position = ((Component)main).transform.position; Vector3 forward = ((Component)main).transform.forward; Furniture val = null; RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(position, forward, ref val2, interactionDistance, -5, (QueryTriggerInteraction)1)) { val = ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent(); } if ((Object)(object)val == (Object)null) { RaycastHit[] array = Physics.SphereCastAll(position, 0.2f, forward, interactionDistance, -5, (QueryTriggerInteraction)1); float num = float.MaxValue; RaycastHit[] array2 = array; for (int i = 0; i < array2.Length; i++) { RaycastHit val3 = array2[i]; if (!((Object)(object)((Component)((RaycastHit)(ref val3)).collider).transform.root == (Object)(object)((Component)localPlayer).transform.root)) { Furniture componentInParent = ((Component)((RaycastHit)(ref val3)).collider).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && ((RaycastHit)(ref val3)).distance < num) { num = ((RaycastHit)(ref val3)).distance; val = componentInParent; } } } } if ((Object)(object)val != (Object)null && !IsBlacklisted(val)) { isLookingAtValidFurniture = true; if (Input.GetKey(deconstructKey)) { TryStealUI(); currentHoldTime += Time.deltaTime; if (currentHoldTime >= requiredHoldTime) { targetFurniture = val; OpenConfirmationUI(); currentHoldTime = 0f; isLookingAtValidFurniture = false; } } else { currentHoldTime = 0f; } } else { isLookingAtValidFurniture = false; currentHoldTime = 0f; } } private bool IsBlacklisted(Furniture f) { if ((Object)(object)f == (Object)null) { return true; } string text = ((Object)((Component)f).gameObject).name.ToLower(); string text2 = (((Object)(object)f.FurnitureData != (Object)null) ? ((Object)f.FurnitureData).name.ToLower() : ""); foreach (string item in blacklist) { if (text.Contains(item) || text2.Contains(item)) { return true; } } return false; } private void OpenConfirmationUI() { isUiOpen = true; if ((Object)(object)localPlayer.Controller != (Object)null) { localPlayer.Controller.ShowCursor(true); } } private void CloseConfirmationUI() { isUiOpen = false; targetFurniture = null; if ((Object)(object)localPlayer.Controller != (Object)null) { localPlayer.Controller.ShowCursor(false); } } private void ConfirmDeconstruct() { if ((Object)(object)targetFurniture != (Object)null && NetworkManager.Singleton.IsServer) { RefundResourcesWithScanner(targetFurniture.FurnitureData); try { if ((Object)(object)((NetworkBehaviour)targetFurniture).NetworkObject != (Object)null) { ((NetworkBehaviour)targetFurniture).NetworkObject.Despawn(true); } } catch (Exception ex) { Debug.LogWarning((object)("[Deconstruct Mod] Ignored Despawn Warning: " + ex.Message)); } } CloseConfirmationUI(); } private InventoryBase GetStockpileInventory() { try { GameProgressionManager instance = GameProgressionManager.Instance; if ((Object)(object)instance != (Object)null && (Object)(object)instance.Deposit != (Object)null && (Object)(object)instance.Deposit.ResourceInventory != (Object)null) { return instance.Deposit.ResourceInventory; } } catch { } GnomiumDeposit val = Object.FindFirstObjectByType(); if ((Object)(object)val != (Object)null) { return val.ResourceInventory; } return null; } private void RefundResourcesWithScanner(FurnitureData fData) { //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_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_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: 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_01c9: 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_01cd: 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_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)fData == (Object)null) { return; } if ((Object)(object)allRecipes == (Object)null) { Debug.LogError((object)"[Deconstruct Mod] allRecipes is missing! Cannot refund."); return; } InventoryBase stockpileInventory = GetStockpileInventory(); if ((Object)(object)stockpileInventory == (Object)null) { Debug.LogWarning((object)"[Deconstruct Mod] Stockpile inventory not found! Resources might not be saved."); } bool flag = false; Recipe[] recipes = allRecipes.recipes; int num2 = default(int); foreach (Recipe val in recipes) { if (!((Object)(object)val.CraftResult != (Object)null) || !(((Object)val.CraftResult).name == ((Object)fData).name)) { continue; } flag = true; Vector3 val2 = ((Component)targetFurniture).transform.position + Vector3.up * 0.5f; ItemCost[] cost = val.cost; foreach (ItemCost val3 in cost) { if ((Object)(object)val3.item == (Object)null) { continue; } int num = Mathf.Max(1, Mathf.FloorToInt((float)val3.amount * 0.7f)); string text = ((Object)val3.item).name.ToLower(); if (ResourceStorage.TryGetItemEntry(text, ref num2)) { if ((Object)(object)stockpileInventory != (Object)null && NetworkManager.Singleton.IsServer) { stockpileInventory.TryAddItem(((Object)val3.item).name, num); Debug.Log((object)$"[Deconstruct Mod] Added {num}x {((Object)val3.item).name} to the Base Stockpile!"); } } else { if (!((Object)(object)allItemsManager != (Object)null)) { continue; } for (int k = 0; k < num; k++) { Vector2 val4 = Random.insideUnitCircle * 0.3f; Vector3 val5 = val2 + new Vector3(val4.x, 0f, val4.y); ItemInstance val6 = allItemsManager.SpawnItemInstance(((Object)val3.item).name, val5); if ((Object)(object)val6 != (Object)null) { Rigidbody component = ((Component)val6).GetComponent(); if ((Object)(object)component != (Object)null) { component.position = val5; component.AddForce(Vector3.up * 1.5f, (ForceMode)1); } } } Debug.Log((object)$"[Deconstruct Mod] Dropped {num}x {((Object)val3.item).name} on the floor."); } } break; } if (!flag) { Debug.LogWarning((object)("[Deconstruct Mod] Could not find recipe for " + ((Object)fData).name)); } } private void DrawSpriteRect(Rect rect, Sprite sprite) { //IL_001f: 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_006f: 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) if ((Object)(object)sprite != (Object)null && (Object)(object)sprite.texture != (Object)null) { Rect textureRect = sprite.textureRect; Texture2D texture = sprite.texture; Rect val = default(Rect); ((Rect)(ref val))..ctor(((Rect)(ref textureRect)).x / (float)((Texture)texture).width, ((Rect)(ref textureRect)).y / (float)((Texture)texture).height, ((Rect)(ref textureRect)).width / (float)((Texture)texture).width, ((Rect)(ref textureRect)).height / (float)((Texture)texture).height); GUI.DrawTextureWithTexCoords(rect, (Texture)(object)texture, val); } } private void OnGUI() { //IL_0013: 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) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Expected O, but got Unknown //IL_025f: 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_0273: Expected O, but got Unknown //IL_027a: 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_0094: 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_033a: Unknown result type (might be due to invalid IL or missing references) //IL_0349: 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_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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Expected O, but got Unknown //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_016e: 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_017b: 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_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: 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_0226: Unknown result type (might be due to invalid IL or missing references) GUI.depth = -100; GUIStyle val = new GUIStyle(GUI.skin.label) { fontSize = 30, fontStyle = (FontStyle)1, alignment = (TextAnchor)4 }; if (isUiOpen) { float num = 600f; float num2 = 350f; Rect val2 = default(Rect); ((Rect)(ref val2))..ctor(((float)Screen.width - num) / 2f, ((float)Screen.height - num2) / 2f, num, num2); if ((Object)(object)customPanelSprite != (Object)null) { DrawSpriteRect(val2, customPanelSprite); } else { GUI.Box(val2, ""); } Rect val3 = default(Rect); ((Rect)(ref val3))..ctor(((Rect)(ref val2)).x + 20f, ((Rect)(ref val2)).y + 20f, num - 40f, 220f); GUI.Label(val3, "Are you sure you want to deconstruct?\n\n70% of resources will be\nrefunded to the Stockpile.", val); GUIStyle val4 = new GUIStyle(GUI.skin.label) { fontSize = 32, fontStyle = (FontStyle)1, alignment = (TextAnchor)4 }; Rect val5 = default(Rect); ((Rect)(ref val5))..ctor(((Rect)(ref val2)).x + 80f, ((Rect)(ref val2)).y + 230f, 180f, 90f); GUI.color = new Color(0.8f, 1f, 0.8f); if ((Object)(object)customButtonSprite != (Object)null) { DrawSpriteRect(val5, customButtonSprite); } else { GUI.Box(val5, ""); } if (GUI.Button(val5, "Yes", val4)) { ConfirmDeconstruct(); } Rect val6 = default(Rect); ((Rect)(ref val6))..ctor(((Rect)(ref val2)).x + 340f, ((Rect)(ref val2)).y + 230f, 180f, 90f); GUI.color = new Color(1f, 0.8f, 0.8f); if ((Object)(object)customButtonSprite != (Object)null) { DrawSpriteRect(val6, customButtonSprite); } else { GUI.Box(val6, ""); } if (GUI.Button(val6, "No", val4)) { CloseConfirmationUI(); } GUI.color = Color.white; } else if (isLookingAtValidFurniture) { GUIStyle val7 = new GUIStyle(val) { fontSize = 38 }; val7.normal.textColor = Color.white; GUIStyle val8 = new GUIStyle(val7); val8.normal.textColor = Color.black; string text = $"Hold [{deconstructKey}] to Deconstruct"; if (currentHoldTime > 0f) { int num3 = (int)Mathf.Clamp(currentHoldTime / requiredHoldTime * 100f, 0f, 100f); text = $"Deconstructing... {num3}%"; } Rect val9 = default(Rect); ((Rect)(ref val9))..ctor(0f, (float)Screen.height / 2f + 60f, (float)Screen.width, 60f); GUI.Label(new Rect(((Rect)(ref val9)).x + 3f, ((Rect)(ref val9)).y + 3f, ((Rect)(ref val9)).width, ((Rect)(ref val9)).height), text, val8); GUI.Label(val9, text, val7); } } } } namespace DiscordInviteMod { [BepInPlugin("Antro.discord_invite", "Discord Invite Button", "1.0.2")] public class DiscordInvitePlugin : BaseUnityPlugin { private const string SharedObjectName = "SharedDiscordInviteButton_BG"; private void Awake() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if ((Object)(object)GameObject.Find("SharedDiscordInviteButton_BG") == (Object)null) { GameObject val = new GameObject("SharedDiscordInviteButton_BG"); Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Discord Invite Button initialized successfully!"); } else { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Discord Invite Button already exists from another mod. Skipping creation."); } } } public class DiscordInviteComponent : MonoBehaviour { private readonly string discordUrl = "https://discord.gg/bPjcrJxBmP"; private readonly string logoUrl = "https://i.imgur.com/48jKo1r_d.png?maxwidth=520&shape=thumb&fidelity=high"; private readonly string arrowUrl = "https://i.imgur.com/TUT8ICu_d.png?maxwidth=520&shape=thumb&fidelity=high"; private readonly float logoSize = 300f; private readonly float padding = 40f; private readonly float arrowSize = 160f; private readonly float baseRadius = 260f; private readonly float animAmplitude = 25f; private readonly float animSpeed = 5f; private Texture2D logoTexture; private Texture2D arrowTexture; private GUIStyle transparentStyle; private string folderPath; private bool hasClickedLogo = false; private const string PrefsKey = "Antro_DiscordInvite_HasClicked"; private bool isBrandingVisible = false; private void Start() { hasClickedLogo = PlayerPrefs.GetInt("Antro_DiscordInvite_HasClicked", 0) == 1; folderPath = Path.Combine(Paths.PluginPath, "DiscordInviteMod"); if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } ((MonoBehaviour)this).StartCoroutine(LoadOrDownloadImage(logoUrl, "DiscordLogoCache.png", delegate(Texture2D result) { logoTexture = result; })); if (!hasClickedLogo) { ((MonoBehaviour)this).StartCoroutine(LoadOrDownloadImage(arrowUrl, "DiscordArrowCache.png", delegate(Texture2D result) { arrowTexture = result; })); } ((MonoBehaviour)this).StartCoroutine(CheckBrandingVisibility()); } private IEnumerator CheckBrandingVisibility() { while (true) { GameObject branding = GameObject.Find("Branding (1)"); isBrandingVisible = (Object)(object)branding != (Object)null && branding.activeInHierarchy; yield return (object)new WaitForSeconds(0.5f); } } private IEnumerator LoadOrDownloadImage(string url, string fileName, Action onLoaded) { string localPath = Path.Combine(folderPath, fileName); if (File.Exists(localPath)) { string fileUrl = "file://" + localPath.Replace("\\", "/"); UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(fileUrl); try { yield return uwr.SendWebRequest(); if ((int)uwr.result == 1) { onLoaded?.Invoke(DownloadHandlerTexture.GetContent(uwr)); yield break; } } finally { ((IDisposable)uwr)?.Dispose(); } } UnityWebRequest uwr2 = UnityWebRequestTexture.GetTexture(url); try { yield return uwr2.SendWebRequest(); if ((int)uwr2.result == 1) { Texture2D tex = DownloadHandlerTexture.GetContent(uwr2); onLoaded?.Invoke(tex); try { File.WriteAllBytes(localPath, uwr2.downloadHandler.data); } catch { } } } finally { ((IDisposable)uwr2)?.Dispose(); } } private void OnGUI() { //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_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Expected O, but got Unknown //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //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_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) if (!isBrandingVisible || ((Object)(object)NetworkManager.Singleton != (Object)null && (NetworkManager.Singleton.IsClient || NetworkManager.Singleton.IsServer))) { return; } GUI.depth = -1000; Rect val = default(Rect); ((Rect)(ref val))..ctor((float)Screen.width - logoSize - padding, padding, logoSize, logoSize); if (!hasClickedLogo && (Object)(object)logoTexture != (Object)null && (Object)(object)arrowTexture != (Object)null) { float num = ((Rect)(ref val)).x + logoSize / 2f; float num2 = ((Rect)(ref val)).y + logoSize / 2f; float[,] array = new float[3, 3] { { (float)Math.PI, 90f, 0f }, { (float)Math.PI * 3f / 4f, 45f, 2f }, { (float)Math.PI / 2f, 0f, 4f } }; Rect val2 = default(Rect); for (int i = 0; i < 3; i++) { float num3 = array[i, 0]; float num4 = array[i, 1]; float num5 = array[i, 2]; float num6 = baseRadius + Mathf.Sin(Time.realtimeSinceStartup * animSpeed + num5) * animAmplitude; float num7 = num + Mathf.Cos(num3) * num6; float num8 = num2 + Mathf.Sin(num3) * num6; ((Rect)(ref val2))..ctor(num7 - arrowSize / 2f, num8 - arrowSize / 2f, arrowSize, arrowSize); Matrix4x4 matrix = GUI.matrix; GUIUtility.RotateAroundPivot(num4, new Vector2(num7, num8)); GUI.DrawTexture(val2, (Texture)(object)arrowTexture, (ScaleMode)2, true); GUI.matrix = matrix; } } if ((Object)(object)logoTexture != (Object)null) { if (transparentStyle == null) { transparentStyle = new GUIStyle(GUI.skin.button); transparentStyle.normal.background = null; transparentStyle.hover.background = null; transparentStyle.active.background = null; } if (GUI.Button(val, (Texture)(object)logoTexture, transparentStyle)) { HandleLogoClick(); } } else { GUIStyle val3 = new GUIStyle(GUI.skin.button) { fontSize = 14, fontStyle = (FontStyle)1 }; if (GUI.Button(new Rect((float)(Screen.width - 150) - padding, padding, 150f, 50f), "Discord", val3)) { HandleLogoClick(); } } } private void HandleLogoClick() { if (!hasClickedLogo) { hasClickedLogo = true; PlayerPrefs.SetInt("Antro_DiscordInvite_HasClicked", 1); PlayerPrefs.Save(); if ((Object)(object)arrowTexture != (Object)null) { Object.Destroy((Object)(object)arrowTexture); arrowTexture = null; } } Application.OpenURL(discordUrl); } } }