Decompiled source of IMSOneClickCheckout v1.0.0

BepInEx/plugins/OneClickCheckout.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using Mirror;
using OneClickCheckout.Localization;
using UnityEngine;
using UnityEngine.Localization.Settings;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("OneClickCheckout")]
[assembly: AssemblyDescription("One Click Checkout mod for Island Market Simulator by Ice Box Studio")]
[assembly: AssemblyCompany("Ice Box Studio")]
[assembly: AssemblyProduct("OneClickCheckout")]
[assembly: AssemblyCopyright("Copyright © 2026 Ice Box Studio All rights reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("6346E2B9-86AF-44AA-8201-FB1D3B77669A")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace OneClickCheckout
{
	[BepInPlugin("IceBoxStudio.IslandMarketSimulator.OneClickCheckout", "OneClickCheckout", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class OneClickCheckout : BasePlugin
	{
		public static OneClickCheckout _Instance;

		private const string ModConfigManagerApiTypeName = "ModConfigManager.Api.ModConfigManagerAPI";

		private const string ModConfigManagerRegisterMethodName = "RegisterPluginInfo";

		private Harmony _harmony;

		private bool patchesApplied;

		public static OneClickCheckout Instance => _Instance;

		internal static ManualLogSource Logger { get; private set; }

		public override void Load()
		{
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Expected O, but got Unknown
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			_Instance = this;
			Logger = ((BasePlugin)this).Log;
			bool flag = default(bool);
			try
			{
				Logger.LogInfo((object)"=============================================");
				ManualLogSource logger = Logger;
				BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(1, 2, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("OneClickCheckout");
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" ");
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(LocalizationManager.Instance.GetLocalizedText("plugin.initializing"));
				}
				logger.LogInfo(val);
				ManualLogSource logger2 = Logger;
				val = new BepInExInfoLogInterpolatedStringHandler(54, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(LocalizationManager.Instance.GetLocalizedText("plugin.author_prefix"));
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Ice Box Studio(https://steamcommunity.com/id/ibox666/)");
				}
				logger2.LogInfo(val);
				RegisterToModConfigManager();
				ApplyPatches();
				ManualLogSource logger3 = Logger;
				val = new BepInExInfoLogInterpolatedStringHandler(1, 2, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("OneClickCheckout");
					((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" ");
					((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(LocalizationManager.Instance.GetLocalizedText("plugin.initialized"));
				}
				logger3.LogInfo(val);
				Logger.LogInfo((object)"=============================================");
			}
			catch (Exception ex)
			{
				ManualLogSource logger4 = Logger;
				BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(9, 3, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>("OneClickCheckout");
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" 初始化错误: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(ex.Message);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("\n");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(ex.StackTrace);
				}
				logger4.LogError(val2);
			}
		}

		private void ApplyPatches()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			if (!patchesApplied)
			{
				try
				{
					_harmony = new Harmony("IceBoxStudio.IslandMarketSimulator.OneClickCheckout");
					_harmony.PatchAll();
					patchesApplied = true;
					return;
				}
				catch (Exception ex)
				{
					ManualLogSource logger = Logger;
					bool flag = default(bool);
					BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(10, 3, ref flag);
					if (flag)
					{
						((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("OneClickCheckout");
						((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" 应用补丁错误: ");
						((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(ex.Message);
						((BepInExLogInterpolatedStringHandler)val).AppendLiteral("\n");
						((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(ex.StackTrace);
					}
					logger.LogError(val);
					return;
				}
			}
			Logger.LogInfo((object)LocalizationManager.Instance.GetLocalizedText("plugin.patches_skipped"));
		}

		private void RegisterToModConfigManager()
		{
			Type type = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly assembly) => assembly.GetType("ModConfigManager.Api.ModConfigManagerAPI") != null)?.GetType("ModConfigManager.Api.ModConfigManagerAPI");
			if (!(type == null))
			{
				MethodInfo method = type.GetMethod("RegisterPluginInfo", BindingFlags.Static | BindingFlags.Public);
				if (!(method == null))
				{
					method.Invoke(null, new object[5]
					{
						"IceBoxStudio.IslandMarketSimulator.OneClickCheckout",
						LocalizationManager.Instance.GetLocalizedText("plugin.name"),
						"1.0.0",
						"Ice Box Studio",
						LocalizationManager.Instance.GetLocalizedText("plugin.description")
					});
				}
			}
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "IceBoxStudio.IslandMarketSimulator.OneClickCheckout";

		public const string PLUGIN_NAME = "OneClickCheckout";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace OneClickCheckout.Patches
{
	[HarmonyPatch]
	public class CashRegisterPatch
	{
		[CompilerGenerated]
		private sealed class <TargetMethods>d__0 : IEnumerable<MethodBase>, IEnumerable, IEnumerator<MethodBase>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private MethodBase <>2__current;

			private int <>l__initialThreadId;

			private Type <cashRegisterType>5__2;

			MethodBase IEnumerator<MethodBase>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <TargetMethods>d__0(int <>1__state)
			{
				this.<>1__state = <>1__state;
				<>l__initialThreadId = Environment.CurrentManagedThreadId;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<cashRegisterType>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				MethodInfo methodInfo2;
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
				{
					<>1__state = -1;
					<cashRegisterType>5__2 = typeof(CashRegister);
					MethodInfo methodInfo = AccessTools.Method(<cashRegisterType>5__2, "UserCode_RpcShowBag__Int32", new Type[1] { typeof(int) }, (Type[])null);
					if (methodInfo != null)
					{
						<>2__current = methodInfo;
						<>1__state = 1;
						return true;
					}
					goto IL_0077;
				}
				case 1:
					<>1__state = -1;
					goto IL_0077;
				case 2:
					{
						<>1__state = -1;
						break;
					}
					IL_0077:
					methodInfo2 = AccessTools.Method(<cashRegisterType>5__2, "RpcShowBag", new Type[1] { typeof(int) }, (Type[])null);
					if (methodInfo2 != null)
					{
						<>2__current = methodInfo2;
						<>1__state = 2;
						return true;
					}
					break;
				}
				return false;
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}

			[DebuggerHidden]
			IEnumerator<MethodBase> IEnumerable<MethodBase>.GetEnumerator()
			{
				if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
				{
					<>1__state = 0;
					return this;
				}
				return new <TargetMethods>d__0(0);
			}

			[DebuggerHidden]
			IEnumerator IEnumerable.GetEnumerator()
			{
				return ((IEnumerable<MethodBase>)this).GetEnumerator();
			}
		}

		[IteratorStateMachine(typeof(<TargetMethods>d__0))]
		[HarmonyTargetMethods]
		public static IEnumerable<MethodBase> TargetMethods()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <TargetMethods>d__0(-2);
		}

		[HarmonyPostfix]
		public static void RpcShowBagPostfix(CashRegister __instance, int amount, MethodBase __originalMethod)
		{
			if (amount > 0 && (!(__originalMethod != null) || !(__originalMethod.Name == "RpcShowBag") || !(AccessTools.Method(typeof(CashRegister), "UserCode_RpcShowBag__Int32", new Type[1] { typeof(int) }, (Type[])null) != null)))
			{
				TryInteractBag(__instance);
			}
		}

		private static void TryInteractBag(CashRegister cashRegister)
		{
			if ((Object)(object)cashRegister.bagItem != (Object)null && ((Component)cashRegister.bagItem).gameObject.activeInHierarchy)
			{
				cashRegister.bagItem.Interact();
			}
		}
	}
	[HarmonyPatch(typeof(ProductInContainer), "Interact")]
	public class ProductInContainerPatch
	{
		private static int _skipPrefixDepth;

		[HarmonyPrefix]
		public static bool Prefix(ProductInContainer __instance)
		{
			if (_skipPrefixDepth > 0)
			{
				return true;
			}
			CashRegister componentInParent = ((Component)__instance).GetComponentInParent<CashRegister>();
			if ((Object)(object)componentInParent == (Object)null)
			{
				return true;
			}
			ProductInContainer[] array = Il2CppArrayBase<ProductInContainer>.op_Implicit(((Component)componentInParent).GetComponentsInChildren<ProductInContainer>());
			if (array == null || array.Length <= 1)
			{
				return true;
			}
			bool flag = false;
			_skipPrefixDepth++;
			foreach (ProductInContainer val in array)
			{
				if ((Object)(object)val != (Object)null)
				{
					val.CmdInteract((NetworkConnectionToClient)null);
					flag = true;
				}
			}
			_skipPrefixDepth--;
			return !flag;
		}
	}
	[HarmonyPatch(typeof(CashRegister), "RemoveProduct")]
	public class ApprenticeCashierRemovePatch
	{
		private static bool _isProcessing;

		[HarmonyPrefix]
		public static void Prefix(CashRegister __instance, GameObject product)
		{
			if (_isProcessing || (Object)(object)__instance == (Object)null || __instance.currentProductsOnRegister == null || __instance.currentProductsOnRegister.Count <= 1)
			{
				return;
			}
			_isProcessing = true;
			List<GameObject> currentProductsOnRegister = __instance.currentProductsOnRegister;
			for (int num = currentProductsOnRegister.Count - 1; num >= 0; num--)
			{
				GameObject val = currentProductsOnRegister[num];
				if ((Object)(object)val != (Object)null && (Object)(object)val != (Object)(object)product)
				{
					__instance.RemoveProduct(val);
				}
			}
			_isProcessing = false;
		}
	}
}
namespace OneClickCheckout.Localization
{
	public static class LocalizationHelper
	{
		public static Dictionary<string, string> GetDefaultTranslations(string language)
		{
			Dictionary<string, string> dictionary = new Dictionary<string, string>();
			switch (language)
			{
			case "zh":
				dictionary.Add("plugin.initializing", "开始初始化...");
				dictionary.Add("plugin.author_prefix", "作者:");
				dictionary.Add("plugin.initialized", "初始化成功!");
				dictionary.Add("plugin.patches_skipped", "补丁已应用,跳过...");
				dictionary.Add("plugin.name", "一键结账");
				dictionary.Add("plugin.description", "只需单击一次即可完成结账!学徒也可以一键结账。");
				break;
			case "zh-TW":
				dictionary.Add("plugin.initializing", "開始初始化...");
				dictionary.Add("plugin.author_prefix", "作者:");
				dictionary.Add("plugin.initialized", "初始化成功!");
				dictionary.Add("plugin.patches_skipped", "補丁已套用,跳過...");
				dictionary.Add("plugin.name", "一鍵結帳");
				dictionary.Add("plugin.description", "只需按一下即可完成結帳!學徒也可以一鍵結帳。");
				break;
			case "en":
				dictionary.Add("plugin.initializing", "Initializing...");
				dictionary.Add("plugin.author_prefix", "Author: ");
				dictionary.Add("plugin.initialized", "Initialized successfully!");
				dictionary.Add("plugin.patches_skipped", "Patches already applied, skipping...");
				dictionary.Add("plugin.name", "One Click Checkout");
				dictionary.Add("plugin.description", "Complete checkout with just one click! Apprentices can also checkout with one click.");
				break;
			case "ja":
				dictionary.Add("plugin.initializing", "初期化中...");
				dictionary.Add("plugin.author_prefix", "作者: ");
				dictionary.Add("plugin.initialized", "初期化に成功しました!");
				dictionary.Add("plugin.patches_skipped", "パッチは適用済みです。スキップします...");
				dictionary.Add("plugin.name", "ワンクリック会計");
				dictionary.Add("plugin.description", "ワンクリックで会計を完了!見習いもワンクリックで会計できます。");
				break;
			case "tr":
				dictionary.Add("plugin.initializing", "Başlatılıyor...");
				dictionary.Add("plugin.author_prefix", "Yazar: ");
				dictionary.Add("plugin.initialized", "Başarıyla başlatıldı!");
				dictionary.Add("plugin.patches_skipped", "Yamalar zaten uygulandı, atlanıyor...");
				dictionary.Add("plugin.name", "Tek Tıkla Ödeme");
				dictionary.Add("plugin.description", "Sadece tek bir tıklama ile ödemeyi tamamlayın! Çıraklar da tek tıkla ödeme yapabilir.");
				break;
			case "fr":
				dictionary.Add("plugin.initializing", "Initialisation...");
				dictionary.Add("plugin.author_prefix", "Auteur : ");
				dictionary.Add("plugin.initialized", "Initialisation réussie !");
				dictionary.Add("plugin.patches_skipped", "Correctifs déjà appliqués, passage...");
				dictionary.Add("plugin.name", "Paiement en un Clic");
				dictionary.Add("plugin.description", "Terminez le paiement en un seul clic ! Les apprentis peuvent également payer en un clic.");
				break;
			case "es":
				dictionary.Add("plugin.initializing", "Inicializando...");
				dictionary.Add("plugin.author_prefix", "Autor: ");
				dictionary.Add("plugin.initialized", "¡Inicializado con éxito!");
				dictionary.Add("plugin.patches_skipped", "Parches ya aplicados, omitiendo...");
				dictionary.Add("plugin.name", "Pago en un Clic");
				dictionary.Add("plugin.description", "¡Complete el pago con solo un clic! Los aprendices también pueden cobrar con un clic.");
				break;
			case "de":
				dictionary.Add("plugin.initializing", "Initialisierung...");
				dictionary.Add("plugin.author_prefix", "Autor: ");
				dictionary.Add("plugin.initialized", "Erfolgreich initialisiert!");
				dictionary.Add("plugin.patches_skipped", "Patches bereits angewendet, überspringen...");
				dictionary.Add("plugin.name", "Ein-Klick-Kasse");
				dictionary.Add("plugin.description", "Schließen Sie den Kassiervorgang mit nur einem Klick ab! Lehrlinge können ebenfalls mit einem Klick kassieren.");
				break;
			case "el":
				dictionary.Add("plugin.initializing", "Αρχικοποίηση...");
				dictionary.Add("plugin.author_prefix", "Δημιουργός: ");
				dictionary.Add("plugin.initialized", "Επιτυχής αρχικοποίηση!");
				dictionary.Add("plugin.patches_skipped", "Οι διορθώσεις έχουν ήδη εφαρμοστεί, παράβλεψη...");
				dictionary.Add("plugin.name", "Ταμείο με Ένα Κλικ");
				dictionary.Add("plugin.description", "Ολοκληρώστε το ταμείο με ένα μόνο κλικ! Οι μαθητευόμενοι μπορούν επίσης να κάνουν ταμείο με ένα κλικ.");
				break;
			case "pt-BR":
				dictionary.Add("plugin.initializing", "Inicializando...");
				dictionary.Add("plugin.author_prefix", "Autor: ");
				dictionary.Add("plugin.initialized", "Inicializado com sucesso!");
				dictionary.Add("plugin.patches_skipped", "Patches já aplicados, ignorando...");
				dictionary.Add("plugin.name", "Pagamento com Um Clique");
				dictionary.Add("plugin.description", "Conclua o pagamento com apenas um clique! Os aprendizes também podem pagar com um clique.");
				break;
			case "it":
				dictionary.Add("plugin.initializing", "Inizializzazione...");
				dictionary.Add("plugin.author_prefix", "Autore: ");
				dictionary.Add("plugin.initialized", "Inizializzato con successo!");
				dictionary.Add("plugin.patches_skipped", "Patch già applicate, salto...");
				dictionary.Add("plugin.name", "Pagamento in un Clic");
				dictionary.Add("plugin.description", "Completa il pagamento con un solo clic! Anche gli apprendisti possono incassare con un clic.");
				break;
			case "pl":
				dictionary.Add("plugin.initializing", "Inicjowanie...");
				dictionary.Add("plugin.author_prefix", "Autor: ");
				dictionary.Add("plugin.initialized", "Pomyślnie zainicjowano!");
				dictionary.Add("plugin.patches_skipped", "Poprawki już zastosowane, pomijanie...");
				dictionary.Add("plugin.name", "Płatność Jednym Kliknięciem");
				dictionary.Add("plugin.description", "Zakończ płatność jednym kliknięciem! Praktykanci również mogą obsługiwać kasę jednym kliknięciem.");
				break;
			case "pt-PT":
				dictionary.Add("plugin.initializing", "A inicializar...");
				dictionary.Add("plugin.author_prefix", "Autor: ");
				dictionary.Add("plugin.initialized", "Inicializado com sucesso!");
				dictionary.Add("plugin.patches_skipped", "Correções já aplicadas, a ignorar...");
				dictionary.Add("plugin.name", "Pagamento Num Clique");
				dictionary.Add("plugin.description", "Conclua o pagamento com apenas um clique! Os aprendizes também podem fazer pagamentos com um clique.");
				break;
			case "ru":
				dictionary.Add("plugin.initializing", "Инициализация...");
				dictionary.Add("plugin.author_prefix", "Автор: ");
				dictionary.Add("plugin.initialized", "Успешно инициализировано!");
				dictionary.Add("plugin.patches_skipped", "Патчи уже применены, пропуск...");
				dictionary.Add("plugin.name", "Оплата в Один Клик");
				dictionary.Add("plugin.description", "Завершите оплату всего одним кликом! Ученики также могут рассчитывать покупателей в один клик.");
				break;
			case "ko":
				dictionary.Add("plugin.initializing", "초기화 중...");
				dictionary.Add("plugin.author_prefix", "제작자: ");
				dictionary.Add("plugin.initialized", "초기화 성공!");
				dictionary.Add("plugin.patches_skipped", "패치가 이미 적용되었습니다. 건너뜁니다...");
				dictionary.Add("plugin.name", "원클릭 결제");
				dictionary.Add("plugin.description", "단 한 번의 클릭으로 결제를 완료하세요! 견습생도 원클릭으로 결제할 수 있습니다.");
				break;
			case "th":
				dictionary.Add("plugin.initializing", "กำล\u0e31งเร\u0e34\u0e48มต\u0e49น...");
				dictionary.Add("plugin.author_prefix", "ผ\u0e39\u0e49สร\u0e49าง: ");
				dictionary.Add("plugin.initialized", "เร\u0e34\u0e48มต\u0e49นสำเร\u0e47จ!");
				dictionary.Add("plugin.patches_skipped", "ใช\u0e49งานแพตช\u0e4cแล\u0e49ว ข\u0e49าม...");
				dictionary.Add("plugin.name", "ชำระเง\u0e34นในคล\u0e34กเด\u0e35ยว");
				dictionary.Add("plugin.description", "ชำระเง\u0e34นเสร\u0e47จส\u0e34\u0e49นด\u0e49วยการคล\u0e34กเพ\u0e35ยงคร\u0e31\u0e49งเด\u0e35ยว! เด\u0e47กฝ\u0e36กงานก\u0e47สามารถค\u0e34ดเง\u0e34นได\u0e49ด\u0e49วยคล\u0e34กเด\u0e35ยวเช\u0e48นก\u0e31น");
				break;
			}
			return dictionary;
		}
	}
	public class LocalizationManager
	{
		private static LocalizationManager _instance;

		private readonly Dictionary<string, Dictionary<string, string>> _localizations = new Dictionary<string, Dictionary<string, string>>();

		private string _currentLocale = "zh";

		public static readonly string[] SupportedLanguages = new string[16]
		{
			"en", "tr", "fr", "es", "zh", "zh-TW", "de", "el", "pt-BR", "it",
			"ja", "pl", "pt-PT", "ru", "ko", "th"
		};

		public static LocalizationManager Instance => _instance ?? (_instance = new LocalizationManager());

		private LocalizationManager()
		{
			Initialize();
		}

		public void Initialize()
		{
			RefreshCurrentLocale();
			string[] supportedLanguages = SupportedLanguages;
			foreach (string text in supportedLanguages)
			{
				Dictionary<string, string> defaultTranslations = LocalizationHelper.GetDefaultTranslations(text);
				if (defaultTranslations != null && defaultTranslations.Count > 0)
				{
					_localizations[text] = defaultTranslations;
				}
			}
		}

		private void RefreshCurrentLocale()
		{
			if (PlayerPrefs.HasKey("Lang"))
			{
				int @int = PlayerPrefs.GetInt("Lang");
				ILocalesProvider availableLocales = LocalizationSettings.AvailableLocales;
				if (availableLocales != null && availableLocales.Locales != null && @int >= 0 && @int < availableLocales.Locales.Count)
				{
					string code = availableLocales.Locales[@int].Identifier.Code;
					_currentLocale = (_localizations.ContainsKey(code) ? code : "en");
				}
			}
		}

		public string GetLocalizedText(string key, params object[] args)
		{
			RefreshCurrentLocale();
			if (string.IsNullOrEmpty(_currentLocale) || !_localizations.ContainsKey(_currentLocale))
			{
				_currentLocale = "en";
			}
			if (_localizations.ContainsKey(_currentLocale) && _localizations[_currentLocale].TryGetValue(key, out var value))
			{
				if (args.Length == 0)
				{
					return value;
				}
				return string.Format(value, args);
			}
			if (_currentLocale != "en" && _localizations.ContainsKey("en") && _localizations["en"].TryGetValue(key, out var value2))
			{
				if (args.Length == 0)
				{
					return value2;
				}
				return string.Format(value2, args);
			}
			if (_localizations.ContainsKey("zh") && _localizations["zh"].TryGetValue(key, out var value3))
			{
				if (args.Length == 0)
				{
					return value3;
				}
				return string.Format(value3, args);
			}
			return key;
		}
	}
}