Decompiled source of MoreTranslations v1.2.2

AuraCurseSpriteFix.dll

Decompiled 20 hours ago
using 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 ago
using 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 ago
using 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);
	}
}