Decompiled source of MoreTranslations v1.2.2
AuraCurseSpriteFix.dll
Decompiled 20 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using TMPro; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ClassLibrary1")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClassLibrary1")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("9a552341-460a-4164-8ea3-cb43bfdf959b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace SpriteTagFix; [BepInPlugin("AuraCurseSpriteFix", "AuraCurse Sprite Fix", "1.0.0")] public class SpriteTagFixPlugin : BaseUnityPlugin { public const string PluginGuid = "AuraCurseSpriteFix"; public const string PluginName = "AuraCurse Sprite Fix"; public const string PluginVersion = "1.0.0"; private static readonly Dictionary<string, string> SpriteReplacementMap = new Dictionary<string, string>(StringComparer.Ordinal) { { "<sprite name=축복>", "<sprite name=bless>" }, { "<sprite name=\"축복\">", "<sprite name=\"bless\">" }, { "<sprite name=방어>", "<sprite name=block>" }, { "<sprite name=\"방어\">", "<sprite name=\"block\">" }, { "<sprite name=완충>", "<sprite name=buffer>" }, { "<sprite name=\"완충\">", "<sprite name=\"buffer\">" }, { "<sprite name=용기>", "<sprite name=courage>" }, { "<sprite name=\"용기\">", "<sprite name=\"courage\">" }, { "<sprite name=에너지자극>", "<sprite name=energize>" }, { "<sprite name=\"에너지자극\">", "<sprite name=\"energize\">" }, { "<sprite name=회피>", "<sprite name=evasion>" }, { "<sprite name=\"회피\">", "<sprite name=\"evasion\">" }, { "<sprite name=신속>", "<sprite name=fast>" }, { "<sprite name=\"신속\">", "<sprite name=\"fast\">" }, { "<sprite name=요새>", "<sprite name=fortify>" }, { "<sprite name=\"요새\">", "<sprite name=\"fortify\">" }, { "<sprite name=분노>", "<sprite name=fury>" }, { "<sprite name=\"분노\">", "<sprite name=\"fury\">" }, { "<sprite name=격려>", "<sprite name=inspire>" }, { "<sprite name=\"격려\">", "<sprite name=\"inspire\">" }, { "<sprite name=단열>", "<sprite name=insulate>" }, { "<sprite name=\"단열\">", "<sprite name=\"insulate\">" }, { "<sprite name=무적>", "<sprite name=invulnerable>" }, { "<sprite name=\"무적\">", "<sprite name=\"invulnerable\">" }, { "<sprite name=힘>", "<sprite name=powerful>" }, { "<sprite name=\"힘\">", "<sprite name=\"poweful\">" }, { "<sprite name=재생>", "<sprite name=regeneration>" }, { "<sprite name=\"재생\">", "<sprite name=\"regeneration\">" }, { "<sprite name=강화>", "<sprite name=reinforce>" }, { "<sprite name=\"강화\">", "<sprite name=\"reinforce\">" }, { "<sprite name=날카로움>", "<sprite name=sharp>" }, { "<sprite name=\"날카로움\">", "<sprite name=\"sharp\">" }, { "<sprite name=보호막>", "<sprite name=shield>" }, { "<sprite name=\"보호막\">", "<sprite name=\"shield\">" }, { "<sprite name=음표>", "<sprite name=stanza>" }, { "<sprite name=\"음표\">", "<sprite name=\"stanza\">" }, { "<sprite name=음표i>", "<sprite name=stanzai>" }, { "<sprite name=\"음표i\">", "<sprite name=\"stanzai\">" }, { "<sprite name=음표ii>", "<sprite name=stanzaii>" }, { "<sprite name=\"음표ii\">", "<sprite name=\"stanzaii\">" }, { "<sprite name=음표iii>", "<sprite name=stanzaiii>" }, { "<sprite name=\"음표iii\">", "<sprite name=\"stanzaiii\">" }, { "<sprite name=은신>", "<sprite name=stealth>" }, { "<sprite name=\"은신\">", "<sprite name=\"stealth\">" }, { "<sprite name=도발>", "<sprite name=taunt>" }, { "<sprite name=\"도발\">", "<sprite name=\"taunt\">" }, { "<sprite name=가시>", "<sprite name=thorns>" }, { "<sprite name=\"가시\">", "<sprite name=\"thorns\">" }, { "<sprite name=활력>", "<sprite name=vitality>" }, { "<sprite name=\"활력\">", "<sprite name=\"vitality\">" }, { "<sprite name=출혈>", "<sprite name=bleed>" }, { "<sprite name=\"출혈\">", "<sprite name=\"bleed\">" }, { "<sprite name=화상>", "<sprite name=burn>" }, { "<sprite name=\"화상\">", "<sprite name=\"burn\">" }, { "<sprite name=한기>", "<sprite name=chill>" }, { "<sprite name=\"한기\">", "<sprite name=\"chill\">" }, { "<sprite name=균열>", "<sprite name=crack>" }, { "<sprite name=\"균열\">", "<sprite name=\"crack\">" }, { "<sprite name=어둠>", "<sprite name=dark>" }, { "<sprite name=\"어둠\">", "<sprite name=\"dark\">" }, { "<sprite name=부패>", "<sprite name=decay>" }, { "<sprite name=\"부패\">", "<sprite name=\"decay\">" }, { "<sprite name=무장해제>", "<sprite name=disarm>" }, { "<sprite name=\"무장해제\">", "<sprite name=\"disarm\">" }, { "<sprite name=파멸>", "<sprite name=doom>" }, { "<sprite name=\"파멸\">", "<sprite name=\"doom\">" }, { "<sprite name=피로>", "<sprite name=fatigue>" }, { "<sprite name=\"피로\">", "<sprite name=\"fatigue\">" }, { "<sprite name=마비>", "<sprite name=paralyze>" }, { "<sprite name=\"마비\">", "<sprite name=\"paralyze\">" }, { "<sprite name=광란>", "<sprite name=insane>" }, { "<sprite name=\"광란\">", "<sprite name=\"insane\">" }, { "<sprite name=표식>", "<sprite name=mark>" }, { "<sprite name=\"표식\">", "<sprite name=\"mark\">" }, { "<sprite name=독>", "<sprite name=poison>" }, { "<sprite name=\"독\">", "<sprite name=\"poison\">" }, { "<sprite name=신성화>", "<sprite name=sanctify>" }, { "<sprite name=\"신성화\">", "<sprite name=\"sanctify\">" }, { "<sprite name=속박>", "<sprite name=shackle>" }, { "<sprite name=\"속박\">", "<sprite name=\"shackle\">" }, { "<sprite name=통찰>", "<sprite name=sight>" }, { "<sprite name=\"통찰\">", "<sprite name=\"sight\">" }, { "<sprite name=침묵>", "<sprite name=silence>" }, { "<sprite name=\"침묵\">", "<sprite name=\"silence\">" }, { "<sprite name=감속>", "<sprite name=slow>" }, { "<sprite name=\"감속\">", "<sprite name=\"slow\">" }, { "<sprite name=감전>", "<sprite name=spark>" }, { "<sprite name=\"감전\">", "<sprite name=\"spark\">" }, { "<sprite name=부담감>", "<sprite name=stress>" }, { "<sprite name=\"부담감\">", "<sprite name=\"stress\">" }, { "<sprite name=취약>", "<sprite name=vulnerable>" }, { "<sprite name=\"취약\">", "<sprite name=\"vulnerable\">" }, { "<sprite name=무기력>", "<sprite name=weak>" }, { "<sprite name=\"무기력\">", "<sprite name=\"weak\">" }, { "<sprite name=물기>", "<sprite name=wet>" }, { "<sprite name=\"물기\">", "<sprite name=\"wet\">" }, { "<sprite name=완화>", "<sprite name=mitigate>" }, { "<sprite name=\"완화\">", "<sprite name=\"mitigate\">" }, { "<sprite name=열광>", "<sprite name=zeal>" }, { "<sprite name=\"열광\">", "<sprite name=\"zeal\">" }, { "<sprite name=재앙>", "<sprite name=scourge>" }, { "<sprite name=\"재앙\">", "<sprite name=\"scourge\">" }, { "<sprite name=마법검>", "<sprite name=spellsword>" }, { "<sprite name=\"마법검\">", "<sprite name=\"spellsword\">" }, { "<sprite name=녹>", "<sprite name=rust>" }, { "<sprite name=\"녹\">", "<sprite name=\"rust\">" }, { "<sprite name=수면>", "<sprite name=sleep>" }, { "<sprite name=\"수면\">", "<sprite name=\"sleep\">" }, { "<sprite name=흡수>", "<sprite name=leech>" }, { "<sprite name=\"흡수\">", "<sprite name=\"leech\">" }, { "<sprite name=주입>", "<sprite name=infuse>" }, { "<sprite name=\"주입\">", "<sprite name=\"infuse\">" }, { "<sprite name=청색 룬>", "<sprite name=runeblue>" }, { "<sprite name=\"청색 룬\">", "<sprite name=\"runeblue\">" }, { "<sprite name=적색 룬>", "<sprite name=runered>" }, { "<sprite name=\"적색 룬\">", "<sprite name=\"runered\">" }, { "<sprite name=녹색 룬>", "<sprite name=runegreen>" }, { "<sprite name=\"녹색 룬\">", "<sprite name=\"runegreen\">" } }; private void Awake() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) new Harmony("AuraCurseSpriteFix").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"AuraCurse Sprite Fix 1.0.0 loaded."); } internal static string FixSpriteTags(string text) { if (string.IsNullOrEmpty(text)) { return text; } foreach (KeyValuePair<string, string> item in SpriteReplacementMap) { text = text.Replace(item.Key, item.Value); } return text; } } [HarmonyPatch(typeof(TMP_Text), "set_text")] internal static class TMPText_SetTextPatch { private static void Prefix(ref string __0) { __0 = SpriteTagFixPlugin.FixSpriteTags(__0); } }
MoreTranslations.dll
Decompiled 20 hours agousing System; 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 System.Text; using System.Text.RegularExpressions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.Events; [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("MoreTranslations")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("MoreTranslations")] [assembly: AssemblyFileVersion("1.1.2.0")] [assembly: AssemblyInformationalVersion("1.1.2")] [assembly: AssemblyProduct("MoreTranslations")] [assembly: AssemblyTitle("MoreTranslations")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.2.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace MoreTranslations { [BepInPlugin("MoreTranslations_DontTouchFranky", "MoreTranslations", "1.1.2")] public class Plugin : BaseUnityPlugin { private static Dictionary<string, Dictionary<string, string>> TextStrings; private static Dictionary<string, Dictionary<string, string>> TextKeynotes; private static TMP_Dropdown languagesDropdown = null; private static string selectedLanguage = null; private static List<string> languages = new List<string>(); private static List<string> tips = new List<string>(); private static TMP_FontAsset alternativeFont = null; private void Awake() { Harmony.CreateAndPatchAll(typeof(Plugin), (string)null); } [HarmonyPatch(typeof(TextMeshPro), "OnEnable")] [HarmonyPostfix] public static void FontPatchTMPText(TextMeshPro __instance) { if ((Object)(object)alternativeFont != (Object)null) { ((TMP_Text)__instance).font.fallbackFontAssetTable = new List<TMP_FontAsset> { alternativeFont }; } } [HarmonyPatch(typeof(GameManager), "Start")] [HarmonyPrefix] private static void Start() { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Expected O, but got Unknown //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Expected O, but got Unknown string pluginPath = Paths.PluginPath; selectedLanguage = PlayerPrefs.GetString("linguaSelezionata"); string text = pluginPath; text = ((!(selectedLanguage.ToLower() == "jp") && !(selectedLanguage.ToLower() == "japanese") && !(selectedLanguage.ToLower() == "russian") && !(selectedLanguage.ToLower() == "ru")) ? (text + "/CantoraOne-Regular Fix.ttf") : (text + "/NotoSerifJP-Regular.otf")); if (File.Exists(text)) { Font val = new Font(text); TMP_FontAsset val2 = TMP_FontAsset.CreateFontAsset(val); if ((Object)(object)val2 != (Object)null) { alternativeFont = val2; } } TextStrings = new Dictionary<string, Dictionary<string, string>>(StringComparer.OrdinalIgnoreCase); TextKeynotes = new Dictionary<string, Dictionary<string, string>>(StringComparer.OrdinalIgnoreCase); if (selectedLanguage != "") { Debug.Log((object)("MoreTranslations | Selected -> " + selectedLanguage)); TextStrings[selectedLanguage] = new Dictionary<string, string>(); TextKeynotes[selectedLanguage] = new Dictionary<string, string>(); } else { Debug.Log((object)"MoreTranslations | Selected -> Default"); } CreateLanguageDropdown(); GetTranslationLanguages(); if (selectedLanguage != "" && !languages.Contains(selectedLanguage)) { selectedLanguage = ""; PlayerPrefs.SetString("linguaSelezionata", selectedLanguage); } languagesDropdown.options.Add(new OptionData("Default")); foreach (string language in languages) { languagesDropdown.options.Add(new OptionData(Capitalize(language.ToLower()))); } if (selectedLanguage == "") { languagesDropdown.value = 0; } else { languagesDropdown.value = languagesDropdown.options.FindIndex((OptionData x) => x.text.ToLower() == selectedLanguage.ToLower()); } ((UnityEvent<int>)(object)languagesDropdown.onValueChanged).AddListener((UnityAction<int>)delegate(int value) { string text2 = languagesDropdown.options[value].text; if (text2 == "Default") { text2 = ""; } PlayerPrefs.SetString("linguaSelezionata", text2.ToLower()); AlertManager.Instance.AlertConfirm(Texts.Instance.GetText("selectLanguageChanged", ""), ""); }); } private static void CreateLanguageDropdown() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) TMP_Dropdown languageDropdown = SettingsManager.Instance.languageDropdown; TMP_Dropdown val = Object.Instantiate<TMP_Dropdown>(languageDropdown, ((Component)languageDropdown).transform.parent); ((Component)val).transform.SetSiblingIndex(((Component)languageDropdown).transform.GetSiblingIndex() + 1); ((Object)val).name = "languageDropdown2"; ((UnityEventBase)val.onValueChanged).RemoveAllListeners(); val.onValueChanged = new DropdownEvent(); RectTransform component = ((Component)val).GetComponent<RectTransform>(); Rect rect = component.rect; double num = ((Rect)(ref rect)).width; component.anchoredPosition = new Vector2((float)((double)component.anchoredPosition.x + num + 10.0), component.anchoredPosition.y); val.ClearOptions(); languagesDropdown = val; } private static void GetTranslationLanguages() { string[] directories = Directory.GetDirectories(Paths.PluginPath); string[] array = directories; foreach (string path in array) { string path2 = Path.Combine(path, "moretranslations.txt"); if (!File.Exists(path2)) { continue; } string[] array2 = File.ReadAllLines(path2); string[] array3 = array2; foreach (string text in array3) { if (!text.StartsWith("#")) { string item = text.Trim().ToLower(); if (!languages.Contains(item)) { languages.Add(item); } } } } if (languages.Count > 0) { Debug.Log((object)"MoreTranslations | Languages found:"); { foreach (string language in languages) { Debug.Log((object)("MoreTranslations | - " + language)); } return; } } Debug.LogWarning((object)"MoreTranslations | No languages found. Please install a language pack to use this plugin."); } private static string Capitalize(string str) { if (str == null || str.Length < 1) { return str; } return char.ToUpper(str[0]) + str.Substring(1); } [HarmonyPatch(typeof(Texts), "GetText")] [HarmonyPrefix] private static bool GetTextPrefix(string _id, string _type, ref string __result) { __result = ""; if ((Object)(object)Globals.Instance == (Object)null || !GameManager.Instance.PrefsLoaded) { __result = ""; return false; } string text = _id.Replace(" ", "").ToLower(); if (!(text != "")) { __result = ""; return false; } if (TextStrings != null && TextStrings.ContainsKey(selectedLanguage)) { if (_type != "") { text = _type.ToLower() + "_" + text.ToLower(); } if (TextStrings[selectedLanguage].ContainsKey(text)) { string text2 = TextStrings[selectedLanguage][text]; if (text2 != "") { __result = text2; return false; } } } return true; } [HarmonyPatch(typeof(Texts), "LoadTranslationText")] [HarmonyPostfix] private static void LoadTranslationTextPostfix(string type) { if (tips.Count > 0) { Texts.Instance.TipsList.Clear(); Texts.Instance.TipsList.AddRange(tips); } } [HarmonyPatch(typeof(Texts), "LoadTranslationText")] [HarmonyPrefix] private static void LoadTranslationTextPrefix(string type) { if (!(selectedLanguage != "")) { return; } string pluginPath = Paths.PluginPath; string text = ""; string[] directories = Directory.GetDirectories(pluginPath); string[] array = directories; foreach (string text2 in array) { string path = text2 + "/moretranslations.txt"; if (!File.Exists(path)) { continue; } string[] array2 = File.ReadAllLines(path); string[] array3 = array2; foreach (string text3 in array3) { if (!text3.StartsWith("#")) { string text4 = text3.Trim().ToLower(); if (text4 == selectedLanguage) { text = text2 + "/"; } } } } if (!(text != "")) { return; } string text5 = ""; string[] array4 = null; switch (type.ToLower()) { case "": text5 = text + "/" + selectedLanguage + ".txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "keynotes": text5 = text + "/" + selectedLanguage + "_keynotes.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "traits": text5 = text + "/" + selectedLanguage + "_traits.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "auracurse": text5 = text + "/" + selectedLanguage + "_auracurse.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "events": text5 = text + "/" + selectedLanguage + "_events.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "nodes": text5 = text + "/" + selectedLanguage + "_nodes.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "cards": text5 = text + "/" + selectedLanguage + "_cards.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "fluff": text5 = text + "/" + selectedLanguage + "_cardsfluff.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "class": text5 = text + "/" + selectedLanguage + "_class.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "monsters": text5 = text + "/" + selectedLanguage + "_monsters.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "requirements": text5 = text + "/" + selectedLanguage + "_requirements.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; case "tips": text5 = text + "/" + selectedLanguage + "_tips.txt"; if (File.Exists(text5)) { array4 = File.ReadAllLines(text5); } break; } if (array4 == null) { return; } List<string> list = new List<string>(array4); int num = 0; StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); for (int k = 0; k < list.Count; k++) { string text6 = list[k]; if (text6 == "" || text6[0] == '#') { continue; } string[] array5 = text6.Trim().Split(new char[1] { '=' }, 2); if (array5 == null || array5.Length < 2) { continue; } array5[0] = array5[0].Trim().ToLower(); array5[1] = Functions.SplitString("//", array5[1])[0].Trim(); switch (type.ToLower()) { case "keynotes": stringBuilder.Append("keynotes_"); break; case "traits": stringBuilder.Append("traits_"); break; case "auracurse": stringBuilder.Append("auracurse_"); break; case "events": stringBuilder.Append("events_"); break; case "nodes": stringBuilder.Append("nodes_"); break; case "cards": case "fluff": stringBuilder.Append("cards_"); break; case "class": stringBuilder.Append("class_"); break; case "monsters": stringBuilder.Append("monsters_"); break; case "requirements": stringBuilder.Append("requirements_"); break; case "tips": stringBuilder.Append("tips_"); break; } stringBuilder.Append(array5[0]); if (TextStrings[selectedLanguage].ContainsKey(stringBuilder.ToString())) { TextStrings[selectedLanguage][stringBuilder.ToString()] = array5[1]; } else { TextStrings[selectedLanguage].Add(stringBuilder.ToString(), array5[1]); } if (type.ToLower() == "tips") { tips.Add(array5[1]); } bool flag = true; if (type == "") { if (array5[1].StartsWith("rptd_", StringComparison.OrdinalIgnoreCase)) { stringBuilder2.Append(array5[1].Substring(5).ToLower()); TextStrings[selectedLanguage][stringBuilder.ToString()] = TextStrings[selectedLanguage][stringBuilder2.ToString()]; flag = false; stringBuilder2.Clear(); } } else if (type.ToLower() == "events") { if (array5[1].StartsWith("rptd_", StringComparison.OrdinalIgnoreCase)) { stringBuilder2.Append("events_"); stringBuilder2.Append(array5[1].Substring(5).ToLower()); TextStrings[selectedLanguage][stringBuilder.ToString()] = TextStrings[selectedLanguage][stringBuilder2.ToString()]; flag = false; stringBuilder2.Clear(); } } else if (type.ToLower() == "cards") { if (array5[1].StartsWith("rptd_", StringComparison.OrdinalIgnoreCase)) { stringBuilder2.Append("cards_"); stringBuilder2.Append(array5[1].Substring(5).ToLower()); TextStrings[selectedLanguage][stringBuilder.ToString()] = TextStrings[selectedLanguage][stringBuilder2.ToString()]; flag = false; stringBuilder2.Clear(); } } else if (type.ToLower() == "monsters" && array5[1].StartsWith("rptd_", StringComparison.OrdinalIgnoreCase)) { stringBuilder2.Append("monsters_"); stringBuilder2.Append(array5[1].Substring(5).ToLower()); TextStrings[selectedLanguage][stringBuilder.ToString()] = TextStrings[selectedLanguage][stringBuilder2.ToString()]; flag = false; stringBuilder2.Clear(); } if (flag) { string text7 = Regex.Replace(Regex.Replace(array5[1], "<(.*?)>", ""), "\\s+", " "); num += text7.Split(' ').Length; } stringBuilder.Clear(); } } public static void ExportTextForTranslation() { ExportLanguage("en"); ExportLanguage("zh-CN"); ExportLanguage("es"); ExportLanguage("ko"); ExportLanguage("sv"); } public static void ExportLanguage(string lang) { DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(Paths.PluginPath, "MoreTranslations_" + LangShortToLong(lang))); if (!directoryInfo.Exists) { directoryInfo.Create(); } ActualExport(lang, lang); ActualExport(lang + "_keynotes", lang); ActualExport(lang + "_traits", lang); ActualExport(lang + "_auracurse", lang); ActualExport(lang + "_events", lang); ActualExport(lang + "_nodes", lang); ActualExport(lang + "_cards", lang); ActualExport(lang + "_cardsfluff", lang); ActualExport(lang + "_class", lang); ActualExport(lang + "_monsters", lang); ActualExport(lang + "_requirements", lang); ActualExport(lang + "_tips", lang); File.WriteAllText(Path.Combine(Paths.PluginPath, "MoreTranslations_" + LangShortToLong(lang), "moretranslations.txt"), LangShortToLong(lang)); } public static void ActualExport(string fileName, string lang) { Debug.Log((object)("Exporting " + fileName)); Object obj = Resources.Load("Lang/" + lang + "/" + fileName); TextAsset val = (TextAsset)(object)((obj is TextAsset) ? obj : null); string lang2 = fileName.Replace(lang + "_", LangShortToLong(lang) + "_"); lang2 = LangShortToLong(lang2); if ((Object)(object)val == (Object)null) { Debug.Log((object)("textassetnull: " + fileName)); } else { File.WriteAllText(Path.Combine(Paths.PluginPath, "MoreTranslations_" + LangShortToLong(lang), lang2 + ".txt"), ((object)val).ToString()); } } public static string LangShortToLong(string lang) { string result = lang; if (lang == "en") { result = "English"; } if (lang == "zh-CN") { result = "简体中文"; } if (lang == "es") { result = "español"; } if (lang == "ko") { result = "한국인"; } if (lang == "sv") { result = "svenska"; } return result; } } public static class PluginInfo { public const string PLUGIN_GUID = "MoreTranslations"; public const string PLUGIN_NAME = "MoreTranslations"; public const string PLUGIN_VERSION = "1.1.2"; } }
NullGuard.dll
Decompiled 20 hours agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ClassLibrary1")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ClassLibrary1")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e2c4fbb4-decd-4b44-b2bc-51cd533f550b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("fix.taa.nullguard", "TAA NullGuard (Placeholder)", "1.1.0")] [BepInProcess("AcrossTheObelisk.exe")] public sealed class TaaNullGuardPlugin : BaseUnityPlugin { internal static ManualLogSource Log; private void Awake() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) Log = ((BaseUnityPlugin)this).Logger; new Harmony("fix.taa.nullguard").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[TAA NullGuard Placeholder] Patched TransformAccessArray: Add(Transform), SetTransforms(Transform[]), .ctor(Transform[], int)"); } } internal static class TaaPlaceholder { private static Transform _placeholder; private static bool _creating; public static Transform GetOrCreate() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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) if ((Object)(object)_placeholder != (Object)null) { return _placeholder; } if (_creating) { return _placeholder; } _creating = true; try { GameObject val = new GameObject("__TAA_NULL_PLACEHOLDER__") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)val); val.transform.position = new Vector3(99999f, 99999f, 99999f); val.transform.rotation = Quaternion.identity; val.transform.localScale = Vector3.one; _placeholder = val.transform; return _placeholder; } finally { _creating = false; } } public static void ReplaceNullsInPlace(Transform[] transforms) { if (transforms == null || transforms.Length == 0) { return; } Transform orCreate = GetOrCreate(); for (int i = 0; i < transforms.Length; i++) { if ((Object)(object)transforms[i] == (Object)null) { transforms[i] = orCreate; } } } } [HarmonyPatch] internal static class Patch_TAA_AddTransform { private static Type TargetType() { return AccessTools.TypeByName("UnityEngine.Jobs.TransformAccessArray"); } private static MethodBase TargetMethod() { return AccessTools.Method(TargetType(), "Add", new Type[1] { typeof(Transform) }, (Type[])null); } private static void Prefix(ref Transform transform) { if ((Object)(object)transform == (Object)null) { transform = TaaPlaceholder.GetOrCreate(); } } } [HarmonyPatch] internal static class Patch_TAA_SetTransforms { private static Type TargetType() { return AccessTools.TypeByName("UnityEngine.Jobs.TransformAccessArray"); } private static MethodBase TargetMethod() { return AccessTools.Method(TargetType(), "SetTransforms", new Type[1] { typeof(Transform[]) }, (Type[])null); } private static void Prefix(Transform[] transforms) { TaaPlaceholder.ReplaceNullsInPlace(transforms); } } [HarmonyPatch] internal static class Patch_TAA_Ctor_ArrayInt { private static Type TargetType() { return AccessTools.TypeByName("UnityEngine.Jobs.TransformAccessArray"); } private static MethodBase TargetMethod() { return AccessTools.Constructor(TargetType(), new Type[2] { typeof(Transform[]), typeof(int) }, false); } private static void Prefix(Transform[] transforms) { TaaPlaceholder.ReplaceNullsInPlace(transforms); } }