using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using ArabicSupportUnity; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Discord; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Sandbox; using SettingsMenu.Components; using TMPro; using UltrakULL.Harmony_Patches; using UltrakULL.audio; using UltrakULL.json; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.Networking; using UnityEngine.SceneManagement; 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: AssemblyTitle("UltrakULL")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("UltrakULL")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a4a60eef-e5f3-4a77-b125-236fbf44cca4")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyVersion("1.0.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; } } } internal enum IsolatedArabicLetters { Hamza = 65152, Alef = 65165, AlefHamza = 65155, WawHamza = 65157, AlefMaksoor = 65159, AlefMaksora = 64508, HamzaNabera = 65161, Ba = 65167, Ta = 65173, Tha2 = 65177, Jeem = 65181, H7aa = 65185, Khaa2 = 65189, Dal = 65193, Thal = 65195, Ra2 = 65197, Zeen = 65199, Seen = 65201, Sheen = 65205, S9a = 65209, Dha = 65213, T6a = 65217, T6ha = 65221, Ain = 65225, Gain = 65229, Fa = 65233, Gaf = 65237, Kaf = 65241, Lam = 65245, Meem = 65249, Noon = 65253, Ha = 65257, Waw = 65261, Ya = 65265, AlefMad = 65153, TaMarboota = 65171, PersianPe = 64342, PersianChe = 64378, PersianZe = 64394, PersianGaf = 64402, PersianGaf2 = 64398, PersianYeh = 64508 } internal enum GeneralArabicLetters { Hamza = 1569, Alef = 1575, AlefHamza = 1571, WawHamza = 1572, AlefMaksoor = 1573, AlefMagsora = 1609, HamzaNabera = 1574, Ba = 1576, Ta = 1578, Tha2 = 1579, Jeem = 1580, H7aa = 1581, Khaa2 = 1582, Dal = 1583, Thal = 1584, Ra2 = 1585, Zeen = 1586, Seen = 1587, Sheen = 1588, S9a = 1589, Dha = 1590, T6a = 1591, T6ha = 1592, Ain = 1593, Gain = 1594, Fa = 1601, Gaf = 1602, Kaf = 1603, Lam = 1604, Meem = 1605, Noon = 1606, Ha = 1607, Waw = 1608, Ya = 1610, AlefMad = 1570, TaMarboota = 1577, PersianPe = 1662, PersianChe = 1670, PersianZe = 1688, PersianGaf = 1711, PersianGaf2 = 1705, PersianYeh = 1740 } internal struct ArabicMapping { public int from; public int to; public ArabicMapping(int from, int to) { this.from = from; this.to = to; } } internal class ArabicTable { private static ArabicMapping[] mapList; private static ArabicTable arabicMapper; internal static ArabicTable ArabicMapper { get { if (arabicMapper == null) { arabicMapper = new ArabicTable(); } return arabicMapper; } } private ArabicTable() { mapList = new ArabicMapping[42] { new ArabicMapping(1569, 65152), new ArabicMapping(1575, 65165), new ArabicMapping(1571, 65155), new ArabicMapping(1572, 65157), new ArabicMapping(1573, 65159), new ArabicMapping(1609, 64508), new ArabicMapping(1574, 65161), new ArabicMapping(1576, 65167), new ArabicMapping(1578, 65173), new ArabicMapping(1579, 65177), new ArabicMapping(1580, 65181), new ArabicMapping(1581, 65185), new ArabicMapping(1582, 65189), new ArabicMapping(1583, 65193), new ArabicMapping(1584, 65195), new ArabicMapping(1585, 65197), new ArabicMapping(1586, 65199), new ArabicMapping(1587, 65201), new ArabicMapping(1588, 65205), new ArabicMapping(1589, 65209), new ArabicMapping(1590, 65213), new ArabicMapping(1591, 65217), new ArabicMapping(1592, 65221), new ArabicMapping(1593, 65225), new ArabicMapping(1594, 65229), new ArabicMapping(1601, 65233), new ArabicMapping(1602, 65237), new ArabicMapping(1603, 65241), new ArabicMapping(1604, 65245), new ArabicMapping(1605, 65249), new ArabicMapping(1606, 65253), new ArabicMapping(1607, 65257), new ArabicMapping(1608, 65261), new ArabicMapping(1610, 65265), new ArabicMapping(1570, 65153), new ArabicMapping(1577, 65171), new ArabicMapping(1662, 64342), new ArabicMapping(1670, 64378), new ArabicMapping(1688, 64394), new ArabicMapping(1711, 64402), new ArabicMapping(1705, 64398), new ArabicMapping(1740, 64508) }; } internal int Convert(int toBeConverted) { for (int i = 0; i < mapList.Length; i++) { ArabicMapping arabicMapping = mapList[i]; if (arabicMapping.from == toBeConverted) { return arabicMapping.to; } } return toBeConverted; } } internal class TashkeelLocation { public char tashkeel; public int position; public TashkeelLocation(char tashkeel, int position) { this.tashkeel = tashkeel; this.position = position; } } internal class ArabicFixerTool { internal static bool showTashkeel = true; internal static bool combineTashkeel = true; internal static bool useHinduNumbers = true; internal static StringBuilder internalStringBuilder = new StringBuilder(); internal static void RemoveTashkeel(ref string str, out List tashkeelLocation) { tashkeelLocation = new List(); int lastSplitIndex = 0; internalStringBuilder.Clear(); internalStringBuilder.EnsureCapacity(str.Length); int num = 0; for (int i = 0; i < str.Length; i++) { if (str[i] == '\u064b') { tashkeelLocation.Add(new TashkeelLocation('\u064b', i)); num++; IncrementSB(ref str, i); } else if (str[i] == '\u064c') { tashkeelLocation.Add(new TashkeelLocation('\u064c', i)); num++; IncrementSB(ref str, i); } else if (str[i] == '\u064d') { tashkeelLocation.Add(new TashkeelLocation('\u064d', i)); num++; IncrementSB(ref str, i); } else if (str[i] == '\u064e') { if (num > 0 && combineTashkeel && tashkeelLocation[num - 1].tashkeel == '\u0651') { tashkeelLocation[num - 1].tashkeel = 'ﱠ'; IncrementSB(ref str, i); } else { tashkeelLocation.Add(new TashkeelLocation('\u064e', i)); num++; IncrementSB(ref str, i); } } else if (str[i] == '\u064f') { if (num > 0 && combineTashkeel && tashkeelLocation[num - 1].tashkeel == '\u0651') { tashkeelLocation[num - 1].tashkeel = 'ﱡ'; IncrementSB(ref str, i); } else { tashkeelLocation.Add(new TashkeelLocation('\u064f', i)); num++; IncrementSB(ref str, i); } } else if (str[i] == '\u0650') { if (num > 0 && combineTashkeel && tashkeelLocation[num - 1].tashkeel == '\u0651') { tashkeelLocation[num - 1].tashkeel = 'ﱢ'; IncrementSB(ref str, i); } else { tashkeelLocation.Add(new TashkeelLocation('\u0650', i)); num++; IncrementSB(ref str, i); } } else if (str[i] == '\u0651') { if (num > 0 && combineTashkeel) { if (tashkeelLocation[num - 1].tashkeel == '\u064e') { tashkeelLocation[num - 1].tashkeel = 'ﱠ'; IncrementSB(ref str, i); continue; } if (tashkeelLocation[num - 1].tashkeel == '\u064f') { tashkeelLocation[num - 1].tashkeel = 'ﱡ'; IncrementSB(ref str, i); continue; } if (tashkeelLocation[num - 1].tashkeel == '\u0650') { tashkeelLocation[num - 1].tashkeel = 'ﱢ'; IncrementSB(ref str, i); continue; } } tashkeelLocation.Add(new TashkeelLocation('\u0651', i)); num++; IncrementSB(ref str, i); } else if (str[i] == '\u0652') { tashkeelLocation.Add(new TashkeelLocation('\u0652', i)); num++; IncrementSB(ref str, i); } else if (str[i] == '\u0653') { tashkeelLocation.Add(new TashkeelLocation('\u0653', i)); num++; IncrementSB(ref str, i); } else if (str[i] == 'ﱠ') { IncrementSB(ref str, i); } else if (str[i] == 'ﱡ') { IncrementSB(ref str, i); } else if (str[i] == 'ﱢ') { IncrementSB(ref str, i); } } if (lastSplitIndex != 0) { IncrementSB(ref str, str.Length); str = internalStringBuilder.ToString(); } void IncrementSB(ref string reference, int num2) { if (num2 - lastSplitIndex > 0) { internalStringBuilder.Append(reference, lastSplitIndex, num2 - lastSplitIndex); } lastSplitIndex = num2 + 1; } } internal static void ReturnTashkeel(ref char[] letters, List tashkeelLocation) { Array.Resize(ref letters, letters.Length + tashkeelLocation.Count); for (int i = 0; i < tashkeelLocation.Count; i++) { TashkeelLocation tashkeelLocation2 = tashkeelLocation[i]; for (int num = letters.Length - 1; num > tashkeelLocation2.position; num--) { letters[num] = letters[num - 1]; } letters[tashkeelLocation2.position] = tashkeelLocation2.tashkeel; } } internal static string FixLine(string str) { RemoveTashkeel(ref str, out var tashkeelLocation); char[] array = new char[str.Length]; char[] letters = str.ToCharArray(); for (int i = 0; i < array.Length; i++) { array[i] = (char)ArabicTable.ArabicMapper.Convert(str[i]); } for (int j = 0; j < array.Length; j++) { bool flag = false; if (array[j] == 'ﻝ' && j < array.Length - 1) { if (array[j + 1] == 'ﺇ') { array[j] = 'ﻷ'; letters[j + 1] = '\uffff'; flag = true; } else if (array[j + 1] == 'ﺍ') { array[j] = 'ﻹ'; letters[j + 1] = '\uffff'; flag = true; } else if (array[j + 1] == 'ﺃ') { array[j] = 'ﻵ'; letters[j + 1] = '\uffff'; flag = true; } else if (array[j + 1] == 'ﺁ') { array[j] = 'ﻳ'; letters[j + 1] = '\uffff'; flag = true; } } if (!IsIgnoredCharacter(array[j])) { if (IsMiddleLetter(array, j)) { letters[j] = (char)(array[j] + 3); } else if (IsFinishingLetter(array, j)) { letters[j] = (char)(array[j] + 1); } else if (IsLeadingLetter(array, j)) { letters[j] = (char)(array[j] + 2); } } if (flag) { j++; } letters[j] = (char)HandleInduNumber(array[j], letters[j]); } if (showTashkeel && tashkeelLocation.Count > 0) { ReturnTashkeel(ref letters, tashkeelLocation); } internalStringBuilder.Clear(); internalStringBuilder.EnsureCapacity(letters.Length); List numberList = null; for (int num = letters.Length - 1; num >= 0; num--) { if (char.IsPunctuation(letters[num]) && num > 0 && num < letters.Length - 1 && (char.IsPunctuation(letters[num - 1]) || char.IsPunctuation(letters[num + 1]))) { if (letters[num] != '\uffff') { internalStringBuilder.Append(letters[num]); } } else if (letters[num] == ' ' && num > 0 && num < letters.Length - 1 && (char.IsLower(letters[num - 1]) || char.IsUpper(letters[num - 1]) || char.IsNumber(letters[num - 1])) && (char.IsLower(letters[num + 1]) || char.IsUpper(letters[num + 1]) || char.IsNumber(letters[num + 1]))) { AddNumber(letters[num]); } else if (char.IsNumber(letters[num]) || char.IsLower(letters[num]) || char.IsUpper(letters[num]) || char.IsSymbol(letters[num]) || char.IsPunctuation(letters[num])) { AddNumber(letters[num]); } else if ((letters[num] >= '\ud800' && letters[num] <= '\udbff') || (letters[num] >= '\udc00' && letters[num] <= '\udfff')) { AddNumber(letters[num]); } else { AppendNumbers(); if (letters[num] != '\uffff') { internalStringBuilder.Append(letters[num]); } } } AppendNumbers(); return internalStringBuilder.ToString(); void AddNumber(char value) { if (numberList == null) { numberList = new List(); } numberList.Add(value); } void AppendNumbers() { if (numberList != null && numberList.Count > 0) { for (int k = 0; k < numberList.Count; k++) { internalStringBuilder.Append(numberList[numberList.Count - 1 - k]); } numberList.Clear(); } } } internal static ushort HandleInduNumber(ushort letterOrigin, ushort letterFinal) { return letterOrigin switch { 48 => 1632, 49 => 1633, 50 => 1634, 51 => 1635, 52 => 1636, 53 => 1637, 54 => 1638, 55 => 1639, 56 => 1640, 57 => 1641, _ => letterFinal, }; } internal static bool IsIgnoredCharacter(char ch) { bool flag = char.IsPunctuation(ch); bool flag2 = char.IsNumber(ch); bool flag3 = char.IsLower(ch); bool flag4 = char.IsUpper(ch); bool flag5 = char.IsSymbol(ch); bool flag6 = ch == 'ﭖ' || ch == 'ﭺ' || ch == 'ﮊ' || ch == 'ﮒ' || ch == 'ﮎ'; bool flag7 = ch <= '\ufeff' && ch >= 'ﹰ'; bool flag8 = flag7 || flag6 || ch == 'ﯼ'; return flag || flag2 || flag3 || flag4 || flag5 || !flag8 || ch == 'a' || ch == '>' || ch == '<' || ch == '؛'; } internal static bool IsLeadingLetter(char[] letters, int index) { bool flag = index == 0 || letters[index - 1] == ' ' || char.IsPunctuation(letters[index - 1]) || letters[index - 1] == 'ﺍ' || letters[index - 1] == 'ﺩ' || letters[index - 1] == 'ﺫ' || letters[index - 1] == 'ﺭ' || letters[index - 1] == 'ﺯ' || letters[index - 1] == 'ﮊ' || letters[index - 1] == 'ﻭ' || letters[index - 1] == 'ﺁ' || letters[index - 1] == 'ﺃ' || letters[index - 1] == 'ﺀ' || letters[index - 1] == 'ﺇ' || letters[index - 1] == 'ﺅ'; bool flag2 = letters[index] != ' ' && letters[index] != 'ﺩ' && letters[index] != 'ﺫ' && letters[index] != 'ﺭ' && letters[index] != 'ﺯ' && letters[index] != 'ﮊ' && letters[index] != 'ﺍ' && letters[index] != 'ﺃ' && letters[index] != 'ﺇ' && letters[index] != 'ﺁ' && letters[index] != 'ﺅ' && letters[index] != 'ﻭ' && letters[index] != 'ﺀ'; bool flag3 = index < letters.Length - 1 && letters[index + 1] != ' ' && letters[index + 1] != '\n' && letters[index + 1] != '\r' && !char.IsPunctuation(letters[index + 1]) && !char.IsNumber(letters[index + 1]) && !char.IsSymbol(letters[index + 1]) && !char.IsLower(letters[index + 1]) && !char.IsUpper(letters[index + 1]) && letters[index + 1] != 'ﺀ'; if (flag && flag2 && flag3) { return true; } return false; } internal static bool IsFinishingLetter(char[] letters, int index) { bool flag = index != 0; bool flag2 = index != 0 && letters[index - 1] != ' ' && letters[index - 1] != 'ﺩ' && letters[index - 1] != 'ﺫ' && letters[index - 1] != 'ﺭ' && letters[index - 1] != 'ﺯ' && letters[index - 1] != 'ﮊ' && letters[index - 1] != 'ﻭ' && letters[index - 1] != 'ﺍ' && letters[index - 1] != 'ﺁ' && letters[index - 1] != 'ﺃ' && letters[index - 1] != 'ﺇ' && letters[index - 1] != 'ﺅ' && letters[index - 1] != 'ﺀ' && !char.IsPunctuation(letters[index - 1]) && !char.IsSymbol(letters[index - 1]); bool flag3 = letters[index] != ' ' && letters[index] != 'ﺀ'; if (flag2 && flag3) { return true; } return false; } internal static bool IsMiddleLetter(char[] letters, int index) { bool flag = index != 0 && letters[index] != 'ﺍ' && letters[index] != 'ﺩ' && letters[index] != 'ﺫ' && letters[index] != 'ﺭ' && letters[index] != 'ﺯ' && letters[index] != 'ﮊ' && letters[index] != 'ﻭ' && letters[index] != 'ﺁ' && letters[index] != 'ﺃ' && letters[index] != 'ﺇ' && letters[index] != 'ﺅ' && letters[index] != 'ﺀ'; bool flag2 = index != 0 && letters[index - 1] != 'ﺍ' && letters[index - 1] != 'ﺩ' && letters[index - 1] != 'ﺫ' && letters[index - 1] != 'ﺭ' && letters[index - 1] != 'ﺯ' && letters[index - 1] != 'ﮊ' && letters[index - 1] != 'ﻭ' && letters[index - 1] != 'ﺁ' && letters[index - 1] != 'ﺃ' && letters[index - 1] != 'ﺇ' && letters[index - 1] != 'ﺅ' && letters[index - 1] != 'ﺀ' && !char.IsPunctuation(letters[index - 1]) && letters[index - 1] != '>' && letters[index - 1] != '<' && letters[index - 1] != ' ' && letters[index - 1] != '*'; bool flag3 = index < letters.Length - 1 && letters[index + 1] != ' ' && letters[index + 1] != '\r' && letters[index + 1] != 'ﺀ' && !char.IsNumber(letters[index + 1]) && !char.IsSymbol(letters[index + 1]) && !char.IsPunctuation(letters[index + 1]); if (flag3 && flag2 && flag) { try { if (char.IsPunctuation(letters[index + 1])) { return false; } return true; } catch { return false; } } return false; } } namespace UltrakULL { public static class CommonFunctions { private static readonly Dictionary LocalizedInputs = new Dictionary { { "space", LanguageManager.CurrentLanguage.inputStrings.input_space }, { "enter", LanguageManager.CurrentLanguage.inputStrings.input_enter }, { "tab", LanguageManager.CurrentLanguage.inputStrings.input_tab }, { "escape", LanguageManager.CurrentLanguage.inputStrings.input_esc }, { "leftshift", LanguageManager.CurrentLanguage.inputStrings.input_leftShift }, { "rightshift", LanguageManager.CurrentLanguage.inputStrings.input_rightShift }, { "leftcontrol", LanguageManager.CurrentLanguage.inputStrings.input_leftControl }, { "leftctrl", LanguageManager.CurrentLanguage.inputStrings.input_leftCtrl }, { "rightcontrol", LanguageManager.CurrentLanguage.inputStrings.input_rightControl }, { "rightctrl", LanguageManager.CurrentLanguage.inputStrings.input_rightCtrl }, { "leftalt", LanguageManager.CurrentLanguage.inputStrings.input_leftAlt }, { "rightalt", LanguageManager.CurrentLanguage.inputStrings.input_rightAlt }, { "leftmeta", LanguageManager.CurrentLanguage.inputStrings.input_leftMeta }, { "rightmeta", LanguageManager.CurrentLanguage.inputStrings.input_rightMeta }, { "leftbracket", LanguageManager.CurrentLanguage.inputStrings.input_leftBracket }, { "rightbracket", LanguageManager.CurrentLanguage.inputStrings.input_rightBracket }, { "lmb", LanguageManager.CurrentLanguage.inputStrings.input_LMB }, { "rmb", LanguageManager.CurrentLanguage.inputStrings.input_RMB }, { "mmb", LanguageManager.CurrentLanguage.inputStrings.input_MMB }, { "uparrow", LanguageManager.CurrentLanguage.inputStrings.input_arrowUp }, { "downarrow", LanguageManager.CurrentLanguage.inputStrings.input_arrowDown }, { "leftarrow", LanguageManager.CurrentLanguage.inputStrings.input_arrowLeft }, { "rightarrow", LanguageManager.CurrentLanguage.inputStrings.input_arrowRight }, { "forward", LanguageManager.CurrentLanguage.inputStrings.input_forward }, { "back", LanguageManager.CurrentLanguage.inputStrings.input_back }, { "comma", LanguageManager.CurrentLanguage.inputStrings.input_comma }, { "capslock", LanguageManager.CurrentLanguage.inputStrings.input_capsLock }, { "slash", LanguageManager.CurrentLanguage.inputStrings.input_slash }, { "backslash", LanguageManager.CurrentLanguage.inputStrings.input_backslash }, { "backspace", LanguageManager.CurrentLanguage.inputStrings.input_backspace }, { "equals", LanguageManager.CurrentLanguage.inputStrings.input_equals }, { "minus", LanguageManager.CurrentLanguage.inputStrings.input_minus }, { "numlock", LanguageManager.CurrentLanguage.inputStrings.input_numLock }, { "delete", LanguageManager.CurrentLanguage.inputStrings.input_delete }, { "period", LanguageManager.CurrentLanguage.inputStrings.input_period }, { "semicolon", LanguageManager.CurrentLanguage.inputStrings.input_semicolon }, { "quote", LanguageManager.CurrentLanguage.inputStrings.input_quote }, { "insert", LanguageManager.CurrentLanguage.inputStrings.input_insert }, { "pageup", LanguageManager.CurrentLanguage.inputStrings.input_pageUp }, { "pagedown", LanguageManager.CurrentLanguage.inputStrings.input_pageDown }, { "start", LanguageManager.CurrentLanguage.inputStrings.input_start }, { "end", LanguageManager.CurrentLanguage.inputStrings.input_end }, { "scrolllock", LanguageManager.CurrentLanguage.inputStrings.input_scrollLock }, { "pause", LanguageManager.CurrentLanguage.inputStrings.input_pause }, { "nobinding", LanguageManager.CurrentLanguage.inputStrings.input_noBinding } }; public static ColorBlock UkButtonColors; public static string PreviousHudMessage; private static readonly Dictionary rootObjectCache; private static readonly Dictionary<(GameObject, string), GameObject> childCache; public static string GetLocalizedInput(string input) { if (string.IsNullOrEmpty(input)) { return input; } if (input.Length == 1 && char.IsLetter(input[0])) { return input; } string text = input.Replace(" ", "").ToLowerInvariant(); InputStrings inputStrings = LanguageManager.CurrentLanguage.inputStrings; string value; switch (text) { case "numpadperiod": value = inputStrings.input_numpadPeriod; break; case "numpaddivide": value = inputStrings.input_numpadDivide; break; case "numpadmultiply": value = inputStrings.input_numpadMultiply; break; case "numpadminus": value = inputStrings.input_numpadMinus; break; case "numpadenter": value = inputStrings.input_numpadEnter; break; case "numpadplus": value = inputStrings.input_numpadPlus; break; default: if (text.StartsWith("numpad")) { value = (string.IsNullOrEmpty(inputStrings.input_numpad) ? null : (inputStrings.input_numpad + text.Substring(6))); } else { LocalizedInputs.TryGetValue(text, out value); } break; } return string.IsNullOrEmpty(value) ? input : value; } public static bool isUsingEnglish() { return LanguageManager.CurrentLanguage.metadata.langDisplayName == "English"; } public static string MakeVertical(string input) { return string.IsNullOrEmpty(input) ? input : string.Join("\n", input); } public static IEnumerator WaitforSeconds(float seconds) { yield return (object)new WaitForSeconds(seconds); } public static void HandleError(Exception e, string missingID = "") { Logging.Error(e.ToString()); } public static void ClearObjectCaches(Scene scene, LoadSceneMode mode) { rootObjectCache.Clear(); childCache.Clear(); } public static GameObject GetInactiveRootObject(string objectName) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (rootObjectCache.TryGetValue(objectName, out var value)) { if ((Object)(object)value != (Object)null) { return value; } rootObjectCache.Remove(objectName); } List list = new List(); Scene activeScene = SceneManager.GetActiveScene(); ((Scene)(ref activeScene)).GetRootGameObjects(list); foreach (GameObject item in list) { if ((Object)(object)item != (Object)null && ((Object)item).name == objectName) { rootObjectCache[objectName] = item; return item; } } return null; } public static string GetCurrentSceneName() { return SceneHelper.CurrentScene; } public static GameObject CreateButton(string buttonText = "Text", string buttonName = "Button") { //IL_0003: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_011f: 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_0170: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) ColorBlock val = default(ColorBlock); ((ColorBlock)(ref val)).normalColor = new Color(0f, 0f, 0f, 0.512f); ((ColorBlock)(ref val)).highlightedColor = new Color(1f, 1f, 1f, 0.502f); ((ColorBlock)(ref val)).pressedColor = new Color(1f, 0f, 0f, 1f); ((ColorBlock)(ref val)).selectedColor = new Color(0f, 0f, 0f, 0.512f); ((ColorBlock)(ref val)).disabledColor = new Color(0.7843f, 0.7843f, 0.7843f, 0.502f); ((ColorBlock)(ref val)).colorMultiplier = 1f; ((ColorBlock)(ref val)).fadeDuration = 0.1f; ColorBlock colors = val; GameObject val2 = new GameObject(); ((Object)val2).name = buttonName; val2.AddComponent(); val2.AddComponent(); val2.AddComponent(); val2.AddComponent