Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Mod Hotkeys v1.0.0
ModHotkeys.dll
Decompiled 8 hours ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Utilities; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ModHotkeys")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ModHotkeys")] [assembly: AssemblyTitle("ModHotkeys")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ModHotkeys { internal static class Boutons { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Transform, bool> <>9__3_0; public static UnityAction <>9__5_0; public static Predicate<Entry> <>9__5_1; public static Func<Transform, bool> <>9__6_0; public static Func<Transform, Button> <>9__6_1; public static Func<Button, bool> <>9__6_2; internal bool <Accueil>b__3_0(Transform t) { return ((Object)t).name == "MenuEntries"; } internal void <Assurer>b__5_0() { Panneau.Ouvrir((Object)(object)Menu.instance != (Object)null && Menu.IsVisible()); } internal bool <Assurer>b__5_1(Entry x) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Invalid comparison between Unknown and I4 if (x != null) { if ((int)x.eventID != 4) { return (int)x.eventID == 15; } return true; } return false; } internal bool <Chainer>b__6_0(Transform c) { return ((Component)c).gameObject.activeSelf; } internal Button <Chainer>b__6_1(Transform c) { return ((Component)c).GetComponent<Button>(); } internal bool <Chainer>b__6_2(Button b) { if ((Object)(object)b != (Object)null) { return ((Selectable)b).interactable; } return false; } } private const string Nom = "LaivyModHotkeys"; private static readonly FieldRef<FejdStartup, Button[]> BoutonsAccueil = AccessTools.FieldRefAccess<FejdStartup, Button[]>("m_menuButtons"); internal static void Pause() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown Menu instance = Menu.instance; if (!((Object)(object)instance == (Object)null) && !((Object)(object)instance.m_settingsButton == (Object)null)) { Transform parent = ((Component)instance.m_settingsButton).transform.parent; Assurer(parent, instance.m_settingsButton).SetActive(Plugin.PauseMenuButton.Value); Chainer(parent); LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)parent); } } internal static void Accueil() { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected O, but got Unknown FejdStartup instance = FejdStartup.instance; if (!((Object)(object)instance == (Object)null) && !((Object)(object)instance.m_menuList == (Object)null)) { Transform val = instance.m_menuList.transform.Find("MenuEntries") ?? ((IEnumerable<Transform>)instance.m_menuList.GetComponentsInChildren<Transform>(true)).FirstOrDefault((Func<Transform, bool>)((Transform t) => ((Object)t).name == "MenuEntries")); Button val2 = (((Object)(object)val != (Object)null) ? Parametres(val) : null); if (!((Object)(object)val2 == (Object)null)) { Assurer(val, val2).SetActive(Plugin.MainMenuButton.Value); BoutonsAccueil.Invoke(instance) = instance.m_menuList.GetComponentsInChildren<Button>(false); LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)val); } } } private static Button Parametres(Transform entrees) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown Transform val = entrees.Find("Settings"); if ((Object)(object)val == (Object)null) { foreach (Transform entree in entrees) { Transform val2 = entree; if (((Object)val2).name.IndexOf("Settings", StringComparison.OrdinalIgnoreCase) >= 0 && ((Object)val2).name != "ModdedWolfsConfigs" && ((Object)val2).name != "LaivyModHotkeys") { val = val2; break; } } } if (!((Object)(object)val != (Object)null)) { return null; } return ((Component)val).GetComponent<Button>(); } private static GameObject Assurer(Transform parent, Button modele) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown Transform val = parent.Find("LaivyModHotkeys"); GameObject val2; if ((Object)(object)val != (Object)null) { val2 = ((Component)val).gameObject; } else { val2 = Object.Instantiate<GameObject>(((Component)modele).gameObject, parent); ((Object)val2).name = "LaivyModHotkeys"; Localize[] componentsInChildren = val2.GetComponentsInChildren<Localize>(true); for (int i = 0; i < componentsInChildren.Length; i++) { Object.Destroy((Object)(object)componentsInChildren[i]); } Button component = val2.GetComponent<Button>(); component.onClick = new ButtonClickedEvent(); ButtonClickedEvent onClick = component.onClick; object obj = <>c.<>9__5_0; if (obj == null) { UnityAction val3 = delegate { Panneau.Ouvrir((Object)(object)Menu.instance != (Object)null && Menu.IsVisible()); }; <>c.<>9__5_0 = val3; obj = (object)val3; } ((UnityEvent)onClick).AddListener((UnityAction)obj); EventTrigger[] componentsInChildren2 = val2.GetComponentsInChildren<EventTrigger>(true); for (int i = 0; i < componentsInChildren2.Length; i++) { componentsInChildren2[i].triggers?.RemoveAll((Entry x) => x != null && ((int)x.eventID == 4 || (int)x.eventID == 15)); } } Transform val4 = parent.Find("ModdedWolfsConfigs"); if ((Object)(object)val4 == (Object)null || !((Component)val4).gameObject.activeSelf) { val4 = ((Component)modele).transform; } int num = val4.GetSiblingIndex() + ((val2.transform.GetSiblingIndex() >= val4.GetSiblingIndex()) ? 1 : 0); if (val2.transform.GetSiblingIndex() != num) { val2.transform.SetSiblingIndex(num); } string text = Traductions.Texte("titre"); TMP_Text[] componentsInChildren3 = val2.GetComponentsInChildren<TMP_Text>(true); for (int i = 0; i < componentsInChildren3.Length; i++) { componentsInChildren3[i].text = text; } Text[] componentsInChildren4 = val2.GetComponentsInChildren<Text>(true); for (int i = 0; i < componentsInChildren4.Length; i++) { componentsInChildren4[i].text = text; } return val2; } private static void Chainer(Transform parent) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) List<Button> list = (from Transform c in (IEnumerable)parent where ((Component)c).gameObject.activeSelf select ((Component)c).GetComponent<Button>() into b where (Object)(object)b != (Object)null && ((Selectable)b).interactable select b).ToList(); for (int num = 0; num < list.Count; num++) { Navigation navigation = ((Selectable)list[num]).navigation; ((Navigation)(ref navigation)).mode = (Mode)4; ((Navigation)(ref navigation)).selectOnUp = (Selectable)(object)((num > 0) ? list[num - 1] : null); ((Navigation)(ref navigation)).selectOnDown = (Selectable)(object)((num < list.Count - 1) ? list[num + 1] : null); ((Selectable)list[num]).navigation = navigation; } } } [HarmonyPatch] [HarmonyAfter(new string[] { "ModdedWolf.ModConfigs" })] internal static class MenuPause_Patch { private static IEnumerable<MethodBase> TargetMethods() { yield return AccessTools.Method(typeof(Menu), "Start", (Type[])null, (Type[])null); yield return AccessTools.Method(typeof(Menu), "UpdateNavigation", (Type[])null, (Type[])null); } private static void Postfix() { Boutons.Pause(); } } [HarmonyPatch] [HarmonyAfter(new string[] { "ModdedWolf.ModConfigs" })] internal static class MenuAccueil_Patch { private static IEnumerable<MethodBase> TargetMethods() { yield return AccessTools.Method(typeof(FejdStartup), "Start", (Type[])null, (Type[])null); yield return AccessTools.Method(typeof(FejdStartup), "SetupGui", (Type[])null, (Type[])null); } private static void Postfix() { Boutons.Accueil(); } } [HarmonyPatch(typeof(Menu), "Update")] internal static class MenuUpdate_Patch { private static bool Prefix() { return !Panneau.Bloque; } } [HarmonyPatch(typeof(TextInput), "IsVisible")] internal static class SaisieTexte_Patch { private static void Postfix(ref bool __result) { __result |= Panneau.Bloque; } } [HarmonyPatch] internal static class Touches_Patch { private static IEnumerable<MethodBase> TargetMethods() { yield return AccessTools.Method(typeof(ZInput), "GetButtonDown", new Type[1] { typeof(string) }, (Type[])null); yield return AccessTools.Method(typeof(ZInput), "GetButton", new Type[1] { typeof(string) }, (Type[])null); yield return AccessTools.Method(typeof(ZInput), "GetButtonUp", new Type[1] { typeof(string) }, (Type[])null); yield return AccessTools.Method(typeof(ZInput), "GetKeyDown", new Type[2] { typeof(KeyCode), typeof(bool) }, (Type[])null); yield return AccessTools.Method(typeof(ZInput), "GetKey", new Type[2] { typeof(KeyCode), typeof(bool) }, (Type[])null); } private static void Postfix(ref bool __result) { if (__result && Panneau.Bloque) { __result = false; } } } internal class Panneau : MonoBehaviour { private static bool depuisMenu; private static int fermeA = -10; private static Panneau instance; private List<Touche> touches = new List<Touche>(); private Dictionary<KeyCode, string> duJeu = new Dictionary<KeyCode, string>(); private Dictionary<Touche, string> conflits = new Dictionary<Touche, string>(); private Touche enCapture; private int debutCapture; private KeyCode modificateurSeul; private Vector2 defilement; private readonly List<BaseInputModule> modulesCoupes = new List<BaseInputModule>(); private static KeyCode[] candidats; private string stylesLangue; private GUIStyle cadre; private GUIStyle titre; private GUIStyle texte; private GUIStyle petit; private GUIStyle alerte; private GUIStyle entete; private GUIStyle bouton; private GUIStyle boutonCle; private GUIStyle boutonCleAlerte; private GUIStyle ligne; private static readonly Dictionary<string, string> PolicesParLangue = new Dictionary<string, string> { ["Chinese"] = "NotoSansSC-Regular", ["Chinese_Trad"] = "NotoSansSC-Regular", ["Japanese"] = "NotoSansJP-Regular", ["Korean"] = "NotoSansKR-Regular", ["Hindi"] = "NotoSansDevanagari-Regular", ["Thai"] = "NotoSansThai-Regular", ["Georgian"] = "NotoSansGeorgian-Regular", ["Greek"] = "NotoSans-Regular", ["Macedonian"] = "NotoSans-Regular", ["Polish"] = "NotoSans-Regular", ["Czech"] = "NotoSans-Regular", ["Slovak"] = "NotoSans-Regular", ["Turkish"] = "NotoSans-Regular", ["Romanian"] = "NotoSans-Regular", ["Lithuanian"] = "NotoSans-Regular", ["Latvian"] = "NotoSans-Regular", ["Hungarian"] = "NotoSans-Regular", ["Croatian"] = "NotoSans-Regular", ["Serbian"] = "NotoSans-Regular" }; internal static bool Ouvert { get; private set; } internal static bool Bloque { get { if (!Ouvert) { return Time.frameCount <= fermeA + 1; } return true; } } private void Awake() { instance = this; } internal static void Ouvrir(bool menu) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)instance == (Object)null || Ouvert) { return; } Ouvert = true; depuisMenu = menu && (Object)(object)Menu.instance != (Object)null; instance.enCapture = null; instance.defilement = Vector2.zero; instance.Relire(); if (depuisMenu && (Object)(object)Menu.instance.m_menuDialog != (Object)null) { ((Component)Menu.instance.m_menuDialog).gameObject.SetActive(false); } instance.modulesCoupes.Clear(); if (!((Object)(object)EventSystem.current != (Object)null)) { return; } BaseInputModule[] components = ((Component)EventSystem.current).GetComponents<BaseInputModule>(); foreach (BaseInputModule val in components) { if (((Behaviour)val).enabled) { ((Behaviour)val).enabled = false; instance.modulesCoupes.Add(val); } } } internal static void Fermer() { if (!Ouvert) { return; } Ouvert = false; fermeA = Time.frameCount; if ((Object)(object)instance != (Object)null) { instance.enCapture = null; foreach (BaseInputModule modulesCoupe in instance.modulesCoupes) { if ((Object)(object)modulesCoupe != (Object)null) { ((Behaviour)modulesCoupe).enabled = true; } } instance.modulesCoupes.Clear(); } if (depuisMenu && (Object)(object)Menu.instance != (Object)null && (Object)(object)Menu.instance.m_menuDialog != (Object)null && Menu.IsActive()) { ((Component)Menu.instance.m_menuDialog).gameObject.SetActive(true); } depuisMenu = false; } private void OnDisable() { Fermer(); } private void Relire() { //IL_008d: Unknown result type (might be due to invalid IL or missing references) touches = Touches.Lister().OrderBy<Touche, string>((Touche touche) => touche.Mod, StringComparer.OrdinalIgnoreCase).ToList(); duJeu = (Plugin.GameKeys.Value ? Touches.DuJeu() : new Dictionary<KeyCode, string>()); conflits = new Dictionary<Touche, string>(); foreach (Touche t in touches) { string sig = Touches.Signature(t.Valeur); if (sig != null) { List<string> list = (from o in touches where o != t && Touches.Signature(o.Valeur) == sig && (!(o.Guid == t.Guid) || o.CleLibelle == null || !(o.CleLibelle == t.CleLibelle)) select o.Mod + " — " + o.Libelle).Distinct().ToList(); if (list.Count > 0) { conflits[t] = Traductions.Format("conflit_mod", null, new object[1] { string.Join(" ; ", list) }); } } } } private unsafe void Update() { //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) if (!Ouvert) { return; } if (!depuisMenu && ((Object)(object)Player.m_localPlayer == (Object)null || ((Character)Player.m_localPlayer).IsDead()) && (Object)(object)FejdStartup.instance == (Object)null) { Fermer(); } else if (enCapture == null) { if (UnityInput.Current.GetKeyDown((KeyCode)27)) { Fermer(); } } else { if (Time.frameCount <= debutCapture + 1) { return; } if (UnityInput.Current.GetKeyDown((KeyCode)27) || UnityInput.Current.GetKeyDown((KeyCode)323)) { enCapture = null; return; } if (candidats == null) { candidats = (from KeyCode val in Enum.GetValues(typeof(KeyCode)) where (int)val != 0 && (int)val != 27 && (int)val != 323 && (int)val != 324 && !((object)(*(KeyCode*)(&val))/*cast due to .constrained prefix*/).ToString().StartsWith("Joystick") select val).Distinct().ToArray(); } KeyCode[] array = candidats; foreach (KeyCode k in array) { if (!UnityInput.Current.GetKeyDown(k)) { continue; } if (Touches.EstModificateur(k)) { if ((int)modificateurSeul == 0) { modificateurSeul = k; } continue; } Appliquer(k, Touches.Modificateurs.Where((KeyCode m) => m != k && UnityInput.Current.GetKey(m)).ToArray()); return; } if ((int)modificateurSeul != 0 && UnityInput.Current.GetKeyUp(modificateurSeul)) { Appliquer(modificateurSeul, (KeyCode[])(object)new KeyCode[0]); } } } private void Appliquer(KeyCode principale, KeyCode[] modificateurs) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) Touche touche = enCapture; enCapture = null; modificateurSeul = (KeyCode)0; if (touche != null) { touche.Changer(principale, (KeyCode[])(touche.Raccourci ? ((Array)modificateurs) : ((Array)new KeyCode[0]))); Relire(); } } private void Saisir(Touche t) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) enCapture = t; debutCapture = Time.frameCount; modificateurSeul = (KeyCode)0; } private void OnGUI() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) if (!Ouvert) { return; } Styles(); float num = Mathf.Max(0.6f, (float)Screen.height / 1080f); Matrix4x4 matrix = GUI.matrix; GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(num, num, 1f)); float num2 = Mathf.Min(1040f, (float)Screen.width / num - 40f); float num3 = Mathf.Min(940f, (float)Screen.height / num - 50f); Rect val = default(Rect); ((Rect)(ref val))..ctor(((float)Screen.width / num - num2) / 2f, ((float)Screen.height / num - num3) / 2f, num2, num3); GUI.Box(val, GUIContent.none, cadre); GUILayout.BeginArea(new Rect(((Rect)(ref val)).x + 28f, ((Rect)(ref val)).y + 20f, num2 - 56f, num3 - 44f)); GUILayout.Label(Traductions.Texte("titre"), titre, Array.Empty<GUILayoutOption>()); GUILayout.Label(Traductions.Texte("aide"), petit, Array.Empty<GUILayoutOption>()); GUILayout.Space(6f); float num4 = num2 - 56f - 26f; defilement = GUILayout.BeginScrollView(defilement, false, true, GUIStyle.none, GUI.skin.verticalScrollbar, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandHeight(true) }); GUILayout.BeginVertical((GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(num4) }); if (touches.Count == 0) { GUILayout.Label(Traductions.Texte("vide"), petit, Array.Empty<GUILayoutOption>()); } string text = null; foreach (Touche touch in touches) { if (touch.Mod != text) { GUILayout.Label(touch.Mod, entete, Array.Empty<GUILayoutOption>()); text = touch.Mod; } Ligne(touch, num4); } GUILayout.EndVertical(); GUILayout.EndScrollView(); GUILayout.Space(6f); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label(Traductions.Texte("echap"), petit, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(40f) }); GUILayout.FlexibleSpace(); string text2 = Traductions.Texte("fermer"); if (GUILayout.Button(text2, bouton, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(Largeur(bouton, text2, 170f)), GUILayout.Height(40f) })) { Fermer(); } GUILayout.EndHorizontal(); GUILayout.EndArea(); GUI.matrix = matrix; } private void Ligne(Touche t, float largeurLigne) { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Invalid comparison between Unknown and I4 string text = Traductions.Texte("defaut"); string text2 = Traductions.Texte("retirer"); float num = Largeur(bouton, text, 110f); float num2 = Largeur(bouton, text2, 110f); float num3 = 250f; float num4 = num3 + num + num2 + (float)(3 * bouton.margin.horizontal); float num5 = Mathf.Max(120f, largeurLigne - (float)ligne.padding.horizontal - num4 - 12f); conflits.TryGetValue(t, out var value); KeyboardShortcut valeur = t.Valeur; string text3 = null; if (value == null && (int)((KeyboardShortcut)(ref valeur)).MainKey != 0 && !((KeyboardShortcut)(ref valeur)).Modifiers.Any() && duJeu.TryGetValue(((KeyboardShortcut)(ref valeur)).MainKey, out var value2)) { text3 = Traductions.Format("conflit_jeu", null, new object[1] { value2 }); } GUILayout.BeginHorizontal(ligne, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(largeurLigne), GUILayout.MinHeight(58f) }); GUILayout.BeginVertical((GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(num5) }); GUILayout.Label(t.Libelle, texte, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(num5) }); if (value != null) { GUILayout.Label(value, alerte, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(num5) }); } else if (text3 != null) { GUILayout.Label(text3, petit, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(num5) }); } if (t.Detail != null) { GUILayout.Label(t.Detail, petit, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(num5) }); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); bool flag = enCapture == t; if (GUILayout.Button(flag ? Traductions.Texte("appuyer") : Touches.Nom(valeur), (value != null && !flag) ? boutonCleAlerte : boutonCle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(num3), GUILayout.Height(42f) })) { if (flag) { enCapture = null; } else { Saisir(t); } } bool enabled = GUI.enabled; GUI.enabled = enabled && !t.ParDefaut; if (GUILayout.Button(text, bouton, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(num), GUILayout.Height(42f) })) { t.Defaut(); enCapture = null; Relire(); } GUI.enabled = enabled && (int)((KeyboardShortcut)(ref valeur)).MainKey > 0; if (GUILayout.Button(text2, bouton, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(num2), GUILayout.Height(42f) })) { t.Retirer(); enCapture = null; Relire(); } GUI.enabled = enabled; GUILayout.EndHorizontal(); } private void Styles() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //IL_0116: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Expected O, but got Unknown //IL_015b: Expected O, but got Unknown //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Expected O, but got Unknown //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Expected O, but got Unknown //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Expected O, but got Unknown //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Expected O, but got Unknown //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Expected O, but got Unknown //IL_0250: Expected O, but got Unknown //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Expected O, but got Unknown //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Expected O, but got Unknown //IL_034c: Expected O, but got Unknown //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03ba: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_03e1: Expected O, but got Unknown //IL_03e8: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_040c: Unknown result type (might be due to invalid IL or missing references) //IL_0419: Unknown result type (might be due to invalid IL or missing references) //IL_041f: Unknown result type (might be due to invalid IL or missing references) //IL_0426: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Unknown result type (might be due to invalid IL or missing references) //IL_0452: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Expected O, but got Unknown //IL_0468: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_049b: Unknown result type (might be due to invalid IL or missing references) //IL_04a5: Expected O, but got Unknown //IL_04a5: Unknown result type (might be due to invalid IL or missing references) //IL_04ab: Unknown result type (might be due to invalid IL or missing references) //IL_04b5: Expected O, but got Unknown //IL_04ba: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) string langueDuJeu = Traductions.LangueDuJeu; if (stylesLangue == langueDuJeu && cadre != null) { return; } stylesLangue = langueDuJeu; Font val = Police("AveriaSerifLibre-Bold"); Font font = Police("AveriaSerifLibre-Regular") ?? val; Font font2 = Police("Norsebold") ?? val; FontStyle fontStyle = (FontStyle)0; if (PolicesParLangue.TryGetValue(langueDuJeu, out var value)) { Font val2 = Police(value); if (val2 != null) { val = (font = (font2 = val2)); fontStyle = (FontStyle)1; } } Color val3 = default(Color); ((Color)(ref val3))..ctor(0.86f, 0.69f, 0.3f); Color val4 = default(Color); ((Color)(ref val4))..ctor(1f, 0.86f, 0.52f); Color textColor = default(Color); ((Color)(ref textColor))..ctor(0.93f, 0.89f, 0.8f); Color val5 = default(Color); ((Color)(ref val5))..ctor(1f, 0.55f, 0.2f); GUIStyle val6 = new GUIStyle(); val6.normal.background = Cadre(new Color(0.035f, 0.032f, 0.03f, 0.97f), val3, 3); val6.border = new RectOffset(6, 6, 6, 6); cadre = val6; GUIStyle val7 = new GUIStyle { font = font2, fontSize = 40, fontStyle = fontStyle, alignment = (TextAnchor)4 }; val7.normal.textColor = val3; val7.margin = new RectOffset(0, 0, 0, 6); titre = val7; GUIStyle val8 = new GUIStyle { font = val, fontSize = 20, alignment = (TextAnchor)3 }; val8.normal.textColor = textColor; val8.wordWrap = true; val8.clipping = (TextClipping)1; texte = val8; GUIStyle val9 = new GUIStyle { font = font, fontSize = 16, alignment = (TextAnchor)3 }; val9.normal.textColor = new Color(0.72f, 0.67f, 0.58f); val9.wordWrap = true; val9.clipping = (TextClipping)1; petit = val9; GUIStyle val10 = new GUIStyle(petit) { font = val }; val10.normal.textColor = val5; alerte = val10; GUIStyle val11 = new GUIStyle { font = val, fontSize = 22 }; val11.normal.textColor = val3; val11.margin = new RectOffset(0, 0, 12, 4); val11.padding = new RectOffset(2, 2, 2, 4); entete = val11; GUIStyle val12 = new GUIStyle { font = val, fontSize = 17, alignment = (TextAnchor)4, margin = new RectOffset(4, 4, 4, 4) }; val12.normal.background = Cadre(new Color(0.09f, 0.08f, 0.07f, 1f), new Color(0.5f, 0.4f, 0.18f), 1); val12.normal.textColor = val3; val12.hover.background = Cadre(new Color(0.16f, 0.13f, 0.09f, 1f), val3, 1); val12.hover.textColor = val4; val12.active.background = Cadre(new Color(0.26f, 0.2f, 0.1f, 1f), val4, 1); val12.active.textColor = val4; val12.border = new RectOffset(3, 3, 3, 3); bouton = val12; GUIStyle val13 = new GUIStyle(bouton) { fontSize = 19, clipping = (TextClipping)1 }; val13.normal.background = Cadre(new Color(0.13f, 0.1f, 0.05f, 1f), val3, 2); val13.normal.textColor = val4; val13.hover.background = Cadre(new Color(0.2f, 0.15f, 0.07f, 1f), val4, 2); val13.hover.textColor = Color.white; boutonCle = val13; GUIStyle val14 = new GUIStyle(boutonCle); val14.normal.background = Cadre(new Color(0.16f, 0.08f, 0.03f, 1f), val5, 2); val14.normal.textColor = val5; val14.hover.background = Cadre(new Color(0.22f, 0.1f, 0.04f, 1f), val5, 2); val14.hover.textColor = Color.white; boutonCleAlerte = val14; GUIStyle val15 = new GUIStyle(); val15.normal.background = Uni(new Color(1f, 0.9f, 0.6f, 0.035f)); val15.margin = new RectOffset(0, 0, 2, 2); val15.padding = new RectOffset(10, 6, 4, 4); ligne = val15; } private static Font Police(string nom) { Font val = ((IEnumerable<Font>)Resources.FindObjectsOfTypeAll<Font>()).FirstOrDefault((Func<Font, bool>)((Font p) => ((Object)p).name == nom)); if ((Object)(object)val != (Object)null) { return val; } TMP_FontAsset val2 = ((IEnumerable<TMP_FontAsset>)Resources.FindObjectsOfTypeAll<TMP_FontAsset>()).FirstOrDefault((Func<TMP_FontAsset, bool>)((TMP_FontAsset p) => (Object)(object)p != (Object)null && ((Object)p).name.StartsWith(nom, StringComparison.OrdinalIgnoreCase) && (Object)(object)p.sourceFontFile != (Object)null)); if (!((Object)(object)val2 != (Object)null)) { return null; } return val2.sourceFontFile; } private static float Largeur(GUIStyle style, string texte, float minimum) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_0008: Unknown result type (might be due to invalid IL or missing references) return Mathf.Max(minimum, style.CalcSize(new GUIContent(texte)).x + 24f); } private static Texture2D Uni(Color c) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown Texture2D val = new Texture2D(1, 1) { hideFlags = (HideFlags)61 }; val.SetPixel(0, 0, c); val.Apply(); return val; } private static Texture2D Cadre(Color fond, Color bord, int epaisseur) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(12, 12) { hideFlags = (HideFlags)61, filterMode = (FilterMode)0 }; for (int i = 0; i < 12; i++) { for (int j = 0; j < 12; j++) { val.SetPixel(i, j, (i < epaisseur || j < epaisseur || i >= 12 - epaisseur || j >= 12 - epaisseur) ? bord : fond); } } val.Apply(); return val; } } [BepInPlugin("com.Azura.modhotkeys", "Mod Hotkeys", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string PluginGUID = "com.Azura.modhotkeys"; public const string PluginName = "Mod Hotkeys"; public const string PluginVersion = "1.0.0"; internal static ConfigEntry<KeyboardShortcut> OpenKey; internal static ConfigEntry<bool> PauseMenuButton; internal static ConfigEntry<bool> MainMenuButton; internal static ConfigEntry<bool> GameKeys; private void Awake() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) OpenKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "OpenKey", KeyboardShortcut.Empty, "Key that opens the list of mod hotkeys directly (none by default: the list is in the pause menu)."); PauseMenuButton = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "PauseMenuButton", true, "Show a \"Mod hotkeys\" button in the pause menu (Esc)."); MainMenuButton = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "MainMenuButton", true, "Show a \"Mod hotkeys\" button in the main menu."); GameKeys = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ShowGameKeys", true, "Also tell when a mod key is one of the game's own keys (Use, Inventory, Map...)."); PauseMenuButton.SettingChanged += delegate { Boutons.Pause(); }; MainMenuButton.SettingChanged += delegate { Boutons.Accueil(); }; ((Component)this).gameObject.AddComponent<Panneau>(); new Harmony("com.Azura.modhotkeys").PatchAll(); } private void Update() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (!Panneau.Ouvert) { KeyboardShortcut value = OpenKey.Value; if (((KeyboardShortcut)(ref value)).IsDown() && !Console.IsVisible() && !TextInput.IsVisible() && (!((Object)(object)Chat.instance != (Object)null) || !Chat.instance.HasFocus())) { Panneau.Ouvrir(Menu.IsVisible()); } } } } internal class Touche { public string Mod; public string Guid; public string Cle; public ConfigEntryBase Entree; public string Libelle; public string Detail; public string CleLibelle; public bool Raccourci => Entree.SettingType == typeof(KeyboardShortcut); public KeyboardShortcut Valeur { get { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!Raccourci) { return new KeyboardShortcut((KeyCode)Entree.BoxedValue, Array.Empty<KeyCode>()); } return (KeyboardShortcut)Entree.BoxedValue; } } public bool ParDefaut => object.Equals(Entree.BoxedValue, Entree.DefaultValue); public void Changer(KeyCode principale, KeyCode[] modificateurs) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) Entree.BoxedValue = (Raccourci ? ((object)new KeyboardShortcut(principale, modificateurs)) : ((object)principale)); Sauver(); } public void Defaut() { Entree.BoxedValue = Entree.DefaultValue; Sauver(); } public void Retirer() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) Entree.BoxedValue = (Raccourci ? ((object)KeyboardShortcut.Empty) : ((object)(KeyCode)0)); Sauver(); } private void Sauver() { try { Entree.ConfigFile.Save(); } catch (Exception ex) { Debug.LogWarning((object)("[ModHotkeys] " + Guid + ".cfg non enregistré : " + ex.Message)); } } } internal static class Touches { private static readonly Dictionary<string, string> Libelles = new Dictionary<string, string> { ["com.Azura.modhotkeys|OpenKey"] = "l_ouvrir", ["com.Azura.dvergrlightcontrol|ToggleKey"] = "l_dvergr", ["com.Azura.wisptoggle|ToggleKey"] = "l_wisp", ["com.Azura.slotlock|LockKey"] = "l_slotlock", ["com.Azura.wishbonemute|ToucheBasculement"] = "l_wishbone", ["*|ToucheHurlement"] = "l_hurlement", ["ValheimTelemetry|ChestScanKey"] = "l_scan", ["Memory Cleaner & Benchmark|ShortcutKey"] = "l_memoire", ["Memory Cleaner & Benchmark|OverlayKey"] = "l_overlay", ["Valheim Build Camera|ToggleKey"] = "l_camera", ["Valheim Build Camera|ResetViewKey"] = "l_camera_vue", ["Valheim Build Camera|ReloadAndReportKey"] = "l_camera_recharger", ["potto007.OttoStash|Store Single Item Shortcut"] = "l_otto_un", ["potto007.OttoStash|Store Shortcut"] = "l_otto_tout", ["potto007.OttoStash|Pause Shortcut"] = "l_otto_pause", ["potto007.OttoStash|SearchModifierKeybind"] = "l_otto_chercher", ["potto007.OttoStash|FavoritingModifierKeybind1"] = "l_otto_favori", ["potto007.OttoStash|FavoritingModifierKeybind2"] = "l_otto_favori", ["Azumatt.AzuCraftyBoxes|FillAllModKey"] = "l_crafty_tout", ["Azumatt.AzuCraftyBoxes|Prevent Pulling Logic"] = "l_crafty_couper", ["sighsorry.InventorySlots|Crafting Recipe Grid Zoom Modifier"] = "l_is_zoom", ["sighsorry.InventorySlots|Clear Crafting Favorites Key"] = "l_is_effacer", ["sighsorry.InventorySlots|Hotbar Switch Key"] = "l_is_rangees", ["sighsorry.InventorySlots|Container Restock Key"] = "l_is_remplir", ["sighsorry.InventorySlots|Favorite Modifier Key"] = "l_is_case_favorite", ["sighsorry.InventorySlots|Pinned Tooltip Key"] = "l_is_epingler" }; private static readonly Regex EmplacementRapide = new Regex("^Quick Slot (\\d+) Hotkey$"); internal static readonly KeyCode[] Modificateurs; private static readonly (string action, string jeton)[] ActionsDuJeu; private static Dictionary<Key, KeyCode> versKeyCode; internal static List<Touche> Lister() { List<Touche> list = new List<Touche>(); foreach (PluginInfo value2 in Chainloader.PluginInfos.Values) { BaseUnityPlugin instance = value2.Instance; if ((Object)(object)instance == (Object)null) { continue; } string gUID = value2.Metadata.GUID; try { foreach (ConfigDefinition item in instance.Config.Keys.ToList()) { ConfigEntryBase val = instance.Config[item]; if ((!(val.SettingType != typeof(KeyboardShortcut)) || !(val.SettingType != typeof(KeyCode))) && !Masquee(val)) { Touche touche = new Touche { Mod = value2.Metadata.Name, Guid = gUID, Cle = item.Key, Entree = val }; Match match = EmplacementRapide.Match(item.Key); string value; if (gUID == "sighsorry.InventorySlots" && match.Success) { touche.CleLibelle = "l_is_rapide"; touche.Libelle = Traductions.Format("l_is_rapide", null, new object[1] { int.Parse(match.Groups[1].Value) }); } else if (Libelles.TryGetValue(gUID + "|" + item.Key, out value) || Libelles.TryGetValue(value2.Metadata.Name + "|" + item.Key, out value) || Libelles.TryGetValue("*|" + item.Key, out value)) { touche.CleLibelle = value; touche.Libelle = Traductions.Texte(value); } else { touche.Libelle = Lisible(item.Key); ConfigDescription description = val.Description; touche.Detail = PremierePhrase((description != null) ? description.Description : null); } list.Add(touche); } } } catch (Exception ex) { Debug.LogWarning((object)("[ModHotkeys] Réglages de " + gUID + " illisibles : " + ex.Message)); } } return list; } private static bool Masquee(ConfigEntryBase e) { ConfigDescription description = e.Description; object[] array = ((description != null) ? description.Tags : null) ?? Array.Empty<object>(); foreach (object obj in array) { if (obj != null) { Type type = obj.GetType(); object obj2 = type.GetField("Browsable")?.GetValue(obj) ?? type.GetProperty("Browsable")?.GetValue(obj, null); if (obj2 is bool && !(bool)obj2) { return true; } } } return false; } private static string Lisible(string cle) { if (!cle.Contains(" ")) { return Regex.Replace(cle, "(?<=[a-z0-9])(?=[A-Z])", " "); } return cle; } private static string PremierePhrase(string texte) { if (string.IsNullOrWhiteSpace(texte)) { return null; } texte = Regex.Replace(texte, "\\[(Not )?Synced with Server\\]", "").Trim(); texte = texte.Split('\n')[0].Trim(); int num = texte.IndexOf(". ", StringComparison.Ordinal); if (num > 0) { texte = texte.Substring(0, num + 1); } if (texte.Length <= 150) { return texte; } return texte.Substring(0, 147).TrimEnd() + "…"; } internal static string Nom(KeyboardShortcut r) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) if ((int)((KeyboardShortcut)(ref r)).MainKey == 0) { return Traductions.Texte("sans_touche"); } return string.Join(" + ", ((KeyboardShortcut)(ref r)).Modifiers.Select(NomTouche).Concat(new string[1] { NomTouche(((KeyboardShortcut)(ref r)).MainKey) })); } internal unsafe static string NomTouche(KeyCode k) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Invalid comparison between Unknown and I4 //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Invalid comparison between Unknown and I4 //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Invalid comparison between Unknown and I4 //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Invalid comparison between Unknown and I4 //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Invalid comparison between Unknown and I4 //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected I4, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected I4, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Invalid comparison between Unknown and I4 //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected I4, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Expected I4, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected I4, but got Unknown //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Expected I4, but got Unknown //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected I4, but got Unknown //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Expected I4, but got Unknown if (((int)k >= 97 && (int)k <= 122) || ((int)k >= 282 && (int)k <= 296)) { return ((object)(*(KeyCode*)(&k))/*cast due to .constrained prefix*/).ToString(); } if ((int)k >= 48 && (int)k <= 57) { return (k - 48).ToString(); } if ((int)k >= 256 && (int)k <= 265) { return Traductions.Format("pave_n", null, new object[1] { k - 256 }); } if ((int)k <= 61) { if ((int)k == 13) { return Jeu("$button_return", "Return"); } switch (k - 32) { default: switch (k - 58) { case 1: return ";"; case 0: return ":"; case 3: return "="; } break; case 0: return Jeu("$button_space", "Space"); case 14: return "."; case 12: return ","; case 15: return "/"; case 13: return "-"; case 11: return "+"; case 7: return "'"; case 1: return "!"; case 10: return "*"; case 2: case 3: case 4: case 5: case 6: case 8: case 9: break; } } else { switch (k - 91) { default: switch (k - 266) { case 4: return Traductions.Format("pave_n", null, new object[1] { "+" }); case 3: return Traductions.Format("pave_n", null, new object[1] { "-" }); case 2: return Traductions.Format("pave_n", null, new object[1] { "*" }); case 1: return Traductions.Format("pave_n", null, new object[1] { "/" }); case 0: return Traductions.Format("pave_n", null, new object[1] { "." }); case 5: return Traductions.Format("pave_n", null, new object[1] { Jeu("$button_return", "Return") }); } switch (k - 303) { case 20: return Traductions.Texte("clic_gauche"); case 21: return Traductions.Texte("clic_droit"); case 22: return Traductions.Texte("clic_molette"); case 23: case 24: case 25: case 26: return Traductions.Format("souris_n", null, new object[1] { k - 323 + 1 }); case 1: return Jeu("$button_lshift", "L-Shift"); case 0: return Jeu("$button_rshift", "R-Shift"); case 5: return Jeu("$button_lalt", "L-Alt"); case 4: case 10: return Jeu("$button_ralt", "R-Alt"); case 3: return Jeu("$button_lctrl", "L-Ctrl"); case 2: return Jeu("$button_rctrl", "R-Ctrl"); } break; case 1: return "\\"; case 5: return "`"; case 0: return "["; case 2: return "]"; case 3: case 4: break; } } try { string text = ZInput.KeyCodeToDisplayName(k); if (!string.IsNullOrEmpty(text) && !text.StartsWith("$")) { return text; } } catch { } return ((object)(*(KeyCode*)(&k))/*cast due to .constrained prefix*/).ToString(); } private static string Jeu(string jeton, string anglais) { string text = ((Localization.instance != null) ? Localization.instance.Localize(jeton) : null); if (!string.IsNullOrEmpty(text) && !text.StartsWith("[") && !text.StartsWith("$")) { return text; } return anglais; } internal static bool EstModificateur(KeyCode k) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return Array.IndexOf(Modificateurs, k) >= 0; } internal static string Signature(KeyboardShortcut r) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) if ((int)((KeyboardShortcut)(ref r)).MainKey != 0) { return ((object)((KeyboardShortcut)(ref r)).MainKey/*cast due to .constrained prefix*/).ToString() + "|" + string.Join("+", ((KeyboardShortcut)(ref r)).Modifiers.OrderBy((KeyCode m) => m)); } return null; } internal static Dictionary<KeyCode, string> DuJeu() { //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) Dictionary<KeyCode, string> dictionary = new Dictionary<KeyCode, string>(); if (ZInput.instance == null || Localization.instance == null) { return dictionary; } (string, string)[] actionsDuJeu = ActionsDuJeu; for (int i = 0; i < actionsDuJeu.Length; i++) { var (text, text2) = actionsDuJeu[i]; try { ButtonDef buttonDef = ZInput.instance.GetButtonDef(text); InputAction val = ((buttonDef != null) ? buttonDef.ButtonAction : null); if (val == null) { continue; } string value = ((text2 == null) ? Traductions.Texte("console") : ((text2.Length == 1) ? Traductions.Format("raccourci_n", null, new object[1] { text2 }) : Localization.instance.Localize(text2))); Enumerator<InputBinding> enumerator = val.bindings.GetEnumerator(); try { while (enumerator.MoveNext()) { InputBinding current = enumerator.Current; KeyCode val2 = VersKeyCode(((InputBinding)(ref current)).effectivePath); if ((int)val2 != 0 && !dictionary.ContainsKey(val2)) { dictionary[val2] = value; } } } finally { ((IDisposable)enumerator/*cast due to .constrained prefix*/).Dispose(); } } catch { } } return dictionary; } private unsafe static KeyCode VersKeyCode(string chemin) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) if (string.IsNullOrEmpty(chemin) || !chemin.StartsWith("<Keyboard>", StringComparison.OrdinalIgnoreCase)) { return (KeyCode)0; } InputControl obj = InputSystem.FindControl(chemin); KeyControl val = (KeyControl)(object)((obj is KeyControl) ? obj : null); if (val == null) { return (KeyCode)0; } Key keyCode = val.keyCode; string text = ((object)(*(Key*)(&keyCode))/*cast due to .constrained prefix*/).ToString(); if (text.StartsWith("Digit") && int.TryParse(text.Substring(5), out var result)) { return (KeyCode)(48 + result); } string displayName = ((InputControl)val).displayName; if (!string.IsNullOrEmpty(displayName) && displayName.Length == 1) { char c = char.ToUpperInvariant(displayName[0]); if (c >= 'A' && c <= 'Z') { return (KeyCode)(97 + (c - 65)); } switch (c) { case ',': return (KeyCode)44; case '.': return (KeyCode)46; case ';': return (KeyCode)59; case ':': return (KeyCode)58; case '/': return (KeyCode)47; case '-': return (KeyCode)45; case '=': return (KeyCode)61; case '!': return (KeyCode)33; } } if (versKeyCode == null) { versKeyCode = new Dictionary<Key, KeyCode>(); if (AccessTools.Field(typeof(ZInput), "s_keyCodeToKeyMap")?.GetValue(null) is Dictionary<KeyCode, Key> dictionary) { foreach (KeyValuePair<KeyCode, Key> item in dictionary) { if (!versKeyCode.ContainsKey(item.Value)) { versKeyCode[item.Value] = item.Key; } } } } if (!versKeyCode.TryGetValue(keyCode, out var value)) { return (KeyCode)0; } return value; } static Touches() { KeyCode[] array = new KeyCode[9]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); Modificateurs = (KeyCode[])(object)array; ActionsDuJeu = new(string, string)[30] { ("Use", "$settings_use"), ("Hide", "$settings_hide"), ("Jump", "$settings_jump"), ("Crouch", "$settings_crouch"), ("Run", "$settings_run"), ("ToggleWalk", "$settings_walk"), ("AutoRun", "$settings_autorun"), ("Sit", "$settings_sit"), ("GP", "$settings_gp"), ("Forward", "$settings_forward"), ("Left", "$settings_left"), ("Backward", "$settings_backward"), ("Right", "$settings_right"), ("Inventory", "$settings_inventory"), ("Map", "$settings_map"), ("AutoPickup", "$settings_autopickup"), ("OpenRadial", "$settings_open_radial"), ("OpenEmote", "$settings_open_emote_wheel"), ("Chat", "$settings_chat"), ("Console", null), ("MapZoomOut", "$settings_mapzoom"), ("MapZoomIn", "$settings_mapzoom"), ("Hotbar1", "1"), ("Hotbar2", "2"), ("Hotbar3", "3"), ("Hotbar4", "4"), ("Hotbar5", "5"), ("Hotbar6", "6"), ("Hotbar7", "7"), ("Hotbar8", "8") }; } } internal static class Traductions { internal static readonly string[] Langues = new string[36] { "English", "Swedish", "French", "Italian", "German", "Spanish", "Russian", "Romanian", "Bulgarian", "Macedonian", "Finnish", "Danish", "Norwegian", "Icelandic", "Turkish", "Lithuanian", "Czech", "Hungarian", "Slovak", "Polish", "Dutch", "Portuguese_European", "Portuguese_Brazilian", "Chinese", "Chinese_Trad", "Japanese", "Korean", "Hindi", "Thai", "Abenaki", "Croatian", "Georgian", "Greek", "Serbian", "Ukrainian", "Latvian" }; private static readonly string[] Cultures = new string[36] { "en-US", "sv-SE", "fr-FR", "it-IT", "de-DE", "es-ES", "ru-RU", "ro-RO", "bg-BG", "mk-MK", "fi-FI", "da-DK", "nb-NO", "is-IS", "tr-TR", "lt-LT", "cs-CZ", "hu-HU", "sk-SK", "pl-PL", "nl-NL", "pt-PT", "pt-BR", "zh-CN", "zh-TW", "ja-JP", "ko-KR", "hi-IN", "th-TH", "en-US", "hr-HR", "ka-GE", "el-GR", "sr-Latn-RS", "uk-UA", "lv-LV" }; internal static readonly Dictionary<string, string[]> Textes = new Dictionary<string, string[]> { ["titre"] = new string[36] { "Mod hotkeys", "Moddarnas tangenter", "Touches des mods", "Tasti delle mod", "Tasten der Mods", "Teclas de los mods", "Клавиши модов", "Tastele modurilor", "Клавиши на модовете", "Копчиња на модовите", "Modien näppäimet", "Taster til mods", "Taster for mods", "Lyklar viðbóta", "Mod tuşları", "Modifikacijų klavišai", "Klávesy módů", "Modok billentyűi", "Klávesy módov", "Klawisze modów", "Toetsen van mods", "Teclas dos mods", "Teclas dos mods", "模组按键", "模組按鍵", "MODのキー", "모드 단축키", "म\u0949ड क\u0940 क\u0941\u0902ज\u093fय\u093e\u0901", "ป\u0e38\u0e48มของม\u0e47อด", null, "Tipke modova", "მოდების ღილაკები", "Πλήκτρα των mods", "Tasteri modova", "Клавіші модів", "Modu taustiņi" }, ["aide"] = new string[36] { "Click a key, then press the new one (Shift, Ctrl or Alt for a combination; a mouse button works too). Esc or left click: cancel. In orange: a key used twice.", "Klicka på en tangent och tryck sedan på den nya (Skift, Ctrl eller Alt för en kombination; en musknapp fungerar också). Esc eller vänsterklick: avbryt. Orange: en tangent som används två gånger.", "Clique sur une touche, puis appuie sur la nouvelle (avec Maj, Ctrl ou Alt pour une combinaison ; un bouton de la souris marche aussi). Échap ou clic gauche : annuler. En orange : une touche utilisée deux fois.", "Clicca su un tasto, poi premi quello nuovo (Maiusc, Ctrl o Alt per una combinazione; va bene anche un tasto del mouse). Esc o clic sinistro: annulla. In arancione: un tasto usato due volte.", "Klicke auf eine Taste und drücke dann die neue (Umschalt, Strg oder Alt für eine Kombination; eine Maustaste geht auch). Esc oder Linksklick: abbrechen. Orange: eine doppelt belegte Taste.", "Haz clic en una tecla y pulsa la nueva (Mayús, Ctrl o Alt para una combinación; también sirve un botón del ratón). Esc o clic izquierdo: cancelar. En naranja: una tecla usada dos veces.", "Щёлкните по клавише, затем нажмите новую (Shift, Ctrl или Alt — для сочетания; подойдёт и кнопка мыши). Esc или левый щелчок — отмена. Оранжевым — клавиша, занятая дважды.", "Dă clic pe o tastă, apoi apasă-o pe cea nouă (Shift, Ctrl sau Alt pentru o combinație; merge și un buton al mouse-ului). Esc sau clic stânga: anulează. Cu portocaliu: o tastă folosită de două ori.", "Щракни върху клавиш, после натисни новия (Shift, Ctrl или Alt за комбинация; става и бутон на мишката). Esc или ляв клик: отказ. В оранжево: клавиш, използван два пъти.", "Кликни на копче, па притисни го новото (Shift, Ctrl или Alt за комбинација; може и копче на глувчето). Esc или лев клик: откажи. Во портокалова: копче што се користи двапати.", "Napsauta näppäintä ja paina sitten uutta (Vaihto, Ctrl tai Alt yhdistelmään; myös hiiren painike käy). Esc tai vasen napsautus: peruuta. Oranssi: kahdesti käytetty näppäin.", "Klik på en tast, og tryk så på den nye (Skift, Ctrl eller Alt til en kombination; en museknap virker også). Esc eller venstreklik: annullér. Orange: en tast, der bruges to gange.", "Klikk på en tast, og trykk deretter på den nye (Shift, Ctrl eller Alt for en kombinasjon; en museknapp går også). Esc eller venstreklikk: avbryt. Oransje: en tast som brukes to ganger.", "Smelltu á lykil og ýttu svo á þann nýja (Shift, Ctrl eða Alt fyrir samsetningu; músarhnappur virkar líka). Esc eða vinstri smellur: hætta við. Appelsínugult: lykill sem er notaður tvisvar.", "Bir tuşa tıkla, sonra yenisine bas (birleşim için Shift, Ctrl veya Alt; fare tuşu da olur). Esc veya sol tık: iptal. Turuncu: iki kez kullanılan tuş.", "Spustelėk klavišą, tada paspausk naują (Shift, Ctrl ar Alt – deriniui; tinka ir pelės mygtukas). Esc arba kairysis spustelėjimas: atšaukti. Oranžine spalva – du kartus naudojamas klavišas.", "Klikni na klávesu a pak stiskni novou (Shift, Ctrl nebo Alt pro kombinaci; jde i tlačítko myši). Esc nebo levé kliknutí: zrušit. Oranžově: klávesa použitá dvakrát.", "Kattints egy billentyűre, majd nyomd meg az újat (Shift, Ctrl vagy Alt kombinációhoz; egérgomb is jó). Esc vagy bal kattintás: mégse. Narancssárga: kétszer használt billentyű.", "Klikni na kláves a potom stlač nový (Shift, Ctrl alebo Alt pre kombináciu; ide aj tlačidlo myši). Esc alebo ľavé kliknutie: zrušiť. Oranžovou: kláves použitý dvakrát.", "Kliknij klawisz, a potem naciśnij nowy (Shift, Ctrl lub Alt dla kombinacji; działa też przycisk myszy). Esc lub lewy przycisk: anuluj. Na pomarańczowo: klawisz użyty dwa razy.", "Klik op een toets en druk daarna op de nieuwe (Shift, Ctrl of Alt voor een combinatie; een muisknop kan ook). Esc of linksklik: annuleren. Oranje: een toets die twee keer gebruikt wordt.", "Clica numa tecla e depois prime a nova (Shift, Ctrl ou Alt para uma combinação; também serve um botão do rato). Esc ou clique esquerdo: cancelar. A laranja: uma tecla usada duas vezes.", "Clique em uma tecla e depois pressione a nova (Shift, Ctrl ou Alt para uma combinação; um botão do mouse também serve). Esc ou clique esquerdo: cancelar. Em laranja: uma tecla usada duas vezes.", "点击一个按键,然后按下新的按键(组合键可加 Shift、Ctrl 或 Alt;也可以用鼠标按键)。Esc 或左键单击:取消。橙色:被使用两次的按键。", "點擊一個按鍵,然後按下新的按鍵(組合鍵可加 Shift、Ctrl 或 Alt;也可以用滑鼠按鍵)。Esc 或左鍵點擊:取消。橘色:被使用兩次的按鍵。", "キーをクリックしてから新しいキーを押してください(組み合わせは Shift・Ctrl・Alt と一緒に。マウスボタンも使えます)。Esc または左クリック:キャンセル。オレンジ色:二重に使われているキー。", "키를 클릭한 다음 새 키를 누르세요(조합은 Shift, Ctrl, Alt와 함께, 마우스 버튼도 가능). Esc 또는 왼쪽 클릭: 취소. 주황색: 두 번 쓰인 키.", "क\u093fस\u0940 क\u0941\u0902ज\u0940 पर क\u094dल\u093fक कर\u0947\u0902, फ\u093fर नई क\u0941\u0902ज\u0940 दब\u093eए\u0901 (स\u0902य\u094bजन क\u0947 ल\u093fए Shift, Ctrl य\u093e Alt क\u0947 स\u093eथ; म\u093eउस बटन भ\u0940 चल\u0947ग\u093e)। Esc य\u093e ब\u093eय\u093e\u0901 क\u094dल\u093fक: रद\u094dद कर\u0947\u0902। न\u093eर\u0902ग\u0940: द\u094b ब\u093eर इस\u094dत\u0947म\u093eल ह\u0941ई क\u0941\u0902ज\u0940।", "คล\u0e34กท\u0e35\u0e48ป\u0e38\u0e48ม แล\u0e49วกดป\u0e38\u0e48มใหม\u0e48 (กดพร\u0e49อม Shift, Ctrl หร\u0e37อ Alt เพ\u0e37\u0e48อใช\u0e49ป\u0e38\u0e48มผสม หร\u0e37อใช\u0e49ป\u0e38\u0e48มเมาส\u0e4cก\u0e47ได\u0e49) Esc หร\u0e37อคล\u0e34กซ\u0e49าย: ยกเล\u0e34ก ส\u0e35ส\u0e49ม: ป\u0e38\u0e48มท\u0e35\u0e48ถ\u0e39กใช\u0e49สองคร\u0e31\u0e49ง", null, "Klikni na tipku, zatim pritisni novu (Shift, Ctrl ili Alt za kombinaciju; može i tipka miša). Esc ili lijevi klik: odustani. Narančasto: tipka korištena dvaput.", "დააწკაპუნე ღილაკზე, შემდეგ დააჭირე ახალს (კომბინაციისთვის Shift, Ctrl ან Alt; მაუსის ღილაკიც გამოდგება). Esc ან მარცხენა წკაპი: გაუქმება. ნარინჯისფერი: ორჯერ გამოყენებული ღილაკი.", "Κάνε κλικ σε ένα πλήκτρο και μετά πάτησε το νέο (Shift, Ctrl ή Alt για συνδυασμό· κάνει και κουμπί του ποντικιού). Esc ή αριστερό κλικ: ακύρωση. Πορτοκαλί: πλήκτρο που χρησιμοποιείται δύο φορές.", "Klikni na taster, pa pritisni novi (Shift, Ctrl ili Alt za kombinaciju; može i taster miša). Esc ili levi klik: otkaži. Narandžasto: taster korišćen dvaput.", "Клацніть на клавішу, потім натисніть нову (Shift, Ctrl чи Alt — для комбінації; підійде й кнопка миші). Esc або лівий клік — скасувати. Помаранчевим — клавіша, зайнята двічі.", "Noklikšķini uz taustiņa un tad nospied jauno (Shift, Ctrl vai Alt kombinācijai; der arī peles poga). Esc vai kreisais klikšķis: atcelt. Oranžā krāsā: divreiz izmantots taustiņš." }, ["appuyer"] = new string[36] { "Press a key…", "Tryck på en tangent…", "Appuie sur une touche…", "Premi un tasto…", "Taste drücken…", "Pulsa una tecla…", "Нажмите клавишу…", "Apasă o tastă…", "Натисни клавиш…", "Притисни копче…", "Paina näppäintä…", "Tryk på en tast…", "Trykk på en tast…", "Ýttu á lykil…", "Bir tuşa bas…", "Paspausk klavišą…", "Stiskni klávesu…", "Nyomj meg egy billentyűt…", "Stlač kláves…", "Naciśnij klawisz…", "Druk op een toets…", "Prime uma tecla…", "Pressione uma tecla…", "请按下按键…", "請按下按鍵…", "キーを押してください…", "키를 누르세요…", "क\u094bई क\u0941\u0902ज\u0940 दब\u093eए\u0901…", "กดป\u0e38\u0e48ม…", null, "Pritisni tipku…", "დააჭირე ღილაკს…", "Πάτησε ένα πλήκτρο…", "Pritisni taster…", "Натисніть клавішу…", "Nospied taustiņu…" }, ["defaut"] = new string[36] { "Default", "Standard", "Défaut", "Predefinito", "Standard", "Por defecto", "По умолчанию", "Implicit", "По подразбиране", "Стандардно", "Oletus", "Standard", "Standard", "Sjálfgefið", "Varsayılan", "Numatytasis", "Výchozí", "Alapértelmezett", "Predvolené", "Domyślny", "Standaard", "Predefinição", "Padrão", "默认", "預設", "デフォルト", "기본값", "ड\u093fफ\u093c\u0949ल\u094dट", "ค\u0e48าเร\u0e34\u0e48มต\u0e49น", null, "Zadano", "ნაგულისხმევი", "Προεπιλογή", "Podrazumevano", "За замовчуванням", "Noklusējums" }, ["retirer"] = new string[36] { "Remove", "Ta bort", "Retirer", "Rimuovi", "Entfernen", "Quitar", "Убрать", "Elimină", "Премахни", "Отстрани", "Poista", "Fjern", "Fjern", "Fjarlægja", "Kaldır", "Pašalinti", "Odebrat", "Törlés", "Odstrániť", "Usuń", "Verwijderen", "Remover", "Remover", "移除", "移除", "解除", "제거", "हट\u093eए\u0901", "ลบ", null, "Ukloni", "მოხსნა", "Αφαίρεση", "Ukloni", "Прибрати", "Noņemt" }, ["sans_touche"] = new string[36] { "no key", "ingen tangent", "aucune touche", "nessun tasto", "keine Taste", "ninguna tecla", "нет клавиши", "nicio tastă", "без клавиш", "без копче", "ei näppäintä", "ingen tast", "ingen tast", "enginn lykill", "tuş yok", "nėra klavišo", "žádná klávesa", "nincs billentyű", "žiadny kláves", "brak klawisza", "geen toets", "nenhuma tecla", "nenhuma tecla", "无按键", "無按鍵", "キーなし", "키 없음", "क\u094bई क\u0941\u0902ज\u0940 नह\u0940\u0902", "ไม\u0e48ม\u0e35ป\u0e38\u0e48ม", null, "nema tipke", "ღილაკი არ არის", "κανένα πλήκτρο", "nema tastera", "немає клавіші", "nav taustiņa" }, ["fermer"] = new string[36] { "Close", "Stäng", "Fermer", "Chiudi", "Schließen", "Cerrar", "Закрыть", "Închide", "Затвори", "Затвори", "Sulje", "Luk", "Lukk", "Loka", "Kapat", "Uždaryti", "Zavřít", "Bezárás", "Zavrieť", "Zamknij", "Sluiten", "Fechar", "Fechar", "关闭", "關閉", "閉じる", "닫기", "ब\u0902द कर\u0947\u0902", "ป\u0e34ด", null, "Zatvori", "დახურვა", "Κλείσιμο", "Zatvori", "Закрити", "Aizvērt" }, ["echap"] = new string[36] { "Esc: close", "Esc: stäng", "Échap : fermer", "Esc: chiudi", "Esc: schließen", "Esc: cerrar", "Esc — закрыть", "Esc: închide", "Esc: затвори", "Esc: затвори", "Esc: sulje", "Esc: luk", "Esc: lukk", "Esc: loka", "Esc: kapat", "Esc: uždaryti", "Esc: zavřít", "Esc: bezárás", "Esc: zavrieť", "Esc: zamknij", "Esc: sluiten", "Esc: fechar", "Esc: fechar", "Esc:关闭", "Esc:關閉", "Esc:閉じる", "Esc: 닫기", "Esc: ब\u0902द कर\u0947\u0902", "Esc: ป\u0e34ด", null, "Esc: zatvori", "Esc: დახურვა", "Esc: κλείσιμο", "Esc: zatvori", "Esc — закрити", "Esc: aizvērt" }, ["conflit_mod"] = new string[36] { "Also used by: {0}", "Används även av: {0}", "Aussi utilisée par : {0}", "Usato anche da: {0}", "Auch belegt durch: {0}", "También la usa: {0}", "Также используется: {0}", "Folosită și de: {0}", "Използва се и от: {0}", "Се користи и од: {0}", "Käytössä myös: {0}", "Bruges også af: {0}", "Brukes også av: {0}", "Einnig notaður af: {0}", "Bunu da kullanıyor: {0}", "Taip pat naudoja: {0}", "Používá ji také: {0}", "Ezt is használja: {0}", "Používa ho aj: {0}", "Używa go też: {0}", "Ook gebruikt door: {0}", "Também usada por: {0}", "Também usada por: {0}", "也被占用:{0}", "也被使用:{0}", "ほかでも使用中:{0}", "다른 곳에서도 사용 중: {0}", "इसक\u093e भ\u0940 उपय\u094bग: {0}", "ถ\u0e39กใช\u0e49โดย {0} ด\u0e49วย", null, "Koristi je i: {0}", "ასევე იყენებს: {0}", "Το χρησιμοποιεί επίσης: {0}", "Koristi ga i: {0}", "Також використовує: {0}", "To izmanto arī: {0}" }, ["conflit_jeu"] = new string[36] { "Also a game key: {0}", "Även en speltangent: {0}", "Aussi une touche du jeu : {0}", "Anche un tasto del gioco: {0}", "Auch eine Taste des Spiels: {0}", "También es una tecla del juego: {0}", "Также клавиша игры: {0}", "Și o tastă a jocului: {0}", "Също клавиш на играта: {0}", "Исто така копче на играта: {0}", "Myös pelin näppäin: {0}", "Også en tast i spillet: {0}", "Også en tast i spillet: {0}", "Einnig lykill leiksins: {0}", "Aynı zamanda oyun tuşu: {0}", "Taip pat žaidimo klavišas: {0}", "Také klávesa hry: {0}", "A játék billentyűje is: {0}", "Aj kláves hry: {0}", "Także klawisz gry: {0}", "Ook een toets van het spel: {0}", "Também uma tecla do jogo: {0}", "Também uma tecla do jogo: {0}", "也是游戏按键:{0}", "也是遊戲按鍵:{0}", "ゲームのキーでもあります:{0}", "게임 키이기도 함: {0}", "यह ख\u0947ल क\u0940 क\u0941\u0902ज\u0940 भ\u0940 ह\u0948: {0}", "เป\u0e47นป\u0e38\u0e48มของเกมด\u0e49วย: {0}", null, "Također tipka igre: {0}", "ასევე თამაშის ღილაკია: {0}", "Επίσης πλήκτρο του παιχνιδιού: {0}", "Takođe taster igre: {0}", "Також клавіша гри: {0}", "Arī spēles taustiņš: {0}" }, ["vide"] = new string[36] { "No mod has a key setting.", "Ingen mod har någon tangentinställning.", "Aucun mod n'a de touche réglable.", "Nessuna mod ha tasti configurabili.", "Kein Mod hat eine einstellbare Taste.", "Ningún mod tiene teclas configurables.", "Ни у одного мода нет настраиваемых клавиш.", "Niciun mod nu are taste configurabile.", "Нито един мод няма настройваем клавиш.", "Ниту еден мод нема копче за поставување.", "Yhdelläkään modilla ei ole säädettävää näppäintä.", "Ingen mod har en tast at indstille.", "Ingen mod har en tast å stille inn.", "Engin viðbót er með stillanlegan lykil.", "Hiçbir modun ayarlanabilir tuşu yok.", "Nė viena modifikacija neturi nustatomo klavišo.", "Žádný mód nemá nastavitelnou klávesu.", "Egyik modnak sincs beállítható billentyűje.", "Žiadny mód nemá nastaviteľný kláves.", "Żaden mod nie ma ustawialnego klawisza.", "Geen enkele mod heeft een instelbare toets.", "Nenhum mod tem teclas configuráveis.", "Nenhum mod tem teclas configuráveis.", "没有模组有可设置的按键。", "沒有模組有可設定的按鍵。", "キーを設定できるMODはありません。", "키를 설정할 수 있는 모드가 없습니다.", "क\u093fस\u0940 भ\u0940 म\u0949ड म\u0947\u0902 बदल\u0940 ज\u093e सकन\u0947 व\u093eल\u0940 क\u0941\u0902ज\u0940 नह\u0940\u0902 ह\u0948।", "ไม\u0e48ม\u0e35ม\u0e47อดใดท\u0e35\u0e48ต\u0e31\u0e49งค\u0e48าป\u0e38\u0e48มได\u0e49", null, "Nijedan mod nema podesivu tipku.", "არცერთ მოდს არ აქვს ღილაკის პარამეტრი.", "Κανένα mod δεν έχει ρυθμιζόμενο πλήκτρο.", "Nijedan mod nema podesiv taster.", "Жоден мод не має клавіш, які можна налаштувати.", "Nevienam modam nav iestatāma taustiņa." }, ["clic_gauche"] = new string[36] { "Left click", "Vänsterklick", "Clic gauche", "Clic sinistro", "Linksklick", "Clic izquierdo", "Левый щелчок", "Clic stânga", "Ляв клик", "Лев клик", "Vasen napsautus", "Venstreklik", "Venstreklikk", "Vinstri smellur", "Sol tık", "Kairysis spustelėjimas", "Levé kliknutí", "Bal kattintás", "Ľavé kliknutie", "Lewy przycisk myszy", "Linksklik", "Clique esquerdo", "Clique esquerdo", "鼠标左键", "滑鼠左鍵", "左クリック", "왼쪽 클릭", "ब\u093eय\u093e\u0901 क\u094dल\u093fक", "คล\u0e34กซ\u0e49าย", null, "Lijevi klik", "მარცხენა წკაპი", "Αριστερό κλικ", "Levi klik", "Лівий клік", "Kreisais klikšķis" }, ["clic_droit"] = new string[36] { "Right click", "Högerklick", "Clic droit", "Clic destro", "Rechtsklick", "Clic derecho", "Правый щелчок", "Clic dreapta", "Десен клик", "Десен клик", "Oikea napsautus", "Højreklik", "Høyreklikk", "Hægri smellur", "Sağ tık", "Dešinysis spustelėjimas", "Pravé kliknutí", "Jobb kattintás", "Pravé kliknutie", "Prawy przycisk myszy", "Rechtsklik", "Clique direito", "Clique direito", "鼠标右键", "滑鼠右鍵", "右クリック", "오른쪽 클릭", "द\u093eय\u093e\u0901 क\u094dल\u093fक", "คล\u0e34กขวา", null, "Desni klik", "მარჯვენა წკაპი", "Δεξί κλικ", "Desni klik", "Правий клік", "Labais klikšķis" }, ["clic_molette"] = new string[36] { "Middle click", "Mittenklick", "Clic molette", "Clic centrale", "Mittelklick", "Clic central", "Средний щелчок", "Clic pe rotiță", "Среден клик", "Среден клик", "Keskinapsautus", "Midterklik", "Midtklikk", "Miðjusmellur", "Orta tık", "Vidurinis spustelėjimas", "Prostřední kliknutí", "Középső kattintás", "Stredné kliknutie", "Środkowy przycisk myszy", "Middelklik", "Clique do meio", "Clique do meio", "鼠标中键", "滑鼠中鍵", "中クリック", "가운데 클릭", "ब\u0940च क\u093e क\u094dल\u093fक", "คล\u0e34กกลาง", null, "Srednji klik", "შუა წკაპი", "Μεσαίο κλικ", "Srednji klik", "Середній клік", "Vidējais klikšķis" }, ["souris_n"] = new string[36] { "Mouse button {0}", "Musknapp {0}", "Bouton de souris {0}", "Tasto del mouse {0}", "Maustaste {0}", "Botón del ratón {0}", "Кнопка мыши {0}", "Butonul mouse-ului {0}", "Бутон на мишката {0}", "Копче на глувчето {0}", "Hiiren painike {0}", "Museknap {0}", "Museknapp {0}", "Músarhnappur {0}", "Fare tuşu {0}", "Pelės mygtukas {0}", "Tlačítko myši {0}", "{0}. egérgomb", "Tlačidlo myši {0}", "Przycisk myszy {0}", "Muisknop {0}", "Botão do rato {0}", "Botão do mouse {0}", "鼠标按键 {0}", "滑鼠按鍵 {0}", "マウスボタン{0}", "마우스 버튼 {0}", "म\u093eउस बटन {0}", "ป\u0e38\u0e48มเมาส\u0e4c {0}", null, "Tipka miša {0}", "მაუსის ღილაკი {0}", "Κουμπί ποντικιού {0}", "Taster miša {0}", "Кнопка миші {0}", "Peles poga {0}" }, ["pave_n"] = new string[36] { "Numpad {0}", "Numpad {0}", "Pavé num. {0}", "Tastierino {0}", "Ziffernblock {0}", "Teclado num. {0}", "Цифр. блок {0}", "Tastatură num. {0}", "Цифр. клав. {0}", "Нум. {0}", "Numeronäppäin {0}", "Numerisk {0}", "Talltastatur {0}", "Talnaborð {0}", "Num {0}", "Skaitm. {0}", "Num. {0}", "Num {0}", "Num. {0}", "Num {0}", "Numeriek {0}", "Teclado num. {0}", "Teclado num. {0}", "小键盘 {0}", "數字鍵盤 {0}", "テンキー{0}", "숫자패드 {0}", "नमप\u0948ड {0}", "แป\u0e49นต\u0e31วเลข {0}", null, "Num. {0}", "Num {0}", "Αριθμ. {0}", "Num. {0}", "Цифр. блок {0}", "Ciparu bloks {0}" }, ["console"] = new string[36] { "Console", "Konsol", "Console", "Console", "Konsole", "Consola", "Консоль", "Consolă", "Конзола", "Конзола", "Konsoli", "Konsol", "Konsoll", "Skipanalína", "Konsol", "Konsolė", "Konzole", "Konzol", "Konzola", "Konsola", "Console", "Consola", "Console", "控制台", "控制台", "コンソール", "콘솔", "क\u0902स\u094bल", "คอนโซล", null, "Konzola", "კონსოლი", "Κονσόλα", "Konzola", "Консоль", "Konsole" }, ["raccourci_n"] = new string[36] { "Hotbar {0}", "Snabbfält {0}", "Barre de raccourcis {0}", "Barra rapida {0}", "Schnellleiste {0}", "Barra de atajos {0}", "Панель быстрого доступа {0}", "Bara rapidă {0}", "Лента {0}", "Брза лента {0}", "Pikavalikko {0}", "Hotbar {0}", "Hurtigmeny {0}", "Flýtirimill {0}", "Kısayol çubuğu {0}", "Greitoji juosta {0}", "Rychlá lišta {0}", "Gyorssáv {0}", "Rýchla lišta {0}", "Pasek podręczny {0}", "Snelbalk {0}", "Barra rápida {0}", "Barra de atalhos {0}", "快捷栏 {0}", "快捷列 {0}", "ホットバー{0}", "핫바 {0}", "ह\u0949टब\u093eर {0}", "แถบล\u0e31ด {0}", null, "Brza traka {0}", "სწრაფი პანელი {0}", "Γραμμή συντομεύσεων {0}", "Brza traka {0}", "Панель швидкого доступу {0}", "Ātrā josla {0}" }, ["l_ouvrir"] = new string[36] { "Open this list of mod hotkeys", "Öppna den här listan över moddarnas tangenter", "Ouvrir cette liste des touches des mods", "Apri questo elenco dei tasti delle mod", "Diese Liste der Mod-Tasten öffnen", "Abrir esta lista de teclas de los mods", "Открыть этот список клавиш модов", "Deschide această listă cu tastele modurilor", "Отвори този списък с клавишите на модовете", "Отвори ја оваа листа со копчињата на модовите", "Avaa tämä modien näppäinluettelo", "Åbn denne liste over taster til mods", "Åpne denne listen over taster for mods", "Opna þennan lista yfir lykla viðbóta", "Mod tuşlarının bu listesini aç", "Atidaryti šį modifikacijų klavišų sąrašą", "Otevřít tento seznam kláves módů", "A modok billentyűinek listája megnyitása", "Otvoriť tento zoznam klávesov módov", "Otwórz tę listę klawiszy modów", "Deze lijst met toetsen van mods openen", "Abrir esta lista de teclas dos mods", "Abrir esta lista de teclas dos mods", "打开此模组按键列表", "開啟此模組按鍵列表", "このMODキー一覧を開く", "이 모드 단축키 목록 열기", "म\u0949ड क\u0941\u0902ज\u093fय\u094b\u0902 क\u0940 यह स\u0942च\u0940 ख\u094bल\u0947\u0902", "เป\u0e34ดรายการป\u0e38\u0e48มของม\u0e47อดน\u0e35\u0e49", null, "Otvori ovaj popis tipki modova", "მოდების ღილაკების ამ სიის გახსნა", "Άνοιγμα αυτής της λίστας πλήκτρων των mods", "Otvori ovaj spisak tastera modova", "Відкрити цей список клавіш модів", "Atvērt šo modu taustiņu sarakstu" }, ["l_dvergr"] = new string[36] { "Turn the Dverger Circlet's light on or off", "Tänd eller släck ljuset i dvärgadiademet", "Allumer ou éteindre la lumière du diadème de dverger", "Accendi o spegni la luce del diadema di Dverger", "Licht des Dverger-Reifs ein- oder ausschalten", "Encender o apagar la luz de la diadema de Dverger", "Включить или выключить свет венца двергов", "Aprinde sau stinge lumina coroniței Dverger", "Включи или изключи светлината на двергския челник", "Вклучи или исклучи го светлото на двергерската дијадема", "Sytytä tai sammuta Dverger-korun valo", "Tænd eller sluk lyset i dvergerdiademet", "Slå lyset i dvergdiademet av eller på", "Kveikja eða slökkva á ljósi dvergahringsins", "Dverger tacının ışığını aç veya kapat", "Įjungti arba išjungti nykštukų šalmo šviesą", "Rozsvítit nebo zhasnout světlo trpasličího kroužku", "A dverger fejdísz fényének be- vagy kikapcsolása", "Zapnúť alebo vypnúť svetlo trpasličieho diadému", "Włącz lub wyłącz światło diademu Dvergera", "Het licht van de dvergerdiadeem aan- of uitzetten", "Acender ou apagar a luz do diadema Dverger", "Acender ou apagar a luz da argola Dverger", "开关矮人光环的光", "開關矮人頭環的光", "ドヴェルガーのサークレットの明かりをオン/オフ", "드베르그 관의 빛 켜기/끄기", "ड\u094dव\u0947र\u094dगर म\u0941क\u0941ट क\u0940 र\u094bशन\u0940 च\u093eल\u0942 य\u093e ब\u0902द कर\u0947\u0902", "เป\u0e34ดหร\u0e37อป\u0e34ดแสงของมงก\u0e38ฎห\u0e34นเวทย\u0e4c", null, "Upali ili ugasi svjetlo dvergerske dijademe", "დვარფების გვირგვინის სინათლის ჩართვა ან გამორთვა", "Άναμμα ή σβήσιμο του φωτός του διαδήματος Dverger", "Upali ili ugasi svetlo dvergerskog dijadema", "Увімкнути чи вимкнути світло дворфського вінця", "Ieslēgt vai izslēgt dvergera diadēmas gaismu" }, ["l_wisp"] = new string[36] { "Turn the Wisplight's glow on or off", "Tänd eller släck skenet från lysande irrbloss", "Allumer ou éteindre la lueur de la lumière de feu-follet", "Accendi o spegni il bagliore del fuoco fatuo", "Leuchten des Irrlichts ein- oder ausschalten", "Encender o apagar el brillo de la luz de Wisp", "Включить или выключить сияние света светлячка", "Aprinde sau stinge strălucirea luminii de Wisp", "Включи или изключи сиянието на светлика", "Вклучи или исклучи го сјајот на светулката", "Sytytä tai sammuta virvatulen hehku", "Tænd eller sluk lygtemandslysets skær", "Slå skinnet fra lyktemannen av eller på", "Kveikja eða slökkva á bjarma ljómaluktarinnar", "Peri Işığının parıltısını aç veya kapat", "Įjungti arba išjungti sielos šviesos švytėjimą", "Rozsvítit nebo zhasnout záři bludného světélka", "A tündérfény ragyogásának be- vagy kikapcsolása", "Zapnúť alebo vypnúť žiaru bludičky", "Włącz lub wyłącz blask światełka ognika", "De gloed van het dwaallicht aan- of uitzetten", "Acender ou apagar o brilho da luz de fogo-fátuo", "Acender ou apagar o brilho da luz de Wisp", "开关冥火之光的光芒", "開關幽光的光芒", "ウィスプライトの光をオン/オフ", "위습등의 빛 켜기/끄기", "व\u093fस\u094dपल\u093eइट क\u0940 र\u094bशन\u0940 च\u093eल\u0942 य\u093e ब\u0902द कर\u0947\u0902", "เป\u0e34ดหร\u0e37อป\u0e34ดแสงของภ\u0e39ต\u0e34แสงนำทาง", null, "Upali ili ugasi sjaj svjetla lutalice", "მოხეტიალე შუქის ნათების ჩართვა ან გამორთვა", "Άναμμα ή σβήσιμο της λάμψης του φωτός αερικού", "Upali ili ugasi sjaj svetla lutalice", "Увімкнути чи вимкнути сяйво світлячка", "Ieslēgt vai izslēgt maldugunsgaismas spīdumu" }, ["l_slotlock"] = new string[36] { "Lock or unlock the hovered inventory slot", "Lås eller lås upp inventariefacket under muspekaren", "Verrouiller ou déverrouiller la case survolée de l'inventaire", "Blocca o sblocca lo spazio dell'inventario sotto il cursore", "Inventarplatz unter dem Mauszeiger sperren oder entsperren", "Bloquear o desbloquear la casilla del inventario bajo el cursor", "Закрепить или открепить ячейку инвентаря под курсором", "Blochează sau deblochează locul din inventar de sub cursor", "Заключи или отключи полето от инвентара под курсора", "Заклучи или отклучи го полето од инвентарот под курсорот", "Lukitse tai avaa repun paikka osoittimen alla", "Lås eller lås op for pladsen i oppakningen under markøren", "Lås eller lås opp inventarplassen under pekeren", "Læsa eða aflæsa hólfinu í eignaskránni undir bendlinum", "İmlecin altındaki envanter yuvasını kilitle veya kilidini aç", "Užrakinti arba atrakinti inventoriaus langelį po žymekliu", "Zamknout nebo odemknout políčko inventáře pod kurzorem", "A kurzor alatti leltárhely zárolása vagy feloldása", "Zamknúť alebo odomknúť políčko inventára pod kurzorom", "Zablokuj lub odblokuj miejsce w ekwipunku pod kursorem", "Het inventarisvak onder de cursor vergrendelen of ontgrendelen", "Bloquear ou desbloquear o espaço do inventário sob o cursor", "Travar ou destravar o espaço do inventário sob o cursor", "锁定或解锁鼠标所指的物品栏格子", "鎖定或解鎖滑鼠所指的物品欄格子", "カーソル下のインベントリスロットをロック/解除", "커서 아래 인벤토리 칸 잠금/해제", "कर\u094dसर क\u0947 न\u0940च\u0947 व\u093eल\u0947 इन\u094dव\u0947\u0902टर\u0940 ख\u093eन\u0947 क\u094b ल\u0949क य\u093e अनल\u0949क कर\u0947\u0902", "ล\u0e47อกหร\u0e37อปลดล\u0e47อกช\u0e48องเก\u0e47บของท\u0e35\u0e48เคอร\u0e4cเซอร\u0e4cช\u0e35\u0e49อย\u0e39\u0e48", null, "Zaključaj ili otključaj mjesto u ruksaku ispod pokazivača", "კურსორის ქვეშ ინვენტარის უჯრის ჩაკეტვა ან გახსნა", "Κλείδωμα ή ξεκλείδωμα της θέσης του αποθέματος κάτω από τον δείκτη", "Zaključaj ili otključaj mesto u inventaru ispod pokazivača", "Заблокувати чи розблокувати комірку речей під курсором", "Bloķēt vai atbloķēt inventāra vietu zem kursora" }, ["l_wishbone"] = new string[36] { "Mute or unmute the Wishbone", "Stäng av eller slå på ljudet från önskebenet", "Couper ou rétablir le son du bréchet", "Disattiva o riattiva il suono della forcula", "Ton der Wünschelrute stumm- oder wieder einschalten", "Silenciar o reactivar el sonido de la fúrcula", "Выключить или включить звук дужки", "Oprește sau pornește sunetul claviculei", "Спри или пусни звука на ядеца", "Исклучи или вклучи го звукот на коскичката за желби", "Mykistä toivomusluu tai palauta sen ääni", "Slå lyden fra ønskebenet fra eller til", "Slå lyden fra ønskebeinet av eller på", "Þagga eða kveikja á hljóði óskabeinsins", "Lades kemiğinin sesini kapat veya aç", "Išjungti arba įjungti noro kaulo garsą", "Ztlumit nebo zapnout zvuk pamětní kosti", "A villacsont hangjának némítása vagy visszakapcsolása", "Stlmiť alebo zapnúť zvuk kosti prosperity", "Wycisz lub przywróć dźwięk kości pomyślności", "Het geluid van het vorkbeen dempen of weer aanzetten", "Silenciar ou reativar o som do osso dos desejos", "Silenciar ou reativar o som do ossinho da sorte", "静音或恢复愿望骨的声音", "靜音或恢復許願骨的聲音", "叉骨の音をミュート/解除", "위시본 소리 끄기/켜기", "व\u093fशब\u094bन क\u0940 आव\u093eज\u093c ब\u0902द य\u093e च\u093eल\u0942 कर\u0947\u0902", "ป\u0e34ดหร\u0e37อเป\u0e34ดเส\u0e35ยงว\u0e34ชโบน", null, "Utišaj ili vrati zvuk kosti želja", "სურვილის ძვლის ხმის გათიშვა ან ჩართვა", "Σίγαση ή επαναφορά του ήχου του κόκαλου των ευχών", "Utišaj ili vrati zvuk kosti želja", "Вимкнути чи увімкнути звук вилочки", "Izslēgt vai ieslēgt vēlmju kaula skaņu" }, ["l_hurlement"] = new string[36] { "Howl (in wolf form)", "Yla (i vargform)", "Hurler (sous forme de louve)", "Ululare (in forma di lupa)", "Heulen (in Wolfsgestalt)", "Aullar (en forma de loba)", "Завыть (в облике волчицы)", "Urlă (în formă de lupoaică)", "Вий (във вълчи облик)", "Завиј (во волчја форма)", "Ulvo (suden hahmossa)", "Hyl (i ulveskikkelse)", "Hyl (i ulveskikkelse)", "Ýla (í úlfsham)", "Ulu (kurt biçimindeyken)", "Staugti (vilkės pavidalu)", "Výt (v podobě vlčice)", "Üvöltés (farkasalakban)", "Zavýjať (v podobe vlčice)", "Wyj (w postaci wilczycy)", "Huilen (in wolfsgedaante)", "Uivar (em forma de loba)", "Uivar (na forma de loba)", "嚎叫(狼形态下)", "嚎叫(狼形態下)", "遠吠え(狼の姿のとき)", "울부짖기 (늑대 모습일 때)", "ह\u0941आ\u0901 कर\u0947\u0902 (भ\u0947ड\u093c\u093fय\u093e र\u0942प म\u0947\u0902)", "หอน (ในร\u0e48างหมาป\u0e48า)", null, "Zavij (u obliku vučice)", "ყმუილი (მგლის სახით)", "Ούρλιαξε (σε μορφή λύκαινας)", "Zavij (u obliku vučice)", "Завити (в подобі вовчиці)", "Gaudot (vilka izskatā)" }, ["l_scan"] = new string[36] { "Scan nearby chests, creatures and items on the ground (telemetry)", "Skanna kistor, varelser och föremål på marken i närheten (telemetri)", "Scanner les coffres, créatures et objets au sol alentour (télémétrie)", "Scansiona scrigni, creature e oggetti a terra vicini (telemetria)", "Truhen, Kreaturen und Gegenstände am Boden in der Nähe scannen (Telemetrie)", "Escanear cofres, criaturas y objetos en el suelo cercanos (telemetría)", "Сканировать ближайшие сундуки, существ и предметы на земле (телеметрия)", "Scanează cuferele, creaturile și obiectele de pe jos din apropiere (telemetrie)", "Сканирай близките сандъци, същества и предмети на земята (телеметрия)", "Скенирај ги блиските ковчези, суштества и предмети на земја (телеметрија)", "Skannaa lähellä olevat arkut, olennot ja maassa olevat esineet (telemetria)", "Scan kister, væsner og genstande på jorden i nærheden (telemetri)", "Skann kister, vesener og gjenstander på bakken i nærheten (telemetri)", "Skanna kistur, verur og hluti á jörðinni í nágrenninu (fjarmæling)", "Yakındaki sandıkları, yaratıkları ve yerdeki eşyaları tara (telemetri)", "Nuskenuoti netoliese esančias skrynias, būtybes ir daiktus ant žemės (telemetrija)", "Prohledat okolní truhly, tvory a předměty na zemi (telemetrie)", "A közeli ládák, lények és földön heverő tárgyak f