Decompiled source of LCKRL v2.1.1

BepInEx/plugins/Asta-LCKRL/LCKRL.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LCKR.Patches;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine.Video;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("RadiationIsCool")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RadiationIsCool")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("8ee335db-0cbe-470c-8fbc-69263f01b35a")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: IgnoresAccessChecksTo("0Harmony")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("BepInEx")]
[assembly: IgnoresAccessChecksTo("BepInEx.Harmony")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VideoModule")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
public static class Const
{
	public const int ImageDiv = 16;

	public const int ImageCompareSize = 64;
}
namespace LCKR
{
	[BepInPlugin("asta.light.LCKR", "LCKR", "2.1.1")]
	public class Plugin : BaseUnityPlugin
	{
		private const string modGUID = "asta.light.LCKR";

		private const string modName = "LCKR";

		public const string modVersion = "2.1.1";

		public static string modVerType = "b";

		private readonly Harmony harmony = new Harmony("asta.light.LCKR");

		private static Plugin Instance;

		public static ManualLogSource mls;

		public static AssetBundle Bundle;

		public static TMP_FontAsset font3270_HUDIngame;

		public static TMP_FontAsset font3270_HUDIngame_Variant;

		public static TMP_FontAsset font3270_HUDIngameB;

		public static TMP_FontAsset font3270_Regular_SDF;

		public static TMP_FontAsset font3270_b;

		public static TMP_FontAsset font3270_DialogueText;

		public static TMP_FontAsset fontEdunline;

		public static TMP_FontAsset fontAds;

		public static VideoClip snareKorean;

		public static bool fullyKoreanMoons;

		public static GameObject resetPanel;

		public static bool patchFont;

		public static bool toKG;

		public static bool toCelsius;

		public static bool showVersion;

		public static bool versionChanged;

		public static string deathText;

		public static string quotaReached;

		public static string firedText;

		public static string sellText;

		public static string injuryText;

		public static string systemOnlineText;

		public static string allDead1;

		public static string allDead2;

		public static string autoTakeoff1;

		public static string autoTakeoff2;

		public static string midnightWarning;

		public static string PluginDirectory;

		public static string TranslationFilePath;

		public static string DefTranslationFilePath;

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			PluginDirectory = ((BaseUnityPlugin)this).Info.Location;
			string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Config.ConfigFilePath);
			TranslationFilePath = Path.Combine(directoryName, "LCKR_Translation");
			DefTranslationFilePath = Path.Combine(TranslationFilePath, "Default");
			mls = Logger.CreateLogSource("asta.light.LCKR");
			LoadAssets();
			TextureReplacer.Setup();
			TranslationManager.Setup();
			patchFont = ((BaseUnityPlugin)this).Config.Bind<bool>("폰트", "폰트 변경", true, "기본값은 true입니다.\nFontPatcher 등 외부 폰트 모드를 사용하려면 이 값을 false로 설정하세요. false로 설정하면 본 모드에서 폰트를 변경하지 않습니다.").Value;
			showVersion = ((BaseUnityPlugin)this).Config.Bind<bool>("일반", "버전 표시", true, "기본값은 true입니다.\ntrue로 설정하면 메인 화면에 모드의 버전을 표시합니다..").Value;
			toKG = ((BaseUnityPlugin)this).Config.Bind<bool>("번역", "KG으로 표기", false, "기본값은 false입니다.\ntrue로 설정하면 무게 수치를 kg으로 변환/표기합니다.").Value;
			toCelsius = ((BaseUnityPlugin)this).Config.Bind<bool>("번역", "섭씨로 표기", false, "기본값은 false입니다.\ntrue로 설정하면 온도를 섭씨로 변환/표기합니다.").Value;
			string path = Path.Combine(Paths.ConfigPath, "lckrVersion.txt");
			if (File.Exists(path))
			{
				string text = File.ReadAllText(path);
				if (text != "2.1.1")
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("버전 변경됨: " + text + " -> 2.1.1"));
					versionChanged = true;
				}
			}
			else
			{
				versionChanged = true;
			}
			File.WriteAllText(path, "2.1.1");
			mls.LogInfo((object)"LCKR is loaded");
			mls.LogInfo((object)("base.Config.ConfigFilePath: " + ((BaseUnityPlugin)this).Config.ConfigFilePath));
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
		}

		private void LoadAssets()
		{
			try
			{
				Bundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(PluginDirectory), "lckorean"));
			}
			catch (Exception ex)
			{
				mls.LogError((object)("Couldn't load asset bundle: " + ex.Message));
				return;
			}
			try
			{
				font3270_HUDIngame = Bundle.LoadAsset<TMP_FontAsset>("3270-HUDIngame.asset");
				font3270_HUDIngame_Variant = Bundle.LoadAsset<TMP_FontAsset>("3270-HUDIngame - Variant.asset");
				font3270_HUDIngameB = Bundle.LoadAsset<TMP_FontAsset>("3270-HUDIngameB.asset");
				font3270_Regular_SDF = Bundle.LoadAsset<TMP_FontAsset>("3270-Regular SDF.asset");
				font3270_b = Bundle.LoadAsset<TMP_FontAsset>("b.asset");
				font3270_DialogueText = Bundle.LoadAsset<TMP_FontAsset>("DialogueText.asset");
				fontEdunline = Bundle.LoadAsset<TMP_FontAsset>("edunline SDF.asset");
				fontAds = Bundle.LoadAsset<TMP_FontAsset>("HakgyoansimMalgeunnalB SDF.asset");
				snareKorean = Bundle.LoadAsset<VideoClip>("SnareFleaTipChannel2.m4v");
				resetPanel = Bundle.LoadAsset<GameObject>("LCKRComponent.prefab");
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Successfully loaded assets!");
			}
			catch (Exception ex2)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Couldn't load assets: " + ex2.Message));
			}
		}

		private void ReplaceImageFile()
		{
			string location = Assembly.GetExecutingAssembly().Location;
			string directoryName = Path.GetDirectoryName(location);
			string text = "example.png";
			string text2 = Path.Combine(directoryName, text);
			if (!File.Exists(text2))
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("이미지 파일이 " + text2 + "에 없습니다."));
				return;
			}
			string text3 = Path.Combine("게임_이미지_파일_경로", text);
			if (!File.Exists(text3))
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("게임 내 이미지 파일이 " + text3 + "에 없습니다."));
				return;
			}
			try
			{
				File.Copy(text2, text3, overwrite: true);
				((BaseUnityPlugin)this).Logger.LogInfo((object)("이미지 파일 " + text + "이 " + text3 + "에 성공적으로 덮어쓰기되었습니다."));
			}
			catch (Exception ex)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("이미지 파일 덮어쓰기 중 오류 발생: " + ex.Message));
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "LCKRL";

		public const string PLUGIN_NAME = "LCKRL";

		public const string PLUGIN_VERSION = "2.1.1";
	}
}
namespace LCKR.Patches
{
	[HarmonyPatch(typeof(EntranceTeleport))]
	internal class EntranceTeleportPatch
	{
	}
	[HarmonyPatch(typeof(GameNetworkManager))]
	internal class GameNetworkManagerPatch
	{
	}
	[HarmonyPatch(typeof(GrabbableObject))]
	internal class GrabbableObjectPatch
	{
	}
	[HarmonyPatch(typeof(HUDManager))]
	internal class HUDManagerPatch
	{
		private static readonly FieldInfo forceChangeTextCoroutineField = AccessTools.Field(typeof(HUDManager), "forceChangeTextCoroutine");

		private static readonly MethodInfo forceChangeTextMethod = AccessTools.Method(typeof(HUDManager), "ForceChangeText", (Type[])null, (Type[])null);

		private string amPM;

		private string newLine;

		[HarmonyPostfix]
		[HarmonyPatch("Start")]
		private static void Start_Postfix(ref PlayerLevel[] ___playerLevels)
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			PlayerLevel[] array = ___playerLevels;
			foreach (PlayerLevel val in array)
			{
				val.levelName = TranslationManager.GetArrayTranslation("PlayerLevel", val.levelName);
			}
			((TMP_Text)HUDManager.Instance.planetRiskLevelText).transform.localPosition = new Vector3(336.5525f, 274.1743f, -74f);
		}

		private static void TranslateAdvertText(HUDManager __instance)
		{
			TextMeshProUGUI advertTopText = __instance.advertTopText;
			TextMeshProUGUI advertBottomText = __instance.advertBottomText;
			if (!((TMP_Text)advertTopText).text.Contains("<size=35>"))
			{
				((TMP_Text)advertTopText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertTopText).text, "Item", ((TMP_Text)advertTopText).text);
				((TMP_Text)advertTopText).text = "<size=35>" + ((TMP_Text)advertTopText).text;
			}
			if (!((TMP_Text)advertBottomText).text.Contains("<size=35>"))
			{
				((TMP_Text)advertBottomText).text = "<size=35>" + ((TMP_Text)advertBottomText).text;
				((TMP_Text)advertBottomText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertBottomText).text, "HUD", "OFF");
				((TMP_Text)advertBottomText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertBottomText).text, "HUD", "AVAILABLE NOW");
				((TMP_Text)advertBottomText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertBottomText).text, "HUD", "CURES CANCER");
				((TMP_Text)advertBottomText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertBottomText).text, "HUD", "NO WAY");
				((TMP_Text)advertBottomText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertBottomText).text, "HUD", "LIMITED TIME ONLY");
				((TMP_Text)advertBottomText).text = TranslationManager.ReplaceArrayText(((TMP_Text)advertBottomText).text, "HUD", "GET YOURS TODAY");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("Update")]
		private static void Update_Postfix(HUDManager __instance, ref TextMeshProUGUI ___weightCounter, ref Animator ___weightCounterAnimator, ref TextMeshProUGUI ___holdButtonToEndGameEarlyText, ref TextMeshProUGUI ___holdButtonToEndGameEarlyVotesText)
		{
			if (GameNetworkManager.Instance.gameVersionNum >= 70)
			{
				TranslateAdvertText(__instance);
			}
			((TMP_Text)___holdButtonToEndGameEarlyText).text = TranslationManager.ReplaceArrayTextAll(((TMP_Text)___holdButtonToEndGameEarlyText).text, "HUD");
			if (!GameNetworkManager.Instance.localPlayerController.isPlayerDead)
			{
				if (Plugin.toKG)
				{
					float num = Mathf.RoundToInt(Mathf.Clamp(GameNetworkManager.Instance.localPlayerController.carryWeight - 1f, 0f, 100f) * 105f / 2.2f);
					((TMP_Text)___weightCounter).text = $"{num}kg";
					___weightCounterAnimator.SetFloat("weight", num / 130f);
				}
				else
				{
					float num2 = Mathf.RoundToInt(Mathf.Clamp(GameNetworkManager.Instance.localPlayerController.carryWeight - 1f, 0f, 100f) * 105f);
					((TMP_Text)___weightCounter).text = $"{num2} lb";
					___weightCounterAnimator.SetFloat("weight", num2 / 130f);
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("DisplaySpectatorTip")]
		private static void DisplaySpectatorTip_Postfix(string tipText, ref TextMeshProUGUI ___spectatorTipText)
		{
			string arrayTranslation = TranslationManager.GetArrayTranslation("HUD", "TipMouse");
			if (StartOfRound.Instance.localPlayerUsingController)
			{
				arrayTranslation = TranslationManager.GetArrayTranslation("HUD", "TipController");
			}
			((TMP_Text)___spectatorTipText).text = arrayTranslation;
		}

		[HarmonyPostfix]
		[HarmonyPatch("DisplayStatusEffect")]
		private static void DisplayStatusEffect_Postfix(string statusEffect, ref TextMeshProUGUI ___statusEffectText)
		{
			if (statusEffect == "VISIBILITY LOW!\n\nSteam leak detected in area")
			{
				((TMP_Text)___statusEffectText).text = TranslationManager.GetArrayTranslation("HUD", "SteamLeakDetected") + "\n\n" + TranslationManager.GetArrayTranslation("HUD", "SteamLeakDetected", 1) + "\n" + TranslationManager.GetArrayTranslation("HUD", "SteamLeakDetected", 2);
			}
			else if (statusEffect.Contains("Oxygen"))
			{
				((TMP_Text)___statusEffectText).text = TranslationManager.GetArrayTranslation("HUD", "OxygenLow");
			}
			else if (statusEffect.Contains("HEALTH RISK!"))
			{
				((TMP_Text)___statusEffectText).text = TranslationManager.GetArrayTranslation("HUD", "HealthRisk") + "\n" + TranslationManager.GetArrayTranslation("HUD", "HealthRisk", 1) + "\n" + TranslationManager.GetArrayTranslation("HUD", "HealthRisk", 2);
			}
			else if (statusEffect.Contains("HIGH FEVER DETECTED!") && statusEffect.Contains("REACHING"))
			{
				string text = ((TMP_Text)___statusEffectText).text;
				string text2 = text;
				if (Plugin.toCelsius)
				{
					text2 = Regex.Replace(text, "-?\\d+(\\.\\d+)?", delegate(Match match)
					{
						float num = float.Parse(match.Value);
						float num2 = (num - 32f) * 5f / 9f;
						return Mathf.RoundToInt(num2).ToString();
					}).Replace("°F", "°C");
					((TMP_Text)___statusEffectText).text = text2;
				}
				((TMP_Text)___statusEffectText).text = ((TMP_Text)___statusEffectText).text.Replace("HIGH FEVER DETECTED!", TranslationManager.GetArrayTranslation("HUD", "HighFever"));
				((TMP_Text)___statusEffectText).text = ((TMP_Text)___statusEffectText).text.Replace("REACHING", TranslationManager.GetArrayTranslation("HUD", "HighFever", 1));
				((TMP_Text)___statusEffectText).text = text2;
			}
			else if (statusEffect.Contains("HIGH FEVER DETECTED!!!"))
			{
				TextMeshProUGUI obj = ___statusEffectText;
				string text3 = (((TMP_Text)___statusEffectText).text = TranslationManager.GetArrayTranslation("HUD", "HighFever2") + "\n\n" + TranslationManager.GetArrayTranslation("HUD", "HighFever2", 1) + "\n\n" + TranslationManager.GetArrayTranslation("HUD", "HighFever2", 2));
				((TMP_Text)obj).text = text3;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("SetSpectatingTextToPlayer")]
		private static void SetSpectatingTextToPlayer_Postfix(ref TextMeshProUGUI ___spectatingPlayerText)
		{
			((TMP_Text)___spectatingPlayerText).text = TranslationManager.ReplaceArrayText(((TMP_Text)___spectatingPlayerText).text, "HUD", "Spectating");
		}

		[HarmonyPostfix]
		[HarmonyPatch("ApplyPenalty")]
		private static void ApplyPenalty_Postfix(ref EndOfGameStatUIElements ___statsUIElements)
		{
			TMP_Text penaltyAddition = (TMP_Text)(object)___statsUIElements.penaltyAddition;
			penaltyAddition.text = TranslationManager.ReplaceArrayText(penaltyAddition.text, "HUD", " casualties");
			penaltyAddition.text = TranslationManager.ReplaceArrayText(penaltyAddition.text, "HUD", " bodies recovered");
		}

		[HarmonyPrefix]
		[HarmonyPatch("ReadDialogue")]
		private static void ReadDialogue_Prefix(DialogueSegment[] dialogueArray)
		{
			foreach (DialogueSegment val in dialogueArray)
			{
				val.speakerText = TranslationManager.GetArrayTranslation("Dialogue", val.speakerText);
				float shipLeaveAutomaticallyTime = TimeOfDay.Instance.shipLeaveAutomaticallyTime;
				if (val.bodyText == "AM. A vote has been cast")
				{
					val.bodyText = TranslationManager.GetArrayTranslation("Dialogue", "ReturnAM").Replace("{time}", GetClockTimeFormatted(shipLeaveAutomaticallyTime, TimeOfDay.Instance.numberOfHours, createNewLine: false));
				}
				else if (val.bodyText == "PM. A vote has been cast")
				{
					val.bodyText = TranslationManager.GetArrayTranslation("Dialogue", "ReturnPM").Replace("{time}", GetClockTimeFormatted(shipLeaveAutomaticallyTime, TimeOfDay.Instance.numberOfHours, createNewLine: false));
				}
				else
				{
					val.bodyText = TranslationManager.GetArrayTranslation("Dialogue", val.bodyText);
				}
			}
		}

		public static string GetClockTimeFormatted(float timeNormalized, float numberOfHours, bool createNewLine = true)
		{
			int num = (int)(timeNormalized * (60f * numberOfHours)) + 360;
			int num2 = (int)Mathf.Floor((float)(num / 60));
			string text = (createNewLine ? "\n" : " ");
			if (num2 >= 24)
			{
				return "오전" + text + "12:00";
			}
			string text2 = ((num2 >= 12) ? "오후" : "오전");
			if (num2 > 12)
			{
				num2 %= 12;
			}
			int num3 = num % 60;
			string text3 = $"{num2:00}:{num3:00}".TrimStart('0');
			return text2 + text + text3;
		}

		[HarmonyPostfix]
		[HarmonyPatch("DisplayTip")]
		private static void DisplayTip_Postfix(TextMeshProUGUI ___tipsPanelHeader, TextMeshProUGUI ___tipsPanelBody)
		{
			switch (((TMP_Text)___tipsPanelHeader).text)
			{
			case "To read the manual:":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "ReadManual");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "ReadManual", 1);
				break;
			case "TIP:":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "TipTerminal");
				if (((TMP_Text)___tipsPanelBody).text == "Use the ship computer terminal to access secure doors.")
				{
					((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "TipTerminal", 1);
				}
				else
				{
					((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "TipLockedDoor", 1);
				}
				break;
			case "Welcome!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "Welcome");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "Welcome", 1);
				break;
			case "Got scrap!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "GotScrap");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "GotScrap", 1);
				break;
			case "Items missed!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "ItemMissed");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "ItemMissed", 1);
				break;
			case "Item stored!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "ItemStored");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "ItemStored", 1);
				break;
			case "HALT!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "DeadlineWarning");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "DeadlineWarning", 1);
				break;
			case "Weather alert!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "EclipseWarning");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "EclipseWarning", 1);
				break;
			case "???":
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "MissingEntrance", 1);
				break;
			case "ALERT!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "LightningWarning");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "LightningWarning", 1);
				break;
			case "Welcome back!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "WelcomeBack");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "WelcomeBack", 1);
				break;
			case "Tip":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "TipShipObject");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "TipShipObject", 1);
				break;
			case "Equipped to utility belt!":
				((TMP_Text)___tipsPanelHeader).text = TranslationManager.GetArrayTranslation("Tip", "UtilityBelt");
				((TMP_Text)___tipsPanelBody).text = TranslationManager.GetArrayTranslation("Tip", "UtilityBelt", 1);
				break;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("DisplayNewScrapFound")]
		private static void DisplayNewScrapFound_Postfix()
		{
			ScrapCollectionBox(HUDManager.Instance.ScrapItemBoxes[0]);
			ScrapCollectionBox(HUDManager.Instance.ScrapItemBoxes[1]);
			ScrapCollectionBox(HUDManager.Instance.ScrapItemBoxes[2]);
		}

		private static void ScrapCollectionBox(ScrapItemHUDDisplay scrapBox)
		{
			((TMP_Text)scrapBox.headerText).text = TranslationManager.ReplaceArrayText(((TMP_Text)scrapBox.headerText).text, "Item", ((TMP_Text)scrapBox.headerText).text.Replace(" collected!", ""));
			((TMP_Text)scrapBox.headerText).text = TranslationManager.ReplaceArrayText(((TMP_Text)scrapBox.headerText).text, "HUD", "collected");
			((TMP_Text)scrapBox.valueText).text = TranslationManager.ReplaceArrayText(((TMP_Text)scrapBox.valueText).text, "HUD", "Value");
		}

		[HarmonyPostfix]
		[HarmonyPatch("DisplayCreditsEarning")]
		private static void DisplayCreditsEarning_Postfix(ref TextMeshProUGUI ___moneyRewardsTotalText)
		{
			((TMP_Text)___moneyRewardsTotalText).text = TranslationManager.ReplaceArrayText(((TMP_Text)___moneyRewardsTotalText).text, "HUD", "TOTAL");
		}

		[HarmonyPostfix]
		[HarmonyPatch("DisplayDaysLeft")]
		private static void DisplayDaysLeft_Postfix(ref TextMeshProUGUI ___profitQuotaDaysLeftText, ref TextMeshProUGUI ___profitQuotaDaysLeftText2)
		{
			string text = TranslationManager.ReplaceArrayText(((TMP_Text)___profitQuotaDaysLeftText).text, "HUD", Regex.Replace(((TMP_Text)___profitQuotaDaysLeftText).text, "\\d", ""));
			((TMP_Text)___profitQuotaDaysLeftText).text = text;
			((TMP_Text)___profitQuotaDaysLeftText2).text = text;
		}

		[HarmonyPostfix]
		[HarmonyPatch("ChangeControlTip")]
		private static void ChangeControlTip_Postfix(HUDManager __instance, ref TextMeshProUGUI[] ___controlTipLines, int toolTipNumber, string changeTo, bool clearAllOther = false)
		{
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			string text = changeTo.Split(':')[0].Trim();
			string text2 = text;
			text2 = changeTo.Replace(text, TranslationManager.GetArrayTranslation("ControlTip", text, 0, partialMatch: true));
			((TMP_Text)___controlTipLines[toolTipNumber]).text = text2;
			Coroutine val = (Coroutine)forceChangeTextCoroutineField.GetValue(__instance);
			if (val != null)
			{
				((MonoBehaviour)__instance).StopCoroutine(val);
			}
			IEnumerator enumerator = (IEnumerator)forceChangeTextMethod.Invoke(__instance, new object[2]
			{
				___controlTipLines[toolTipNumber],
				text2
			});
			Coroutine value = ((MonoBehaviour)__instance).StartCoroutine(enumerator);
			forceChangeTextCoroutineField.SetValue(__instance, value);
		}

		[HarmonyPostfix]
		[HarmonyPatch("ChangeControlTipMultiple")]
		private static void ChangeControlTipMultiple_Postfix(ref TextMeshProUGUI[] ___controlTipLines, string[] allLines, bool holdingItem, Item itemProperties)
		{
			if (!holdingItem || allLines == null)
			{
				return;
			}
			((TMP_Text)___controlTipLines[0]).text = TranslationManager.GetArrayTranslation("Item", itemProperties.itemName) + " 떨어뜨리기 : [G]";
			int num = Mathf.Min(allLines.Length, ___controlTipLines.Length);
			for (int i = 0; i < num; i++)
			{
				if (allLines.Length > i && !string.IsNullOrEmpty(allLines[i]))
				{
					string text = allLines[i];
					string text2 = text.Split(':')[0].Trim();
					((TMP_Text)___controlTipLines[i + 1]).text = ((TMP_Text)___controlTipLines[i + 1]).text.Replace(text2, TranslationManager.GetArrayTranslation("ControlTip", text2, 0, partialMatch: true));
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("Update")]
		private static void Update_Prefix(ref TextMeshProUGUI ___planetInfoHeaderText, ref TextMeshProUGUI ___globalNotificationText, ref TextMeshProUGUI ___loadingText, ref TextMeshProUGUI[] ___controlTipLines)
		{
			if (((TMP_Text)___loadingText).text == "Waiting for crew...")
			{
				((TMP_Text)___loadingText).text = TranslationManager.GetArrayTranslation("HUD", "WaitingForCrew");
			}
			string text = ((TMP_Text)___planetInfoHeaderText).text;
			if (text.Contains("CELESTIAL BODY:"))
			{
				text = TranslationManager.ReplaceArrayText(text, "Planets", "CELESTIAL BODY");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Experimentation");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Where the Company resides");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Assurance");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Offense");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Adamance");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Rend");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Dine");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "March");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Vow");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Titan");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Artifice");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Embrion");
				text = TranslationManager.ReplaceArrayText(text, "Planets", "Gordion");
				((TMP_Text)___planetInfoHeaderText).text = text;
			}
			if (((TMP_Text)___globalNotificationText).text == "New creature data sent to terminal!")
			{
				((TMP_Text)___globalNotificationText).text = TranslationManager.GetArrayTranslation("HUD", "NewCreature");
			}
			else if (((TMP_Text)___globalNotificationText).text.Contains("Found journal entry:"))
			{
				string arrayTranslation = TranslationManager.GetArrayTranslation("HUD", "FoundJournal");
				((TMP_Text)___globalNotificationText).text = ((TMP_Text)___globalNotificationText).text.Replace("Found journal entry:", arrayTranslation);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("AttemptScanNode")]
		private static void AttemptScanNode_Prefix(ScanNodeProperties node)
		{
			if ((Object)(object)node == (Object)null)
			{
				return;
			}
			string arrayTranslation = TranslationManager.GetArrayTranslation("ScanNode", node.headerText);
			string text = node.subText;
			if (node.subText.Contains("Value: ") || node.subText.Contains("value: ") || node.subText.Contains("VALUE: "))
			{
				text = text.Replace("Value: ", TranslationManager.GetArrayTranslation("ScanNode", "valueCheck", 1));
				text = text.Replace("value: ", TranslationManager.GetArrayTranslation("ScanNode", "valueCheck", 1));
				text = text.Replace("VALUE: ", TranslationManager.GetArrayTranslation("ScanNode", "valueCheck", 1));
			}
			else
			{
				string arrayTranslation2 = TranslationManager.GetArrayTranslation("ScanNode", node.headerText, 1);
				if (!string.IsNullOrEmpty(arrayTranslation2) && arrayTranslation2 != node.headerText)
				{
					text = arrayTranslation2;
				}
			}
			node.headerText = arrayTranslation;
			if (arrayTranslation != text)
			{
				node.subText = text;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("DisplayNewDeadline")]
		private static void DisplayNewDeadline_Postfix(ref TextMeshProUGUI ___reachedProfitQuotaBonusText)
		{
			((TMP_Text)___reachedProfitQuotaBonusText).text = TranslationManager.ReplaceArrayText(((TMP_Text)___reachedProfitQuotaBonusText).text, "HUD", "Overtime bonus");
		}
	}
	[HarmonyPatch(typeof(IngamePlayerSettings))]
	internal class IngamePlayerSettingsPatch
	{
		[HarmonyPrefix]
		[HarmonyPatch("SetSettingsOptionsText")]
		private static void SetSettingsOptionsText_Prefix(SettingsOptionType optionType, string setToText)
		{
			setToText = setToText.Replace("Current input device:", "현재 입력 장치:");
			setToText = setToText.Replace("No device found \n (click to refresh)", "장치 발견되지 않음 \n (클릭하여 새로고침)");
			setToText = setToText.Replace("MODE: Push to talk", "모드: 눌러서 말하기");
			setToText = setToText.Replace("MODE: Voice activation", "모드: 음성 감지");
		}
	}
	[HarmonyPatch(typeof(InteractTrigger))]
	internal class InteractTriggerPatch
	{
	}
	[HarmonyPatch(typeof(ManualCameraRenderer))]
	internal class ManualCameraRendererPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Update")]
		private static void Update_Postfix(UnlockableSuit __instance)
		{
			TextMeshProUGUI mapScreenPlayerName = StartOfRound.Instance.mapScreenPlayerName;
			((TMP_Text)mapScreenPlayerName).text = TranslationManager.ReplaceArrayText(((TMP_Text)mapScreenPlayerName).text, "Ingame", "MONITORING");
		}
	}
	[HarmonyPatch(typeof(MenuManager))]
	internal class MenuManagerPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("DisplayMenuNotification")]
		private static void DisplayMenuNotification_Prefix(string notificationText, string buttonText, ref GameObject ___menuNotification, ref TextMeshProUGUI ___menuNotificationText, ref TextMeshProUGUI ___menuNotificationButtonText)
		{
			if (notificationText.Contains("Some of your save files may not be compatible"))
			{
				((TMP_Text)___menuNotificationText).text = $"일부 저장 파일은 버전 {GameNetworkManager.Instance.compatibleFileCutoffVersion}과 호환되지 않을 수 있으며, 플레이할 경우 손상될 수 있습니다.";
				((TMP_Text)___menuNotificationButtonText).text = "[ 닫기 ]";
				___menuNotification.SetActive(true);
				EventSystem.current.SetSelectedGameObject(((Component)___menuNotification.GetComponentInChildren<Button>()).gameObject);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("HostSetLobbyPublic")]
		private static void HostSetLobbyPublic_Postfix(ref TextMeshProUGUI ___privatePublicDescription)
		{
			if (((TMP_Text)___privatePublicDescription).text.Contains("PUBLIC"))
			{
				((TMP_Text)___privatePublicDescription).text = "공개로 설정하면 모든 사람이 볼 수 있도록 서버가 서버 목록에 표시됩니다.";
			}
			else
			{
				((TMP_Text)___privatePublicDescription).text = "비공개로 설정하면 Steam을 통해 플레이어에게 초대를 보내야 합니다.";
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("Update")]
		private static void Update_Prefix(ref TextMeshProUGUI ___settingsBackButton)
		{
			if ((Object)(object)___settingsBackButton != (Object)null)
			{
				((TMP_Text)___settingsBackButton).text = ((TMP_Text)___settingsBackButton).text.Replace("DISCARD", "취소");
				((TMP_Text)___settingsBackButton).text = ((TMP_Text)___settingsBackButton).text.Replace("BACK", "뒤로");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("Start")]
		private static void Start_Postfix(MenuManager __instance, ref TextMeshProUGUI ___versionNumberText)
		{
			if (Plugin.showVersion && (Object)(object)GameNetworkManager.Instance != (Object)null && (Object)(object)___versionNumberText != (Object)null)
			{
				((TMP_Text)___versionNumberText).text = "   <size=14>LCKR 2.1.1" + Plugin.modVerType + "</size>\n" + ((TMP_Text)___versionNumberText).text;
			}
			if (!__instance.isInitScene)
			{
				Transform transform = ((Component)Object.Instantiate<GameObject>(Plugin.resetPanel, GameObject.Find("MenuContainer").transform).AddComponent<LCKRPanel>()).transform;
				transform.SetSiblingIndex(GameObject.Find("MainButtons").transform.GetSiblingIndex() + 1);
			}
		}
	}
	[HarmonyPatch(typeof(PlayerControllerB))]
	internal class PlayerControllerBPatch
	{
		public static string cursorTip;

		[HarmonyPostfix]
		[HarmonyPatch("SetHoverTipAndCurrentInteractTrigger")]
		private static void SetHoverTipAndCurrentInteractTrigger_Postfix(ref TextMeshProUGUI ___cursorTip)
		{
			string text = ((TMP_Text)___cursorTip).text;
			if (text != cursorTip)
			{
				cursorTip = TranslationManager.ReplaceArrayTextAll(text, "CursorTip");
				((TMP_Text)___cursorTip).text = cursorTip;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("SpawnDeadBody")]
		private static void SpawnDeadBody_Postfix()
		{
			DeadBodyInfo[] array = Object.FindObjectsOfType<DeadBodyInfo>();
			DeadBodyInfo[] array2 = array;
			foreach (DeadBodyInfo val in array2)
			{
				ScanNodeProperties componentInChildren = ((Component)val).gameObject.GetComponentInChildren<ScanNodeProperties>();
				if (!componentInChildren.headerText.Contains(TranslationManager.GetArrayTranslation("DeathReasons", "PlayerBody")))
				{
					componentInChildren.headerText = componentInChildren.headerText.Replace("Body of ", "");
					componentInChildren.headerText += TranslationManager.GetArrayTranslation("DeathReasons", "PlayerBody");
				}
				string[] array3 = componentInChildren.subText.Split(':');
				string key = array3[0].Trim();
				string key2 = array3[1].Trim();
				componentInChildren.subText = TranslationManager.ReplaceArrayText(componentInChildren.subText, "DeathReasons", key);
				componentInChildren.subText = TranslationManager.ReplaceArrayText(componentInChildren.subText, "DeathReasons", key2);
			}
		}
	}
	[HarmonyPatch(typeof(PreInitSceneScript))]
	internal class PreInitSceneScriptPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("PressContinueButton")]
		private static void PressContinueButton_Postfix(ref int ___currentLaunchSettingPanel, ref GameObject[] ___LaunchSettingsPanels, ref Animator ___blackTransition, ref GameObject ___continueButton, ref TextMeshProUGUI ___headerText)
		{
			if (((TMP_Text)___headerText).text == "LAUNCH MODE")
			{
				((TMP_Text)___headerText).text = "실행 모드";
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("SkipToFinalSetting")]
		private static void SkipToFinalSetting_Postfix(PreInitSceneScript __instance, ref TextMeshProUGUI ___headerText)
		{
			LoadingManager loadingManager = ((Component)__instance).gameObject.AddComponent<LoadingManager>();
			loadingManager.text = (TMP_Text)(object)___headerText;
			loadingManager.buttons = GameObject.Find("LANOrOnline");
			((TMP_Text)___headerText).text = "실행 모드";
		}
	}
	[HarmonyPatch(typeof(QuickMenuManager))]
	internal class QuickMenuManagerPatch
	{
		[HarmonyPrefix]
		[HarmonyPatch("Update")]
		private static void Update_Prefix(ref TextMeshProUGUI ___settingsBackButton)
		{
			if ((Object)(object)___settingsBackButton != (Object)null)
			{
				((TMP_Text)___settingsBackButton).text = ((TMP_Text)___settingsBackButton).text.Replace("Discard changes", "변경 사항 취소");
				((TMP_Text)___settingsBackButton).text = ((TMP_Text)___settingsBackButton).text.Replace("Back", "뒤로");
			}
		}
	}
	[HarmonyPatch(typeof(RoundManager))]
	internal class RoundManagerPatch
	{
		private static TextMeshProUGUI _loadingText;

		[HarmonyPrefix]
		[HarmonyPatch("Start")]
		private static void Start_Prefix()
		{
			if (GameNetworkManager.Instance.gameVersionNum >= 80 && (Object)(object)_loadingText == (Object)null)
			{
				_loadingText = GameObject.Find("LoadText").GetComponent<TextMeshProUGUI>();
				((TMP_Text)_loadingText).text = TranslationManager.GetArrayTranslation("HUD", "LoadText");
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("GenerateNewLevelClientRpc")]
		private static void GenerateNewLevelClientRpc_Postfix()
		{
			if (((TMP_Text)HUDManager.Instance.loadingText).text.Contains("Random seed"))
			{
				((TMP_Text)HUDManager.Instance.loadingText).text = ((TMP_Text)HUDManager.Instance.loadingText).text.Replace("Random seed", "무작위 시드");
			}
		}
	}
	[HarmonyPatch(typeof(SaveFileUISlot))]
	internal class SaveFileUISlotPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("OnEnable")]
		private static void OnEnable_Postfix(SaveFileUISlot __instance, ref string ___fileString)
		{
			if (__instance.fileNum == -1)
			{
				((TMP_Text)__instance.fileNameText).text = GameNetworkManager.Instance.GetNameForWeekNumber(-1);
			}
			if (ES3.FileExists(___fileString) && __instance.fileNum != -1)
			{
				int num = ES3.Load<int>("GroupCredits", ___fileString, 0);
				int num2 = ES3.Load<int>("Stats_DaysSpent", ___fileString, 0);
				((TMP_Text)__instance.fileStatsText).text = $"${num}\n{num2}일차";
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("SetFileToThis")]
		private static void SetFileToThis_Postfix(ref TextMeshProUGUI ___specialTipText)
		{
			if ((Object)(object)___specialTipText != (Object)null && ((Behaviour)___specialTipText).enabled)
			{
				((TMP_Text)___specialTipText).text = ((TMP_Text)___specialTipText).text.Replace("This is the weekly challenge moon. You have one day to make as much profit as possible.", "주간 챌린지 위성입니다. 하루 안에 가능한 한 많은 수익을 획득하세요.");
			}
		}
	}
	[HarmonyPatch(typeof(ShipBuildModeManager))]
	internal class ShipBuildModeManagerPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("CreateGhostObjectAndHighlight")]
		private static void CreateGhostObjectAndHighlight_Postfix()
		{
			string text = ((TMP_Text)HUDManager.Instance.buildModeControlTip).text.Replace("Confirm", "배치");
			text = text.Replace("Rotate", "회전");
			text = text.Replace("Store", "보관");
			((TMP_Text)HUDManager.Instance.buildModeControlTip).text = text;
		}
	}
	[HarmonyPatch(typeof(ShotgunItem))]
	internal class ShotgunItemPatch
	{
	}
	[HarmonyPatch(typeof(StartMatchLever))]
	internal class StartMatchLeverPatch
	{
	}
	[HarmonyPatch(typeof(StartOfRound))]
	internal class StartOfRoundPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Start")]
		private static void Start_Postfix()
		{
			try
			{
				TranslatePlanet();
			}
			catch (Exception ex)
			{
				Plugin.mls.LogError((object)("행성 리스트를 번역하는 과정에서 오류가 발생했습니다!\n" + ex));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("LateUpdate")]
		private static void LateUpdate_Prefix()
		{
			((TMP_Text)HUDManager.Instance.planetInfoSummaryText).text = TranslationManager.GetArrayTranslation("Planets", StartOfRound.Instance.currentLevel.LevelDescription, 0, partialMatch: true);
		}

		[HarmonyPostfix]
		[HarmonyPatch("SceneManager_OnLoad")]
		private static void SceneManager_OnLoad_Postfix()
		{
			if (((TMP_Text)HUDManager.Instance.loadingText).text == "LOADING WORLD...")
			{
				((TMP_Text)HUDManager.Instance.loadingText).text = "세계 불러오는 중...";
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("FirePlayersAfterDeadlineClientRpc")]
		private static void FirePlayersAfterDeadlineClientRpc_Postfix()
		{
			TextMeshProUGUI endOfRunStatsText = HUDManager.Instance.EndOfRunStatsText;
			((TMP_Text)endOfRunStatsText).text = TranslationManager.ReplaceArrayText(((TMP_Text)endOfRunStatsText).text, "HUD", "Days on the job");
			((TMP_Text)endOfRunStatsText).text = TranslationManager.ReplaceArrayText(((TMP_Text)endOfRunStatsText).text, "HUD", "Scrap value collected");
			((TMP_Text)endOfRunStatsText).text = TranslationManager.ReplaceArrayText(((TMP_Text)endOfRunStatsText).text, "HUD", "Deaths");
			((TMP_Text)endOfRunStatsText).text = TranslationManager.ReplaceArrayText(((TMP_Text)endOfRunStatsText).text, "HUD", "Steps taken");
		}

		[HarmonyPostfix]
		[HarmonyPatch("SetMapScreenInfoToCurrentLevel")]
		private static void SetMapScreenInfoToCurrentLevel_Postfix(ref TextMeshProUGUI ___screenLevelDescription)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Invalid comparison between Unknown and I4
			TranslatePlanet();
			SelectableLevel[] levels = StartOfRound.Instance.levels;
			foreach (SelectableLevel val in levels)
			{
				if (val.riskLevel == "Safe")
				{
					val.riskLevel = "안전";
				}
			}
			string text;
			if ((int)StartOfRound.Instance.currentLevel.currentWeather != -1)
			{
				string arrayTranslation = TranslationManager.GetArrayTranslation("Planets", "Weather");
				string arrayTranslation2 = TranslationManager.GetArrayTranslation("Planets", ((object)Unsafe.As<LevelWeatherType, LevelWeatherType>(ref StartOfRound.Instance.currentLevel.currentWeather)/*cast due to .constrained prefix*/).ToString());
				text = arrayTranslation + ": " + arrayTranslation2;
			}
			else
			{
				text = "";
			}
			string levelDescription = StartOfRound.Instance.currentLevel.LevelDescription;
			if (StartOfRound.Instance.isChallengeFile)
			{
				((TMP_Text)StartOfRound.Instance.screenLevelDescription).text = string.Concat(TranslationManager.GetArrayTranslation("Planets", "Orbiting") + ": ", GameNetworkManager.Instance.GetNameForWeekNumber(-1), "\n", TranslationManager.GetArrayTranslation("Planets", levelDescription, 0, partialMatch: true), "\n", text);
			}
			else
			{
				((TMP_Text)StartOfRound.Instance.screenLevelDescription).text = "공전 중: " + TranslationManager.GetArrayTranslation("Planets", StartOfRound.Instance.currentLevel.PlanetName, 0, partialMatch: true) + "\n" + TranslationManager.GetArrayTranslation("Planets", levelDescription, 0, partialMatch: true) + "\n" + text;
			}
		}

		private bool TryGetValueAfterColon(string text, string removalKey, out string value)
		{
			value = null;
			if (string.IsNullOrEmpty(text))
			{
				return false;
			}
			int num = text.IndexOf(':');
			if (num < 0)
			{
				return false;
			}
			string text2 = text.Substring(0, num).Trim();
			if (text2 != removalKey)
			{
				return false;
			}
			value = text.Substring(num + 1).Trim();
			return true;
		}

		[HarmonyPostfix]
		[HarmonyPatch("WritePlayerNotes")]
		public static void WritePlayerNotes_Postfix(ref EndOfGameStats ___gameStats, ref PlayerControllerB[] ___allPlayerScripts, ref int ___connectedPlayersAmount, ref bool ___localPlayerWasMostProfitableThisRound)
		{
			for (int i = 0; i < ___allPlayerScripts.Length; i++)
			{
				for (int j = 0; j < ___gameStats.allPlayerStats[i].playerNotes.Count; j++)
				{
					string key = ___gameStats.allPlayerStats[i].playerNotes[j];
					key = TranslationManager.GetArrayTranslation("HUD", key);
					___gameStats.allPlayerStats[i].playerNotes[j] = key;
				}
			}
		}

		private static void TranslatePlanet()
		{
		}
	}
	[HarmonyPatch(typeof(Terminal))]
	internal class TerminalPatch
	{
		public static bool vehicleChecked;

		private static FieldInfo modifyingTextField = AccessTools.Field(typeof(Terminal), "modifyingText");

		private static FieldInfo totalCostField = AccessTools.Field(typeof(Terminal), "totalCostOfItems");

		private static string confirmString;

		private static string denyString;

		[HarmonyPostfix]
		[HarmonyPatch("Start")]
		private static void Start_Postfix(Terminal __instance, ref TerminalNodesList ___terminalNodes, ref List<TerminalNode> ___enemyFiles, ref TMP_InputField ___screenText, ref string ___currentText)
		{
			confirmString = TranslationManager.GetArrayTranslation("Terminal", "확인");
			denyString = TranslationManager.GetArrayTranslation("Terminal", "취소");
			Plugin.mls.LogInfo((object)("클라이언트 버전: " + GameNetworkManager.Instance.gameVersionNum));
			TranslateKeyword(___terminalNodes, ___enemyFiles);
			TranslateNode(__instance);
		}

		private static void TranslateVehicle(Terminal instance)
		{
			BuyableVehicle[] buyableVehicles = instance.buyableVehicles;
			foreach (BuyableVehicle val in buyableVehicles)
			{
				if (val.vehicleDisplayName == "Cruiser")
				{
					val.vehicleDisplayName = "크루저";
				}
			}
		}

		private static void TranslateTerminalScreen(string key, TMP_InputField screenText, ref string ___currentText)
		{
			string text = TranslationManager.ReplaceArrayTextAll(screenText.text, "Terminal");
			text = (screenText.text = TranslationManager.ReplaceArrayTextAll(screenText.text, "Planets"));
			___currentText = text;
		}

		[HarmonyPrefix]
		[HarmonyPatch("LoadNewNode")]
		public static bool LoadNewNode_Prefix(Terminal __instance, TerminalNode node)
		{
			modifyingTextField.SetValue(__instance, true);
			__instance.RunTerminalEvents(node);
			((Selectable)__instance.screenText).interactable = true;
			string text = "";
			if (node.clearPreviousText)
			{
				text = "\n\n\n" + node.displayText.ToString();
			}
			else
			{
				text = "\n\n" + __instance.screenText.text.ToString() + "\n\n" + node.displayText.ToString();
				int num = text.Length - 250;
				text = text.Substring(Mathf.Clamp(num, 0, text.Length)).ToString();
			}
			try
			{
				text = TextPostProcess(__instance, text, node);
			}
			catch (Exception arg)
			{
				Debug.LogError((object)$"An error occured while post processing terminal text: {arg}");
			}
			__instance.screenText.text = text;
			__instance.currentText = __instance.screenText.text;
			__instance.textAdded = 0;
			if (node.playSyncedClip != -1)
			{
				__instance.PlayTerminalAudioServerRpc(node.playSyncedClip);
			}
			else if ((Object)(object)node.playClip != (Object)null)
			{
				__instance.terminalAudio.PlayOneShot(node.playClip);
			}
			__instance.LoadTerminalImage(node);
			__instance.currentNode = node;
			return false;
		}

		private static string TextPostProcess(Terminal __instance, string modifiedDisplayText, TerminalNode node)
		{
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Invalid comparison between Unknown and I4
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Invalid comparison between Unknown and I4
			int num = modifiedDisplayText.Split("[planetTime]").Length - 1;
			if (num > 0)
			{
				Regex regex = new Regex(Regex.Escape("[planetTime]"));
				for (int i = 0; i < num && __instance.moonsCatalogueList.Length > i; i++)
				{
					Debug.Log((object)$"isDemo:{GameNetworkManager.Instance.isDemo} ; {__instance.moonsCatalogueList[i].lockedForDemo}");
					string replacement = ((GameNetworkManager.Instance.isDemo && __instance.moonsCatalogueList[i].lockedForDemo) ? TranslationManager.GetArrayTranslation("Terminal", "Locked") : (((int)__instance.moonsCatalogueList[i].currentWeather != -1) ? ("(" + TranslationManager.GetArrayTranslation("Planets", ((object)Unsafe.As<LevelWeatherType, LevelWeatherType>(ref __instance.moonsCatalogueList[i].currentWeather)/*cast due to .constrained prefix*/).ToString()) + ")") : ""));
					modifiedDisplayText = regex.Replace(modifiedDisplayText, replacement, 1);
				}
			}
			try
			{
				if (node.displayPlanetInfo != -1)
				{
					string newValue = (((int)StartOfRound.Instance.levels[node.displayPlanetInfo].currentWeather != -1) ? (TranslationManager.GetArrayTranslation("Planets", ((object)Unsafe.As<LevelWeatherType, LevelWeatherType>(ref StartOfRound.Instance.levels[node.displayPlanetInfo].currentWeather)/*cast due to .constrained prefix*/).ToString()) ?? "") : TranslationManager.GetArrayTranslation("Planets", "mild weather"));
					modifiedDisplayText = modifiedDisplayText.Replace("[currentPlanetTime]", newValue);
				}
			}
			catch
			{
				Debug.Log((object)$"Exception occured on terminal while setting node planet info; current node displayPlanetInfo:{node.displayPlanetInfo}");
			}
			if (modifiedDisplayText.Contains("[warranty]"))
			{
				modifiedDisplayText = ((!__instance.hasWarrantyTicket) ? modifiedDisplayText.Replace("[warranty]", "") : modifiedDisplayText.Replace("[warranty]", TranslationManager.GetArrayTranslation("Terminal", "FreeWarranty", 0, partialMatch: false, "[warranty]")));
			}
			if (modifiedDisplayText.Contains("[currentScannedEnemiesList]"))
			{
				if (__instance.scannedEnemyIDs == null || __instance.scannedEnemyIDs.Count <= 0)
				{
					modifiedDisplayText = modifiedDisplayText.Replace("[currentScannedEnemiesList]", TranslationManager.GetArrayTranslation("Terminal", "NoCreatureData", 0, partialMatch: false, "No data collected on wildlife. Scans are required."));
				}
				else
				{
					StringBuilder stringBuilder = new StringBuilder();
					for (int j = 0; j < __instance.scannedEnemyIDs.Count; j++)
					{
						Debug.Log((object)$"scanID # {j}: {__instance.scannedEnemyIDs[j]}; {__instance.enemyFiles[__instance.scannedEnemyIDs[j]].creatureName}");
						Debug.Log((object)$"scanID # {j}: {__instance.scannedEnemyIDs[j]}");
						stringBuilder.Append("\n" + __instance.enemyFiles[__instance.scannedEnemyIDs[j]].creatureName);
						if (__instance.newlyScannedEnemyIDs.Contains(__instance.scannedEnemyIDs[j]))
						{
							stringBuilder.Append(" (" + TranslationManager.GetArrayTranslation("Terminal", "NEW") + ")");
						}
					}
					modifiedDisplayText = modifiedDisplayText.Replace("[currentScannedEnemiesList]", stringBuilder.ToString());
				}
			}
			if (modifiedDisplayText.Contains("[buyableItemsList]"))
			{
				if (__instance.buyableItemsList == null || __instance.buyableItemsList.Length == 0)
				{
					modifiedDisplayText = modifiedDisplayText.Replace("[buyableItemsList]", TranslationManager.GetArrayTranslation("Terminal", "NoStock"));
				}
				else
				{
					StringBuilder stringBuilder2 = new StringBuilder();
					for (int k = 0; k < __instance.buyableItemsList.Length; k++)
					{
						stringBuilder2.Append("\n* " + TranslationManager.GetArrayTranslation("Item", __instance.buyableItemsList[k].itemName) + "  //  " + TranslationManager.GetArrayTranslation("Terminal", "Price") + ": $" + (float)__instance.buyableItemsList[k].creditsWorth * ((float)__instance.itemSalesPercentages[k] / 100f));
						if (__instance.itemSalesPercentages[k] != 100)
						{
							stringBuilder2.Append(string.Format("   ({0}% " + TranslationManager.GetArrayTranslation("Terminal", "OFF!") + ")", 100 - __instance.itemSalesPercentages[k]));
						}
					}
					modifiedDisplayText = modifiedDisplayText.Replace("[buyableItemsList]", stringBuilder2.ToString());
				}
			}
			if (modifiedDisplayText.Contains("[buyableVehiclesList]"))
			{
				if (__instance.buyableVehicles == null || __instance.buyableVehicles.Length == 0)
				{
					modifiedDisplayText = modifiedDisplayText.Replace("[buyableVehiclesList]", TranslationManager.GetArrayTranslation("Terminal", "NoStock"));
				}
				else
				{
					StringBuilder stringBuilder3 = new StringBuilder();
					for (int l = 0; l < __instance.buyableVehicles.Length; l++)
					{
						stringBuilder3.Append("\n* " + __instance.buyableVehicles[l].vehicleDisplayName + "  //  " + TranslationManager.GetArrayTranslation("Terminal", "Price") + ": $" + (float)__instance.buyableVehicles[l].creditsWorth * ((float)__instance.itemSalesPercentages[l + __instance.buyableItemsList.Length] / 100f));
						if (__instance.itemSalesPercentages[l + __instance.buyableItemsList.Length] != 100)
						{
							stringBuilder3.Append(string.Format("   ({0}% " + TranslationManager.GetArrayTranslation("Terminal", "OFF!") + ")", 100 - __instance.itemSalesPercentages[l + __instance.buyableItemsList.Length]));
						}
					}
					modifiedDisplayText = modifiedDisplayText.Replace("[buyableVehiclesList]", stringBuilder3.ToString());
				}
			}
			if (modifiedDisplayText.Contains("[currentUnlockedLogsList]"))
			{
				if (__instance.unlockedStoryLogs == null || __instance.unlockedStoryLogs.Count <= 0)
				{
					modifiedDisplayText = modifiedDisplayText.Replace("[currentUnlockedLogsList]", TranslationManager.GetArrayTranslation("Terminal", "DataCorrupted"));
				}
				else
				{
					StringBuilder stringBuilder4 = new StringBuilder();
					for (int m = 0; m < __instance.unlockedStoryLogs.Count; m++)
					{
						stringBuilder4.Append("\n" + __instance.logEntryFiles[__instance.unlockedStoryLogs[m]].creatureName);
						if (__instance.newlyUnlockedStoryLogs.Contains(__instance.unlockedStoryLogs[m]))
						{
							stringBuilder4.Append(" (" + TranslationManager.GetArrayTranslation("Terminal", "NEW") + ")");
						}
					}
					modifiedDisplayText = modifiedDisplayText.Replace("[currentUnlockedLogsList]", stringBuilder4.ToString());
				}
			}
			if (modifiedDisplayText.Contains("[unlockablesSelectionList]"))
			{
				if (__instance.ShipDecorSelection == null || __instance.ShipDecorSelection.Count <= 0)
				{
					modifiedDisplayText = modifiedDisplayText.Replace("[unlockablesSelectionList]", TranslationManager.GetArrayTranslation("Terminal", "NoItems"));
				}
				else
				{
					StringBuilder stringBuilder5 = new StringBuilder();
					for (int n = 0; n < __instance.ShipDecorSelection.Count; n++)
					{
						stringBuilder5.Append($"\n{__instance.ShipDecorSelection[n].creatureName}  //  ${__instance.ShipDecorSelection[n].itemCost}");
					}
					modifiedDisplayText = modifiedDisplayText.Replace("[unlockablesSelectionList]", stringBuilder5.ToString());
				}
			}
			if (modifiedDisplayText.Contains("[storedUnlockablesList]"))
			{
				StringBuilder stringBuilder6 = new StringBuilder();
				bool flag = false;
				for (int num2 = 0; num2 < StartOfRound.Instance.unlockablesList.unlockables.Count; num2++)
				{
					if (StartOfRound.Instance.unlockablesList.unlockables[num2].inStorage)
					{
						flag = true;
						stringBuilder6.Append("\n" + StartOfRound.Instance.unlockablesList.unlockables[num2].unlockableName);
					}
				}
				modifiedDisplayText = (flag ? modifiedDisplayText.Replace("[storedUnlockablesList]", stringBuilder6.ToString()) : modifiedDisplayText.Replace("[storedUnlockablesList]", TranslationManager.GetArrayTranslation("Terminal", "NoStored")));
			}
			if (modifiedDisplayText.Contains("[scanForItems]"))
			{
				Random random = new Random(StartOfRound.Instance.randomMapSeed + 91);
				int num3 = 0;
				int num4 = 0;
				int num5 = 0;
				GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
				for (int num6 = 0; num6 < array.Length; num6++)
				{
					if (array[num6].itemProperties.isScrap && !array[num6].isInShipRoom && !array[num6].isInElevator)
					{
						num5 += array[num6].itemProperties.maxValue - array[num6].itemProperties.minValue;
						num4 += Mathf.Clamp(random.Next(array[num6].itemProperties.minValue, array[num6].itemProperties.maxValue), array[num6].scrapValue - 6 * num6, array[num6].scrapValue + 9 * num6);
						num3++;
					}
				}
				modifiedDisplayText = modifiedDisplayText.Replace("[scanForItems]", string.Format(TranslationManager.GetArrayTranslation("Terminal", "ScanForItems"), num3, num4));
			}
			modifiedDisplayText = ((__instance.numberOfItemsInDropship > 0) ? modifiedDisplayText.Replace("[numberOfItemsOnRoute]", string.Format(TranslationManager.GetArrayTranslation("Terminal", "BoughtItemsInRoute"), __instance.numberOfItemsInDropship)) : modifiedDisplayText.Replace("[numberOfItemsOnRoute]", ""));
			CultureInfo cultureInfo = CultureInfo.GetCultureInfo("ko-KR");
			modifiedDisplayText = modifiedDisplayText.Replace("[currentDay]", DateTime.Now.ToString("dddd", cultureInfo));
			modifiedDisplayText = modifiedDisplayText.Replace("[variableAmount]", __instance.playerDefinedAmount.ToString());
			modifiedDisplayText = modifiedDisplayText.Replace("[playerCredits]", "$" + __instance.groupCredits);
			modifiedDisplayText = modifiedDisplayText.Replace("[totalCost]", "$" + totalCostField.GetValue(__instance).ToString());
			modifiedDisplayText = modifiedDisplayText.Replace("[companyBuyingPercent]", $"{Mathf.RoundToInt(StartOfRound.Instance.companyBuyingRate * 100f)}%");
			if (Object.op_Implicit((Object)(object)__instance.displayingPersistentImage))
			{
				modifiedDisplayText = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + modifiedDisplayText;
			}
			return modifiedDisplayText;
		}

		[HarmonyPostfix]
		[HarmonyPatch("Update")]
		private static void Update_Postfix(Terminal __instance, ref TMP_InputField ___screenText, ref string ___currentText, ref int ___numberOfItemsInDropship)
		{
			if (!vehicleChecked)
			{
				if (GameNetworkManager.Instance.gameVersionNum >= 55)
				{
					TranslateVehicle(__instance);
				}
				foreach (UnlockableItem unlockable in StartOfRound.Instance.unlockablesList.unlockables)
				{
					TranslateUnlockable(unlockable);
				}
				vehicleChecked = true;
			}
			if (___screenText.text.Contains("numberOfItemsOnRoute2"))
			{
				if (___numberOfItemsInDropship != 0)
				{
					___screenText.text = ___screenText.text.Replace("[numberOfItemsOnRoute2]", TranslationManager.GetArrayTranslation("Terminal", "InRoute") + ___numberOfItemsInDropship + TranslationManager.GetArrayTranslation("Terminal", "ItemBought"));
					___currentText = ___screenText.text;
				}
				else
				{
					___screenText.text = ___screenText.text.Replace("[numberOfItemsOnRoute2]", "");
					___currentText = ___screenText.text;
				}
			}
			if (!___screenText.text.Contains("objects outside the ship, totalling at an approximate value"))
			{
				return;
			}
			Random random = new Random(StartOfRound.Instance.randomMapSeed + 91);
			int num = 0;
			int num2 = 0;
			int num3 = 0;
			GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
			for (int i = 0; i < array.Length; i++)
			{
				if (array[i].itemProperties.isScrap && !array[i].isInShipRoom && !array[i].isInElevator)
				{
					num3 += array[i].itemProperties.maxValue - array[i].itemProperties.minValue;
					num2 += Mathf.Clamp(random.Next(array[i].itemProperties.minValue, array[i].itemProperties.maxValue), array[i].scrapValue - 6 * i, array[i].scrapValue + 9 * i);
					num++;
				}
			}
			___screenText.text = "\n\n" + TranslationManager.GetArrayTranslation("Terminal", "ScanForItems") + "\n\n";
			___currentText = ___screenText.text;
		}

		private static void TranslateNode(Terminal instance)
		{
			foreach (TerminalNode specialNode in instance.terminalNodes.specialNodes)
			{
				specialNode.displayText = TranslationManager.GetArrayTranslation("Terminal", ((Object)specialNode).name, 0, partialMatch: false, specialNode.displayText);
			}
		}

		private static void TranslateUnlockable(UnlockableItem unlockableItem)
		{
			if (!((Object)(object)unlockableItem.shopSelectionNode == (Object)null))
			{
				TerminalNode shopSelectionNode = unlockableItem.shopSelectionNode;
				switch (unlockableItem.unlockableName)
				{
				case "Bunkbeds":
					unlockableItem.unlockableName = "벙커침대";
					shopSelectionNode.displayText = "벙커침대\n\n";
					shopSelectionNode.creatureName = "벙커침대";
					break;
				case "File Cabinet":
					unlockableItem.unlockableName = "파일 캐비닛";
					shopSelectionNode.displayText = "파일 캐비닛\n\n";
					shopSelectionNode.creatureName = "파일 캐비닛";
					break;
				case "Cupboard":
					unlockableItem.unlockableName = "수납장";
					shopSelectionNode.displayText = "수납장\n\n";
					shopSelectionNode.creatureName = "수납장";
					break;
				case "Teleporter":
					unlockableItem.unlockableName = "순간이동기";
					shopSelectionNode.displayText = "순간이동기를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
					shopSelectionNode.creatureName = "순간이동기";
					break;
				case "Television":
					unlockableItem.unlockableName = "텔레비전";
					shopSelectionNode.displayText = "텔레비전을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
					shopSelectionNode.creatureName = "텔레비전";
					break;
				case "Toilet":
					unlockableItem.unlockableName = "변기";
					shopSelectionNode.displayText = "변기를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
					shopSelectionNode.creatureName = "변기";
					break;
				case "Shower":
					unlockableItem.unlockableName = "샤워 부스";
					shopSelectionNode.displayText = "샤워 부스를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "샤워 부스";
					break;
				case "Record player":
					unlockableItem.unlockableName = "레코드 플레이어";
					shopSelectionNode.displayText = "레코드 플레이어를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "레코드";
					break;
				case "Table":
					unlockableItem.unlockableName = "테이블";
					shopSelectionNode.displayText = "테이블을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "테이블";
					break;
				case "Romantic table":
					unlockableItem.unlockableName = "로맨틱한 테이블";
					shopSelectionNode.displayText = "로맨틱한 테이블을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "로맨틱한 테이블";
					break;
				case "Sofa chair":
					unlockableItem.unlockableName = "소파 의자";
					shopSelectionNode.displayText = "소파 의자를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "소파 의자";
					break;
				case "Microwave":
					unlockableItem.unlockableName = "전자레인지";
					shopSelectionNode.displayText = "전자레인지를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "전자레인지";
					break;
				case "Fridge":
					unlockableItem.unlockableName = "냉장고";
					shopSelectionNode.displayText = "냉장고를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "냉장고";
					break;
				case "Signal translator":
					unlockableItem.unlockableName = "신호 해석기";
					shopSelectionNode.displayText = "신호 해석기를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "신호 해석기";
					break;
				case "Loud horn":
					unlockableItem.unlockableName = "시끄러운 경적";
					shopSelectionNode.displayText = "시끄러운 경적을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "시끄러운 경적";
					break;
				case "Inverse Teleporter":
					unlockableItem.unlockableName = "역방향 순간이동기";
					shopSelectionNode.displayText = "역방향 순간이동기를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "역방향 순간이동기";
					break;
				case "JackOLantern":
					unlockableItem.unlockableName = "잭오랜턴";
					shopSelectionNode.displayText = "잭오랜턴을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "잭오랜턴";
					break;
				case "Welcome mat":
					unlockableItem.unlockableName = "웰컴 매트";
					shopSelectionNode.displayText = "웰컴 매트를 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "웰컴 매트";
					break;
				case "Goldfish":
					unlockableItem.unlockableName = "금붕어";
					shopSelectionNode.displayText = "금붕어 어항을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "금붕어";
					break;
				case "Plushie pajama man":
					unlockableItem.unlockableName = "인형 파자마 맨";
					shopSelectionNode.displayText = "인형 파자마 맨을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "인형 파자마 맨";
					break;
				case "Disco Ball":
					unlockableItem.unlockableName = "디스코 볼";
					shopSelectionNode.displayText = "디스코 볼을 주문하려고 합니다. \\n아이템의 총 가격: [totalCost].\\n\\n\" + confirmString.ToUpper() + \" 또는 \" + denyString.ToUpper() + \"을(를) 입력하세요.\\n\\n\n\n";
					shopSelectionNode.creatureName = "디스코 볼";
					break;
				}
			}
		}

		private static void TranslateKeyword(TerminalNodesList terminalNodes, List<TerminalNode> ___enemyFiles)
		{
			if (___enemyFiles != null)
			{
				foreach (TerminalNode ___enemyFile in ___enemyFiles)
				{
					if (!((Object)(object)___enemyFile == (Object)null))
					{
						if (!Utility.IsNullOrWhiteSpace(TranslationManager.GetArrayTranslation("Terminal", ((Object)___enemyFile).name)))
						{
							___enemyFile.creatureName = TranslationManager.GetArrayTranslation("Terminal", ((Object)___enemyFile).name);
						}
						if (!Utility.IsNullOrWhiteSpace(TranslationManager.GetArrayTranslation("Terminal", ((Object)___enemyFile).name, 1)))
						{
							___enemyFile.displayText = TranslationManager.GetArrayTranslation("Terminal", ((Object)___enemyFile).name, 1);
						}
					}
				}
			}
			if (!((Object)(object)terminalNodes != (Object)null) || terminalNodes.allKeywords == null)
			{
				return;
			}
			TerminalKeyword[] allKeywords = terminalNodes.allKeywords;
			foreach (TerminalKeyword val in allKeywords)
			{
				if (((Object)val).name.Contains("LogFile"))
				{
					val.word = TranslationManager.GetArrayTranslation("Sigurd", ((Object)val).name, 0, partialMatch: false, val.word);
					CompatibleNoun[] compatibleNouns = val.defaultVerb.compatibleNouns;
					foreach (CompatibleNoun val2 in compatibleNouns)
					{
						val2.result.creatureName = TranslationManager.GetArrayTranslation("Sigurd", ((Object)val2.noun).name, 1, partialMatch: false, val2.result.creatureName);
						val2.result.displayText = TranslationManager.GetArrayTranslation("Sigurd", ((Object)val2.noun).name, 2, partialMatch: false, val2.result.displayText);
					}
				}
				switch (val.word)
				{
				case "buy":
				{
					CompatibleNoun[] compatibleNouns2 = val.compatibleNouns;
					foreach (CompatibleNoun val3 in compatibleNouns2)
					{
						switch (((Object)val3.result).name)
						{
						case "buyProFlashlight1":
							val3.result.displayText = "프로 손전등을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 프로 손전등을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							val3.result.terminalOptions[0].noun.word = confirmString;
							val3.result.terminalOptions[1].result.displayText = "주문을 취소했습니다.\n\n";
							val3.result.terminalOptions[1].noun.word = denyString;
							break;
						case "buyFlash":
							val3.result.displayText = "손전등을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 손전등을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyLockpickers":
							val3.result.displayText = "자물쇠 따개를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 자물쇠 따개를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyBoombox":
							val3.result.displayText = "붐박스를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 붐박스를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyExtensLadder":
							val3.result.displayText = "연장형 사다리를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 연장형 사다리를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyJetpack":
							val3.result.displayText = "제트팩을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 제트팩을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyRadarBooster":
							val3.result.displayText = "레이더 부스터를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 레이더 부스터를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyShovel":
							val3.result.displayText = "철제 삽을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 철제 삽을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buySpraypaint":
							val3.result.displayText = "스프레이 페인트를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 스프레이 페인트를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyStunGrenade":
							val3.result.displayText = "기절 수류탄을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 기절 수류탄을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyTZP":
							val3.result.displayText = "TZP-흡입제를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 TZP-흡입제를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyWalkieTalkie":
							val3.result.displayText = "무전기를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 무전기를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyZapGun":
							val3.result.displayText = "잽건을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 잽건을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyWeedkiller":
							val3.result.displayText = "제초제를 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 제초제를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyBeltBag":
							val3.result.displayText = "전술 벨트 배낭을 주문하려고 합니다. 수량: [variableAmount]. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "[variableAmount]개의 전술 벨트 배낭을 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n우리의 계약자는 작업 중에도 빠른 무료 배송 혜택을 누릴 수 있습니다! 구매한 모든 상품은 1시간마다 대략적인 위치에 도착합니다.\n\n\n";
							break;
						case "buyCruiser":
							val3.result.displayText = "컴퍼니 크루저를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "컴퍼니 크루저를 주문했습니다. 당신의 현재 소지금은 [playerCredits]입니다.\n\n당사는 이 제품의 품질을 매우 확신하며, 보증이 제공됩니다! 크루저를 분실하거나 파손한 경우, 한 번 무료로 교체할 수 있습니다. 차량을 운반하는 동안에는 아이템을 구매할 수 없습니다.\n\n";
							break;
						case "CozyLightsBuy1":
							val3.result.creatureName = "아늑한 조명";
							val3.result.displayText = "아늑한 조명을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "아늑한 조명을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n전등 스위치를 사용해 아늑한 조명을 활성화하세요.\n\n";
							break;
						case "GreenSuitBuy1":
							val3.result.creatureName = "초록색 슈트";
							val3.result.displayText = "초록색 슈트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "초록색 슈트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n\n";
							break;
						case "HazardSuitBuy1":
							val3.result.creatureName = "방호복 슈트";
							val3.result.displayText = "방호복 슈트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "방호복 슈트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n\n";
							break;
						case "LoudHornBuy1":
							val3.result.creatureName = "시끄러운 경적";
							val3.result.displayText = "시끄러운 경적을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "시끄러운 경적을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n코드를 길게 당겨 시끄러운 경적을 활성화합니다.\n\n";
							break;
						case "PajamaSuitBuy1":
							val3.result.creatureName = "파자마 슈트";
							val3.result.displayText = "파자마 슈트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "파자마 슈트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n\n";
							break;
						case "PurpleSuitBuy1":
							val3.result.creatureName = "보라색 슈트";
							val3.result.displayText = "보라색 슈트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "보라색 슈트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n\n";
							break;
						case "RomTableBuy1":
							val3.result.creatureName = "로맨틱한 테이블";
							val3.result.displayText = "로맨틱한 테이블을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "로맨틱한 테이블을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "SofaChairBuy":
							val3.result.creatureName = "소파 의자";
							val3.result.displayText = "소파 의자를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "소파 의자를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n";
							break;
						case "MicrowaveBuy":
							val3.result.creatureName = "전자레인지";
							val3.result.displayText = "전자레인지를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "전자레인지를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n";
							break;
						case "FridgeBuy":
							val3.result.creatureName = "냉장고";
							val3.result.displayText = "냉장고를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "냉장고를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n";
							break;
						case "ElectricChairBuy":
							val3.result.creatureName = "전기 의자";
							val3.result.displayText = "전기 의자를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "전기 의자를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n";
							break;
						case "DoghouseBuy":
							val3.result.creatureName = "개집";
							val3.result.displayText = "개집을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "개집을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n";
							break;
						case "ClassicPaintingBuy":
							val3.result.creatureName = "고전적인 그림";
							val3.result.displayText = "고전적인 그림을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "고전적인 그림을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n";
							break;
						case "ShowerBuy1":
							val3.result.creatureName = "샤워 부스";
							val3.result.displayText = "샤워 부스를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "샤워 부스를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "TableBuy1":
							val3.result.creatureName = "테이블";
							val3.result.displayText = "테이블을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "테이블을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "TeleporterBuy1":
							val3.result.creatureName = "순간이동기";
							val3.result.displayText = "순간이동기를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "순간이동기를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n버튼을 눌러 순간이동기를 활성화합니다. 현재 함선의 레이더에 모니터링 중인 사람을 순간이동시킵니다. 순간이동기를 통해 보유한 아이템은 보관할 수 없습니다. 재충전하는 데 약 10초가 걸립니다.\n\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "InverseTeleporterBuy":
							val3.result.creatureName = "역방향 순간이동기";
							val3.result.displayText = "역방향 순간이동기를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "역방향 순간이동기를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n버튼을 누르고 역방향 순간이동기가 활성화되는 동안 위에 올라가세요.\n\n";
							break;
						case "TelevisionBuy1":
							val3.result.creatureName = "텔레비전";
							val3.result.displayText = "텔레비전을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "텔레비전을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "ToiletBuy1":
							val3.result.creatureName = "변기";
							val3.result.displayText = "변기를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "변기를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "WelcomeMatBuy":
							val3.result.creatureName = "웰컴 매트";
							val3.result.displayText = "웰컴 매트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "웰컴 매트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "SignalTranslatorBuy":
							val3.result.creatureName = "신호 해석기";
							val3.result.displayText = "신호 해석기를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "신호 해석기를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n\n신호 해석기는 'transmit' 명령 뒤에 10글자 미만의 메시지를 입력해서 사용할 수 있습니다.\n\n";
							break;
						case "FishBowlBuy":
							val3.result.creatureName = "금붕어";
							val3.result.displayText = "금붕어 어항을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "금붕어 어항을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "DiscoBallBuy":
							val3.result.creatureName = "디스코 볼";
							val3.result.displayText = "디스코 볼을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "디스코 볼을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n전등 스위치를 사용해 디스코를 시작합니다.\n\n";
							break;
						case "RecordPlayerBuy":
							val3.result.creatureName = "레코드 플레이어";
							val3.result.displayText = "레코드 플레이어를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "레코드 플레이어를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "JackOLanternBuy":
							val3.result.creatureName = "잭오랜턴";
							val3.result.displayText = "잭오랜턴을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "잭오랜턴을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						case "BunnySuitBuy":
							val3.result.creatureName = "토끼 슈트";
							val3.result.displayText = "토끼 슈트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "토끼 슈트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n\n";
							break;
						case "BeeSuitBuy":
							val3.result.creatureName = "꿀벌 슈트";
							val3.result.displayText = "꿀벌 슈트를 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "꿀벌 슈트를 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n\n";
							break;
						case "PlushiePajamaManBuy":
							val3.result.creatureName = "인형 파자마 맨";
							val3.result.displayText = "인형 파자마 맨을 주문하려고 합니다. \n아이템의 총 가격: [totalCost].\n\n" + confirmString.ToUpper() + " 또는 " + denyString.ToUpper() + "을(를) 입력하세요.\n\n";
							val3.result.terminalOptions[0].result.displayText = "인형 파자마 맨을 주문했습니다! 당신의 현재 소지금은 [playerCredits]입니다.\n함선 안의 물체를 재배치하려면 [B]를 누르세요. 배치를 확정하려면 [V]를 누르세요.\n\n";
							break;
						}
					}
					break;
				}
				case "info":
				{
					CompatibleNoun[] compatibleNouns3 = val.compatibleNouns;
					foreach (CompatibleNoun val4 in compatibleNouns3)
					{
						switch (((Object)val4.result).name)
						{
						case "FlashlightInfo":
							val4.result.displayText = "\n길어진 배터리 수명과 더욱 밝아진 전구 덕분에 동료들이 더 이상 어둠 속에 헤매지 않아도 됩니다!\n\n";
							break;
						case "MapperInfo":
							val4.result.displayText = "\n빛 감지 및 거리 측정 기능을 사용하여 주변 환경을 한눈에 볼 수 있는 가장 진보된 지도 장치입니다.\n\n";
							break;
						case "BBbulbInfo":
							val4.result.displayText = "\n가성비 좋은 광원입니다. 심지어 방수까지 됩니다!\n\n";
							break;
						case "ShovelInfo":
							val4.result.displayText = "\n자기 방어를 위해!\n\n";
							break;
						case "ZapGunInfo":
							val4.result.displayText = "\n80,000 볼트 이상을 보낼 수 있는 가장 특화된 자기 보호 장비!\n\n최대한 오래 표적을 유지하려면 총을 좌우로 당겨 광선을 직선으로 유지해야 합니다. 전류가 흐르는 동안에만 기절시킬 수 있습니다.\n\n";
							break;
						case "AutopickerInfo":
							val4.result.displayText = "\n자물쇠 따개는 업무 효율을 높일 수 있는 무한한 잠재력을 열어줍니다. 독점 AI 소프트웨어로 구동되며, 잠긴 문을 열 수 있도록 도와줍니다.\n\n";
							break;
						case "WalkieTalkieInfo":
							val4.result.displayText = "\n연락을 유지하는 데 유용합니다! 무전기가 인벤토리에 있으면 다른 플레이어의 목소리를 들을 수 있습니다. 음성을 전송하려면 손에 든 상태로 버튼을 눌러야 합니다.\n\n";
							break;
						case "SurvivalKitInfo":
							val4.result.displayText = "\n생존 키트에는 이러한 필수품이 편리한 패키지에 포함되어 있습니다! :\n\n* 손전등 x4\n* 무전기 x4\n* 철제 삽 x2";
							break;
						case "BoomboxInfo":
							val4.result.displayText = "\n이 흥겨운 음악은 팀원들의 사기를 복돋우는 데 아주 좋을 것입니다!\n\n";
							break;
						case "JetpackInfo":
							val4.result.displayText = "\n이 장비를 이용해 어디든 갈 수 있습니다! 책임감 있게 사용하세요!\n\n";
							break;
						case "TZPChemicalInfo":
							val4.result.displayText = "\n이 안전하고 합법적인 약을 투여하면 업무 수행에 큰 도움이 됩니다! 무거운 물건을 들고 먼 거리를 이동하는 능력이 누구에게도 뒤쳐지지 않을 것입니다! 경고: TZP 가스는 장시간 노출 시 뇌에 영향을 미칠 수 있습니다. 용기와 함께 제공된 사용 설명서를 따르십시오.\n나눠주는 걸 잊지 마세요!\n\n";
							break;
						case "ExtensionLadderInfo":
							val4.result.displayText = "\n연장형 사다리는 9미터까지 올라갈 수 있습니다! 이 사다리를 이용해 절벽을 오르고 별을 향해 손을 뻗어 보세요! 배터리를 절약하기 위해 연장형 사다리는 18초 후에 자동으로 수납됩니다.\n\n";
							break;
						case "RadarBoosterInfo":
							val4.result.displayText = "\n레이더 부스터는 다양한 용도로 사용할 수 있습니다!\n\n레이더 부스터의 이름 앞에 \"SWITCH\" 명령어를 입력하여 메인 모니터에서 레이더 부스터를 확인합니다. 활성화되어 있어야만 합니다.\n\n레이더 부스터의 이름 앞에 \"PING\" 명령어를 입력하여 장치에서 특수한 소리를 재생합니다.\n\n";
							break;
						case "WeedKillerInfo":
							val4.result.displayText = "성가신 잡초를 처리하세요! 잡초의 뿌리를 바라보고 방아쇠를 반복해서 누르기만 하면 됩니다!";
							break;
						case "BeltBagInfo":
							val4.result.displayText = "우리 회사의 전술 벨트 배낭은 모든 것을 가지고 다니고 싶은 분들을 위한 필수품입니다! 한 번에 15개의 유틸리티 아이템을 넣을 수 있습니다. 다시는 쓸모없다고 느낄 일이 없을 겁니다!\n\n[Q]를 눌러 가방에 아이템을 보관한 다음, 클릭하여 내용물을 확인하고 아이템을 드래그하면 됩니다. 가방을 허리에 착용한 상태에서는 다른 플레이어도 배낭을 사용할 수 있습니다.\n\n";
							break;
						case "CruiserInfo":
							val4.result.displayText = "컴퍼니 크루저는 필요한 만큼 많은 물품, 심지어 동료 직원까지 운반할 수 있는 배달 트럭입니다! 컴퍼니 크루저를 구매하시면 무상 보증이 제공됩니다. 당사는 내구성과 유용성에 대한 자신감으로 가득하기 때문이죠!\n\n지침서가 함께 제공되므로 사용법을 꼭 읽어보시길 바랍니다.";
							break;
						case "LoudHornInfo":
							val4.result.displayText = "\n무전기 없이도 모든 팀원과 원거리에서 소통할 수 있습니다! 경적은 어디서나 들을 수 있습니다. 하지만 무슨 뜻일까요? 그건 당신에게 달려 있습니다!\n\n";
							break;
						case "TeleporterInfo":
							val4.result.displayText = "버튼을 눌러 순간이동기를 활성화합니다. 현재 함선의 레이더에 모니터링 중인 사람을 순간이동시킵니다. 순간이동기를 통해 보유한 아이템은 보관할 수 없습니다. 재충전하는 데 약 10초가 걸립니다.\n\n";
							break;
						case "InverseTeleporterInfo":
							val4.result.displayText = "\n역방향 순간이동기는 순간이동기의 변형으로, 함선 외부의 임의 위치로 순간이동합니다. 모든 아이템은 이동 전에 순간이동기 위에 떨어집니다. 역방향 순간이동기는 모든 플레이어가 한 번에 사용할 수 있으며 재사용 대기시간은 3.5분입니다.\n\n면책 조항: 역방향 순간이동기는 사용자를 밖으로만 이동시킬 수 있고 안으로 이동시킬 수 없으며, 갇힐 수 있습니다. 회사는 양자 얽힘 및 불운으로 인한 부상이나 머리와 팔다리의 교체에 대해 책임을 지지 않습니다.\n\n";
							break;
						case "SignalTranslatorInfo":
							val4.result.displayText = "\n'transmit' 명령을 사용하여 모든 팀원에게 메시지를 전송합니다. 메시지는 10자 이내여야 합니다.\n\n";
							break;
						case "CompanyBuildingInfo":
							val4.result.displayText = "회사가 귀하의 상품을 [companyBuyingPercent]에 매입하고 있습니다. \n\n업무 중에 수집한 귀중한 폐품을 여기로 가져가세요. 판매 비율은 매시간 업데이트되며 며칠에 걸쳐 변동됩니다. \n\n";
							break;
						case "ExpInfo":
							val4.result.displayText = "41-익스페리멘테이션\n\n----------------------\n\n조건: 건조하며, 거주 가능성이 낮습니다. 산업 인공물로 인해 악화되었습니다.\n\n역사: 거대 기체 행성인 빅 그린과 가까이 있기 때문에 꽤 오랫동안 발견되지 않았습니다. 그러나 비밀리에 사용되어 온 것으로 보입니다.\n\n동물군: 알 수 없음\n\n";
							break;
						case "AssInfo":
							val4.result.displayText = "220-어슈어런스\n----------------------\n\n조건: 쌍둥이 달인