From 7a8ce51bc656481e1bd9e06df13d3b854f25314d Mon Sep 17 00:00:00 2001 From: Akkariin Meiko Date: Thu, 28 May 2020 19:08:06 +0800 Subject: [PATCH] Add Multiple languages support --- SharedClasses/ConfigManager.cs | 45 +- SharedClasses/PermissionsManager.cs | 1 + vMenu/LanguageManager.cs | 45 + vMenu/MainMenu.cs | 93 +- vMenu/Noclip.cs | 1 + vMenu/menus/About.cs | 9 +- vMenu/menus/BannedPlayers.cs | 48 +- vMenu/menus/MiscSettings.cs | 144 +-- vMenu/menus/MpPedCustomization.cs | 262 ++--- vMenu/menus/OnlinePlayers.cs | 44 +- vMenu/menus/PersonalVehicle.cs | 81 +- vMenu/menus/PlayerAppearance.cs | 171 +-- vMenu/menus/PlayerOptions.cs | 130 +-- vMenu/menus/Recording.cs | 16 +- vMenu/menus/SavedVehicles.cs | 57 +- vMenu/menus/TimeOptions.cs | 25 +- vMenu/menus/VehicleOptions.cs | 301 ++--- vMenu/menus/VehicleSpawner.cs | 39 +- vMenu/menus/VoiceChat.cs | 41 +- vMenu/menus/WeaponLoadouts.cs | 45 +- vMenu/menus/WeaponOptions.cs | 137 +-- vMenu/menus/WeatherOptions.cs | 41 +- vMenuServer/MainServer.cs | 29 +- vMenuServer/config/languages.json | 1631 +++++++++++++++++++++++++++ vMenuServer/vMenuServer.csproj | 8 + 25 files changed, 2628 insertions(+), 816 deletions(-) create mode 100644 vMenu/LanguageManager.cs create mode 100644 vMenuServer/config/languages.json diff --git a/SharedClasses/ConfigManager.cs b/SharedClasses/ConfigManager.cs index 30cd9cc1..c4b38f6e 100644 --- a/SharedClasses/ConfigManager.cs +++ b/SharedClasses/ConfigManager.cs @@ -6,6 +6,7 @@ using CitizenFX.Core; using static CitizenFX.Core.Native.API; using Newtonsoft.Json; +using System.Collections; namespace vMenuShared { @@ -93,12 +94,50 @@ public static bool IsClientDebugModeEnabled() return GetResourceMetadata("vMenu", "client_debug_mode", 0).ToLower() == "true"; } - #region Get saved locations from the locations.json + #region Get localization from the languages.json /// - /// Gets the locations.json data. + /// Gets the languages.json data. /// /// - public static Locations GetLocations() + public static Dictionary GetLanguages() + { + Dictionary data = new Dictionary(); + + string jsonFile = LoadResourceFile(GetCurrentResourceName(), "config/languages.json"); + try + { + if (string.IsNullOrEmpty(jsonFile)) + { +#if CLIENT + vMenuClient.Notify.Error("The languages.json file is empty or does not exist, please tell the server owner to fix this."); +#endif +#if SERVER + vMenuServer.DebugLog.Log("The languages.json file is empty or does not exist, please fix this.", vMenuServer.DebugLog.LogLevel.error); +#endif + } + else + { + data = JsonConvert.DeserializeObject>(jsonFile); + } + } + catch (Exception e) + { +#if CLIENT + vMenuClient.Notify.Error("An error occurred while processing the languages.json file. Language will set to English. Please correct any errors in the languages.json file."); +#endif + Debug.WriteLine($"[vMenu] json exception details: {e.Message}\nStackTrace:\n{e.StackTrace}"); + } + + return data; + } + #endregion + + #region Get saved locations from the locations.json + /// + /// Gets the locations.json data. + /// + /// + public static Locations GetLocations() { Locations data = new Locations(); diff --git a/SharedClasses/PermissionsManager.cs b/SharedClasses/PermissionsManager.cs index d80e4364..4758e65c 100644 --- a/SharedClasses/PermissionsManager.cs +++ b/SharedClasses/PermissionsManager.cs @@ -15,6 +15,7 @@ public enum Permission // Global #region global Everything, + DumpLanguages, DontKickMe, DontBanMe, NoClip, diff --git a/vMenu/LanguageManager.cs b/vMenu/LanguageManager.cs new file mode 100644 index 00000000..c35ab781 --- /dev/null +++ b/vMenu/LanguageManager.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MenuAPI; +using Newtonsoft.Json; +using CitizenFX.Core; +using static CitizenFX.Core.UI.Screen; +using static CitizenFX.Core.Native.API; +using static vMenuClient.CommonFunctions; +using static vMenuShared.ConfigManager; +using static vMenuShared.PermissionsManager; + +namespace vMenuClient +{ + public class LanguageManager : BaseScript + { + public string Get (string originalText) { + + string transText = originalText; + + if (!MainMenu.DumpedData.ContainsKey(originalText)) + { + MainMenu.DumpedData.Add(originalText, ""); + } + + if (MainMenu.CurrentLanguage.ContainsKey(originalText)) { + try { + transText = (string)MainMenu.CurrentLanguage[originalText]; + if (transText == "") + { + transText = originalText; + } + } catch (Exception ex) + { + // Not need this because it will generate lot of logs and fill your disk xD + // Debug.WriteLine($"Cannot found translate: {originalText}"); + } + } + + return transText; + } + } +} \ No newline at end of file diff --git a/vMenu/MainMenu.cs b/vMenu/MainMenu.cs index d28c277c..f021a793 100644 --- a/vMenu/MainMenu.cs +++ b/vMenu/MainMenu.cs @@ -11,6 +11,9 @@ using static vMenuClient.CommonFunctions; using static vMenuShared.ConfigManager; using static vMenuShared.PermissionsManager; +using System.Collections; +using vMenuShared; +using CitizenFX.Core.Native; namespace vMenuClient { @@ -56,11 +59,18 @@ public class MainMenu : BaseScript public static bool DebugMode = GetResourceMetadata(GetCurrentResourceName(), "client_debug_mode", 0) == "true" ? true : false; public static bool EnableExperimentalFeatures = /*true;*/ (GetResourceMetadata(GetCurrentResourceName(), "experimental_features_enabled", 0) ?? "0") == "1"; public static string Version { get { return GetResourceMetadata(GetCurrentResourceName(), "version", 0); } } + + public static Dictionary LanguageData = new Dictionary(); + public static Hashtable CurrentLanguage = new Hashtable(); + public static bool LanguageDumpMode = false; + public static Hashtable DumpedData = new Hashtable(); public static bool DontOpenMenus { get { return MenuController.DontOpenAnyMenu; } set { MenuController.DontOpenAnyMenu = value; } } public static bool DisableControls { get { return MenuController.DisableMenuButtons; } set { MenuController.DisableMenuButtons = value; } } private const int currentCleanupVersion = 2; + + private static LanguageManager LM; #endregion /// @@ -118,6 +128,26 @@ public MainMenu() } #endregion + #region loading language + LanguageData = ConfigManager.GetLanguages(); + + string[] LanguageType = { "american", "french", "german", "italian", "spanish", "portuguese", "polish", "russian", "korean", "chinesetraditional", "japanese", "mexican", "chinesesimplified" }; + string LanguageName = ""; + + try { + LanguageName = LanguageType[API.GetCurrentLanguage()]; + if (LanguageData.TryGetValue(LanguageName, out CurrentLanguage)) + { + Debug.WriteLine($"[vMenu] Successful load the language: {LanguageName}."); + } + } catch (Exception ex) + { + Debug.WriteLine("[vMenu] Wtf? Is Rockstar added new language support for GTAV? That's impossable."); + } + + LM = new LanguageManager(); + #endregion + if (EnableExperimentalFeatures || DebugMode) { RegisterCommand("testped", new Action, string>((dynamic source, List args, string rawCommand) => @@ -158,6 +188,13 @@ public MainMenu() SetRichPresence($"Enjoying FiveM!"); } } + else if (args[0].ToString().ToLower() == "dumplang") + { + Notify.Info("Uploading dumped data to server..."); + Debug.Write(JsonConvert.SerializeObject(DumpedData, Formatting.Indented)); + TriggerServerEvent("vMenu:DumpLanguages", JsonConvert.SerializeObject(DumpedData, Formatting.Indented)); + Notify.Success("Upload finished!"); + } else if (args[0].ToString().ToLower() == "gc") { GC.Collect(); @@ -385,10 +422,10 @@ private async Task OnTick() } // Create the main menu. - Menu = new Menu(Game.Player.Name, "Main Menu"); - PlayerSubmenu = new Menu(Game.Player.Name, "Player Related Options"); - VehicleSubmenu = new Menu(Game.Player.Name, "Vehicle Related Options"); - WorldSubmenu = new Menu(Game.Player.Name, "World Options"); + Menu = new Menu(Game.Player.Name, LM.Get("Main Menu")); + PlayerSubmenu = new Menu(Game.Player.Name, LM.Get("Player Related Options")); + VehicleSubmenu = new Menu(Game.Player.Name, LM.Get("Vehicle Related Options")); + WorldSubmenu = new Menu(Game.Player.Name, LM.Get("World Options")); // Add the main menu to the menu pool. MenuController.AddMenu(Menu); @@ -471,7 +508,7 @@ bool IsOpen() if (Game.IsDisabledControlJustReleased(0, Control.PhoneCancel) && MpPedCustomization.DisableBackButton) { await Delay(0); - Notify.Alert("You must save your ped first before exiting, or click the ~r~Exit Without Saving~s~ button."); + Notify.Alert(LM.Get("You must save your ped first before exiting, or click the ~r~Exit Without Saving~s~ button.")); } if (Game.CurrentInputMode == InputMode.MouseAndKeyboard) @@ -488,7 +525,7 @@ bool IsOpen() else { NoClipEnabled = false; - Notify.Error("This vehicle does not exist (somehow) or you need to be the driver of this vehicle to enable noclip!"); + Notify.Error(LM.Get("This vehicle does not exist (somehow) or you need to be the driver of this vehicle to enable noclip!")); } } else @@ -532,7 +569,7 @@ private void CreateSubmenus() { OnlinePlayersMenu = new OnlinePlayers(); Menu menu = OnlinePlayersMenu.GetMenu(); - MenuItem button = new MenuItem("Online Players", "All currently connected players.") + MenuItem button = new MenuItem(LM.Get("Online Players"), LM.Get("All currently connected players.")) { Label = "→→→" }; @@ -550,7 +587,7 @@ private void CreateSubmenus() { BannedPlayersMenu = new BannedPlayers(); Menu menu = BannedPlayersMenu.GetMenu(); - MenuItem button = new MenuItem("Banned Players", "View and manage all banned players in this menu.") + MenuItem button = new MenuItem(LM.Get("Banned Players"), LM.Get("View and manage all banned players in this menu.")) { Label = "→→→" }; @@ -565,7 +602,7 @@ private void CreateSubmenus() }; } - MenuItem playerSubmenuBtn = new MenuItem("Player Related Options", "Open this submenu for player related subcategories.") { Label = "→→→" }; + MenuItem playerSubmenuBtn = new MenuItem(LM.Get("Player Related Options"), LM.Get("Open this submenu for player related subcategories.")) { Label = "→→→" }; Menu.AddMenuItem(playerSubmenuBtn); // Add the player options menu. @@ -573,21 +610,21 @@ private void CreateSubmenus() { PlayerOptionsMenu = new PlayerOptions(); Menu menu = PlayerOptionsMenu.GetMenu(); - MenuItem button = new MenuItem("Player Options", "Common player options can be accessed here.") + MenuItem button = new MenuItem(LM.Get("Player Options"), LM.Get("Common player options can be accessed here.")) { Label = "→→→" }; AddMenu(PlayerSubmenu, menu, button); } - MenuItem vehicleSubmenuBtn = new MenuItem("Vehicle Related Options", "Open this submenu for vehicle related subcategories.") { Label = "→→→" }; + MenuItem vehicleSubmenuBtn = new MenuItem(LM.Get("Vehicle Related Options"), LM.Get("Open this submenu for vehicle related subcategories.")) { Label = "→→→" }; Menu.AddMenuItem(vehicleSubmenuBtn); // Add the vehicle options Menu. if (IsAllowed(Permission.VOMenu)) { VehicleOptionsMenu = new VehicleOptions(); Menu menu = VehicleOptionsMenu.GetMenu(); - MenuItem button = new MenuItem("Vehicle Options", "Here you can change common vehicle options, as well as tune & style your vehicle.") + MenuItem button = new MenuItem(LM.Get("Vehicle Options"), LM.Get("Here you can change common vehicle options, as well as tune & style your vehicle.")) { Label = "→→→" }; @@ -599,7 +636,7 @@ private void CreateSubmenus() { VehicleSpawnerMenu = new VehicleSpawner(); Menu menu = VehicleSpawnerMenu.GetMenu(); - MenuItem button = new MenuItem("Vehicle Spawner", "Spawn a vehicle by name or choose one from a specific category.") + MenuItem button = new MenuItem(LM.Get("Vehicle Spawner"), LM.Get("Spawn a vehicle by name or choose one from a specific category.")) { Label = "→→→" }; @@ -611,7 +648,7 @@ private void CreateSubmenus() { SavedVehiclesMenu = new SavedVehicles(); Menu menu = SavedVehiclesMenu.GetMenu(); - MenuItem button = new MenuItem("Saved Vehicles", "Save new vehicles, or spawn or delete already saved vehicles.") + MenuItem button = new MenuItem(LM.Get("Saved Vehicles"), LM.Get("Save new vehicles, or spawn or delete already saved vehicles.")) { Label = "→→→" }; @@ -630,7 +667,7 @@ private void CreateSubmenus() { PersonalVehicleMenu = new PersonalVehicle(); Menu menu = PersonalVehicleMenu.GetMenu(); - MenuItem button = new MenuItem("Personal Vehicle", "Set a vehicle as your personal vehicle, and control some things about that vehicle when you're not inside.") + MenuItem button = new MenuItem(LM.Get("Personal Vehicle"), LM.Get("Set a vehicle as your personal vehicle, and control some things about that vehicle when you're not inside.")) { Label = "→→→" }; @@ -642,7 +679,7 @@ private void CreateSubmenus() { PlayerAppearanceMenu = new PlayerAppearance(); Menu menu = PlayerAppearanceMenu.GetMenu(); - MenuItem button = new MenuItem("Player Appearance", "Choose a ped model, customize it and save & load your customized characters.") + MenuItem button = new MenuItem(LM.Get("Player Appearance"), LM.Get("Choose a ped model, customize it and save & load your customized characters.")) { Label = "→→→" }; @@ -650,14 +687,14 @@ private void CreateSubmenus() MpPedCustomizationMenu = new MpPedCustomization(); Menu menu2 = MpPedCustomizationMenu.GetMenu(); - MenuItem button2 = new MenuItem("MP Ped Customization", "Create, edit, save and load multiplayer peds. ~r~Note, you can only save peds created in this submenu. vMenu can NOT detect peds created outside of this submenu. Simply due to GTA limitations.") + MenuItem button2 = new MenuItem(LM.Get("MP Ped Customization"), LM.Get("Create, edit, save and load multiplayer peds. ~r~Note, you can only save peds created in this submenu. vMenu can NOT detect peds created outside of this submenu. Simply due to GTA limitations.")) { Label = "→→→" }; AddMenu(PlayerSubmenu, menu2, button2); } - MenuItem worldSubmenuBtn = new MenuItem("World Related Options", "Open this submenu for world related subcategories.") { Label = "→→→" }; + MenuItem worldSubmenuBtn = new MenuItem(LM.Get("World Related Options"), LM.Get("Open this submenu for world related subcategories.")) { Label = "→→→" }; Menu.AddMenuItem(worldSubmenuBtn); // Add the time options menu. @@ -666,7 +703,7 @@ private void CreateSubmenus() { TimeOptionsMenu = new TimeOptions(); Menu menu = TimeOptionsMenu.GetMenu(); - MenuItem button = new MenuItem("Time Options", "Change the time, and edit other time related options.") + MenuItem button = new MenuItem(LM.Get("Time Options"), LM.Get("Change the time, and edit other time related options.")) { Label = "→→→" }; @@ -679,7 +716,7 @@ private void CreateSubmenus() { WeatherOptionsMenu = new WeatherOptions(); Menu menu = WeatherOptionsMenu.GetMenu(); - MenuItem button = new MenuItem("Weather Options", "Change all weather related options here.") + MenuItem button = new MenuItem(LM.Get("Weather Options"), LM.Get("Change all weather related options here.")) { Label = "→→→" }; @@ -691,7 +728,7 @@ private void CreateSubmenus() { WeaponOptionsMenu = new WeaponOptions(); Menu menu = WeaponOptionsMenu.GetMenu(); - MenuItem button = new MenuItem("Weapon Options", "Add/remove weapons, modify weapons and set ammo options.") + MenuItem button = new MenuItem(LM.Get("Weapon Options"), LM.Get("Add/remove weapons, modify weapons and set ammo options.")) { Label = "→→→" }; @@ -703,7 +740,7 @@ private void CreateSubmenus() { WeaponLoadoutsMenu = new WeaponLoadouts(); Menu menu = WeaponLoadoutsMenu.GetMenu(); - MenuItem button = new MenuItem("Weapon Loadouts", "Mange, and spawn saved weapon loadouts.") + MenuItem button = new MenuItem(LM.Get("Weapon Loadouts"), LM.Get("Mange, and spawn saved weapon loadouts.")) { Label = "→→→" }; @@ -712,7 +749,7 @@ private void CreateSubmenus() if (IsAllowed(Permission.NoClip)) { - MenuItem toggleNoclip = new MenuItem("Toggle NoClip", "Toggle NoClip on or off."); + MenuItem toggleNoclip = new MenuItem(LM.Get("Toggle NoClip"), LM.Get("Toggle NoClip on or off.")); PlayerSubmenu.AddMenuItem(toggleNoclip); PlayerSubmenu.OnItemSelect += (sender, item, index) => { @@ -728,7 +765,7 @@ private void CreateSubmenus() { VoiceChatSettingsMenu = new VoiceChat(); Menu menu = VoiceChatSettingsMenu.GetMenu(); - MenuItem button = new MenuItem("Voice Chat Settings", "Change Voice Chat options here.") + MenuItem button = new MenuItem(LM.Get("Voice Chat Settings"), LM.Get("Change Voice Chat options here.")) { Label = "→→→" }; @@ -738,7 +775,7 @@ private void CreateSubmenus() { RecordingMenu = new Recording(); Menu menu = RecordingMenu.GetMenu(); - MenuItem button = new MenuItem("Recording Options", "In-game recording options.") + MenuItem button = new MenuItem(LM.Get("Recording Options"), LM.Get("In-game recording options.")) { Label = "→→→" }; @@ -749,7 +786,7 @@ private void CreateSubmenus() { MiscSettingsMenu = new MiscSettings(); Menu menu = MiscSettingsMenu.GetMenu(); - MenuItem button = new MenuItem("Misc Settings", "Miscellaneous vMenu options/settings can be configured here. You can also save your settings in this menu.") + MenuItem button = new MenuItem(LM.Get("Misc Settings"), LM.Get("Miscellaneous vMenu options/settings can be configured here. You can also save your settings in this menu.")) { Label = "→→→" }; @@ -759,7 +796,7 @@ private void CreateSubmenus() // Add About Menu. AboutMenu = new About(); Menu sub = AboutMenu.GetMenu(); - MenuItem btn = new MenuItem("About vMenu", "Information about vMenu.") + MenuItem btn = new MenuItem(LM.Get("About vMenu"), LM.Get("Information about vMenu.")) { Label = "→→→" }; @@ -770,7 +807,7 @@ private void CreateSubmenus() if (!GetSettingsBool(Setting.vmenu_use_permissions)) { - Notify.Alert("vMenu is set up to ignore permissions, default permissions will be used."); + Notify.Alert(LM.Get("vMenu is set up to ignore permissions, default permissions will be used.")); } if (PlayerSubmenu.Size > 0) diff --git a/vMenu/Noclip.cs b/vMenu/Noclip.cs index dd191672..6c562bfe 100644 --- a/vMenu/Noclip.cs +++ b/vMenu/Noclip.cs @@ -20,6 +20,7 @@ public class NoClip : BaseScript private static int Scale { get; set; } = -1; private static bool FollowCamMode { get; set; } = false; + private static LanguageManager LM = new LanguageManager(); private List speeds = new List() { diff --git a/vMenu/menus/About.cs b/vMenu/menus/About.cs index 99636539..45a3dea8 100644 --- a/vMenu/menus/About.cs +++ b/vMenu/menus/About.cs @@ -18,22 +18,23 @@ public class About // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); private void CreateMenu() { // Create the menu. - menu = new Menu("vMenu", "About vMenu"); + menu = new Menu(LM.Get("vMenu"), LM.Get("About vMenu")); // Create menu items. - MenuItem version = new MenuItem("vMenu Version", $"This server is using vMenu ~b~~h~{MainMenu.Version}~h~~s~.") + MenuItem version = new MenuItem(LM.Get("vMenu Version"), $"This server is using vMenu ~b~~h~{MainMenu.Version}~h~~s~.") { Label = $"~h~{MainMenu.Version}~h~" }; - MenuItem credits = new MenuItem("About vMenu / Credits", "vMenu is made by ~b~Vespura~s~. For more info, checkout ~b~www.vespura.com/vmenu~s~. Thank you to: Deltanic, Brigliar, IllusiveTea, Shayan Doust and zr0iq for your contributions."); + MenuItem credits = new MenuItem(LM.Get("About vMenu / Credits"), LM.Get("vMenu is made by ~b~Vespura~s~. For more info, checkout ~b~www.vespura.com/vmenu~s~. Thank you to: Deltanic, Brigliar, IllusiveTea, Shayan Doust and zr0iq for your contributions.")); string serverInfoMessage = vMenuShared.ConfigManager.GetSettingsString(vMenuShared.ConfigManager.Setting.vmenu_server_info_message); if (!string.IsNullOrEmpty(serverInfoMessage)) { - MenuItem serverInfo = new MenuItem("Server Info", serverInfoMessage); + MenuItem serverInfo = new MenuItem(LM.Get("Server Info"), serverInfoMessage); string siteUrl = vMenuShared.ConfigManager.GetSettingsString(vMenuShared.ConfigManager.Setting.vmenu_server_info_website_url); if (!string.IsNullOrEmpty(siteUrl)) { diff --git a/vMenu/menus/BannedPlayers.cs b/vMenu/menus/BannedPlayers.cs index 8c40d2c0..09f52bb9 100644 --- a/vMenu/menus/BannedPlayers.cs +++ b/vMenu/menus/BannedPlayers.cs @@ -18,6 +18,8 @@ public class BannedPlayers // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); + /// /// Struct used to store bans. /// @@ -34,47 +36,47 @@ public struct BanRecord public List banlist = new List(); - Menu bannedPlayer = new Menu("Banned Player", "Ban Record: "); + Menu bannedPlayer = new Menu(LM.Get("Banned Player"), LM.Get("Ban Record: ")); /// /// Creates the menu. /// private void CreateMenu() { - menu = new Menu(Game.Player.Name, "Banned Players Management"); + menu = new Menu(Game.Player.Name, LM.Get("Banned Players Management")); - menu.InstructionalButtons.Add(Control.Jump, "Filter Options"); + menu.InstructionalButtons.Add(Control.Jump, LM.Get("Filter Options")); menu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.Jump, Menu.ControlPressCheckType.JUST_RELEASED, new Action(async (a, b) => { if (banlist.Count > 1) { - string filterText = await GetUserInput("Filter List By Username (leave this empty to reset the filter!)"); + string filterText = await GetUserInput(LM.Get("Filter List By Username (leave this empty to reset the filter!)")); if (string.IsNullOrEmpty(filterText)) { - Subtitle.Custom("Filters have been cleared."); + Subtitle.Custom(LM.Get("Filters have been cleared.")); menu.ResetFilter(); UpdateBans(); } else { menu.FilterMenuItems(item => item.ItemData is BanRecord br && br.playerName.ToLower().Contains(filterText.ToLower())); - Subtitle.Custom("Username filter has been applied."); + Subtitle.Custom(LM.Get("Username filter has been applied.")); } } else { - Notify.Error("At least 2 players need to be banned in order to use the filter function."); + Notify.Error(LM.Get("At least 2 players need to be banned in order to use the filter function.")); } Log($"Button pressed: {a} {b}"); }), true)); - bannedPlayer.AddMenuItem(new MenuItem("Player Name")); - bannedPlayer.AddMenuItem(new MenuItem("Banned By")); - bannedPlayer.AddMenuItem(new MenuItem("Banned Until")); - bannedPlayer.AddMenuItem(new MenuItem("Player Identifiers")); - bannedPlayer.AddMenuItem(new MenuItem("Banned For")); - bannedPlayer.AddMenuItem(new MenuItem("~r~Unban", "~r~Warning, unbanning the player can NOT be undone. You will NOT be able to ban them again until they re-join the server. Are you absolutely sure you want to unban this player? ~s~Tip: Tempbanned players will automatically get unbanned if they log on to the server after their ban date has expired.")); + bannedPlayer.AddMenuItem(new MenuItem(LM.Get("Player Name"))); + bannedPlayer.AddMenuItem(new MenuItem(LM.Get("Banned By"))); + bannedPlayer.AddMenuItem(new MenuItem(LM.Get("Banned Until"))); + bannedPlayer.AddMenuItem(new MenuItem(LM.Get("Player Identifiers"))); + bannedPlayer.AddMenuItem(new MenuItem(LM.Get("Banned For"))); + bannedPlayer.AddMenuItem(new MenuItem(LM.Get("~r~Unban"), LM.Get("~r~Warning, unbanning the player can NOT be undone. You will NOT be able to ban them again until they re-join the server. Are you absolutely sure you want to unban this player? ~s~Tip: Tempbanned players will automatically get unbanned if they log on to the server after their ban date has expired."))); // should be enough for now to cover all possible identifiers. List colors = new List() { "~r~", "~g~", "~b~", "~o~", "~y~", "~p~", "~s~", "~t~", }; @@ -95,7 +97,7 @@ private void CreateMenu() { if (index == 5 && IsAllowed(Permission.OPUnban)) { - if (item.Label == "Are you sure?") + if (item.Label == LM.Get("Are you sure?")) { if (banlist.Contains(currentRecord)) { @@ -105,12 +107,12 @@ private void CreateMenu() } else { - Notify.Error("Somehow you managed to click the unban button but this ban record you're apparently viewing does not even exist. Weird..."); + Notify.Error(LM.Get("Somehow you managed to click the unban button but this ban record you're apparently viewing does not even exist. Weird...")); } } else { - item.Label = "Are you sure?"; + item.Label = LM.Get("Are you sure?"); } } else @@ -126,21 +128,21 @@ private void CreateMenu() //{ currentRecord = item.ItemData; - bannedPlayer.MenuSubtitle = "Ban Record: ~y~" + currentRecord.playerName; + bannedPlayer.MenuSubtitle = LM.Get("Ban Record: ~y~") + currentRecord.playerName; var nameItem = bannedPlayer.GetMenuItems()[0]; var bannedByItem = bannedPlayer.GetMenuItems()[1]; var bannedUntilItem = bannedPlayer.GetMenuItems()[2]; var playerIdentifiersItem = bannedPlayer.GetMenuItems()[3]; var banReasonItem = bannedPlayer.GetMenuItems()[4]; nameItem.Label = currentRecord.playerName; - nameItem.Description = "Player name: ~y~" + currentRecord.playerName; + nameItem.Description = LM.Get("Player name: ~y~") + currentRecord.playerName; bannedByItem.Label = currentRecord.bannedBy; - bannedByItem.Description = "Player banned by: ~y~" + currentRecord.bannedBy; + bannedByItem.Description = LM.Get("Player banned by: ~y~") + currentRecord.bannedBy; if (currentRecord.bannedUntil.Date.Year == 3000) - bannedUntilItem.Label = "Forever"; + bannedUntilItem.Label = LM.Get("Forever"); else bannedUntilItem.Label = currentRecord.bannedUntil.Date.ToString(); - bannedUntilItem.Description = "This player is banned until: " + currentRecord.bannedUntil.Date.ToString(); + bannedUntilItem.Description = LM.Get("This player is banned until: ") + currentRecord.bannedUntil.Date.ToString(); playerIdentifiersItem.Description = ""; int i = 0; @@ -159,14 +161,14 @@ private void CreateMenu() } i++; } - banReasonItem.Description = "Banned for: " + currentRecord.banReason; + banReasonItem.Description = LM.Get("Banned for: ") + currentRecord.banReason; var unbanPlayerBtn = bannedPlayer.GetMenuItems()[5]; unbanPlayerBtn.Label = ""; if (!IsAllowed(Permission.OPUnban)) { unbanPlayerBtn.Enabled = false; - unbanPlayerBtn.Description = "You are not allowed to unban players. You are only allowed to view their ban record."; + unbanPlayerBtn.Description = LM.Get("You are not allowed to unban players. You are only allowed to view their ban record."); unbanPlayerBtn.LeftIcon = MenuItem.Icon.LOCK; } diff --git a/vMenu/menus/MiscSettings.cs b/vMenu/menus/MiscSettings.cs index 6bc6118f..6b268a66 100644 --- a/vMenu/menus/MiscSettings.cs +++ b/vMenu/menus/MiscSettings.cs @@ -19,7 +19,7 @@ public class MiscSettings private Menu menu; private Menu teleportOptionsMenu; private Menu developerToolsMenu; - + private static LanguageManager LM = new LanguageManager(); public bool ShowSpeedoKmh { get; private set; } = UserDefaults.MiscSpeedKmh; public bool ShowSpeedoMph { get; private set; } = UserDefaults.MiscSpeedMph; public bool ShowCoordinates { get; private set; } = false; @@ -80,89 +80,89 @@ private void CreateMenu() } // Create the menu. - menu = new Menu(Game.Player.Name, "Misc Settings"); - teleportOptionsMenu = new Menu(Game.Player.Name, "Teleport Options"); - developerToolsMenu = new Menu(Game.Player.Name, "Development Tools"); + menu = new Menu(Game.Player.Name, LM.Get("Misc Settings")); + teleportOptionsMenu = new Menu(Game.Player.Name, LM.Get("Teleport Options")); + developerToolsMenu = new Menu(Game.Player.Name, LM.Get("Development Tools")); // teleport menu - Menu teleportMenu = new Menu(Game.Player.Name, "Teleport Locations"); - MenuItem teleportMenuBtn = new MenuItem("Teleport Locations", "Teleport to pre-configured locations, added by the server owner."); + Menu teleportMenu = new Menu(Game.Player.Name, LM.Get("Teleport Locations")); + MenuItem teleportMenuBtn = new MenuItem(LM.Get("Teleport Locations"), LM.Get("Teleport to pre-configured locations, added by the server owner.")); MenuController.AddSubmenu(menu, teleportMenu); MenuController.BindMenuItem(menu, teleportMenu, teleportMenuBtn); // keybind settings menu - Menu keybindMenu = new Menu(Game.Player.Name, "Keybind Settings"); - MenuItem keybindMenuBtn = new MenuItem("Keybind Settings", "Enable or disable keybinds for some options."); + Menu keybindMenu = new Menu(Game.Player.Name, LM.Get("Keybind Settings")); + MenuItem keybindMenuBtn = new MenuItem(LM.Get("Keybind Settings"), LM.Get("Enable or disable keybinds for some options.")); MenuController.AddSubmenu(menu, keybindMenu); MenuController.BindMenuItem(menu, keybindMenu, keybindMenuBtn); // keybind settings menu items - MenuCheckboxItem kbTpToWaypoint = new MenuCheckboxItem("Teleport To Waypoint", "Teleport to your waypoint when pressing the keybind. By default, this keybind is set to ~r~F7~s~, server owners are able to change this however so ask them if you don't know what it is.", KbTpToWaypoint); - MenuCheckboxItem kbDriftMode = new MenuCheckboxItem("Drift Mode", "Makes your vehicle have almost no traction while holding left shift on keyboard, or X on controller.", KbDriftMode); - MenuCheckboxItem kbRecordKeys = new MenuCheckboxItem("Recording Controls", "Enables or disables the recording (gameplay recording for the Rockstar editor) hotkeys on both keyboard and controller.", KbRecordKeys); - MenuCheckboxItem kbRadarKeys = new MenuCheckboxItem("Minimap Controls", "Press the Multiplayer Info (z on keyboard, down arrow on controller) key to switch between expanded radar and normal radar.", KbRadarKeys); - MenuCheckboxItem kbPointKeysCheckbox = new MenuCheckboxItem("Finger Point Controls", "Enables the finger point toggle key. The default QWERTY keyboard mapping for this is 'B', or for controller quickly double tap the right analog stick.", KbPointKeys); - MenuItem backBtn = new MenuItem("Back"); + MenuCheckboxItem kbTpToWaypoint = new MenuCheckboxItem(LM.Get("Teleport To Waypoint"), LM.Get("Teleport to your waypoint when pressing the keybind. By default, this keybind is set to ~r~F7~s~, server owners are able to change this however so ask them if you don't know what it is."), KbTpToWaypoint); + MenuCheckboxItem kbDriftMode = new MenuCheckboxItem(LM.Get("Drift Mode"), LM.Get("Makes your vehicle have almost no traction while holding left shift on keyboard, or X on controller."), KbDriftMode); + MenuCheckboxItem kbRecordKeys = new MenuCheckboxItem(LM.Get("Recording Controls"), LM.Get("Enables or disables the recording (gameplay recording for the Rockstar editor) hotkeys on both keyboard and controller."), KbRecordKeys); + MenuCheckboxItem kbRadarKeys = new MenuCheckboxItem(LM.Get("Minimap Controls"), LM.Get("Press the Multiplayer Info (z on keyboard, down arrow on controller) key to switch between expanded radar and normal radar."), KbRadarKeys); + MenuCheckboxItem kbPointKeysCheckbox = new MenuCheckboxItem(LM.Get("Finger Point Controls"), LM.Get("Enables the finger point toggle key. The default QWERTY keyboard mapping for this is 'B', or for controller quickly double tap the right analog stick."), KbPointKeys); + MenuItem backBtn = new MenuItem(LM.Get("Back")); // Create the menu items. - MenuCheckboxItem rightAlignMenu = new MenuCheckboxItem("Right Align Menu", "If you want vMenu to appear on the left side of your screen, disable this option. This option will be saved immediately. You don't need to click save preferences.", MiscRightAlignMenu); - MenuCheckboxItem disablePms = new MenuCheckboxItem("Disable Private Messages", "Prevent others from sending you a private message via the Online Players menu. This also prevents you from sending messages to other players.", MiscDisablePrivateMessages); - MenuCheckboxItem disableControllerKey = new MenuCheckboxItem("Disable Controller Support", "This disables the controller menu toggle key. This does NOT disable the navigation buttons.", MiscDisableControllerSupport); - MenuCheckboxItem speedKmh = new MenuCheckboxItem("Show Speed KM/H", "Show a speedometer on your screen indicating your speed in KM/h.", ShowSpeedoKmh); - MenuCheckboxItem speedMph = new MenuCheckboxItem("Show Speed MPH", "Show a speedometer on your screen indicating your speed in MPH.", ShowSpeedoMph); - MenuCheckboxItem coords = new MenuCheckboxItem("Show Coordinates", "Show your current coordinates at the top of your screen.", ShowCoordinates); - MenuCheckboxItem hideRadar = new MenuCheckboxItem("Hide Radar", "Hide the radar/minimap.", HideRadar); - MenuCheckboxItem hideHud = new MenuCheckboxItem("Hide Hud", "Hide all hud elements.", HideHud); - MenuCheckboxItem showLocation = new MenuCheckboxItem("Location Display", "Shows your current location and heading, as well as the nearest cross road. Similar like PLD. ~r~Warning: This feature (can) take(s) up to -4.6 FPS when running at 60 Hz.", ShowLocation) { LeftIcon = MenuItem.Icon.WARNING }; - MenuCheckboxItem drawTime = new MenuCheckboxItem("Show Time On Screen", "Shows you the current time on screen.", DrawTimeOnScreen); - MenuItem saveSettings = new MenuItem("Save Personal Settings", "Save your current settings. All saving is done on the client side, if you re-install windows you will lose your settings. Settings are shared across all servers using vMenu.") + MenuCheckboxItem rightAlignMenu = new MenuCheckboxItem(LM.Get("Right Align Menu"), LM.Get("If you want vMenu to appear on the left side of your screen, disable this option. This option will be saved immediately. You don't need to click save preferences."), MiscRightAlignMenu); + MenuCheckboxItem disablePms = new MenuCheckboxItem(LM.Get("Disable Private Messages"), LM.Get("Prevent others from sending you a private message via the Online Players menu. This also prevents you from sending messages to other players."), MiscDisablePrivateMessages); + MenuCheckboxItem disableControllerKey = new MenuCheckboxItem(LM.Get("Disable Controller Support"), LM.Get("This disables the controller menu toggle key. This does NOT disable the navigation buttons."), MiscDisableControllerSupport); + MenuCheckboxItem speedKmh = new MenuCheckboxItem(LM.Get("Show Speed KM/H"), LM.Get("Show a speedometer on your screen indicating your speed in KM/h."), ShowSpeedoKmh); + MenuCheckboxItem speedMph = new MenuCheckboxItem(LM.Get("Show Speed MPH"), LM.Get("Show a speedometer on your screen indicating your speed in MPH."), ShowSpeedoMph); + MenuCheckboxItem coords = new MenuCheckboxItem(LM.Get("Show Coordinates"), LM.Get("Show your current coordinates at the top of your screen."), ShowCoordinates); + MenuCheckboxItem hideRadar = new MenuCheckboxItem(LM.Get("Hide Radar"), LM.Get("Hide the radar/minimap."), HideRadar); + MenuCheckboxItem hideHud = new MenuCheckboxItem(LM.Get("Hide Hud"), LM.Get("Hide all hud elements."), HideHud); + MenuCheckboxItem showLocation = new MenuCheckboxItem(LM.Get("Location Display"), LM.Get("Shows your current location and heading, as well as the nearest cross road. Similar like PLD. ~r~Warning: This feature (can) take(s) up to -4.6 FPS when running at 60 Hz."), ShowLocation) { LeftIcon = MenuItem.Icon.WARNING }; + MenuCheckboxItem drawTime = new MenuCheckboxItem(LM.Get("Show Time On Screen"), LM.Get("Shows you the current time on screen."), DrawTimeOnScreen); + MenuItem saveSettings = new MenuItem(LM.Get("Save Personal Settings"), LM.Get("Save your current settings. All saving is done on the client side, if you re-install windows you will lose your settings. Settings are shared across all servers using vMenu.")) { RightIcon = MenuItem.Icon.TICK }; - MenuItem exportData = new MenuItem("Export/Import Data", "Coming soon (TM): the ability to import and export your saved data."); - MenuCheckboxItem joinQuitNotifs = new MenuCheckboxItem("Join / Quit Notifications", "Receive notifications when someone joins or leaves the server.", JoinQuitNotifications); - MenuCheckboxItem deathNotifs = new MenuCheckboxItem("Death Notifications", "Receive notifications when someone dies or gets killed.", DeathNotifications); - MenuCheckboxItem nightVision = new MenuCheckboxItem("Toggle Night Vision", "Enable or disable night vision.", false); - MenuCheckboxItem thermalVision = new MenuCheckboxItem("Toggle Thermal Vision", "Enable or disable thermal vision.", false); - MenuCheckboxItem vehModelDimensions = new MenuCheckboxItem("Show Vehicle Dimensions", "Draws the model outlines for every vehicle that's currently close to you.", ShowVehicleModelDimensions); - MenuCheckboxItem propModelDimensions = new MenuCheckboxItem("Show Prop Dimensions", "Draws the model outlines for every prop that's currently close to you.", ShowPropModelDimensions); - MenuCheckboxItem pedModelDimensions = new MenuCheckboxItem("Show Ped Dimensions", "Draws the model outlines for every ped that's currently close to you.", ShowPedModelDimensions); - MenuCheckboxItem showEntityHandles = new MenuCheckboxItem("Show Entity Handles", "Draws the the entity handles for all close entities (you must enable the outline functions above for this to work).", ShowEntityHandles); - MenuCheckboxItem showEntityModels = new MenuCheckboxItem("Show Entity Models", "Draws the the entity models for all close entities (you must enable the outline functions above for this to work).", ShowEntityModels); - MenuSliderItem dimensionsDistanceSlider = new MenuSliderItem("Show Dimensions Radius", "Show entity model/handle/dimension draw range.", 0, 20, 20, false); - - MenuItem clearArea = new MenuItem("Clear Area", "Clears the area around your player (100 meters). Damage, dirt, peds, props, vehicles, etc. Everything gets cleaned up, fixed and reset to the default world state."); - MenuCheckboxItem lockCamX = new MenuCheckboxItem("Lock Camera Horizontal Rotation", "Locks your camera horizontal rotation. Could be useful in helicopters I guess.", false); - MenuCheckboxItem lockCamY = new MenuCheckboxItem("Lock Camera Vertical Rotation", "Locks your camera vertical rotation. Could be useful in helicopters I guess.", false); - - - Menu connectionSubmenu = new Menu(Game.Player.Name, "Connection Options"); - MenuItem connectionSubmenuBtn = new MenuItem("Connection Options", "Server connection/game quit options."); - - MenuItem quitSession = new MenuItem("Quit Session", "Leaves you connected to the server, but quits the network session. ~r~Can not be used when you are the host."); - MenuItem rejoinSession = new MenuItem("Re-join Session", "This may not work in all cases, but you can try to use this if you want to re-join the previous session after clicking 'Quit Session'."); - MenuItem quitGame = new MenuItem("Quit Game", "Exits the game after 5 seconds."); - MenuItem disconnectFromServer = new MenuItem("Disconnect From Server", "Disconnects you from the server and returns you to the serverlist. ~r~This feature is not recommended, quit the game completely instead and restart it for a better experience."); + MenuItem exportData = new MenuItem(LM.Get("Export/Import Data"), LM.Get("Coming soon (TM): the ability to import and export your saved data.")); + MenuCheckboxItem joinQuitNotifs = new MenuCheckboxItem(LM.Get("Join / Quit Notifications"), LM.Get("Receive notifications when someone joins or leaves the server."), JoinQuitNotifications); + MenuCheckboxItem deathNotifs = new MenuCheckboxItem(LM.Get("Death Notifications"), LM.Get("Receive notifications when someone dies or gets killed."), DeathNotifications); + MenuCheckboxItem nightVision = new MenuCheckboxItem(LM.Get("Toggle Night Vision"), LM.Get("Enable or disable night vision."), false); + MenuCheckboxItem thermalVision = new MenuCheckboxItem(LM.Get("Toggle Thermal Vision"), LM.Get("Enable or disable thermal vision."), false); + MenuCheckboxItem vehModelDimensions = new MenuCheckboxItem(LM.Get("Show Vehicle Dimensions"), LM.Get("Draws the model outlines for every vehicle that's currently close to you."), ShowVehicleModelDimensions); + MenuCheckboxItem propModelDimensions = new MenuCheckboxItem(LM.Get("Show Prop Dimensions"), LM.Get("Draws the model outlines for every prop that's currently close to you."), ShowPropModelDimensions); + MenuCheckboxItem pedModelDimensions = new MenuCheckboxItem(LM.Get("Show Ped Dimensions"), LM.Get("Draws the model outlines for every ped that's currently close to you."), ShowPedModelDimensions); + MenuCheckboxItem showEntityHandles = new MenuCheckboxItem(LM.Get("Show Entity Handles"), LM.Get("Draws the the entity handles for all close entities (you must enable the outline functions above for this to work)."), ShowEntityHandles); + MenuCheckboxItem showEntityModels = new MenuCheckboxItem(LM.Get("Show Entity Models"), LM.Get("Draws the the entity models for all close entities (you must enable the outline functions above for this to work)."), ShowEntityModels); + MenuSliderItem dimensionsDistanceSlider = new MenuSliderItem(LM.Get("Show Dimensions Radius"), LM.Get("Show entity model/handle/dimension draw range."), 0, 20, 20, false); + + MenuItem clearArea = new MenuItem(LM.Get("Clear Area"), LM.Get("Clears the area around your player (100 meters). Damage, dirt, peds, props, vehicles, etc. Everything gets cleaned up, fixed and reset to the default world state.")); + MenuCheckboxItem lockCamX = new MenuCheckboxItem(LM.Get("Lock Camera Horizontal Rotation"), LM.Get("Locks your camera horizontal rotation. Could be useful in helicopters I guess."), false); + MenuCheckboxItem lockCamY = new MenuCheckboxItem(LM.Get("Lock Camera Vertical Rotation"), LM.Get("Locks your camera vertical rotation. Could be useful in helicopters I guess."), false); + + + Menu connectionSubmenu = new Menu(Game.Player.Name, LM.Get("Connection Options")); + MenuItem connectionSubmenuBtn = new MenuItem(LM.Get("Connection Options"), LM.Get("Server connection/game quit options.")); + + MenuItem quitSession = new MenuItem(LM.Get("Quit Session"), LM.Get("Leaves you connected to the server, but quits the network session. ~r~Can not be used when you are the host.")); + MenuItem rejoinSession = new MenuItem(LM.Get("Re-join Session"), LM.Get("This may not work in all cases, but you can try to use this if you want to re-join the previous session after clicking 'Quit Session'.")); + MenuItem quitGame = new MenuItem(LM.Get("Quit Game"), LM.Get("Exits the game after 5 seconds.")); + MenuItem disconnectFromServer = new MenuItem(LM.Get("Disconnect From Server"), LM.Get("Disconnects you from the server and returns you to the serverlist. ~r~This feature is not recommended, quit the game completely instead and restart it for a better experience.")); connectionSubmenu.AddMenuItem(quitSession); connectionSubmenu.AddMenuItem(rejoinSession); connectionSubmenu.AddMenuItem(quitGame); connectionSubmenu.AddMenuItem(disconnectFromServer); - MenuCheckboxItem enableTimeCycle = new MenuCheckboxItem("Enable Timecycle Modifier", "Enable or disable the timecycle modifier from the list below.", TimecycleEnabled); + MenuCheckboxItem enableTimeCycle = new MenuCheckboxItem(LM.Get("Enable Timecycle Modifier"), LM.Get("Enable or disable the timecycle modifier from the list below."), TimecycleEnabled); List timeCycleModifiersListData = TimeCycles.Timecycles.ToList(); for (var i = 0; i < timeCycleModifiersListData.Count; i++) { timeCycleModifiersListData[i] += $" ({i + 1}/{timeCycleModifiersListData.Count})"; } MenuListItem timeCycles = new MenuListItem("TM", timeCycleModifiersListData, MathUtil.Clamp(LastTimeCycleModifierIndex, 0, Math.Max(0, timeCycleModifiersListData.Count - 1)), "Select a timecycle modifier and enable the checkbox above."); - MenuSliderItem timeCycleIntensity = new MenuSliderItem("Timecycle Modifier Intensity", "Set the timecycle modifier intensity.", 0, 20, LastTimeCycleModifierStrength, true); + MenuSliderItem timeCycleIntensity = new MenuSliderItem(LM.Get("Timecycle Modifier Intensity"), LM.Get("Set the timecycle modifier intensity."), 0, 20, LastTimeCycleModifierStrength, true); - MenuCheckboxItem locationBlips = new MenuCheckboxItem("Location Blips", "Shows blips on the map for some common locations.", ShowLocationBlips); - MenuCheckboxItem playerBlips = new MenuCheckboxItem("Show Player Blips", "Shows blips on the map for all players.", ShowPlayerBlips); - MenuCheckboxItem playerNames = new MenuCheckboxItem("Show Player Names", "Enables or disables player overhead names.", MiscShowOverheadNames); - MenuCheckboxItem respawnDefaultCharacter = new MenuCheckboxItem("Respawn As Default MP Character", "If you enable this, then you will (re)spawn as your default saved MP character. Note the server owner can globally disable this option. To set your default character, go to one of your saved MP Characters and click the 'Set As Default Character' button.", MiscRespawnDefaultCharacter); - MenuCheckboxItem restorePlayerAppearance = new MenuCheckboxItem("Restore Player Appearance", "Restore your player's skin whenever you respawn after being dead. Re-joining a server will not restore your previous skin.", RestorePlayerAppearance); - MenuCheckboxItem restorePlayerWeapons = new MenuCheckboxItem("Restore Player Weapons", "Restore your weapons whenever you respawn after being dead. Re-joining a server will not restore your previous weapons.", RestorePlayerWeapons); + MenuCheckboxItem locationBlips = new MenuCheckboxItem(LM.Get("Location Blips"), LM.Get("Shows blips on the map for some common locations."), ShowLocationBlips); + MenuCheckboxItem playerBlips = new MenuCheckboxItem(LM.Get("Show Player Blips"), LM.Get("Shows blips on the map for all players."), ShowPlayerBlips); + MenuCheckboxItem playerNames = new MenuCheckboxItem(LM.Get("Show Player Names"), LM.Get("Enables or disables player overhead names."), MiscShowOverheadNames); + MenuCheckboxItem respawnDefaultCharacter = new MenuCheckboxItem(LM.Get("Respawn As Default MP Character"), LM.Get("If you enable this, then you will (re)spawn as your default saved MP character. Note the server owner can globally disable this option. To set your default character, go to one of your saved MP Characters and click the 'Set As Default Character' button."), MiscRespawnDefaultCharacter); + MenuCheckboxItem restorePlayerAppearance = new MenuCheckboxItem(LM.Get("Restore Player Appearance"), LM.Get("Restore your player's skin whenever you respawn after being dead. Re-joining a server will not restore your previous skin."), RestorePlayerAppearance); + MenuCheckboxItem restorePlayerWeapons = new MenuCheckboxItem(LM.Get("Restore Player Weapons"), LM.Get("Restore your weapons whenever you respawn after being dead. Re-joining a server will not restore your previous weapons."), RestorePlayerWeapons); MenuController.AddSubmenu(menu, connectionSubmenu); MenuController.BindMenuItem(menu, connectionSubmenu, connectionSubmenuBtn); @@ -210,7 +210,7 @@ private void CreateMenu() { if (NetworkIsHost()) { - Notify.Error("Sorry, you cannot leave the session when you are the host. This would prevent other players from joining/staying on the server."); + Notify.Error(LM.Get("Sorry, you cannot leave the session when you are the host. This would prevent other players from joining/staying on the server.")); } else { @@ -219,18 +219,18 @@ private void CreateMenu() } else { - Notify.Error("You are currently not in any session."); + Notify.Error(LM.Get("You are currently not in any session.")); } } else if (item == rejoinSession) { if (NetworkIsSessionActive()) { - Notify.Error("You are already connected to a session."); + Notify.Error(LM.Get("You are already connected to a session.")); } else { - Notify.Info("Attempting to re-join the session."); + Notify.Info(LM.Get("Attempting to re-join the session.")); NetworkSessionHost(-1, 32, false); } } @@ -245,13 +245,13 @@ private void CreateMenu() // Teleportation options if (IsAllowed(Permission.MSTeleportToWp) || IsAllowed(Permission.MSTeleportLocations) || IsAllowed(Permission.MSTeleportToCoord)) { - MenuItem teleportOptionsMenuBtn = new MenuItem("Teleport Options", "Various teleport options.") { Label = "→→→" }; + MenuItem teleportOptionsMenuBtn = new MenuItem(LM.Get("Teleport Options"), LM.Get("Various teleport options.")) { Label = "→→→" }; menu.AddMenuItem(teleportOptionsMenuBtn); MenuController.BindMenuItem(menu, teleportOptionsMenu, teleportOptionsMenuBtn); - MenuItem tptowp = new MenuItem("Teleport To Waypoint", "Teleport to the waypoint on your map."); - MenuItem tpToCoord = new MenuItem("Teleport To Coords", "Enter x, y, z coordinates and you will be teleported to that location."); - MenuItem saveLocationBtn = new MenuItem("Save Teleport Location", "Adds your current location to the teleport locations menu and saves it on the server."); + MenuItem tptowp = new MenuItem(LM.Get("Teleport To Waypoint"), LM.Get("Teleport to the waypoint on your map.")); + MenuItem tpToCoord = new MenuItem(LM.Get("Teleport To Coords"), LM.Get("Enter x, y, z coordinates and you will be teleported to that location.")); + MenuItem saveLocationBtn = new MenuItem(LM.Get("Save Teleport Location"), LM.Get("Adds your current location to the teleport locations menu and saves it on the server.")); teleportOptionsMenu.OnItemSelect += async (sender, item, index) => { // Teleport to waypoint. @@ -261,19 +261,19 @@ private void CreateMenu() } else if (item == tpToCoord) { - string x = await GetUserInput("Enter X coordinate."); + string x = await GetUserInput(LM.Get("Enter X coordinate.")); if (string.IsNullOrEmpty(x)) { Notify.Error(CommonErrors.InvalidInput); return; } - string y = await GetUserInput("Enter Y coordinate."); + string y = await GetUserInput(LM.Get("Enter Y coordinate.")); if (string.IsNullOrEmpty(y)) { Notify.Error(CommonErrors.InvalidInput); return; } - string z = await GetUserInput("Enter Z coordinate."); + string z = await GetUserInput(LM.Get("Enter Z coordinate.")); if (string.IsNullOrEmpty(z)) { Notify.Error(CommonErrors.InvalidInput); @@ -292,7 +292,7 @@ private void CreateMenu() } else { - Notify.Error("You did not enter a valid X coordinate."); + Notify.Error(LM.Get("You did not enter a valid X coordinate.")); return; } } @@ -304,7 +304,7 @@ private void CreateMenu() } else { - Notify.Error("You did not enter a valid Y coordinate."); + Notify.Error(LM.Get("You did not enter a valid Y coordinate.")); return; } } @@ -316,7 +316,7 @@ private void CreateMenu() } else { - Notify.Error("You did not enter a valid Z coordinate."); + Notify.Error(LM.Get("You did not enter a valid Z coordinate.")); return; } } @@ -383,7 +383,7 @@ private void CreateMenu() #region dev tools menu - MenuItem devToolsBtn = new MenuItem("Developer Tools", "Various development/debug tools.") { Label = "→→→" }; + MenuItem devToolsBtn = new MenuItem(LM.Get("Developer Tools"), LM.Get("Various development/debug tools.")) { Label = "→→→" }; menu.AddMenuItem(devToolsBtn); MenuController.AddSubmenu(menu, developerToolsMenu); MenuController.BindMenuItem(menu, developerToolsMenu, devToolsBtn); diff --git a/vMenu/menus/MpPedCustomization.cs b/vMenu/menus/MpPedCustomization.cs index f6090008..37a4e238 100644 --- a/vMenu/menus/MpPedCustomization.cs +++ b/vMenu/menus/MpPedCustomization.cs @@ -18,20 +18,22 @@ public class MpPedCustomization { // Variables private Menu menu; - public Menu createCharacterMenu = new Menu("Create Character", "Create A New Character"); - public Menu savedCharactersMenu = new Menu("vMenu", "Manage Saved Characters"); - public Menu inheritanceMenu = new Menu("vMenu", "Character Inheritance Options"); - public Menu appearanceMenu = new Menu("vMenu", "Character Appearance Options"); - public Menu faceShapeMenu = new Menu("vMenu", "Character Face Shape Options"); - public Menu tattoosMenu = new Menu("vMenu", "Character Tattoo Options"); - public Menu clothesMenu = new Menu("vMenu", "Character Clothing Options"); - public Menu propsMenu = new Menu("vMenu", "Character Props Options"); - private Menu manageSavedCharacterMenu = new Menu("vMenu", "Manage MP Character"); + private static LanguageManager LM = new LanguageManager(); + + public Menu createCharacterMenu = new Menu(LM.Get("Create Character"), LM.Get("Create A New Character")); + public Menu savedCharactersMenu = new Menu(LM.Get("vMenu"), LM.Get("Manage Saved Characters")); + public Menu inheritanceMenu = new Menu(LM.Get("vMenu"), LM.Get("Character Inheritance Options")); + public Menu appearanceMenu = new Menu(LM.Get("vMenu"), LM.Get("Character Appearance Options")); + public Menu faceShapeMenu = new Menu(LM.Get("vMenu"), LM.Get("Character Face Shape Options")); + public Menu tattoosMenu = new Menu(LM.Get("vMenu"), LM.Get("Character Tattoo Options")); + public Menu clothesMenu = new Menu(LM.Get("vMenu"), LM.Get("Character Clothing Options")); + public Menu propsMenu = new Menu(LM.Get("vMenu"), LM.Get("Character Props Options")); + private Menu manageSavedCharacterMenu = new Menu(LM.Get("vMenu"), LM.Get("Manage MP Character")); // Need to be able to disable/enable these buttons from another class. - internal MenuItem createMaleBtn = new MenuItem("Create Male Character", "Create a new male character.") { Label = "→→→" }; - internal MenuItem createFemaleBtn = new MenuItem("Create Female Character", "Create a new female character.") { Label = "→→→" }; - internal MenuItem editPedBtn = new MenuItem("Edit Saved Character", "This allows you to edit everything about your saved character. The changes will be saved to this character's save file entry once you hit the save button."); + internal MenuItem createMaleBtn = new MenuItem(LM.Get("Create Male Character"), LM.Get("Create a new male character.")) { Label = "→→→" }; + internal MenuItem createFemaleBtn = new MenuItem(LM.Get("Create Female Character"), LM.Get("Create a new female character.")) { Label = "→→→" }; + internal MenuItem editPedBtn = new MenuItem(LM.Get("Edit Saved Character"), LM.Get("This allows you to edit everything about your saved character. The changes will be saved to this character's save file entry once you hit the save button.")); public static bool DontCloseMenus { get { return MenuController.PreventExitingMenu; } set { MenuController.PreventExitingMenu = value; } } public static bool DisableBackButton { get { return MenuController.DisableBackButton; } set { MenuController.DisableBackButton = value; } } @@ -294,68 +296,68 @@ private void MakeCreateCharacterMenu(bool male, bool editPed = false) int currentEyeColor = editPed ? currentCharacter.PedAppearance.eyeColor : 0; SetPedEyeColor(Game.PlayerPed.Handle, currentEyeColor); - MenuListItem hairStyles = new MenuListItem("Hair Style", hairStylesList, currentHairStyle, "Select a hair style."); + MenuListItem hairStyles = new MenuListItem(LM.Get("Hair Style"), hairStylesList, currentHairStyle, LM.Get("Select a hair style.")); //MenuListItem hairColors = new MenuListItem("Hair Color", overlayColorsList, currentHairColor, "Select a hair color."); - MenuListItem hairColors = new MenuListItem("Hair Color", overlayColorsList, currentHairColor, "Select a hair color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; + MenuListItem hairColors = new MenuListItem(LM.Get("Hair Color"), overlayColorsList, currentHairColor, LM.Get("Select a hair color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; //MenuListItem hairHighlightColors = new MenuListItem("Hair Highlight Color", overlayColorsList, currentHairHighlightColor, "Select a hair highlight color."); - MenuListItem hairHighlightColors = new MenuListItem("Hair Highlight Color", overlayColorsList, currentHairHighlightColor, "Select a hair highlight color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; + MenuListItem hairHighlightColors = new MenuListItem(LM.Get("Hair Highlight Color"), overlayColorsList, currentHairHighlightColor, LM.Get("Select a hair highlight color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; - MenuListItem blemishesStyle = new MenuListItem("Blemishes Style", blemishesStyleList, currentBlemishesStyle, "Select a blemishes style."); + MenuListItem blemishesStyle = new MenuListItem(LM.Get("Blemishes Style"), blemishesStyleList, currentBlemishesStyle, LM.Get("Select a blemishes style.")); //MenuSliderItem blemishesOpacity = new MenuSliderItem("Blemishes Opacity", "Select a blemishes opacity.", 0, 10, (int)(currentBlemishesOpacity * 10f), false); - MenuListItem blemishesOpacity = new MenuListItem("Blemishes Opacity", opacity, (int)(currentBlemishesOpacity * 10f), "Select a blemishes opacity.") { ShowOpacityPanel = true }; + MenuListItem blemishesOpacity = new MenuListItem(LM.Get("Blemishes Opacity"), opacity, (int)(currentBlemishesOpacity * 10f), LM.Get("Select a blemishes opacity.")) { ShowOpacityPanel = true }; - MenuListItem beardStyles = new MenuListItem("Beard Style", beardStylesList, currentBeardStyle, "Select a beard/facial hair style."); - MenuListItem beardOpacity = new MenuListItem("Beard Opacity", opacity, (int)(currentBeardOpacity * 10f), "Select the opacity for your beard/facial hair.") { ShowOpacityPanel = true }; - MenuListItem beardColor = new MenuListItem("Beard Color", overlayColorsList, currentBeardColor, "Select a beard color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; + MenuListItem beardStyles = new MenuListItem(LM.Get("Beard Style"), beardStylesList, currentBeardStyle, LM.Get("Select a beard/facial hair style.")); + MenuListItem beardOpacity = new MenuListItem(LM.Get("Beard Opacity"), opacity, (int)(currentBeardOpacity * 10f), LM.Get("Select the opacity for your beard/facial hair.")) { ShowOpacityPanel = true }; + MenuListItem beardColor = new MenuListItem(LM.Get("Beard Color"), overlayColorsList, currentBeardColor, LM.Get("Select a beard color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; //MenuSliderItem beardOpacity = new MenuSliderItem("Beard Opacity", "Select the opacity for your beard/facial hair.", 0, 10, (int)(currentBeardOpacity * 10f), false); //MenuListItem beardColor = new MenuListItem("Beard Color", overlayColorsList, currentBeardColor, "Select a beard color"); - MenuListItem eyebrowStyle = new MenuListItem("Eyebrows Style", eyebrowsStyleList, currentEyebrowStyle, "Select an eyebrows style."); - MenuListItem eyebrowOpacity = new MenuListItem("Eyebrows Opacity", opacity, (int)(currentEyebrowOpacity * 10f), "Select the opacity for your eyebrows.") { ShowOpacityPanel = true }; - MenuListItem eyebrowColor = new MenuListItem("Eyebrows Color", overlayColorsList, currentEyebrowColor, "Select an eyebrows color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; + MenuListItem eyebrowStyle = new MenuListItem(LM.Get("Eyebrows Style"), eyebrowsStyleList, currentEyebrowStyle, LM.Get("Select an eyebrows style.")); + MenuListItem eyebrowOpacity = new MenuListItem(LM.Get("Eyebrows Opacity"), opacity, (int)(currentEyebrowOpacity * 10f), LM.Get("Select the opacity for your eyebrows.")) { ShowOpacityPanel = true }; + MenuListItem eyebrowColor = new MenuListItem(LM.Get("Eyebrows Color"), overlayColorsList, currentEyebrowColor, LM.Get("Select an eyebrows color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; //MenuSliderItem eyebrowOpacity = new MenuSliderItem("Eyebrows Opacity", "Select the opacity for your eyebrows.", 0, 10, (int)(currentEyebrowOpacity * 10f), false); - MenuListItem ageingStyle = new MenuListItem("Ageing Style", ageingStyleList, currentAgeingStyle, "Select an ageing style."); - MenuListItem ageingOpacity = new MenuListItem("Ageing Opacity", opacity, (int)(currentAgeingOpacity * 10f), "Select an ageing opacity.") { ShowOpacityPanel = true }; + MenuListItem ageingStyle = new MenuListItem(LM.Get("Ageing Style"), ageingStyleList, currentAgeingStyle, LM.Get("Select an ageing style.")); + MenuListItem ageingOpacity = new MenuListItem(LM.Get("Ageing Opacity"), opacity, (int)(currentAgeingOpacity * 10f), LM.Get("Select an ageing opacity.")) { ShowOpacityPanel = true }; //MenuSliderItem ageingOpacity = new MenuSliderItem("Ageing Opacity", "Select an ageing opacity.", 0, 10, (int)(currentAgeingOpacity * 10f), false); - MenuListItem makeupStyle = new MenuListItem("Makeup Style", makeupStyleList, currentMakeupStyle, "Select a makeup style."); - MenuListItem makeupOpacity = new MenuListItem("Makeup Opacity", opacity, (int)(currentMakeupOpacity * 10f), "Select a makeup opacity") { ShowOpacityPanel = true }; + MenuListItem makeupStyle = new MenuListItem(LM.Get("Makeup Style"), makeupStyleList, currentMakeupStyle, LM.Get("Select a makeup style.")); + MenuListItem makeupOpacity = new MenuListItem(LM.Get("Makeup Opacity"), opacity, (int)(currentMakeupOpacity * 10f), LM.Get("Select a makeup opacity")) { ShowOpacityPanel = true }; //MenuSliderItem makeupOpacity = new MenuSliderItem("Makeup Opacity", 0, 10, (int)(currentMakeupOpacity * 10f), "Select a makeup opacity."); - MenuListItem makeupColor = new MenuListItem("Makeup Color", overlayColorsList, currentMakeupColor, "Select a makeup color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Makeup }; + MenuListItem makeupColor = new MenuListItem(LM.Get("Makeup Color"), overlayColorsList, currentMakeupColor, LM.Get("Select a makeup color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Makeup }; - MenuListItem blushStyle = new MenuListItem("Blush Style", blushStyleList, currentBlushStyle, "Select a blush style."); - MenuListItem blushOpacity = new MenuListItem("Blush Opacity", opacity, (int)(currentBlushOpacity * 10f), "Select a blush opacity.") { ShowOpacityPanel = true }; + MenuListItem blushStyle = new MenuListItem(LM.Get("Blush Style"), blushStyleList, currentBlushStyle, LM.Get("Select a blush style.")); + MenuListItem blushOpacity = new MenuListItem(LM.Get("Blush Opacity"), opacity, (int)(currentBlushOpacity * 10f), LM.Get("Select a blush opacity.")) { ShowOpacityPanel = true }; //MenuSliderItem blushOpacity = new MenuSliderItem("Blush Opacity", 0, 10, (int)(currentBlushOpacity * 10f), "Select a blush opacity."); - MenuListItem blushColor = new MenuListItem("Blush Color", overlayColorsList, currentBlushColor, "Select a blush color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Makeup }; + MenuListItem blushColor = new MenuListItem(LM.Get("Blush Color"), overlayColorsList, currentBlushColor, LM.Get("Select a blush color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Makeup }; - MenuListItem complexionStyle = new MenuListItem("Complexion Style", complexionStyleList, currentComplexionStyle, "Select a complexion style."); + MenuListItem complexionStyle = new MenuListItem(LM.Get("Complexion Style"), complexionStyleList, currentComplexionStyle, LM.Get("Select a complexion style.")); //MenuSliderItem complexionOpacity = new MenuSliderItem("Complexion Opacity", 0, 10, (int)(currentComplexionOpacity * 10f), "Select a complexion opacity."); - MenuListItem complexionOpacity = new MenuListItem("Complexion Opacity", opacity, (int)(currentComplexionOpacity * 10f), "Select a complexion opacity.") { ShowOpacityPanel = true }; + MenuListItem complexionOpacity = new MenuListItem(LM.Get("Complexion Opacity"), opacity, (int)(currentComplexionOpacity * 10f), LM.Get("Select a complexion opacity.")) { ShowOpacityPanel = true }; - MenuListItem sunDamageStyle = new MenuListItem("Sun Damage Style", sunDamageStyleList, currentSunDamageStyle, "Select a sun damage style."); + MenuListItem sunDamageStyle = new MenuListItem(LM.Get("Sun Damage Style"), sunDamageStyleList, currentSunDamageStyle, LM.Get("Select a sun damage style.")); //MenuSliderItem sunDamageOpacity = new MenuSliderItem("Sun Damage Opacity", 0, 10, (int)(currentSunDamageOpacity * 10f), "Select a sun damage opacity."); - MenuListItem sunDamageOpacity = new MenuListItem("Sun Damage Opacity", opacity, (int)(currentSunDamageOpacity * 10f), "Select a sun damage opacity.") { ShowOpacityPanel = true }; + MenuListItem sunDamageOpacity = new MenuListItem(LM.Get("Sun Damage Opacity"), opacity, (int)(currentSunDamageOpacity * 10f), LM.Get("Select a sun damage opacity.")) { ShowOpacityPanel = true }; - MenuListItem lipstickStyle = new MenuListItem("Lipstick Style", lipstickStyleList, currentLipstickStyle, "Select a lipstick style."); + MenuListItem lipstickStyle = new MenuListItem(LM.Get("Lipstick Style"), lipstickStyleList, currentLipstickStyle, LM.Get("Select a lipstick style.")); //MenuSliderItem lipstickOpacity = new MenuSliderItem("Lipstick Opacity", 0, 10, (int)(currentLipstickOpacity * 10f), "Select a lipstick opacity."); - MenuListItem lipstickOpacity = new MenuListItem("Lipstick Opacity", opacity, (int)(currentLipstickOpacity * 10f), "Select a lipstick opacity.") { ShowOpacityPanel = true }; - MenuListItem lipstickColor = new MenuListItem("Lipstick Color", overlayColorsList, currentLipstickColor, "Select a lipstick color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Makeup }; + MenuListItem lipstickOpacity = new MenuListItem(LM.Get("Lipstick Opacity"), opacity, (int)(currentLipstickOpacity * 10f), LM.Get("Select a lipstick opacity.")) { ShowOpacityPanel = true }; + MenuListItem lipstickColor = new MenuListItem(LM.Get("Lipstick Color"), overlayColorsList, currentLipstickColor, LM.Get("Select a lipstick color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Makeup }; - MenuListItem molesFrecklesStyle = new MenuListItem("Moles and Freckles Style", molesFrecklesStyleList, currentMolesFrecklesStyle, "Select a moles and freckles style."); + MenuListItem molesFrecklesStyle = new MenuListItem(LM.Get("Moles and Freckles Style"), molesFrecklesStyleList, currentMolesFrecklesStyle, LM.Get("Select a moles and freckles style.")); //MenuSliderItem molesFrecklesOpacity = new MenuSliderItem("Moles and Freckles Opacity", 0, 10, (int)(currentMolesFrecklesOpacity * 10f), "Select a moles and freckles opacity."); - MenuListItem molesFrecklesOpacity = new MenuListItem("Moles and Freckles Opacity", opacity, (int)(currentMolesFrecklesOpacity * 10f), "Select a moles and freckles opacity.") { ShowOpacityPanel = true }; + MenuListItem molesFrecklesOpacity = new MenuListItem(LM.Get("Moles and Freckles Opacity"), opacity, (int)(currentMolesFrecklesOpacity * 10f), LM.Get("Select a moles and freckles opacity.")) { ShowOpacityPanel = true }; - MenuListItem chestHairStyle = new MenuListItem("Chest Hair Style", chestHairStyleList, currentChesthairStyle, "Select a chest hair style."); + MenuListItem chestHairStyle = new MenuListItem(LM.Get("Chest Hair Style"), chestHairStyleList, currentChesthairStyle, LM.Get("Select a chest hair style.")); //MenuSliderItem chestHairOpacity = new MenuSliderItem("Chest Hair Opacity", 0, 10, (int)(currentChesthairOpacity * 10f), "Select a chest hair opacity."); - MenuListItem chestHairOpacity = new MenuListItem("Chest Hair Opacity", opacity, (int)(currentChesthairOpacity * 10f), "Select a chest hair opacity.") { ShowOpacityPanel = true }; - MenuListItem chestHairColor = new MenuListItem("Chest Hair Color", overlayColorsList, currentChesthairColor, "Select a chest hair color.") { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; + MenuListItem chestHairOpacity = new MenuListItem(LM.Get("Chest Hair Opacity"), opacity, (int)(currentChesthairOpacity * 10f), LM.Get("Select a chest hair opacity.")) { ShowOpacityPanel = true }; + MenuListItem chestHairColor = new MenuListItem(LM.Get("Chest Hair Color"), overlayColorsList, currentChesthairColor, LM.Get("Select a chest hair color.")) { ShowColorPanel = true, ColorPanelColorType = MenuListItem.ColorPanelType.Hair }; // Body blemishes - MenuListItem bodyBlemishesStyle = new MenuListItem("Body Blemishes Style", bodyBlemishesList, currentBodyBlemishesStyle, "Select body blemishes style."); - MenuListItem bodyBlemishesOpacity = new MenuListItem("Body Blemishes Opacity", opacity, (int)(currentBodyBlemishesOpacity * 10f), "Select body blemishes opacity.") { ShowOpacityPanel = true }; + MenuListItem bodyBlemishesStyle = new MenuListItem(LM.Get("Body Blemishes Style"), bodyBlemishesList, currentBodyBlemishesStyle, LM.Get("Select body blemishes style.")); + MenuListItem bodyBlemishesOpacity = new MenuListItem(LM.Get("Body Blemishes Opacity"), opacity, (int)(currentBodyBlemishesOpacity * 10f), LM.Get("Select body blemishes opacity.")) { ShowOpacityPanel = true }; - MenuListItem eyeColor = new MenuListItem("Eye Colors", eyeColorList, currentEyeColor, "Select an eye/contact lens color."); + MenuListItem eyeColor = new MenuListItem(LM.Get("Eye Colors"), eyeColorList, currentEyeColor, LM.Get("Select an eye/contact lens color.")); appearanceMenu.AddMenuItem(hairStyles); appearanceMenu.AddMenuItem(hairColors); @@ -454,34 +456,34 @@ private void MakeCreateCharacterMenu(bool male, bool editPed = false) { beardStyles.Enabled = false; beardStyles.LeftIcon = MenuItem.Icon.LOCK; - beardStyles.Description = "This is not available for female characters."; + beardStyles.Description = LM.Get("This is not available for female characters."); beardOpacity.Enabled = false; beardOpacity.LeftIcon = MenuItem.Icon.LOCK; - beardOpacity.Description = "This is not available for female characters."; + beardOpacity.Description = LM.Get("This is not available for female characters."); beardColor.Enabled = false; beardColor.LeftIcon = MenuItem.Icon.LOCK; - beardColor.Description = "This is not available for female characters."; + beardColor.Description = LM.Get("This is not available for female characters."); chestHairStyle.Enabled = false; chestHairStyle.LeftIcon = MenuItem.Icon.LOCK; - chestHairStyle.Description = "This is not available for female characters."; + chestHairStyle.Description = LM.Get("This is not available for female characters."); chestHairOpacity.Enabled = false; chestHairOpacity.LeftIcon = MenuItem.Icon.LOCK; - chestHairOpacity.Description = "This is not available for female characters."; + chestHairOpacity.Description = LM.Get("This is not available for female characters."); chestHairColor.Enabled = false; chestHairColor.LeftIcon = MenuItem.Icon.LOCK; - chestHairColor.Description = "This is not available for female characters."; + chestHairColor.Description = LM.Get("This is not available for female characters."); } #endregion #region clothing options menu - string[] clothingCategoryNames = new string[12] { "Unused (head)", "Masks", "Unused (hair)", "Upper Body", "Lower Body", "Bags & Parachutes", "Shoes", "Scarfs & Chains", "Shirt & Accessory", "Body Armor & Accessory 2", "Badges & Logos", "Shirt Overlay & Jackets" }; + string[] clothingCategoryNames = new string[12] { LM.Get("Unused (head)"), LM.Get("Masks"), LM.Get("Unused (hair)"), LM.Get("Upper Body"), LM.Get("Lower Body"), LM.Get("Bags & Parachutes"), LM.Get("Shoes"), LM.Get("Scarfs & Chains"), LM.Get("Shirt & Accessory"), LM.Get("Body Armor & Accessory 2"), LM.Get("Badges & Logos"), LM.Get("Shirt Overlay & Jackets") }; for (int i = 0; i < 12; i++) { if (i != 0 && i != 2) @@ -506,7 +508,7 @@ private void MakeCreateCharacterMenu(bool male, bool editPed = false) #endregion #region props options menu - string[] propNames = new string[5] { "Hats & Helmets", "Glasses", "Misc Props", "Watches", "Bracelets" }; + string[] propNames = new string[5] { LM.Get("Hats & Helmets"), LM.Get("Glasses"), LM.Get("Misc Props"), LM.Get("Watches"), LM.Get("Bracelets") }; for (int x = 0; x < 5; x++) { int propId = x; @@ -674,14 +676,14 @@ private void MakeCreateCharacterMenu(bool male, bool editPed = false) } } - const string tatDesc = "Cycle through the list to preview tattoos. If you like one, press enter to select it, selecting it will add the tattoo if you don't already have it. If you already have that tattoo then the tattoo will be removed."; - MenuListItem headTatts = new MenuListItem("Head Tattoos", headTattoosList, 0, tatDesc); - MenuListItem torsoTatts = new MenuListItem("Torso Tattoos", torsoTattoosList, 0, tatDesc); - MenuListItem leftArmTatts = new MenuListItem("Left Arm Tattoos", leftArmTattoosList, 0, tatDesc); - MenuListItem rightArmTatts = new MenuListItem("Right Arm Tattoos", rightArmTattoosList, 0, tatDesc); - MenuListItem leftLegTatts = new MenuListItem("Left Leg Tattoos", leftLegTattoosList, 0, tatDesc); - MenuListItem rightLegTatts = new MenuListItem("Right Leg Tattoos", rightLegTattoosList, 0, tatDesc); - MenuListItem badgeTatts = new MenuListItem("Badge Overlays", badgeTattoosList, 0, tatDesc); + string tatDesc = LM.Get("Cycle through the list to preview tattoos. If you like one, press enter to select it, selecting it will add the tattoo if you don't already have it. If you already have that tattoo then the tattoo will be removed."); + MenuListItem headTatts = new MenuListItem(LM.Get("Head Tattoos"), headTattoosList, 0, tatDesc); + MenuListItem torsoTatts = new MenuListItem(LM.Get("Torso Tattoos"), torsoTattoosList, 0, tatDesc); + MenuListItem leftArmTatts = new MenuListItem(LM.Get("Left Arm Tattoos"), leftArmTattoosList, 0, tatDesc); + MenuListItem rightArmTatts = new MenuListItem(LM.Get("Right Arm Tattoos"), rightArmTattoosList, 0, tatDesc); + MenuListItem leftLegTatts = new MenuListItem(LM.Get("Left Leg Tattoos"), leftLegTattoosList, 0, tatDesc); + MenuListItem rightLegTatts = new MenuListItem(LM.Get("Right Leg Tattoos"), rightLegTattoosList, 0, tatDesc); + MenuListItem badgeTatts = new MenuListItem(LM.Get("Badge Overlays"), badgeTattoosList, 0, tatDesc); tattoosMenu.AddMenuItem(headTatts); tattoosMenu.AddMenuItem(torsoTatts); @@ -690,7 +692,7 @@ private void MakeCreateCharacterMenu(bool male, bool editPed = false) tattoosMenu.AddMenuItem(leftLegTatts); tattoosMenu.AddMenuItem(rightLegTatts); tattoosMenu.AddMenuItem(badgeTatts); - tattoosMenu.AddMenuItem(new MenuItem("Remove All Tattoos", "Click this if you want to remove all tattoos and start over.")); + tattoosMenu.AddMenuItem(new MenuItem(LM.Get("Remove All Tattoos"), LM.Get("Click this if you want to remove all tattoos and start over."))); #endregion createCharacterMenu.RefreshIndex(); @@ -711,18 +713,18 @@ private async Task SavePed() string json = JsonConvert.SerializeObject(currentCharacter); if (StorageManager.SaveJsonData(currentCharacter.SaveName, json, true)) { - Notify.Success("Your character was saved successfully."); + Notify.Success(LM.Get("Your character was saved successfully.")); return true; } else { - Notify.Error("Your character could not be saved. Reason unknown. :("); + Notify.Error(LM.Get("Your character could not be saved. Reason unknown. :(")); return false; } } else { - string name = await GetUserInput(windowTitle: "Enter a save name.", maxInputLength: 30); + string name = await GetUserInput(windowTitle: LM.Get("Enter a save name."), maxInputLength: 30); if (string.IsNullOrEmpty(name)) { Notify.Error(CommonErrors.InvalidInput); @@ -755,9 +757,9 @@ private async Task SavePed() private void CreateMenu() { // Create the menu. - menu = new Menu(Game.Player.Name, "MP Ped Customization"); + menu = new Menu(Game.Player.Name, LM.Get("MP Ped Customization")); - MenuItem savedCharacters = new MenuItem("Saved Characters", "Spawn, edit or delete your existing saved multiplayer characters.") + MenuItem savedCharacters = new MenuItem(LM.Get("Saved Characters"), LM.Get("Spawn, edit or delete your existing saved multiplayer characters.")) { Label = "→→→" }; @@ -782,48 +784,48 @@ private void CreateMenu() menu.RefreshIndex(); - createCharacterMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - inheritanceMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - appearanceMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - faceShapeMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - tattoosMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - clothesMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - propsMenu.InstructionalButtons.Add(Control.MoveLeftRight, "Turn Head"); - - createCharacterMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - inheritanceMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - appearanceMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - faceShapeMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - tattoosMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - clothesMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - propsMenu.InstructionalButtons.Add(Control.PhoneExtraOption, "Turn Character"); - - createCharacterMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - inheritanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - appearanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - faceShapeMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - tattoosMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - clothesMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - propsMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, "Turn Camera Right"); - - createCharacterMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - inheritanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - appearanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - faceShapeMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - tattoosMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - clothesMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - propsMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, "Turn Camera Left"); - - - MenuItem inheritanceButton = new MenuItem("Character Inheritance", "Character inheritance options."); - MenuItem appearanceButton = new MenuItem("Character Appearance", "Character appearance options."); - MenuItem faceButton = new MenuItem("Character Face Shape Options", "Character face shape options."); - MenuItem tattoosButton = new MenuItem("Character Tattoo Options", "Character tattoo options."); - MenuItem clothesButton = new MenuItem("Character Clothes", "Character clothes."); - MenuItem propsButton = new MenuItem("Character Props", "Character props."); - MenuItem saveButton = new MenuItem("Save Character", "Save your character."); - MenuItem exitNoSave = new MenuItem("Exit Without Saving", "Are you sure? All unsaved work will be lost."); - MenuListItem faceExpressionList = new MenuListItem("Facial Expression", new List { "Normal", "Happy", "Angry", "Aiming", "Injured", "Stressed", "Smug", "Sulk" }, 0, "Set a facial expression that will be used whenever your ped is idling."); + createCharacterMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + inheritanceMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + appearanceMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + faceShapeMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + tattoosMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + clothesMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + propsMenu.InstructionalButtons.Add(Control.MoveLeftRight, LM.Get("Turn Head")); + + createCharacterMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + inheritanceMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + appearanceMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + faceShapeMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + tattoosMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + clothesMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + propsMenu.InstructionalButtons.Add(Control.PhoneExtraOption, LM.Get("Turn Character")); + + createCharacterMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + inheritanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + appearanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + faceShapeMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + tattoosMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + clothesMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + propsMenu.InstructionalButtons.Add(Control.ParachuteBrakeRight, LM.Get("Turn Camera Right")); + + createCharacterMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + inheritanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + appearanceMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + faceShapeMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + tattoosMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + clothesMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + propsMenu.InstructionalButtons.Add(Control.ParachuteBrakeLeft, LM.Get("Turn Camera Left")); + + + MenuItem inheritanceButton = new MenuItem(LM.Get("Character Inheritance"), LM.Get("Character inheritance options.")); + MenuItem appearanceButton = new MenuItem(LM.Get("Character Appearance"), LM.Get("Character appearance options.")); + MenuItem faceButton = new MenuItem(LM.Get("Character Face Shape Options"), LM.Get("Character face shape options.")); + MenuItem tattoosButton = new MenuItem(LM.Get("Character Tattoo Options"), LM.Get("Character tattoo options.")); + MenuItem clothesButton = new MenuItem(LM.Get("Character Clothes"), LM.Get("Character clothes.")); + MenuItem propsButton = new MenuItem(LM.Get("Character Props"), LM.Get("Character props.")); + MenuItem saveButton = new MenuItem(LM.Get("Save Character"), LM.Get("Save your character.")); + MenuItem exitNoSave = new MenuItem(LM.Get("Exit Without Saving"), LM.Get("Are you sure? All unsaved work will be lost.")); + MenuListItem faceExpressionList = new MenuListItem(LM.Get("Facial Expression"), new List { "Normal", "Happy", "Angry", "Aiming", "Injured", "Stressed", "Smug", "Sulk" }, 0, "Set a facial expression that will be used whenever your ped is idling."); inheritanceButton.Label = "→→→"; appearanceButton.Label = "→→→"; @@ -856,11 +858,11 @@ private void CreateMenu() parents.Add($"#{i}"); } - var inheritanceDads = new MenuListItem("Father", parents, 0, "Select a father."); - var inheritanceMoms = new MenuListItem("Mother", parents, 0, "Select a mother."); + var inheritanceDads = new MenuListItem(LM.Get("Father"), parents, 0, LM.Get("Select a father.")); + var inheritanceMoms = new MenuListItem(LM.Get("Mother"), parents, 0, LM.Get("Select a mother.")); List mixValues = new List() { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f }; - var inheritanceShapeMix = new MenuSliderItem("Head Shape Mix", "Select how much of your head shape should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom.", 0, 10, 5, true) { SliderLeftIcon = MenuItem.Icon.MALE, SliderRightIcon = MenuItem.Icon.FEMALE }; - var inheritanceSkinMix = new MenuSliderItem("Body Skin Mix", "Select how much of your body skin tone should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom.", 0, 10, 5, true) { SliderLeftIcon = MenuItem.Icon.MALE, SliderRightIcon = MenuItem.Icon.FEMALE }; + var inheritanceShapeMix = new MenuSliderItem(LM.Get("Head Shape Mix"), LM.Get("Select how much of your head shape should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom."), 0, 10, 5, true) { SliderLeftIcon = MenuItem.Icon.MALE, SliderRightIcon = MenuItem.Icon.FEMALE }; + var inheritanceSkinMix = new MenuSliderItem(LM.Get("Body Skin Mix"), LM.Get("Select how much of your body skin tone should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom."), 0, 10, 5, true) { SliderLeftIcon = MenuItem.Icon.MALE, SliderRightIcon = MenuItem.Icon.FEMALE }; inheritanceMenu.AddMenuItem(inheritanceDads); inheritanceMenu.AddMenuItem(inheritanceMoms); @@ -2033,12 +2035,12 @@ private void CreateSavedPedsMenu() MenuController.AddMenu(manageSavedCharacterMenu); - MenuItem spawnPed = new MenuItem("Spawn Saved Character", "Spawns the selected saved character."); - editPedBtn = new MenuItem("Edit Saved Character", "This allows you to edit everything about your saved character. The changes will be saved to this character's save file entry once you hit the save button."); - MenuItem clonePed = new MenuItem("Clone Saved Character", "This will make a clone of your saved character. It will ask you to provide a name for that character. If that name is already taken the action will be canceled."); - MenuItem setAsDefaultPed = new MenuItem("Set As Default Character", "If you set this character as your default character, and you enable the 'Respawn As Default MP Character' option in the Misc Settings menu, then you will be set as this character whenever you (re)spawn."); - MenuItem renameCharacter = new MenuItem("Rename Saved Character", "You can rename this saved character. If the name is already taken then the action will be canceled."); - MenuItem delPed = new MenuItem("Delete Saved Character", "Deletes the selected saved character. This can not be undone!") + MenuItem spawnPed = new MenuItem(LM.Get("Spawn Saved Character"), LM.Get("Spawns the selected saved character.")); + editPedBtn = new MenuItem(LM.Get("Edit Saved Character"), LM.Get("This allows you to edit everything about your saved character. The changes will be saved to this character's save file entry once you hit the save button.")); + MenuItem clonePed = new MenuItem(LM.Get("Clone Saved Character"), LM.Get("This will make a clone of your saved character. It will ask you to provide a name for that character. If that name is already taken the action will be canceled.")); + MenuItem setAsDefaultPed = new MenuItem(LM.Get("Set As Default Character"), LM.Get("If you set this character as your default character, and you enable the 'Respawn As Default MP Character' option in the Misc Settings menu, then you will be set as this character whenever you (re)spawn.")); + MenuItem renameCharacter = new MenuItem(LM.Get("Rename Saved Character"), LM.Get("You can rename this saved character. If the name is already taken then the action will be canceled.")); + MenuItem delPed = new MenuItem(LM.Get("Delete Saved Character"), LM.Get("Deletes the selected saved character. This can not be undone!")) { LeftIcon = MenuItem.Icon.WARNING }; @@ -2070,7 +2072,7 @@ private void CreateSavedPedsMenu() else if (item == clonePed) { var tmpCharacter = StorageManager.GetSavedMpCharacterData("mp_ped_" + selectedSavedCharacterManageName); - string name = await GetUserInput(windowTitle: "Enter a name for the cloned character", defaultText: tmpCharacter.SaveName.Substring(7), maxInputLength: 30); + string name = await GetUserInput(windowTitle: LM.Get("Enter a name for the cloned character"), defaultText: tmpCharacter.SaveName.Substring(7), maxInputLength: 30); if (string.IsNullOrEmpty(name)) { Notify.Error(CommonErrors.InvalidSaveName); @@ -2091,7 +2093,7 @@ private void CreateSavedPedsMenu() } else { - Notify.Error("The clone could not be created, reason unknown. Does a character already exist with that name? :("); + Notify.Error(LM.Get("The clone could not be created, reason unknown. Does a character already exist with that name? :(")); } } } @@ -2099,7 +2101,7 @@ private void CreateSavedPedsMenu() else if (item == renameCharacter) { var tmpCharacter = StorageManager.GetSavedMpCharacterData("mp_ped_" + selectedSavedCharacterManageName); - string name = await GetUserInput(windowTitle: "Enter a new character name", defaultText: tmpCharacter.SaveName.Substring(7), maxInputLength: 30); + string name = await GetUserInput(windowTitle: LM.Get("Enter a new character name"), defaultText: tmpCharacter.SaveName.Substring(7), maxInputLength: 30); if (string.IsNullOrEmpty(name)) { Notify.Error(CommonErrors.InvalidInput); @@ -2126,25 +2128,25 @@ private void CreateSavedPedsMenu() } else { - Notify.Error("Something went wrong while renaming your character, your old character will NOT be deleted because of this."); + Notify.Error(LM.Get("Something went wrong while renaming your character, your old character will NOT be deleted because of this.")); } } } } else if (item == delPed) { - if (delPed.Label == "Are you sure?") + if (delPed.Label == LM.Get("Are you sure?")) { delPed.Label = ""; DeleteResourceKvp("mp_ped_" + selectedSavedCharacterManageName); - Notify.Success("Your saved character has been deleted."); + Notify.Success(LM.Get("Your saved character has been deleted.")); manageSavedCharacterMenu.GoBack(); UpdateSavedPedsMenu(); manageSavedCharacterMenu.RefreshIndex(); } else { - delPed.Label = "Are you sure?"; + delPed.Label = LM.Get("Are you sure?"); } } else if (item == setAsDefaultPed) @@ -2155,7 +2157,7 @@ private void CreateSavedPedsMenu() if (item != delPed) { - if (delPed.Label == "Are you sure?") + if (delPed.Label == LM.Get("Are you sure?")) { delPed.Label = ""; } @@ -2206,14 +2208,14 @@ private void UpdateSavedPedsMenu() foreach (string item in names) { var tmpData = StorageManager.GetSavedMpCharacterData("mp_ped_" + item); - MenuItem btn = new MenuItem(item, "Click to spawn, edit, clone, rename or delete this saved character.") + MenuItem btn = new MenuItem(item, LM.Get("Click to spawn, edit, clone, rename or delete this saved character.")) { Label = $"({(tmpData.IsMale ? "M" : "F")}) →→→" }; if (defaultChar == "mp_ped_" + item) { btn.LeftIcon = MenuItem.Icon.TICK; - btn.Description += " ~g~This character is currently set as your default character and will be used whenever you (re)spawn."; + btn.Description += LM.Get(" ~g~This character is currently set as your default character and will be used whenever you (re)spawn."); } savedCharactersMenu.AddMenuItem(btn); MenuController.BindMenuItem(savedCharactersMenu, manageSavedCharacterMenu, btn); diff --git a/vMenu/menus/OnlinePlayers.cs b/vMenu/menus/OnlinePlayers.cs index 30e56dfc..9d3c028f 100644 --- a/vMenu/menus/OnlinePlayers.cs +++ b/vMenu/menus/OnlinePlayers.cs @@ -20,7 +20,9 @@ public class OnlinePlayers // Menu variable, will be defined in CreateMenu() private Menu menu; - Menu playerMenu = new Menu("Online Players", "Player:"); + private static LanguageManager LM = new LanguageManager(); + + Menu playerMenu = new Menu(LM.Get("Online Players"), LM.Get("Player:")); Player currentPlayer = new Player(Game.Player.Handle); @@ -30,22 +32,22 @@ public class OnlinePlayers private void CreateMenu() { // Create the menu. - menu = new Menu(Game.Player.Name, "Online Players") { }; - menu.CounterPreText = "Players: "; + menu = new Menu(Game.Player.Name, LM.Get("Online Players")) { }; + menu.CounterPreText = LM.Get("Players: "); MenuController.AddSubmenu(menu, playerMenu); - MenuItem sendMessage = new MenuItem("Send Private Message", "Sends a private message to this player. ~r~Note: staff may be able to see all PM's."); - MenuItem teleport = new MenuItem("Teleport To Player", "Teleport to this player."); - MenuItem teleportVeh = new MenuItem("Teleport Into Player Vehicle", "Teleport into the vehicle of the player."); - MenuItem summon = new MenuItem("Summon Player", "Teleport the player to you."); - MenuItem toggleGPS = new MenuItem("Toggle GPS", "Enables or disables the GPS route on your radar to this player."); - MenuItem spectate = new MenuItem("Spectate Player", "Spectate this player. Click this button again to stop spectating."); - MenuItem printIdentifiers = new MenuItem("Print Identifiers", "This will print the player's identifiers to the client console (F8). And also save it to the CitizenFX.log file."); - MenuItem kill = new MenuItem("~r~Kill Player", "Kill this player, note they will receive a notification saying that you killed them. It will also be logged in the Staff Actions log."); - MenuItem kick = new MenuItem("~r~Kick Player", "Kick the player from the server."); - MenuItem ban = new MenuItem("~r~Ban Player Permanently", "Ban this player permanently from the server. Are you sure you want to do this? You can specify the ban reason after clicking this button."); - MenuItem tempban = new MenuItem("~r~Ban Player Temporarily", "Give this player a tempban of up to 30 days (max). You can specify duration and ban reason after clicking this button."); + MenuItem sendMessage = new MenuItem(LM.Get("Send Private Message"), LM.Get("Sends a private message to this player. ~r~Note: staff may be able to see all PM's.")); + MenuItem teleport = new MenuItem(LM.Get("Teleport To Player"), LM.Get("Teleport to this player.")); + MenuItem teleportVeh = new MenuItem(LM.Get("Teleport Into Player Vehicle"), LM.Get("Teleport into the vehicle of the player.")); + MenuItem summon = new MenuItem(LM.Get("Summon Player"), LM.Get("Teleport the player to you.")); + MenuItem toggleGPS = new MenuItem(LM.Get("Toggle GPS"), LM.Get("Enables or disables the GPS route on your radar to this player.")); + MenuItem spectate = new MenuItem(LM.Get("Spectate Player"), LM.Get("Spectate this player. Click this button again to stop spectating.")); + MenuItem printIdentifiers = new MenuItem(LM.Get("Print Identifiers"), LM.Get("This will print the player's identifiers to the client console (F8). And also save it to the CitizenFX.log file.")); + MenuItem kill = new MenuItem(LM.Get("~r~Kill Player"), LM.Get("Kill this player, note they will receive a notification saying that you killed them. It will also be logged in the Staff Actions log.")); + MenuItem kick = new MenuItem(LM.Get("~r~Kick Player"), LM.Get("Kick the player from the server.")); + MenuItem ban = new MenuItem(LM.Get("~r~Ban Player Permanently"), LM.Get("Ban this player permanently from the server. Are you sure you want to do this? You can specify the ban reason after clicking this button.")); + MenuItem tempban = new MenuItem(LM.Get("~r~Ban Player Temporarily"), LM.Get("Give this player a tempban of up to 30 days (max). You can specify duration and ban reason after clicking this button.")); // always allowed playerMenu.AddMenuItem(sendMessage); @@ -121,7 +123,7 @@ private void CreateMenu() } else { - Notify.Error("You can't send a private message if you have private messages disabled yourself. Enable them in the Misc Settings menu and try again."); + Notify.Error(LM.Get("You can't send a private message if you have private messages disabled yourself. Enable them in the Misc Settings menu and try again.")); } @@ -133,7 +135,7 @@ private void CreateMenu() if (Game.Player.Handle != currentPlayer.Handle) TeleportToPlayer(currentPlayer.Handle, item == teleportVeh); // teleport to the player. optionally in the player's vehicle if that button was pressed. else - Notify.Error("You can not teleport to yourself!"); + Notify.Error(LM.Get("You can not teleport to yourself!")); } // summon button else if (item == summon) @@ -141,7 +143,7 @@ private void CreateMenu() if (Game.Player.Handle != currentPlayer.Handle) SummonPlayer(currentPlayer); else - Notify.Error("You can't summon yourself."); + Notify.Error(LM.Get("You can't summon yourself.")); } // spectating else if (item == spectate) @@ -201,7 +203,7 @@ private void CreateMenu() } else { - Notify.Error("You can not set a waypoint to yourself."); + Notify.Error(LM.Get("You can not set a waypoint to yourself.")); } } } @@ -226,7 +228,7 @@ private void CreateMenu() if (currentPlayer.Handle != Game.Player.Handle) KickPlayer(currentPlayer, true); else - Notify.Error("You cannot kick yourself!"); + Notify.Error(LM.Get("You cannot kick yourself!")); } // temp ban else if (item == tempban) @@ -236,7 +238,7 @@ private void CreateMenu() // perm ban else if (item == ban) { - if (ban.Label == "Are you sure?") + if (ban.Label == LM.Get("Are you sure?")) { ban.Label = ""; UpdatePlayerlist(); @@ -245,7 +247,7 @@ private void CreateMenu() } else { - ban.Label = "Are you sure?"; + ban.Label = LM.Get("Are you sure?"); } } }; diff --git a/vMenu/menus/PersonalVehicle.cs b/vMenu/menus/PersonalVehicle.cs index a3ab54a6..abca3ad0 100644 --- a/vMenu/menus/PersonalVehicle.cs +++ b/vMenu/menus/PersonalVehicle.cs @@ -17,6 +17,9 @@ public class PersonalVehicle { // Variables private Menu menu; + + private static LanguageManager LM = new LanguageManager(); + public bool EnableVehicleBlip { get; private set; } = UserDefaults.PVEnableVehicleBlip; // Empty constructor @@ -33,26 +36,26 @@ public PersonalVehicle() { } private void CreateMenu() { // Menu - menu = new Menu(GetSafePlayerName(Game.Player.Name), "Personal Vehicle Options"); + menu = new Menu(GetSafePlayerName(Game.Player.Name), LM.Get("Personal Vehicle Options")); // menu items - MenuItem setVehice = new MenuItem("Set Vehicle", "Sets your current vehicle as your personal vehicle. If you already have a personal vehicle set then this will override your selection.") { Label = "Current Vehicle: None" }; - MenuItem toggleEngine = new MenuItem("Toggle Engine", "Toggles the engine on or off, even when you're not inside of the vehicle. This does not work if someone else is currently using your vehicle."); - MenuListItem toggleLights = new MenuListItem("Set Vehicle Lights", new List() { "Force On", "Force Off", "Reset" }, 0, "This will enable or disable your vehicle headlights, the engine of your vehicle needs to be running for this to work."); - MenuItem kickAllPassengers = new MenuItem("Kick Passengers", "This will remove all passengers from your personal vehicle."); + MenuItem setVehice = new MenuItem(LM.Get("Set Vehicle"), LM.Get("Sets your current vehicle as your personal vehicle. If you already have a personal vehicle set then this will override your selection.")) { Label = LM.Get("Current Vehicle: None") }; + MenuItem toggleEngine = new MenuItem(LM.Get("Toggle Engine"), LM.Get("Toggles the engine on or off, even when you're not inside of the vehicle. This does not work if someone else is currently using your vehicle.")); + MenuListItem toggleLights = new MenuListItem(LM.Get("Set Vehicle Lights"), new List() { LM.Get("Force On"), LM.Get("Force Off"), LM.Get("Reset") }, 0, LM.Get("This will enable or disable your vehicle headlights, the engine of your vehicle needs to be running for this to work.")); + MenuItem kickAllPassengers = new MenuItem(LM.Get("Kick Passengers"), LM.Get("This will remove all passengers from your personal vehicle.")); //MenuItem - MenuItem lockDoors = new MenuItem("Lock Vehicle Doors", "This will lock all your vehicle doors for all players. Anyone already inside will always be able to leave the vehicle, even if the doors are locked."); - MenuItem unlockDoors = new MenuItem("Unlock Vehicle Doors", "This will unlock all your vehicle doors for all players."); - MenuItem doorsMenuBtn = new MenuItem("Vehicle Doors", "Open, close, remove and restore vehicle doors here.") + MenuItem lockDoors = new MenuItem(LM.Get("Lock Vehicle Doors"), LM.Get("This will lock all your vehicle doors for all players. Anyone already inside will always be able to leave the vehicle, even if the doors are locked.")); + MenuItem unlockDoors = new MenuItem(LM.Get("Unlock Vehicle Doors"), LM.Get("This will unlock all your vehicle doors for all players.")); + MenuItem doorsMenuBtn = new MenuItem(LM.Get("Vehicle Doors"), LM.Get("Open, close, remove and restore vehicle doors here.")) { Label = "→→→" }; - MenuItem soundHorn = new MenuItem("Sound Horn", "Sounds the horn of the vehicle."); - MenuItem toggleAlarm = new MenuItem("Toggle Alarm Sound", "Toggles the vehicle alarm sound on or off. This does not set an alarm. It only toggles the current sounding status of the alarm."); - MenuCheckboxItem enableBlip = new MenuCheckboxItem("Add Blip For Personal Vehicle", "Enables or disables the blip that gets added when you mark a vehicle as your personal vehicle.", EnableVehicleBlip) { Style = MenuCheckboxItem.CheckboxStyle.Cross }; - MenuCheckboxItem exclusiveDriver = new MenuCheckboxItem("Exclusive Driver", "If enabled, then you will be the only one that can enter the drivers seat. Other players will not be able to drive the car. They can still be passengers.", false) { Style = MenuCheckboxItem.CheckboxStyle.Cross }; + MenuItem soundHorn = new MenuItem(LM.Get("Sound Horn"), LM.Get("Sounds the horn of the vehicle.")); + MenuItem toggleAlarm = new MenuItem(LM.Get("Toggle Alarm Sound"), LM.Get("Toggles the vehicle alarm sound on or off. This does not set an alarm. It only toggles the current sounding status of the alarm.")); + MenuCheckboxItem enableBlip = new MenuCheckboxItem(LM.Get("Add Blip For Personal Vehicle"), LM.Get("Enables or disables the blip that gets added when you mark a vehicle as your personal vehicle."), EnableVehicleBlip) { Style = MenuCheckboxItem.CheckboxStyle.Cross }; + MenuCheckboxItem exclusiveDriver = new MenuCheckboxItem(LM.Get("Exclusive Driver"), LM.Get("If enabled, then you will be the only one that can enter the drivers seat. Other players will not be able to drive the car. They can still be passengers."), false) { Style = MenuCheckboxItem.CheckboxStyle.Cross }; //submenu - VehicleDoorsMenu = new Menu("Vehicle Doors", "Vehicle Doors Management"); + VehicleDoorsMenu = new Menu(LM.Get("Vehicle Doors"), LM.Get("Vehicle Doors Management")); MenuController.AddSubmenu(menu, VehicleDoorsMenu); MenuController.BindMenuItem(menu, VehicleDoorsMenu, doorsMenuBtn); @@ -125,7 +128,7 @@ private void CreateMenu() { if (!NetworkRequestControlOfEntity(CurrentPersonalVehicle.Handle)) { - Notify.Error("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle."); + Notify.Error(LM.Get("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle.")); return; } } @@ -149,7 +152,7 @@ private void CreateMenu() } else { - Notify.Error("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options."); + Notify.Error(LM.Get("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options.")); } }; @@ -168,11 +171,11 @@ private void CreateMenu() CurrentPersonalVehicle.AttachBlip(); } CurrentPersonalVehicle.AttachedBlip.Sprite = BlipSprite.PersonalVehicleCar; - CurrentPersonalVehicle.AttachedBlip.Name = "Personal Vehicle"; + CurrentPersonalVehicle.AttachedBlip.Name = LM.Get("Personal Vehicle"); } else { - Notify.Error("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options."); + Notify.Error(LM.Get("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options.")); } } @@ -204,7 +207,7 @@ private void CreateMenu() else { item.Checked = !_checked; - Notify.Error("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle."); + Notify.Error(LM.Get("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle.")); } } } @@ -232,7 +235,7 @@ private void CreateMenu() veh.AttachBlip(); } veh.AttachedBlip.Sprite = BlipSprite.PersonalVehicleCar; - veh.AttachedBlip.Name = "Personal Vehicle"; + veh.AttachedBlip.Name = LM.Get("Personal Vehicle"); } var name = GetLabelText(veh.DisplayName); if (string.IsNullOrEmpty(name) || name.ToLower() == "null") @@ -267,7 +270,7 @@ private void CreateMenu() } else { - Notify.Info("There are no other players in your vehicle that need to be kicked out."); + Notify.Info(LM.Get("There are no other players in your vehicle that need to be kicked out.")); } } else @@ -276,7 +279,7 @@ private void CreateMenu() { if (!NetworkRequestControlOfEntity(CurrentPersonalVehicle.Handle)) { - Notify.Error("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle."); + Notify.Error(LM.Get("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle.")); return; } } @@ -309,25 +312,25 @@ private void CreateMenu() } else { - Notify.Error("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options."); + Notify.Error(LM.Get("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options.")); } }; #region Doors submenu - MenuItem openAll = new MenuItem("Open All Doors", "Open all vehicle doors."); - MenuItem closeAll = new MenuItem("Close All Doors", "Close all vehicle doors."); - MenuItem LF = new MenuItem("Left Front Door", "Open/close the left front door."); - MenuItem RF = new MenuItem("Right Front Door", "Open/close the right front door."); - MenuItem LR = new MenuItem("Left Rear Door", "Open/close the left rear door."); - MenuItem RR = new MenuItem("Right Rear Door", "Open/close the right rear door."); - MenuItem HD = new MenuItem("Hood", "Open/close the hood."); - MenuItem TR = new MenuItem("Trunk", "Open/close the trunk."); - MenuItem E1 = new MenuItem("Extra 1", "Open/close the extra door (#1). Note this door is not present on most vehicles."); - MenuItem E2 = new MenuItem("Extra 2", "Open/close the extra door (#2). Note this door is not present on most vehicles."); - MenuItem BB = new MenuItem("Bomb Bay", "Open/close the bomb bay. Only available on some planes."); - var doors = new List() { "Front Left", "Front Right", "Rear Left", "Rear Right", "Hood", "Trunk", "Extra 1", "Extra 2", "Bomb Bay" }; - MenuListItem removeDoorList = new MenuListItem("Remove Door", doors, 0, "Remove a specific vehicle door completely."); - MenuCheckboxItem deleteDoors = new MenuCheckboxItem("Delete Removed Doors", "When enabled, doors that you remove using the list above will be deleted from the world. If disabled, then the doors will just fall on the ground.", false); + MenuItem openAll = new MenuItem(LM.Get("Open All Doors"), LM.Get("Open all vehicle doors.")); + MenuItem closeAll = new MenuItem(LM.Get("Close All Doors"), LM.Get("Close all vehicle doors.")); + MenuItem LF = new MenuItem(LM.Get("Left Front Door"), LM.Get("Open/close the left front door.")); + MenuItem RF = new MenuItem(LM.Get("Right Front Door"), LM.Get("Open/close the right front door.")); + MenuItem LR = new MenuItem(LM.Get("Left Rear Door"), LM.Get("Open/close the left rear door.")); + MenuItem RR = new MenuItem(LM.Get("Right Rear Door"), LM.Get("Open/close the right rear door.")); + MenuItem HD = new MenuItem(LM.Get("Hood"), LM.Get("Open/close the hood.")); + MenuItem TR = new MenuItem(LM.Get("Trunk"), LM.Get("Open/close the trunk.")); + MenuItem E1 = new MenuItem(LM.Get("Extra 1"), LM.Get("Open/close the extra door (#1). Note this door is not present on most vehicles.")); + MenuItem E2 = new MenuItem(LM.Get("Extra 2"), LM.Get("Open/close the extra door (#2). Note this door is not present on most vehicles.")); + MenuItem BB = new MenuItem(LM.Get("Bomb Bay"), LM.Get("Open/close the bomb bay. Only available on some planes.")); + var doors = new List() { LM.Get("Front Left"), LM.Get("Front Right"), LM.Get("Rear Left"), LM.Get("Rear Right"), LM.Get("Hood"), LM.Get("Trunk"), LM.Get("Extra 1"), LM.Get("Extra 2"), LM.Get("Bomb Bay") }; + MenuListItem removeDoorList = new MenuListItem(LM.Get("Remove Door"), doors, 0, LM.Get("Remove a specific vehicle door completely.")); + MenuCheckboxItem deleteDoors = new MenuCheckboxItem(LM.Get("Delete Removed Doors"), LM.Get("When enabled, doors that you remove using the list above will be deleted from the world. If disabled, then the doors will just fall on the ground."), false); VehicleDoorsMenu.AddMenuItem(LF); VehicleDoorsMenu.AddMenuItem(RF); @@ -352,7 +355,7 @@ private void CreateMenu() { if (!NetworkRequestControlOfEntity(CurrentPersonalVehicle.Handle)) { - Notify.Error("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle."); + Notify.Error(LM.Get("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle.")); return; } } @@ -374,7 +377,7 @@ private void CreateMenu() { if (!NetworkRequestControlOfEntity(CurrentPersonalVehicle.Handle)) { - Notify.Error("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle."); + Notify.Error(LM.Get("You currently can't control this vehicle. Is someone else currently driving your car? Please try again after making sure other players are not controlling your vehicle.")); return; } } @@ -417,7 +420,7 @@ private void CreateMenu() } } else { - Notify.Error("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options."); + Notify.Error(LM.Get("You have not yet selected a personal vehicle, or your vehicle has been deleted. Set a personal vehicle before you can use these options.")); } } }; diff --git a/vMenu/menus/PlayerAppearance.cs b/vMenu/menus/PlayerAppearance.cs index 5211add5..e9aa54a6 100644 --- a/vMenu/menus/PlayerAppearance.cs +++ b/vMenu/menus/PlayerAppearance.cs @@ -16,16 +16,17 @@ namespace vMenuClient public class PlayerAppearance { private Menu menu; + private static LanguageManager LM = new LanguageManager(); private Menu pedCustomizationMenu; private Menu savedPedsMenu; private Menu spawnPedsMenu; private Menu addonPedsMenu; - private Menu mainPedsMenu = new Menu("Main Peds", "Spawn A Ped"); - private Menu animalsPedsMenu = new Menu("Animals", "Spawn A Ped"); - private Menu malePedsMenu = new Menu("Male Peds", "Spawn A Ped"); - private Menu femalePedsMenu = new Menu("Female Peds", "Spawn A Ped"); - private Menu otherPedsMenu = new Menu("Other Peds", "Spawn A Ped"); + private Menu mainPedsMenu = new Menu(LM.Get("Main Peds"), LM.Get("Spawn A Ped")); + private Menu animalsPedsMenu = new Menu(LM.Get("Animals"), LM.Get("Spawn A Ped")); + private Menu malePedsMenu = new Menu(LM.Get("Male Peds"), LM.Get("Spawn A Ped")); + private Menu femalePedsMenu = new Menu(LM.Get("Female Peds"), LM.Get("Spawn A Ped")); + private Menu otherPedsMenu = new Menu(LM.Get("Other Peds"), LM.Get("Spawn A Ped")); public static Dictionary AddonPeds; @@ -41,11 +42,11 @@ public class PlayerAppearance private void CreateMenu() { // Create the menu. - menu = new Menu(Game.Player.Name, "Player Appearance"); - savedPedsMenu = new Menu(Game.Player.Name, "Saved Peds"); - pedCustomizationMenu = new Menu(Game.Player.Name, "Customize Saved Ped"); - spawnPedsMenu = new Menu(Game.Player.Name, "Spawn Ped"); - addonPedsMenu = new Menu(Game.Player.Name, "Addon Peds"); + menu = new Menu(Game.Player.Name, LM.Get("Player Appearance")); + savedPedsMenu = new Menu(Game.Player.Name, LM.Get("Saved Peds")); + pedCustomizationMenu = new Menu(Game.Player.Name, LM.Get("Customize Saved Ped")); + spawnPedsMenu = new Menu(Game.Player.Name, LM.Get("Spawn Ped")); + addonPedsMenu = new Menu(Game.Player.Name, LM.Get("Addon Peds")); // Add the (submenus) to the menu pool. @@ -60,26 +61,26 @@ private void CreateMenu() MenuController.AddSubmenu(spawnPedsMenu, otherPedsMenu); // Create the menu items. - MenuItem pedCustomization = new MenuItem("Ped Customization", "Modify your ped's appearance.") { Label = "→→→" }; - MenuItem saveCurrentPed = new MenuItem("Save Ped", "Save your current ped. Note for the MP Male/Female peds this won't save most of their customization, just because that's impossible. Create those characters in the MP Character creator instead."); - MenuItem savedPedsBtn = new MenuItem("Saved Peds", "Edit, rename, clone, spawn or delete saved peds.") { Label = "→→→" }; - MenuItem spawnPedsBtn = new MenuItem("Spawn Peds", "Change ped model by selecting one from the list or by selecting an addon ped from the list.") { Label = "→→→" }; + MenuItem pedCustomization = new MenuItem(LM.Get("Ped Customization"), LM.Get("Modify your ped's appearance.")) { Label = "→→→" }; + MenuItem saveCurrentPed = new MenuItem(LM.Get("Save Ped"), LM.Get("Save your current ped. Note for the MP Male/Female peds this won't save most of their customization, just because that's impossible. Create those characters in the MP Character creator instead.")); + MenuItem savedPedsBtn = new MenuItem(LM.Get("Saved Peds"), LM.Get("Edit, rename, clone, spawn or delete saved peds.")) { Label = "→→→" }; + MenuItem spawnPedsBtn = new MenuItem(LM.Get("Spawn Peds"), LM.Get("Change ped model by selecting one from the list or by selecting an addon ped from the list.")) { Label = "→→→" }; - MenuItem spawnByNameBtn = new MenuItem("Spawn By Name", "Spawn a ped by entering it's name manually."); - MenuItem addonPedsBtn = new MenuItem("Addon Peds", "Spawn a ped from the addon peds list.") { Label = "→→→" }; - MenuItem mainPedsBtn = new MenuItem("Main Peds", "Select a new ped from the main player-peds list.") { Label = "→→→" }; - MenuItem animalPedsBtn = new MenuItem("Animals", "Become an animal. ~r~Note this may crash your own or other players' game if you die as an animal, godmode can NOT prevent this.") { Label = "→→→" }; - MenuItem malePedsBtn = new MenuItem("Male Peds", "Select a male ped.") { Label = "→→→" }; - MenuItem femalePedsBtn = new MenuItem("Female Peds", "Select a female ped.") { Label = "→→→" }; - MenuItem otherPedsBtn = new MenuItem("Other Peds", "Select a ped.") { Label = "→→→" }; + MenuItem spawnByNameBtn = new MenuItem(LM.Get("Spawn By Name"), LM.Get("Spawn a ped by entering it's name manually.")); + MenuItem addonPedsBtn = new MenuItem(LM.Get("Addon Peds"), LM.Get("Spawn a ped from the addon peds list.")) { Label = "→→→" }; + MenuItem mainPedsBtn = new MenuItem(LM.Get("Main Peds"), LM.Get("Select a new ped from the main player-peds list.")) { Label = "→→→" }; + MenuItem animalPedsBtn = new MenuItem(LM.Get("Animals"), LM.Get("Become an animal. ~r~Note this may crash your own or other players' game if you die as an animal, godmode can NOT prevent this.")) { Label = "→→→" }; + MenuItem malePedsBtn = new MenuItem(LM.Get("Male Peds"), LM.Get("Select a male ped.")) { Label = "→→→" }; + MenuItem femalePedsBtn = new MenuItem(LM.Get("Female Peds"), LM.Get("Select a female ped.")) { Label = "→→→" }; + MenuItem otherPedsBtn = new MenuItem(LM.Get("Other Peds"), LM.Get("Select a ped.")) { Label = "→→→" }; - List walkstyles = new List() { "Normal", "Injured", "Tough Guy", "Femme", "Gangster", "Posh", "Sexy", "Business", "Drunk", "Hipster" }; - MenuListItem walkingStyle = new MenuListItem("Walking Style", walkstyles, 0, "Change the walking style of your current ped. " + - "You need to re-apply this each time you change player model or load a saved ped."); + List walkstyles = new List() { LM.Get("Normal"), LM.Get("Injured"), LM.Get("Tough Guy"), LM.Get("Femme"), LM.Get("Gangster"), LM.Get("Posh"), LM.Get("Sexy"), LM.Get("Business"), LM.Get("Drunk"), LM.Get("Hipster") }; + MenuListItem walkingStyle = new MenuListItem(LM.Get("Walking Style"), walkstyles, 0, LM.Get("Change the walking style of your current ped. ") + + LM.Get("You need to re-apply this each time you change player model or load a saved ped.")); - List clothingGlowAnimations = new List() { "On", "Off", "Fade", "Flash" }; - MenuListItem clothingGlowType = new MenuListItem("Illuminated Clothing Style", clothingGlowAnimations, ClothingAnimationType, "Set the style of the animation used on your player's illuminated clothing items."); + List clothingGlowAnimations = new List() { LM.Get("On"), LM.Get("Off"), LM.Get("Fade"), LM.Get("Flash") }; + MenuListItem clothingGlowType = new MenuListItem(LM.Get("Illuminated Clothing Style"), clothingGlowAnimations, ClothingAnimationType, LM.Get("Set the style of the animation used on your player's illuminated clothing items.")); // Add items to the menu. menu.AddMenuItem(pedCustomization); @@ -103,19 +104,19 @@ private void CreateMenu() MenuController.BindMenuItem(menu, savedPedsMenu, savedPedsBtn); MenuController.BindMenuItem(menu, spawnPedsMenu, spawnPedsBtn); - Menu selectedSavedPedMenu = new Menu("Saved Ped", "renameme"); + Menu selectedSavedPedMenu = new Menu(LM.Get("Saved Ped"), LM.Get("renameme")); MenuController.AddSubmenu(savedPedsMenu, selectedSavedPedMenu); - MenuItem spawnSavedPed = new MenuItem("Spawn Saved Ped", "Spawn this saved ped."); - MenuItem cloneSavedPed = new MenuItem("Clone Saved Ped", "Clone this saved ped."); - MenuItem renameSavedPed = new MenuItem("Rename Saved Ped", "Rename this saved ped.") { LeftIcon = MenuItem.Icon.WARNING }; - MenuItem replaceSavedPed = new MenuItem("~r~Replace Saved Ped", "Repalce this saved ped with your current ped. Note this can not be undone!") { LeftIcon = MenuItem.Icon.WARNING }; - MenuItem deleteSavedPed = new MenuItem("~r~Delete Saved Ped", "Delete this saved ped. Note this can not be undone!") { LeftIcon = MenuItem.Icon.WARNING }; + MenuItem spawnSavedPed = new MenuItem(LM.Get("Spawn Saved Ped"), LM.Get("Spawn this saved ped.")); + MenuItem cloneSavedPed = new MenuItem(LM.Get("Clone Saved Ped"), LM.Get("Clone this saved ped.")); + MenuItem renameSavedPed = new MenuItem(LM.Get("Rename Saved Ped"), LM.Get("Rename this saved ped.")) { LeftIcon = MenuItem.Icon.WARNING }; + MenuItem replaceSavedPed = new MenuItem(LM.Get("~r~Replace Saved Ped"), LM.Get("Repalce this saved ped with your current ped. Note this can not be undone!")) { LeftIcon = MenuItem.Icon.WARNING }; + MenuItem deleteSavedPed = new MenuItem(LM.Get("~r~Delete Saved Ped"), LM.Get("Delete this saved ped. Note this can not be undone!")) { LeftIcon = MenuItem.Icon.WARNING }; if (!IsAllowed(Permission.PASpawnSaved)) { spawnSavedPed.Enabled = false; spawnSavedPed.RightIcon = MenuItem.Icon.LOCK; - spawnSavedPed.Description = "You are not allowed to spawn saved peds."; + spawnSavedPed.Description = LM.Get("You are not allowed to spawn saved peds."); } selectedSavedPedMenu.AddMenuItem(spawnSavedPed); @@ -153,7 +154,7 @@ private void CreateMenu() } else { - Notify.Error(CommonErrors.UnknownError, placeholderValue: " Could not save your cloned ped. Don't worry, your original ped is unharmed."); + Notify.Error(CommonErrors.UnknownError, placeholderValue: LM.Get(" Could not save your cloned ped. Don't worry, your original ped is unharmed.")); } } } @@ -169,7 +170,7 @@ private void CreateMenu() { if ("ped_" + name == savedPed.Key) { - Notify.Error("You need to choose a different name, you can't use the same name as your existing ped."); + Notify.Error(LM.Get("You need to choose a different name, you can't use the same name as your existing ped.")); return; } if (StorageManager.SavePedInfo("ped_" + name, savedPed.Value, false)) @@ -187,36 +188,36 @@ private void CreateMenu() } else if (item == replaceSavedPed) { - if (item.Label == "Are you sure?") + if (item.Label == LM.Get("Are you sure?")) { item.Label = ""; bool success = await SavePed(savedPed.Key.Substring(4), overrideExistingPed: true); if (!success) { - Notify.Error(CommonErrors.UnknownError, placeholderValue: " Could not save your replaced ped. Don't worry, your original ped is unharmed."); + Notify.Error(CommonErrors.UnknownError, placeholderValue: LM.Get(" Could not save your replaced ped. Don't worry, your original ped is unharmed.")); } else { - Notify.Success("Your saved ped has successfully been replaced."); + Notify.Success(LM.Get("Your saved ped has successfully been replaced.")); savedPed = new KeyValuePair(savedPed.Key, StorageManager.GetSavedPedInfo(savedPed.Key)); } } else { - item.Label = "Are you sure?"; + item.Label = LM.Get("Are you sure?"); } } else if (item == deleteSavedPed) { - if (item.Label == "Are you sure?") + if (item.Label == LM.Get("Are you sure?")) { DeleteResourceKvp(savedPed.Key); - Notify.Success("Your saved ped has been deleted."); + Notify.Success(LM.Get("Your saved ped has been deleted.")); selectedSavedPedMenu.GoBack(); } else { - item.Label = "Are you sure?"; + item.Label = LM.Get("Are you sure?"); } } }; @@ -247,7 +248,7 @@ void UpdateSavedPedsMenu() { if (size < 1 || !savedPedsMenu.GetMenuItems().Any(e => ped.Key == e.ItemData.Key)) { - MenuItem btn = new MenuItem(ped.Key.Substring(4), "Click to manage this saved ped.") { Label = "→→→", ItemData = ped }; + MenuItem btn = new MenuItem(ped.Key.Substring(4), LM.Get("Click to manage this saved ped.")) { Label = "→→→", ItemData = ped }; savedPedsMenu.AddMenuItem(btn); MenuController.BindMenuItem(savedPedsMenu, selectedSavedPedMenu, btn); } @@ -313,13 +314,13 @@ void UpdateSavedPedsMenu() name = ped.Key; } - MenuItem pedBtn = new MenuItem(ped.Key, "Click to spawn this model.") { Label = $"({name})" }; + MenuItem pedBtn = new MenuItem(ped.Key, LM.Get("Click to spawn this model.")) { Label = $"({name})" }; if (!IsModelInCdimage(ped.Value) || !IsModelAPed(ped.Value)) { pedBtn.Enabled = false; pedBtn.LeftIcon = MenuItem.Icon.LOCK; - pedBtn.Description = "This ped is not (correctly) streamed. If you are the server owner, please ensure that the ped name and model are valid!"; + pedBtn.Description = LM.Get("This ped is not (correctly) streamed. If you are the server owner, please ensure that the ped name and model are valid!"); } addonPedsMenu.AddMenuItem(pedBtn); @@ -348,7 +349,7 @@ void UpdateSavedPedsMenu() else { animalPedsBtn.Enabled = false; - animalPedsBtn.Description = "This is disabled by the server owner, probably for a good reason because animals quite often crash the game."; + animalPedsBtn.Description = LM.Get("This is disabled by the server owner, probably for a good reason because animals quite often crash the game."); animalPedsBtn.LeftIcon = MenuItem.Icon.LOCK; } @@ -358,46 +359,46 @@ void UpdateSavedPedsMenu() foreach (var animal in animalModels) { - MenuItem animalBtn = new MenuItem(animal.Key, "Click to spawn this animal.") { Label = $"({animal.Value})" }; + MenuItem animalBtn = new MenuItem(animal.Key, LM.Get("Click to spawn this animal.")) { Label = $"({animal.Value})" }; animalsPedsMenu.AddMenuItem(animalBtn); } foreach (var ped in mainModels) { - MenuItem pedBtn = new MenuItem(ped.Key, "Click to spawn this ped.") { Label = $"({ped.Value})" }; + MenuItem pedBtn = new MenuItem(ped.Key, LM.Get("Click to spawn this ped.")) { Label = $"({ped.Value})" }; mainPedsMenu.AddMenuItem(pedBtn); } foreach (var ped in maleModels) { - MenuItem pedBtn = new MenuItem(ped.Key, "Click to spawn this ped.") { Label = $"({ped.Value})" }; + MenuItem pedBtn = new MenuItem(ped.Key, LM.Get("Click to spawn this ped.")) { Label = $"({ped.Value})" }; malePedsMenu.AddMenuItem(pedBtn); } foreach (var ped in femaleModels) { - MenuItem pedBtn = new MenuItem(ped.Key, "Click to spawn this ped.") { Label = $"({ped.Value})" }; + MenuItem pedBtn = new MenuItem(ped.Key, LM.Get("Click to spawn this ped.")) { Label = $"({ped.Value})" }; femalePedsMenu.AddMenuItem(pedBtn); } foreach (var ped in otherPeds) { - MenuItem pedBtn = new MenuItem(ped.Key, "Click to spawn this ped.") { Label = $"({ped.Value})" }; + MenuItem pedBtn = new MenuItem(ped.Key, LM.Get("Click to spawn this ped.")) { Label = $"({ped.Value})" }; otherPedsMenu.AddMenuItem(pedBtn); } async void FilterMenu(Menu m, Control c) { - string input = await GetUserInput("Filter by ped model name, leave this empty to reset the filter"); + string input = await GetUserInput(LM.Get("Filter by ped model name, leave this empty to reset the filter")); if (!string.IsNullOrEmpty(input)) { m.FilterMenuItems((mb) => mb.Label.ToLower().Contains(input.ToLower()) || mb.Text.ToLower().Contains(input.ToLower())); - Subtitle.Custom("Filter applied."); + Subtitle.Custom(LM.Get("Filter applied.")); } else { m.ResetFilter(); - Subtitle.Custom("Filter cleared."); + Subtitle.Custom(LM.Get("Filter cleared.")); } } @@ -410,13 +411,13 @@ void ResetMenuFilter(Menu m) malePedsMenu.OnMenuClose += ResetMenuFilter; femalePedsMenu.OnMenuClose += ResetMenuFilter; - otherPedsMenu.InstructionalButtons.Add(Control.Jump, "Filter List"); + otherPedsMenu.InstructionalButtons.Add(Control.Jump, LM.Get("Filter List")); otherPedsMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.Jump, Menu.ControlPressCheckType.JUST_RELEASED, new Action(FilterMenu), true)); - malePedsMenu.InstructionalButtons.Add(Control.Jump, "Filter List"); + malePedsMenu.InstructionalButtons.Add(Control.Jump, LM.Get("Filter List")); malePedsMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.Jump, Menu.ControlPressCheckType.JUST_RELEASED, new Action(FilterMenu), true)); - femalePedsMenu.InstructionalButtons.Add(Control.Jump, "Filter List"); + femalePedsMenu.InstructionalButtons.Add(Control.Jump, LM.Get("Filter List")); femalePedsMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.Jump, Menu.ControlPressCheckType.JUST_RELEASED, new Action(FilterMenu), true)); @@ -434,7 +435,7 @@ async void SpawnPed(Menu m, MenuItem item, int index) case "a_c_killerwhale": case "a_c_sharkhammer": case "a_c_sharktiger": - Notify.Error("This animal can only be spawned when you are in water, otherwise you will die immediately."); + Notify.Error(LM.Get("This animal can only be spawned when you are in water, otherwise you will die immediately.")); return; default: break; } @@ -476,7 +477,7 @@ async void SpawnPed(Menu m, MenuItem item, int index) { if (item == spawnByNameBtn) { - string model = await GetUserInput("Ped Model Name", 30); + string model = await GetUserInput(LM.Get("Ped Model Name"), 30); if (!string.IsNullOrEmpty(model)) { await SetPlayerSkin(model, new PedInfo() { version = -1 }, true); @@ -515,11 +516,11 @@ async void SpawnPed(Menu m, MenuItem item, int index) { if (await SavePed()) { - Notify.Success("Successfully saved your new ped."); + Notify.Success(LM.Get("Successfully saved your new ped.")); } else { - Notify.Error("Could not save your current ped, does that save name already exist?"); + Notify.Error(LM.Get("Could not save your current ped, does that save name already exist?")); } } }; @@ -556,8 +557,8 @@ async void SpawnPed(Menu m, MenuItem item, int index) if (!IsHelpMessageBeingDisplayed()) { BeginTextCommandDisplayHelp("TWOSTRINGS"); - AddTextComponentSubstringPlayerName("Hold ~INPUT_SWITCH_VISOR~ to flip your helmet visor open or closed"); - AddTextComponentSubstringPlayerName("when on foot or on a motorcycle and when vMenu is closed."); + AddTextComponentSubstringPlayerName(LM.Get("Hold ~INPUT_SWITCH_VISOR~ to flip your helmet visor open or closed")); + AddTextComponentSubstringPlayerName(LM.Get("when on foot or on a motorcycle and when vMenu is closed.")); EndTextCommandDisplayHelp(0, false, true, 6000); } } @@ -680,27 +681,27 @@ private void RefreshCustomizationMenu() #region Textures & Props private readonly List textureNames = new List() { - "Head", - "Mask / Facial Hair", - "Hair Style / Color", - "Hands / Upper Body", - "Legs / Pants", - "Bags / Parachutes", - "Shoes", - "Neck / Scarfs", - "Shirt / Accessory", - "Body Armor / Accessory 2", - "Badges / Logos", - "Shirt Overlay / Jackets", + LM.Get("Head"), + LM.Get("Mask / Facial Hair"), + LM.Get("Hair Style / Color"), + LM.Get("Hands / Upper Body"), + LM.Get("Legs / Pants"), + LM.Get("Bags / Parachutes"), + LM.Get("Shoes"), + LM.Get("Neck / Scarfs"), + LM.Get("Shirt / Accessory"), + LM.Get("Body Armor / Accessory 2"), + LM.Get("Badges / Logos"), + LM.Get("Shirt Overlay / Jackets"), }; private readonly List propNames = new List() { - "Hats / Helmets", // id 0 - "Glasses", // id 1 - "Misc", // id 2 - "Watches", // id 6 - "Bracelets", // id 7 + LM.Get("Hats / Helmets"), // id 0 + LM.Get("Glasses"), // id 1 + LM.Get("Misc"), // id 2 + LM.Get("Watches"), // id 6 + LM.Get("Bracelets"), // id 7 }; #endregion #endregion @@ -1176,11 +1177,11 @@ private void RefreshCustomizationMenu() #region Model Names private Dictionary mainModels = new Dictionary() { - ["player_one"] = "Franklin", - ["player_two"] = "Trevor", - ["player_zero"] = "Michael", - ["mp_f_freemode_01"] = "FreemodeFemale01", - ["mp_m_freemode_01"] = "FreemodeMale01" + ["player_one"] = LM.Get("Franklin"), + ["player_two"] = LM.Get("Trevor"), + ["player_zero"] = LM.Get("Michael"), + ["mp_f_freemode_01"] = LM.Get("FreemodeFemale01"), + ["mp_m_freemode_01"] = LM.Get("FreemodeMale01") }; private Dictionary animalModels = new Dictionary() { diff --git a/vMenu/menus/PlayerOptions.cs b/vMenu/menus/PlayerOptions.cs index cdf83772..2ba14cca 100644 --- a/vMenu/menus/PlayerOptions.cs +++ b/vMenu/menus/PlayerOptions.cs @@ -18,6 +18,8 @@ public class PlayerOptions // Menu variable, will be defined in CreateMenu() private Menu menu; + private static LanguageManager LM = new LanguageManager(); + // Public variables (getters only), return the private variables. public bool PlayerGodMode { get; private set; } = UserDefaults.PlayerGodMode; public bool PlayerInvisible { get; private set; } = false; @@ -30,7 +32,7 @@ public class PlayerOptions public bool PlayerIsIgnored { get; private set; } = UserDefaults.EveryoneIgnorePlayer; public bool PlayerStayInVehicle { get; private set; } = UserDefaults.PlayerStayInVehicle; public bool PlayerFrozen { get; private set; } = false; - private Menu CustomDrivingStyleMenu = new Menu("Driving Style", "Custom Driving Style"); + private Menu CustomDrivingStyleMenu = new Menu(LM.Get("Driving Style"), LM.Get("Custom Driving Style")); /// /// Creates the menu. @@ -39,49 +41,49 @@ private void CreateMenu() { #region create menu and menu items // Create the menu. - menu = new Menu(Game.Player.Name, "Player Options"); + menu = new Menu(Game.Player.Name, LM.Get("Player Options")); // Create all checkboxes. - MenuCheckboxItem playerGodModeCheckbox = new MenuCheckboxItem("Godmode", "Makes you invincible.", PlayerGodMode); - MenuCheckboxItem invisibleCheckbox = new MenuCheckboxItem("Invisible", "Makes you invisible to yourself and others.", PlayerInvisible); - MenuCheckboxItem unlimitedStaminaCheckbox = new MenuCheckboxItem("Unlimited Stamina", "Allows you to run forever without slowing down or taking damage.", PlayerStamina); - MenuCheckboxItem fastRunCheckbox = new MenuCheckboxItem("Fast Run", "Get ~g~Snail~s~ powers and run very fast!", PlayerFastRun); + MenuCheckboxItem playerGodModeCheckbox = new MenuCheckboxItem(LM.Get("Godmode"), LM.Get("Makes you invincible."), PlayerGodMode); + MenuCheckboxItem invisibleCheckbox = new MenuCheckboxItem(LM.Get("Invisible"), LM.Get("Makes you invisible to yourself and others."), PlayerInvisible); + MenuCheckboxItem unlimitedStaminaCheckbox = new MenuCheckboxItem(LM.Get("Unlimited Stamina"), LM.Get("Allows you to run forever without slowing down or taking damage."), PlayerStamina); + MenuCheckboxItem fastRunCheckbox = new MenuCheckboxItem(LM.Get("Fast Run"), LM.Get("Get ~g~Snail~s~ powers and run very fast!"), PlayerFastRun); SetRunSprintMultiplierForPlayer(Game.Player.Handle, (PlayerFastRun && IsAllowed(Permission.POFastRun) ? 1.49f : 1f)); - MenuCheckboxItem fastSwimCheckbox = new MenuCheckboxItem("Fast Swim", "Get ~g~Snail 2.0~s~ powers and swim super fast!", PlayerFastSwim); + MenuCheckboxItem fastSwimCheckbox = new MenuCheckboxItem(LM.Get("Fast Swim"), LM.Get("Get ~g~Snail 2.0~s~ powers and swim super fast!"), PlayerFastSwim); SetSwimMultiplierForPlayer(Game.Player.Handle, (PlayerFastSwim && IsAllowed(Permission.POFastSwim) ? 1.49f : 1f)); - MenuCheckboxItem superJumpCheckbox = new MenuCheckboxItem("Super Jump", "Get ~g~Snail 3.0~s~ powers and jump like a champ!", PlayerSuperJump); - MenuCheckboxItem noRagdollCheckbox = new MenuCheckboxItem("No Ragdoll", "Disables player ragdoll, makes you not fall off your bike anymore.", PlayerNoRagdoll); - MenuCheckboxItem neverWantedCheckbox = new MenuCheckboxItem("Never Wanted", "Disables all wanted levels.", PlayerNeverWanted); - MenuCheckboxItem everyoneIgnoresPlayerCheckbox = new MenuCheckboxItem("Everyone Ignore Player", "Everyone will leave you alone.", PlayerIsIgnored); - MenuCheckboxItem playerStayInVehicleCheckbox = new MenuCheckboxItem("Stay In Vehicle", "When this is enabled, NPCs will not be able to drag you out of your vehicle if they get angry at you.", PlayerStayInVehicle); - MenuCheckboxItem playerFrozenCheckbox = new MenuCheckboxItem("Freeze Player", "Freezes your current location.", PlayerFrozen); + MenuCheckboxItem superJumpCheckbox = new MenuCheckboxItem(LM.Get("Super Jump"), LM.Get("Get ~g~Snail 3.0~s~ powers and jump like a champ!"), PlayerSuperJump); + MenuCheckboxItem noRagdollCheckbox = new MenuCheckboxItem(LM.Get("No Ragdoll"), LM.Get("Disables player ragdoll, makes you not fall off your bike anymore."), PlayerNoRagdoll); + MenuCheckboxItem neverWantedCheckbox = new MenuCheckboxItem(LM.Get("Never Wanted"), LM.Get("Disables all wanted levels."), PlayerNeverWanted); + MenuCheckboxItem everyoneIgnoresPlayerCheckbox = new MenuCheckboxItem(LM.Get("Everyone Ignore Player"), LM.Get("Everyone will leave you alone."), PlayerIsIgnored); + MenuCheckboxItem playerStayInVehicleCheckbox = new MenuCheckboxItem(LM.Get("Stay In Vehicle"), LM.Get("When this is enabled, NPCs will not be able to drag you out of your vehicle if they get angry at you."), PlayerStayInVehicle); + MenuCheckboxItem playerFrozenCheckbox = new MenuCheckboxItem(LM.Get("Freeze Player"), LM.Get("Freezes your current location."), PlayerFrozen); // Wanted level options - List wantedLevelList = new List { "No Wanted Level", "1", "2", "3", "4", "5" }; - MenuListItem setWantedLevel = new MenuListItem("Set Wanted Level", wantedLevelList, GetPlayerWantedLevel(Game.Player.Handle), "Set your wanted level by selecting a value, and pressing enter."); - MenuListItem setArmorItem = new MenuListItem("Set Armor Type", new List { "No Armor", GetLabelText("WT_BA_0"), GetLabelText("WT_BA_1"), GetLabelText("WT_BA_2"), GetLabelText("WT_BA_3"), GetLabelText("WT_BA_4"), }, 0, "Set the armor level/type for your player."); + List wantedLevelList = new List { LM.Get("No Wanted Level"), "1", "2", "3", "4", "5" }; + MenuListItem setWantedLevel = new MenuListItem(LM.Get("Set Wanted Level"), wantedLevelList, GetPlayerWantedLevel(Game.Player.Handle), LM.Get("Set your wanted level by selecting a value, and pressing enter.")); + MenuListItem setArmorItem = new MenuListItem(LM.Get("Set Armor Type"), new List { LM.Get("No Armor"), GetLabelText("WT_BA_0"), GetLabelText("WT_BA_1"), GetLabelText("WT_BA_2"), GetLabelText("WT_BA_3"), GetLabelText("WT_BA_4"), }, 0, "Set the armor level/type for your player."); - MenuItem healPlayerBtn = new MenuItem("Heal Player", "Give the player max health."); - MenuItem cleanPlayerBtn = new MenuItem("Clean Player Clothes", "Clean your player clothes."); - MenuItem dryPlayerBtn = new MenuItem("Dry Player Clothes", "Make your player clothes dry."); - MenuItem wetPlayerBtn = new MenuItem("Wet Player Clothes", "Make your player clothes wet."); - MenuItem suicidePlayerBtn = new MenuItem("~r~Commit Suicide", "Kill yourself by taking the pill. Or by using a pistol if you have one."); + MenuItem healPlayerBtn = new MenuItem(LM.Get("Heal Player"), LM.Get("Give the player max health.")); + MenuItem cleanPlayerBtn = new MenuItem(LM.Get("Clean Player Clothes"), LM.Get("Clean your player clothes.")); + MenuItem dryPlayerBtn = new MenuItem(LM.Get("Dry Player Clothes"), LM.Get("Make your player clothes dry.")); + MenuItem wetPlayerBtn = new MenuItem(LM.Get("Wet Player Clothes"), LM.Get("Make your player clothes wet.")); + MenuItem suicidePlayerBtn = new MenuItem(LM.Get("~r~Commit Suicide"), LM.Get("Kill yourself by taking the pill. Or by using a pistol if you have one.")); - Menu vehicleAutoPilot = new Menu("Auto Pilot", "Vehicle auto pilot options."); + Menu vehicleAutoPilot = new Menu(LM.Get("Auto Pilot"), LM.Get("Vehicle auto pilot options.")); MenuController.AddSubmenu(menu, vehicleAutoPilot); - MenuItem vehicleAutoPilotBtn = new MenuItem("Vehicle Auto Pilot Menu", "Manage vehicle auto pilot options.") + MenuItem vehicleAutoPilotBtn = new MenuItem(LM.Get("Vehicle Auto Pilot Menu"), LM.Get("Manage vehicle auto pilot options.")) { Label = "→→→" }; - List drivingStyles = new List() { "Normal", "Rushed", "Avoid highways", "Drive in reverse", "Custom" }; - MenuListItem drivingStyle = new MenuListItem("Driving Style", drivingStyles, 0, "Set the driving style that is used for the Drive to Waypoint and Drive Around Randomly functions."); + List drivingStyles = new List() { LM.Get("Normal"), LM.Get("Rushed"), LM.Get("Avoid highways"), LM.Get("Drive in reverse"), LM.Get("Custom") }; + MenuListItem drivingStyle = new MenuListItem(LM.Get("Driving Style"), drivingStyles, 0, LM.Get("Set the driving style that is used for the Drive to Waypoint and Drive Around Randomly functions.")); // Scenarios (list can be found in the PedScenarios class) - MenuListItem playerScenarios = new MenuListItem("Player Scenarios", PedScenarios.Scenarios, 0, "Select a scenario and hit enter to start it. Selecting another scenario will override the current scenario. If you're already playing the selected scenario, selecting it again will stop the scenario."); - MenuItem stopScenario = new MenuItem("Force Stop Scenario", "This will force a playing scenario to stop immediately, without waiting for it to finish it's 'stopping' animation."); + MenuListItem playerScenarios = new MenuListItem(LM.Get("Player Scenarios"), PedScenarios.Scenarios, 0, LM.Get("Select a scenario and hit enter to start it. Selecting another scenario will override the current scenario. If you're already playing the selected scenario, selecting it again will stop the scenario.")); + MenuItem stopScenario = new MenuItem(LM.Get("Force Stop Scenario"), LM.Get("This will force a playing scenario to stop immediately, without waiting for it to finish it's 'stopping' animation.")); #endregion #region add items to menu based on permissions @@ -160,44 +162,44 @@ private void CreateMenu() vehicleAutoPilot.AddMenuItem(drivingStyle); - MenuItem startDrivingWaypoint = new MenuItem("Drive To Waypoint", "Make your player ped drive your vehicle to your waypoint."); - MenuItem startDrivingRandomly = new MenuItem("Drive Around Randomly", "Make your player ped drive your vehicle randomly around the map."); - MenuItem stopDriving = new MenuItem("Stop Driving", "The player ped will find a suitable place to stop the vehicle. The task will be stopped once the vehicle has reached the suitable stop location."); - MenuItem forceStopDriving = new MenuItem("Force Stop Driving", "This will stop the driving task immediately without finding a suitable place to stop."); - MenuItem customDrivingStyle = new MenuItem("Custom Driving Style", "Select a custom driving style. Make sure to also enable it by selecting the 'Custom' driving style in the driving styles list.") { Label = "→→→" }; + MenuItem startDrivingWaypoint = new MenuItem(LM.Get("Drive To Waypoint"), LM.Get("Make your player ped drive your vehicle to your waypoint.")); + MenuItem startDrivingRandomly = new MenuItem(LM.Get("Drive Around Randomly"), LM.Get("Make your player ped drive your vehicle randomly around the map.")); + MenuItem stopDriving = new MenuItem(LM.Get("Stop Driving"), LM.Get("The player ped will find a suitable place to stop the vehicle. The task will be stopped once the vehicle has reached the suitable stop location.")); + MenuItem forceStopDriving = new MenuItem(LM.Get("Force Stop Driving"), LM.Get("This will stop the driving task immediately without finding a suitable place to stop.")); + MenuItem customDrivingStyle = new MenuItem(LM.Get("Custom Driving Style"), LM.Get("Select a custom driving style. Make sure to also enable it by selecting the 'Custom' driving style in the driving styles list.")) { Label = "→→→" }; MenuController.AddSubmenu(vehicleAutoPilot, CustomDrivingStyleMenu); vehicleAutoPilot.AddMenuItem(customDrivingStyle); MenuController.BindMenuItem(vehicleAutoPilot, CustomDrivingStyleMenu, customDrivingStyle); Dictionary knownNames = new Dictionary() { - { 0, "Stop before vehicles" }, - { 1, "Stop before peds" }, - { 2, "Avoid vehicles" }, - { 3, "Avoid empty vehicles" }, - { 4, "Avoid peds" }, - { 5, "Avoid objects" }, + { 0, LM.Get("Stop before vehicles") }, + { 1, LM.Get("Stop before peds") }, + { 2, LM.Get("Avoid vehicles") }, + { 3, LM.Get("Avoid empty vehicles") }, + { 4, LM.Get("Avoid peds") }, + { 5, LM.Get("Avoid objects") }, - { 7, "Stop at traffic lights" }, - { 8, "Use blinkers" }, - { 9, "Allow going wrong way" }, - { 10, "Go in reverse gear" }, + { 7, LM.Get("Stop at traffic lights") }, + { 8, LM.Get("Use blinkers") }, + { 9, LM.Get("Allow going wrong way") }, + { 10, LM.Get("Go in reverse gear") }, - { 18, "Use shortest path" }, + { 18, LM.Get("Use shortest path") }, - { 22, "Ignore roads" }, + { 22, LM.Get("Ignore roads") }, - { 24, "Ignore all pathing" }, + { 24, LM.Get("Ignore all pathing") }, - { 29, "Avoid highways (if possible)" }, + { 29, LM.Get("Avoid highways (if possible)") }, }; for (var i = 0; i < 31; i++) { - string name = "~r~Unknown Flag"; + string name = LM.Get("~r~Unknown Flag"); if (knownNames.ContainsKey(i)) { name = knownNames[i]; } - MenuCheckboxItem checkbox = new MenuCheckboxItem(name, "Toggle this driving style flag.", false); + MenuCheckboxItem checkbox = new MenuCheckboxItem(name, LM.Get("Toggle this driving style flag."), false); CustomDrivingStyleMenu.AddMenuItem(checkbox); } CustomDrivingStyleMenu.OnCheckboxChange += (sender, item, index, _checked) => @@ -206,12 +208,12 @@ private void CreateMenu() CustomDrivingStyleMenu.MenuSubtitle = $"custom style: {style}"; if (drivingStyle.ListIndex == 4) { - Notify.Custom("Driving style updated."); + Notify.Custom(LM.Get("Driving style updated.")); SetDriveTaskDrivingStyle(Game.PlayerPed.Handle, style); } else { - Notify.Custom("Driving style NOT updated because you haven't enabled the Custom driving style in the previous menu."); + Notify.Custom(LM.Get("Driving style NOT updated because you haven't enabled the Custom driving style in the previous menu.")); } }; @@ -236,11 +238,11 @@ private void CreateMenu() { int style = GetStyleFromIndex(drivingStyle.ListIndex); DriveToWp(style); - Notify.Info("Your player ped is now driving the vehicle for you. You can cancel any time by pressing the Stop Driving button. The vehicle will stop when it has reached the destination."); + Notify.Info(LM.Get("Your player ped is now driving the vehicle for you. You can cancel any time by pressing the Stop Driving button. The vehicle will stop when it has reached the destination.")); } else { - Notify.Error("You need a waypoint before you can drive to it!"); + Notify.Error(LM.Get("You need a waypoint before you can drive to it!")); } } @@ -248,22 +250,22 @@ private void CreateMenu() { int style = GetStyleFromIndex(drivingStyle.ListIndex); DriveWander(style); - Notify.Info("Your player ped is now driving the vehicle for you. You can cancel any time by pressing the Stop Driving button."); + Notify.Info(LM.Get("Your player ped is now driving the vehicle for you. You can cancel any time by pressing the Stop Driving button.")); } } else { - Notify.Error("You must be the driver of this vehicle!"); + Notify.Error(LM.Get("You must be the driver of this vehicle!")); } } else { - Notify.Error("Your vehicle is broken or it does not exist!"); + Notify.Error(LM.Get("Your vehicle is broken or it does not exist!")); } } else if (item != stopDriving && item != forceStopDriving) { - Notify.Error("You need to be in a vehicle first!"); + Notify.Error(LM.Get("You need to be in a vehicle first!")); } if (item == stopDriving) { @@ -275,7 +277,7 @@ private void CreateMenu() Vector3 outPos = new Vector3(); if (GetNthClosestVehicleNode(Game.PlayerPed.Position.X, Game.PlayerPed.Position.Y, Game.PlayerPed.Position.Z, 3, ref outPos, 0, 0, 0)) { - Notify.Info("The player ped will find a suitable place to park the car and will then stop driving. Please wait."); + Notify.Info(LM.Get("The player ped will find a suitable place to park the car and will then stop driving. Please wait.")); ClearPedTasks(Game.PlayerPed.Handle); TaskVehiclePark(Game.PlayerPed.Handle, veh.Handle, outPos.X, outPos.Y, outPos.Z, Game.PlayerPed.Heading, 3, 60f, true); while (Game.PlayerPed.Position.DistanceToSquared2D(outPos) > 3f) @@ -284,20 +286,20 @@ private void CreateMenu() } SetVehicleHalt(veh.Handle, 3f, 0, false); ClearPedTasks(Game.PlayerPed.Handle); - Notify.Info("The player ped has stopped driving."); + Notify.Info(LM.Get("The player ped has stopped driving.")); } } } else { ClearPedTasks(Game.PlayerPed.Handle); - Notify.Alert("Your ped is not in any vehicle."); + Notify.Alert(LM.Get("Your ped is not in any vehicle.")); } } else if (item == forceStopDriving) { ClearPedTasks(Game.PlayerPed.Handle); - Notify.Info("Driving task cancelled."); + Notify.Info(LM.Get("Driving task cancelled.")); } }; @@ -442,22 +444,22 @@ private void CreateMenu() else if (item == healPlayerBtn) { Game.PlayerPed.Health = Game.PlayerPed.MaxHealth; - Notify.Success("Player healed."); + Notify.Success(LM.Get("Player healed.")); } else if (item == cleanPlayerBtn) { Game.PlayerPed.ClearBloodDamage(); - Notify.Success("Player clothes have been cleaned."); + Notify.Success(LM.Get("Player clothes have been cleaned.")); } else if (item == dryPlayerBtn) { Game.PlayerPed.WetnessHeight = 0f; - Notify.Success("Player is now dry."); + Notify.Success(LM.Get("Player is now dry.")); } else if (item == wetPlayerBtn) { Game.PlayerPed.WetnessHeight = 2f; - Notify.Success("Player is now wet."); + Notify.Success(LM.Get("Player is now wet.")); } else if (item == suicidePlayerBtn) { diff --git a/vMenu/menus/Recording.cs b/vMenu/menus/Recording.cs index 416964fb..7ce39fdb 100644 --- a/vMenu/menus/Recording.cs +++ b/vMenu/menus/Recording.cs @@ -19,14 +19,16 @@ public class Recording // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); + private void CreateMenu() { // Create the menu. - menu = new Menu("Recording", "Recording Options"); + menu = new Menu(LM.Get("Recording"), LM.Get("Recording Options")); - MenuItem startRec = new MenuItem("Start Recording", "Start a new game recording using GTA V's built in recording."); - MenuItem stopRec = new MenuItem("Stop Recording", "Stop and save your current recording."); - MenuItem openEditor = new MenuItem("Rockstar Editor", "Open the rockstar editor, note you might want to quit the session first before doing this to prevent some issues."); + MenuItem startRec = new MenuItem(LM.Get("Start Recording"), LM.Get("Start a new game recording using GTA V's built in recording.")); + MenuItem stopRec = new MenuItem(LM.Get("Stop Recording"), LM.Get("Stop and save your current recording.")); + MenuItem openEditor = new MenuItem(LM.Get("Rockstar Editor"), LM.Get("Open the rockstar editor, note you might want to quit the session first before doing this to prevent some issues.")); menu.AddMenuItem(startRec); menu.AddMenuItem(stopRec); menu.AddMenuItem(openEditor); @@ -37,7 +39,7 @@ private void CreateMenu() { if (IsRecording()) { - Notify.Alert("You are already recording a clip, you need to stop recording first before you can start recording again!"); + Notify.Alert(LM.Get("You are already recording a clip, you need to stop recording first before you can start recording again!")); } else { @@ -48,7 +50,7 @@ private void CreateMenu() { if (!IsRecording()) { - Notify.Alert("You are currently NOT recording a clip, you need to start recording first before you can stop and save a clip."); + Notify.Alert(LM.Get("You are currently NOT recording a clip, you need to start recording first before you can stop and save a clip.")); } else { @@ -69,7 +71,7 @@ private void CreateMenu() } // then fade in the screen. DoScreenFadeIn(1); - Notify.Alert("You left your previous session before entering the Rockstar Editor. Restart the game to be able to rejoin the server's main session.", true, true); + Notify.Alert(LM.Get("You left your previous session before entering the Rockstar Editor. Restart the game to be able to rejoin the server's main session."), true, true); } }; diff --git a/vMenu/menus/SavedVehicles.cs b/vMenu/menus/SavedVehicles.cs index d6a5c93c..3960a1f4 100644 --- a/vMenu/menus/SavedVehicles.cs +++ b/vMenu/menus/SavedVehicles.cs @@ -17,8 +17,9 @@ public class SavedVehicles { // Variables private Menu menu; - private Menu selectedVehicleMenu = new Menu("Manage Vehicle", "Manage this saved vehicle."); - private Menu unavailableVehiclesMenu = new Menu("Missing Vehicles", "Unavailable Saved Vehicles"); + private static LanguageManager LM = new LanguageManager(); + private Menu selectedVehicleMenu = new Menu(LM.Get("Manage Vehicle"), LM.Get("Manage this saved vehicle.")); + private Menu unavailableVehiclesMenu = new Menu(LM.Get("Missing Vehicles"), LM.Get("Unavailable Saved Vehicles")); private Dictionary savedVehicles = new Dictionary(); private List subMenus = new List(); private Dictionary> svMenuItems = new Dictionary>(); @@ -31,12 +32,12 @@ public class SavedVehicles /// private void CreateMenu() { - string menuTitle = "Saved Vehicles"; + string menuTitle = LM.Get("Saved Vehicles"); #region Create menus and submenus // Create the menu. - menu = new Menu(menuTitle, "Manage Saved Vehicles"); + menu = new Menu(menuTitle, LM.Get("Manage Saved Vehicles")); - MenuItem saveVehicle = new MenuItem("Save Current Vehicle", "Save the vehicle you are currently sitting in."); + MenuItem saveVehicle = new MenuItem(LM.Get("Save Current Vehicle"), LM.Get("Save the vehicle you are currently sitting in.")); menu.AddMenuItem(saveVehicle); saveVehicle.LeftIcon = MenuItem.Icon.CAR; @@ -50,14 +51,14 @@ private void CreateMenu() } else { - Notify.Error("You are currently not in any vehicle. Please enter a vehicle before trying to save it."); + Notify.Error(LM.Get("You are currently not in any vehicle. Please enter a vehicle before trying to save it.")); } } }; for (int i = 0; i < 22; i++) { - Menu categoryMenu = new Menu("Saved Vehicles", GetLabelText($"VEH_CLASS_{i}")); + Menu categoryMenu = new Menu(LM.Get("Saved Vehicles"), GetLabelText($"VEH_CLASS_{i}")); MenuItem categoryButton = new MenuItem(GetLabelText($"VEH_CLASS_{i}"), $"All saved vehicles from the {(GetLabelText($"VEH_CLASS_{i}"))} category."); subMenus.Add(categoryMenu); @@ -77,7 +78,7 @@ private void CreateMenu() }; } - MenuItem unavailableModels = new MenuItem("Unavailable Saved Vehicles", "These vehicles are currently unavailable because the models are not present in the game. These vehicles are most likely not being streamed from the server.") + MenuItem unavailableModels = new MenuItem(LM.Get("Unavailable Saved Vehicles"), LM.Get("These vehicles are currently unavailable because the models are not present in the game. These vehicles are most likely not being streamed from the server.")) { Label = "→→→" }; @@ -88,10 +89,10 @@ private void CreateMenu() MenuController.AddMenu(selectedVehicleMenu); - MenuItem spawnVehicle = new MenuItem("Spawn Vehicle", "Spawn this saved vehicle."); - MenuItem renameVehicle = new MenuItem("Rename Vehicle", "Rename your saved vehicle."); - MenuItem replaceVehicle = new MenuItem("~r~Replace Vehicle", "Your saved vehicle will be replaced with the vehicle you are currently sitting in. ~r~Warning: this can NOT be undone!"); - MenuItem deleteVehicle = new MenuItem("~r~Delete Vehicle", "~r~This will delete your saved vehicle. Warning: this can NOT be undone!"); + MenuItem spawnVehicle = new MenuItem(LM.Get("Spawn Vehicle"), LM.Get("Spawn this saved vehicle.")); + MenuItem renameVehicle = new MenuItem(LM.Get("Rename Vehicle"), LM.Get("Rename your saved vehicle.")); + MenuItem replaceVehicle = new MenuItem(LM.Get("~r~Replace Vehicle"), LM.Get("Your saved vehicle will be replaced with the vehicle you are currently sitting in. ~r~Warning: this can NOT be undone!")); + MenuItem deleteVehicle = new MenuItem(LM.Get("~r~Delete Vehicle"), LM.Get("~r~This will delete your saved vehicle. Warning: this can NOT be undone!")); selectedVehicleMenu.AddMenuItem(spawnVehicle); selectedVehicleMenu.AddMenuItem(renameVehicle); selectedVehicleMenu.AddMenuItem(replaceVehicle); @@ -124,7 +125,7 @@ private void CreateMenu() } else if (item == renameVehicle) { - string newName = await GetUserInput(windowTitle: "Enter a new name for this vehicle.", maxInputLength: 30); + string newName = await GetUserInput(windowTitle: LM.Get("Enter a new name for this vehicle."), maxInputLength: 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); @@ -138,14 +139,14 @@ private void CreateMenu() { await BaseScript.Delay(0); } - Notify.Success("Your vehicle has successfully been renamed."); + Notify.Success(LM.Get("Your vehicle has successfully been renamed.")); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); currentlySelectedVehicle = new KeyValuePair(); // clear the old info } else { - Notify.Error("This name is already in use or something unknown failed. Contact the server owner if you believe something is wrong."); + Notify.Error(LM.Get("This name is already in use or something unknown failed. Contact the server owner if you believe something is wrong.")); } } } @@ -155,11 +156,11 @@ private void CreateMenu() { SaveVehicle(currentlySelectedVehicle.Key.Substring(4)); selectedVehicleMenu.GoBack(); - Notify.Success("Your saved vehicle has been replaced with your current vehicle."); + Notify.Success(LM.Get("Your saved vehicle has been replaced with your current vehicle.")); } else { - Notify.Error("You need to be in a vehicle before you can relplace your old vehicle."); + Notify.Error(LM.Get("You need to be in a vehicle before you can relplace your old vehicle.")); } } else if (item == deleteVehicle) @@ -167,8 +168,8 @@ private void CreateMenu() if (deleteButtonPressedCount == 0) { deleteButtonPressedCount = 1; - item.Label = "Press again to confirm."; - Notify.Alert("Are you sure you want to delete this vehicle? Press the button again to confirm."); + item.Label = LM.Get("Press again to confirm."); + Notify.Alert(LM.Get("Are you sure you want to delete this vehicle? Press the button again to confirm.")); } else { @@ -177,7 +178,7 @@ private void CreateMenu() DeleteResourceKvp(currentlySelectedVehicle.Key); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); - Notify.Success("Your saved vehicle has been deleted."); + Notify.Success(LM.Get("Your saved vehicle has been deleted.")); } } if (item != deleteVehicle) // if any other button is pressed, restore the delete vehicle button pressed count. @@ -186,7 +187,7 @@ private void CreateMenu() deleteVehicle.Label = ""; } }; - unavailableVehiclesMenu.InstructionalButtons.Add(Control.FrontendDelete, "Delete Vehicle!"); + unavailableVehiclesMenu.InstructionalButtons.Add(Control.FrontendDelete, LM.Get("Delete Vehicle!")); unavailableVehiclesMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.FrontendDelete, Menu.ControlPressCheckType.JUST_RELEASED, new Action((m, c) => { @@ -198,7 +199,7 @@ private void CreateMenu() MenuItem item = m.GetMenuItems().Find(i => i.Index == index); if (item != null && (item.ItemData is KeyValuePair sd)) { - if (item.Label == "~r~Are you sure?") + if (item.Label == LM.Get("~r~Are you sure?")) { Log("Unavailable saved vehicle deleted, data: " + JsonConvert.SerializeObject(sd)); DeleteResourceKvp(sd.Key); @@ -207,22 +208,22 @@ private void CreateMenu() } else { - item.Label = "~r~Are you sure?"; + item.Label = LM.Get("~r~Are you sure?"); } } else { - Notify.Error("Somehow this vehicle could not be found."); + Notify.Error(LM.Get("Somehow this vehicle could not be found.")); } } else { - Notify.Error("You somehow managed to trigger deletion of a menu item that doesn't exist, how...?"); + Notify.Error(LM.Get("You somehow managed to trigger deletion of a menu item that doesn't exist, how...?")); } } else { - Notify.Error("There are currrently no unavailable vehicles to delete!"); + Notify.Error(LM.Get("There are currrently no unavailable vehicles to delete!")); } }), true)); @@ -252,7 +253,7 @@ private bool UpdateSelectedVehicleMenu(MenuItem selectedItem, Menu parentMenu = { if (!svMenuItems.ContainsKey(selectedItem)) { - Notify.Error("In some very strange way, you've managed to select a button, that does not exist according to this list. So your vehicle could not be loaded. :( Maybe your save files are broken?"); + Notify.Error(LM.Get("In some very strange way, you've managed to select a button, that does not exist according to this list. So your vehicle could not be loaded. :( Maybe your save files are broken?")); return false; } var vehInfo = svMenuItems[selectedItem]; @@ -336,7 +337,7 @@ public void UpdateMenuAvailableCategories() } else { - MenuItem missingVehItem = new MenuItem(sv.Key.Substring(4), "This model could not be found in the game files. Most likely because this is an addon vehicle and it's currently not streamed by the server.") + MenuItem missingVehItem = new MenuItem(sv.Key.Substring(4), LM.Get("This model could not be found in the game files. Most likely because this is an addon vehicle and it's currently not streamed by the server.")) { Label = "(" + sv.Value.name + ")", Enabled = false, diff --git a/vMenu/menus/TimeOptions.cs b/vMenu/menus/TimeOptions.cs index b10783ff..fa1f5a85 100644 --- a/vMenu/menus/TimeOptions.cs +++ b/vMenu/menus/TimeOptions.cs @@ -17,6 +17,7 @@ public class TimeOptions { // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); public MenuItem freezeTimeToggle; /// @@ -25,39 +26,39 @@ public class TimeOptions private void CreateMenu() { // Create the menu. - menu = new Menu(Game.Player.Name, "Time Options"); + menu = new Menu(Game.Player.Name, LM.Get("Time Options")); // Create all menu items. - freezeTimeToggle = new MenuItem("Freeze/Unfreeze Time", "Enable or disable time freezing."); - MenuItem earlymorning = new MenuItem("Early Morning", "Set the time to 06:00.") + freezeTimeToggle = new MenuItem(LM.Get("Freeze/Unfreeze Time"), LM.Get("Enable or disable time freezing.")); + MenuItem earlymorning = new MenuItem(LM.Get("Early Morning"), LM.Get("Set the time to 06:00.")) { Label = "06:00" }; - MenuItem morning = new MenuItem("Morning", "Set the time to 09:00.") + MenuItem morning = new MenuItem(LM.Get("Morning"), LM.Get("Set the time to 09:00.")) { Label = "09:00" }; - MenuItem noon = new MenuItem("Noon", "Set the time to 12:00.") + MenuItem noon = new MenuItem(LM.Get("Noon"), LM.Get("Set the time to 12:00.")) { Label = "12:00" }; - MenuItem earlyafternoon = new MenuItem("Early Afternoon", "Set the time to 15:00.") + MenuItem earlyafternoon = new MenuItem(LM.Get("Early Afternoon"), LM.Get("Set the time to 15:00.")) { Label = "15:00" }; - MenuItem afternoon = new MenuItem("Afternoon", "Set the time to 18:00.") + MenuItem afternoon = new MenuItem(LM.Get("Afternoon"), LM.Get("Set the time to 18:00.")) { Label = "18:00" }; - MenuItem evening = new MenuItem("Evening", "Set the time to 21:00.") + MenuItem evening = new MenuItem(LM.Get("Evening"), LM.Get("Set the time to 21:00.")) { Label = "21:00" }; - MenuItem midnight = new MenuItem("Midnight", "Set the time to 00:00.") + MenuItem midnight = new MenuItem(LM.Get("Midnight"), LM.Get("Set the time to 00:00.")) { Label = "00:00" }; - MenuItem night = new MenuItem("Night", "Set the time to 03:00.") + MenuItem night = new MenuItem(LM.Get("Night"), LM.Get("Set the time to 03:00.")) { Label = "03:00" }; @@ -72,8 +73,8 @@ private void CreateMenu() } minutes.Add(i.ToString()); } - MenuListItem manualHour = new MenuListItem("Set Custom Hour", hours, 0); - MenuListItem manualMinute = new MenuListItem("Set Custom Minute", minutes, 0); + MenuListItem manualHour = new MenuListItem(LM.Get("Set Custom Hour"), hours, 0); + MenuListItem manualMinute = new MenuListItem(LM.Get("Set Custom Minute"), minutes, 0); // Add all menu items to the menu. if (IsAllowed(Permission.TOFreezeTime)) diff --git a/vMenu/menus/VehicleOptions.cs b/vMenu/menus/VehicleOptions.cs index 6dffc167..183265f2 100644 --- a/vMenu/menus/VehicleOptions.cs +++ b/vMenu/menus/VehicleOptions.cs @@ -18,6 +18,7 @@ public class VehicleOptions #region Variables // Menu variable, will be defined in CreateMenu() private Menu menu; + private static LanguageManager LM = new LanguageManager(); // Submenus public Menu VehicleModMenu { get; private set; } @@ -63,112 +64,112 @@ public class VehicleOptions private void CreateMenu() { // Create the menu. - menu = new Menu(Game.Player.Name, "Vehicle Options"); + menu = new Menu(Game.Player.Name, LM.Get("Vehicle Options")); #region menu items variables // vehicle god mode menu - Menu vehGodMenu = new Menu("Vehicle Godmode", "Vehicle Godmode Options"); - MenuItem vehGodMenuBtn = new MenuItem("God Mode Options", "Enable or disable specific damage types.") { Label = "→→→" }; + Menu vehGodMenu = new Menu(LM.Get("Vehicle Godmode"), LM.Get("Vehicle Godmode Options")); + MenuItem vehGodMenuBtn = new MenuItem(LM.Get("God Mode Options"), LM.Get("Enable or disable specific damage types.")) { Label = "→→→" }; MenuController.AddSubmenu(menu, vehGodMenu); // Create Checkboxes. - MenuCheckboxItem vehicleGod = new MenuCheckboxItem("Vehicle God Mode", "Makes your vehicle not take any damage. Note, you need to go into the god menu options below to select what kind of damage you want to disable.", VehicleGodMode); - MenuCheckboxItem vehicleNeverDirty = new MenuCheckboxItem("Keep Vehicle Clean", "This will constantly clean your car if the vehicle dirt level goes above 0. Note that this only cleans ~o~dust~s~ or ~o~dirt~s~. This does not clean mud, snow or other ~r~damage decals~s~. Repair your vehicle to remove them.", VehicleNeverDirty); - MenuCheckboxItem vehicleBikeSeatbelt = new MenuCheckboxItem("Bike Seatbelt", "Prevents you from being knocked off your bike, bicyle, ATV or similar.", VehicleBikeSeatbelt); - MenuCheckboxItem vehicleEngineAO = new MenuCheckboxItem("Engine Always On", "Keeps your vehicle engine on when you exit your vehicle.", VehicleEngineAlwaysOn); - MenuCheckboxItem vehicleNoTurbulence = new MenuCheckboxItem("Disable Plane Turbulence", "Disables the turbulence for all planes. Note only works for planes. Helicopters and other flying vehicles are not supported.", DisablePlaneTurbulence); - MenuCheckboxItem vehicleNoSiren = new MenuCheckboxItem("Disable Siren", "Disables your vehicle's siren. Only works if your vehicle actually has a siren.", VehicleNoSiren); - MenuCheckboxItem vehicleNoBikeHelmet = new MenuCheckboxItem("No Bike Helmet", "No longer auto-equip a helmet when getting on a bike or quad.", VehicleNoBikeHelemet); - MenuCheckboxItem vehicleFreeze = new MenuCheckboxItem("Freeze Vehicle", "Freeze your vehicle's position.", VehicleFrozen); - MenuCheckboxItem torqueEnabled = new MenuCheckboxItem("Enable Torque Multiplier", "Enables the torque multiplier selected from the list below.", VehicleTorqueMultiplier); - MenuCheckboxItem powerEnabled = new MenuCheckboxItem("Enable Power Multiplier", "Enables the power multiplier selected from the list below.", VehiclePowerMultiplier); - MenuCheckboxItem highbeamsOnHonk = new MenuCheckboxItem("Flash Highbeams On Honk", "Turn on your highbeams on your vehicle when honking your horn. Does not work during the day when you have your lights turned off.", FlashHighbeamsOnHonk); - MenuCheckboxItem showHealth = new MenuCheckboxItem("Show Vehicle Health", "Shows the vehicle health on the screen.", VehicleShowHealth); - MenuCheckboxItem infiniteFuel = new MenuCheckboxItem("Infinite Fuel", "Enables or disables infinite fuel for this vehicle, only works if FRFuel is installed.", VehicleInfiniteFuel); + MenuCheckboxItem vehicleGod = new MenuCheckboxItem(LM.Get("Vehicle God Mode"), LM.Get("Makes your vehicle not take any damage. Note, you need to go into the god menu options below to select what kind of damage you want to disable."), VehicleGodMode); + MenuCheckboxItem vehicleNeverDirty = new MenuCheckboxItem(LM.Get("Keep Vehicle Clean"), LM.Get("This will constantly clean your car if the vehicle dirt level goes above 0. Note that this only cleans ~o~dust~s~ or ~o~dirt~s~. This does not clean mud, snow or other ~r~damage decals~s~. Repair your vehicle to remove them."), VehicleNeverDirty); + MenuCheckboxItem vehicleBikeSeatbelt = new MenuCheckboxItem(LM.Get("Bike Seatbelt"), LM.Get("Prevents you from being knocked off your bike, bicyle, ATV or similar."), VehicleBikeSeatbelt); + MenuCheckboxItem vehicleEngineAO = new MenuCheckboxItem(LM.Get("Engine Always On"), LM.Get("Keeps your vehicle engine on when you exit your vehicle."), VehicleEngineAlwaysOn); + MenuCheckboxItem vehicleNoTurbulence = new MenuCheckboxItem(LM.Get("Disable Plane Turbulence"), LM.Get("Disables the turbulence for all planes. Note only works for planes. Helicopters and other flying vehicles are not supported."), DisablePlaneTurbulence); + MenuCheckboxItem vehicleNoSiren = new MenuCheckboxItem(LM.Get("Disable Siren"), LM.Get("Disables your vehicle's siren. Only works if your vehicle actually has a siren."), VehicleNoSiren); + MenuCheckboxItem vehicleNoBikeHelmet = new MenuCheckboxItem(LM.Get("No Bike Helmet"), LM.Get("No longer auto-equip a helmet when getting on a bike or quad."), VehicleNoBikeHelemet); + MenuCheckboxItem vehicleFreeze = new MenuCheckboxItem(LM.Get("Freeze Vehicle"), LM.Get("Freeze your vehicle's position."), VehicleFrozen); + MenuCheckboxItem torqueEnabled = new MenuCheckboxItem(LM.Get("Enable Torque Multiplier"), LM.Get("Enables the torque multiplier selected from the list below."), VehicleTorqueMultiplier); + MenuCheckboxItem powerEnabled = new MenuCheckboxItem(LM.Get("Enable Power Multiplier"), LM.Get("Enables the power multiplier selected from the list below."), VehiclePowerMultiplier); + MenuCheckboxItem highbeamsOnHonk = new MenuCheckboxItem(LM.Get("Flash Highbeams On Honk"), LM.Get("Turn on your highbeams on your vehicle when honking your horn. Does not work during the day when you have your lights turned off."), FlashHighbeamsOnHonk); + MenuCheckboxItem showHealth = new MenuCheckboxItem(LM.Get("Show Vehicle Health"), LM.Get("Shows the vehicle health on the screen."), VehicleShowHealth); + MenuCheckboxItem infiniteFuel = new MenuCheckboxItem(LM.Get("Infinite Fuel"), LM.Get("Enables or disables infinite fuel for this vehicle, only works if FRFuel is installed."), VehicleInfiniteFuel); // Create buttons. - MenuItem fixVehicle = new MenuItem("Repair Vehicle", "Repair any visual and physical damage present on your vehicle."); - MenuItem cleanVehicle = new MenuItem("Wash Vehicle", "Clean your vehicle."); - MenuItem toggleEngine = new MenuItem("Toggle Engine On/Off", "Turn your engine on/off."); - MenuItem setLicensePlateText = new MenuItem("Set License Plate Text", "Enter a custom license plate for your vehicle."); - MenuItem modMenuBtn = new MenuItem("Mod Menu", "Tune and customize your vehicle here.") + MenuItem fixVehicle = new MenuItem(LM.Get("Repair Vehicle"), LM.Get("Repair any visual and physical damage present on your vehicle.")); + MenuItem cleanVehicle = new MenuItem(LM.Get("Wash Vehicle"), LM.Get("Clean your vehicle.")); + MenuItem toggleEngine = new MenuItem(LM.Get("Toggle Engine On/Off"), LM.Get("Turn your engine on/off.")); + MenuItem setLicensePlateText = new MenuItem(LM.Get("Set License Plate Text"), LM.Get("Enter a custom license plate for your vehicle.")); + MenuItem modMenuBtn = new MenuItem(LM.Get("Mod Menu"), LM.Get("Tune and customize your vehicle here.")) { Label = "→→→" }; - MenuItem doorsMenuBtn = new MenuItem("Vehicle Doors", "Open, close, remove and restore vehicle doors here.") + MenuItem doorsMenuBtn = new MenuItem(LM.Get("Vehicle Doors"), LM.Get("Open, close, remove and restore vehicle doors here.")) { Label = "→→→" }; - MenuItem windowsMenuBtn = new MenuItem("Vehicle Windows", "Roll your windows up/down or remove/restore your vehicle windows here.") + MenuItem windowsMenuBtn = new MenuItem(LM.Get("Vehicle Windows"), LM.Get("Roll your windows up/down or remove/restore your vehicle windows here.")) { Label = "→→→" }; - MenuItem componentsMenuBtn = new MenuItem("Vehicle Extras", "Add/remove vehicle components/extras.") + MenuItem componentsMenuBtn = new MenuItem(LM.Get("Vehicle Extras"), LM.Get("Add/remove vehicle components/extras.")) { Label = "→→→" }; - MenuItem liveriesMenuBtn = new MenuItem("Vehicle Liveries", "Style your vehicle with fancy liveries!") + MenuItem liveriesMenuBtn = new MenuItem(LM.Get("Vehicle Liveries"), LM.Get("Style your vehicle with fancy liveries!")) { Label = "→→→" }; - MenuItem colorsMenuBtn = new MenuItem("Vehicle Colors", "Style your vehicle even further by giving it some ~g~Snailsome ~s~colors!") + MenuItem colorsMenuBtn = new MenuItem(LM.Get("Vehicle Colors"), LM.Get("Style your vehicle even further by giving it some ~g~Snailsome ~s~colors!")) { Label = "→→→" }; - MenuItem underglowMenuBtn = new MenuItem("Vehicle Neon Kits", "Make your vehicle shine with some fancy neon underglow!") + MenuItem underglowMenuBtn = new MenuItem(LM.Get("Vehicle Neon Kits"), LM.Get("Make your vehicle shine with some fancy neon underglow!")) { Label = "→→→" }; - MenuItem vehicleInvisible = new MenuItem("Toggle Vehicle Visibility", "Makes your vehicle visible/invisible. ~r~Your vehicle will be made visible again as soon as you leave the vehicle. Otherwise you would not be able to get back in."); - MenuItem flipVehicle = new MenuItem("Flip Vehicle", "Sets your current vehicle on all 4 wheels."); - MenuItem vehicleAlarm = new MenuItem("Toggle Vehicle Alarm", "Starts/stops your vehicle's alarm."); - MenuItem cycleSeats = new MenuItem("Cycle Through Vehicle Seats", "Cycle through the available vehicle seats."); + MenuItem vehicleInvisible = new MenuItem(LM.Get("Toggle Vehicle Visibility"), LM.Get("Makes your vehicle visible/invisible. ~r~Your vehicle will be made visible again as soon as you leave the vehicle. Otherwise you would not be able to get back in.")); + MenuItem flipVehicle = new MenuItem(LM.Get("Flip Vehicle"), LM.Get("Sets your current vehicle on all 4 wheels.")); + MenuItem vehicleAlarm = new MenuItem(LM.Get("Toggle Vehicle Alarm"), LM.Get("Starts/stops your vehicle's alarm.")); + MenuItem cycleSeats = new MenuItem(LM.Get("Cycle Through Vehicle Seats"), LM.Get("Cycle through the available vehicle seats.")); List lights = new List() { - "Hazard Lights", - "Left Indicator", - "Right Indicator", - "Interior Lights", + LM.Get("Hazard Lights"), + LM.Get("Left Indicator"), + LM.Get("Right Indicator"), + LM.Get("Interior Lights"), //"Taxi Light", // this doesn't seem to work no matter what. - "Helicopter Spotlight", + LM.Get("Helicopter Spotlight"), }; - MenuListItem vehicleLights = new MenuListItem("Vehicle Lights", lights, 0, "Turn vehicle lights on/off."); + MenuListItem vehicleLights = new MenuListItem(LM.Get("Vehicle Lights"), lights, 0, LM.Get("Turn vehicle lights on/off.")); - var tiresList = new List() { "All Tires", "Tire #1", "Tire #2", "Tire #3", "Tire #4", "Tire #5", "Tire #6", "Tire #7", "Tire #8" }; - MenuListItem vehicleTiresList = new MenuListItem("Fix / Destroy Tires", tiresList, 0, "Fix or destroy a specific vehicle tire, or all of them at once. Note, not all indexes are valid for all vehicles, some might not do anything on certain vehicles."); + var tiresList = new List() { LM.Get("All Tires"), LM.Get("Tire #1"), LM.Get("Tire #2"), LM.Get("Tire #3"), LM.Get("Tire #4"), LM.Get("Tire #5"), LM.Get("Tire #6"), LM.Get("Tire #7"), LM.Get("Tire #8") }; + MenuListItem vehicleTiresList = new MenuListItem(LM.Get("Fix / Destroy Tires"), tiresList, 0, LM.Get("Fix or destroy a specific vehicle tire, or all of them at once. Note, not all indexes are valid for all vehicles, some might not do anything on certain vehicles.")); - MenuItem deleteBtn = new MenuItem("~r~Delete Vehicle", "Delete your vehicle, this ~r~can NOT be undone~s~!") + MenuItem deleteBtn = new MenuItem(LM.Get("~r~Delete Vehicle"), LM.Get("Delete your vehicle, this ~r~can NOT be undone~s~!")) { LeftIcon = MenuItem.Icon.WARNING, Label = "→→→" }; - MenuItem deleteNoBtn = new MenuItem("NO, CANCEL", "NO, do NOT delete my vehicle and go back!"); - MenuItem deleteYesBtn = new MenuItem("~r~YES, DELETE", "Yes I'm sure, delete my vehicle please, I understand that this cannot be undone.") + MenuItem deleteNoBtn = new MenuItem(LM.Get("NO, CANCEL"), LM.Get("NO, do NOT delete my vehicle and go back!")); + MenuItem deleteYesBtn = new MenuItem(LM.Get("~r~YES, DELETE"), LM.Get("Yes I'm sure, delete my vehicle please, I understand that this cannot be undone.")) { LeftIcon = MenuItem.Icon.WARNING }; // Create lists. - var dirtlevel = new List { "No Dirt", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15" }; - MenuListItem setDirtLevel = new MenuListItem("Set Dirt Level", dirtlevel, 0, "Select how much dirt should be visible on your vehicle, press ~r~enter~s~ " + - "to apply the selected level."); + var dirtlevel = new List { LM.Get("No Dirt"), "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15" }; + MenuListItem setDirtLevel = new MenuListItem(LM.Get("Set Dirt Level"), dirtlevel, 0, LM.Get("Select how much dirt should be visible on your vehicle, press ~r~enter~s~ ") + + LM.Get("to apply the selected level.")); var licensePlates = new List { GetLabelText("CMOD_PLA_0"), GetLabelText("CMOD_PLA_1"), GetLabelText("CMOD_PLA_2"), GetLabelText("CMOD_PLA_3"), - GetLabelText("CMOD_PLA_4"), "North Yankton" }; - MenuListItem setLicensePlateType = new MenuListItem("License Plate Type", licensePlates, 0, "Choose a license plate type and press ~r~enter ~s~to apply " + - "it to your vehicle."); + GetLabelText("CMOD_PLA_4"), LM.Get("North Yankton") }; + MenuListItem setLicensePlateType = new MenuListItem(LM.Get("License Plate Type"), licensePlates, 0, LM.Get("Choose a license plate type and press ~r~enter ~s~to apply ") + + LM.Get("it to your vehicle.")); var torqueMultiplierList = new List { "x2", "x4", "x8", "x16", "x32", "x64", "x128", "x256", "x512", "x1024" }; - MenuListItem torqueMultiplier = new MenuListItem("Set Engine Torque Multiplier", torqueMultiplierList, 0, "Set the engine torque multiplier."); + MenuListItem torqueMultiplier = new MenuListItem(LM.Get("Set Engine Torque Multiplier"), torqueMultiplierList, 0, LM.Get("Set the engine torque multiplier.")); var powerMultiplierList = new List { "x2", "x4", "x8", "x16", "x32", "x64", "x128", "x256", "x512", "x1024" }; - MenuListItem powerMultiplier = new MenuListItem("Set Engine Power Multiplier", powerMultiplierList, 0, "Set the engine power multiplier."); - List speedLimiterOptions = new List() { "Set", "Reset", "Custom Speed Limit" }; - MenuListItem speedLimiter = new MenuListItem("Speed Limiter", speedLimiterOptions, 0, "Set your vehicles max speed to your ~y~current speed~s~. Resetting your vehicles max speed will set the max speed of your current vehicle back to default. Only your current vehicle is affected by this option."); + MenuListItem powerMultiplier = new MenuListItem(LM.Get("Set Engine Power Multiplier"), powerMultiplierList, 0, LM.Get("Set the engine power multiplier.")); + List speedLimiterOptions = new List() { LM.Get("Set"), LM.Get("Reset"), LM.Get("Custom Speed Limit") }; + MenuListItem speedLimiter = new MenuListItem(LM.Get("Speed Limiter"), speedLimiterOptions, 0, LM.Get("Set your vehicles max speed to your ~y~current speed~s~. Resetting your vehicles max speed will set the max speed of your current vehicle back to default. Only your current vehicle is affected by this option.")); #endregion #region Submenus // Submenu's - VehicleModMenu = new Menu("Mod Menu", "Vehicle Mods"); - VehicleModMenu.InstructionalButtons.Add(Control.Jump, "Toggle Vehicle Doors"); + VehicleModMenu = new Menu(LM.Get("Mod Menu"), LM.Get("Vehicle Mods")); + VehicleModMenu.InstructionalButtons.Add(Control.Jump, LM.Get("Toggle Vehicle Doors")); VehicleModMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.Jump, Menu.ControlPressCheckType.JUST_PRESSED, new Action((m, c) => { Vehicle veh = GetVehicle(); @@ -188,13 +189,13 @@ private void CreateMenu() } } }), false)); - VehicleDoorsMenu = new Menu("Vehicle Doors", "Vehicle Doors Management"); - VehicleWindowsMenu = new Menu("Vehicle Windows", "Vehicle Windows Management"); - VehicleComponentsMenu = new Menu("Vehicle Extras", "Vehicle Extras/Components"); - VehicleLiveriesMenu = new Menu("Vehicle Liveries", "Vehicle Liveries"); - VehicleColorsMenu = new Menu("Vehicle Colors", "Vehicle Colors"); - DeleteConfirmMenu = new Menu("Confirm Action", "Delete Vehicle, Are You Sure?"); - VehicleUnderglowMenu = new Menu("Vehicle Neon Kits", "Vehicle Neon Underglow Options"); + VehicleDoorsMenu = new Menu(LM.Get("Vehicle Doors"), LM.Get("Vehicle Doors Management")); + VehicleWindowsMenu = new Menu(LM.Get("Vehicle Windows"), LM.Get("Vehicle Windows Management")); + VehicleComponentsMenu = new Menu(LM.Get("Vehicle Extras"), LM.Get("Vehicle Extras/Components")); + VehicleLiveriesMenu = new Menu(LM.Get("Vehicle Liveries"), LM.Get("Vehicle Liveries")); + VehicleColorsMenu = new Menu(LM.Get("Vehicle Colors"), LM.Get("Vehicle Colors")); + DeleteConfirmMenu = new Menu(LM.Get("Confirm Action"), LM.Get("Delete Vehicle, Are You Sure?")); + VehicleUnderglowMenu = new Menu(LM.Get("Vehicle Neon Kits"), LM.Get("Vehicle Neon Underglow Options")); MenuController.AddSubmenu(menu, VehicleModMenu); MenuController.AddSubmenu(menu, VehicleDoorsMenu); @@ -214,12 +215,12 @@ private void CreateMenu() menu.AddMenuItem(vehGodMenuBtn); MenuController.BindMenuItem(menu, vehGodMenu, vehGodMenuBtn); - MenuCheckboxItem godInvincible = new MenuCheckboxItem("Invincible", "Makes the car invincible. Includes fire damage, explosion damage, collision damage and more.", VehicleGodInvincible); - MenuCheckboxItem godEngine = new MenuCheckboxItem("Engine Damage", "Disables your engine from taking any damage.", VehicleGodEngine); - MenuCheckboxItem godVisual = new MenuCheckboxItem("Visual Damage", "This prevents scratches and other damage decals from being applied to your vehicle. It does not prevent (body) deformation damage.", VehicleGodVisual); - MenuCheckboxItem godStrongWheels = new MenuCheckboxItem("Strong Wheels", "Disables your wheels from being deformed and causing reduced handling. This does not make tires bulletproof.", VehicleGodStrongWheels); - MenuCheckboxItem godRamp = new MenuCheckboxItem("Ramp Damage", "Disables vehicles such as the Ramp Buggy from taking damage when using the ramp.", VehicleGodRamp); - MenuCheckboxItem godAutoRepair = new MenuCheckboxItem("~r~Auto Repair", "Automatically repairs your vehicle when it has ANY type of damage. It's recommended to keep this turned off to prevent glitchyness.", VehicleGodAutoRepair); + MenuCheckboxItem godInvincible = new MenuCheckboxItem(LM.Get("Invincible"), LM.Get("Makes the car invincible. Includes fire damage, explosion damage, collision damage and more."), VehicleGodInvincible); + MenuCheckboxItem godEngine = new MenuCheckboxItem(LM.Get("Engine Damage"), LM.Get("Disables your engine from taking any damage."), VehicleGodEngine); + MenuCheckboxItem godVisual = new MenuCheckboxItem(LM.Get("Visual Damage"), LM.Get("This prevents scratches and other damage decals from being applied to your vehicle. It does not prevent (body) deformation damage."), VehicleGodVisual); + MenuCheckboxItem godStrongWheels = new MenuCheckboxItem(LM.Get("Strong Wheels"), LM.Get("Disables your wheels from being deformed and causing reduced handling. This does not make tires bulletproof."), VehicleGodStrongWheels); + MenuCheckboxItem godRamp = new MenuCheckboxItem(LM.Get("Ramp Damage"), LM.Get("Disables vehicles such as the Ramp Buggy from taking damage when using the ramp."), VehicleGodRamp); + MenuCheckboxItem godAutoRepair = new MenuCheckboxItem(LM.Get("~r~Auto Repair"), LM.Get("Automatically repairs your vehicle when it has ANY type of damage. It's recommended to keep this turned off to prevent glitchyness."), VehicleGodAutoRepair); vehGodMenu.AddMenuItem(godInvincible); vehGodMenu.AddMenuItem(godEngine); @@ -415,7 +416,7 @@ private void CreateMenu() } else { - Notify.Alert("You need to be in the driver's seat if you want to delete a vehicle."); + Notify.Alert(LM.Get("You need to be in the driver's seat if you want to delete a vehicle.")); } } @@ -513,7 +514,7 @@ private void CreateMenu() // If the player is not the driver seat and a button other than the option below (cycle seats) was pressed, notify them. else if (item != cycleSeats) { - Notify.Error("You have to be the driver of a vehicle to access this menu!", true, false); + Notify.Error(LM.Get("You have to be the driver of a vehicle to access this menu!"), true, false); } // Cycle vehicle seats @@ -796,11 +797,11 @@ private void CreateMenu() else if (listIndex == 1) // Reset { SetEntityMaxSpeed(vehicle.Handle, 500.01f); // Default max speed seemingly for all vehicles. - Notify.Info("Vehicle speed is now no longer limited."); + Notify.Info(LM.Get("Vehicle speed is now no longer limited.")); } else if (listIndex == 2) // custom speed { - string inputSpeed = await GetUserInput("Enter a speed (in meters/sec)", "20.0", 5); + string inputSpeed = await GetUserInput(LM.Get("Enter a speed (in meters/sec)"), "20.0", 5); if (!string.IsNullOrEmpty(inputSpeed)) { if (float.TryParse(inputSpeed, out float outFloat)) @@ -834,7 +835,7 @@ private void CreateMenu() } else { - Notify.Error("This is not a valid number. Please enter a valid speed in meters per second."); + Notify.Error(LM.Get("This is not a valid number. Please enter a valid speed in meters per second.")); } } else @@ -862,7 +863,7 @@ private void CreateMenu() { SetVehicleTyreFixed(veh.Handle, i); } - Notify.Success("All vehicle tyres have been fixed."); + Notify.Success(LM.Get("All vehicle tyres have been fixed.")); } else { @@ -870,7 +871,7 @@ private void CreateMenu() { SetVehicleTyreBurst(veh.Handle, i, false, 1f); } - Notify.Success("All vehicle tyres have been destroyed."); + Notify.Success(LM.Get("All vehicle tyres have been destroyed.")); } } else @@ -903,18 +904,18 @@ private void CreateMenu() #region Vehicle Colors Submenu Stuff // primary menu - Menu primaryColorsMenu = new Menu("Vehicle Colors", "Primary Colors"); + Menu primaryColorsMenu = new Menu(LM.Get("Vehicle Colors"), LM.Get("Primary Colors")); MenuController.AddSubmenu(VehicleColorsMenu, primaryColorsMenu); - MenuItem primaryColorsBtn = new MenuItem("Primary Color") { Label = "→→→" }; + MenuItem primaryColorsBtn = new MenuItem(LM.Get("Primary Color")) { Label = "→→→" }; VehicleColorsMenu.AddMenuItem(primaryColorsBtn); MenuController.BindMenuItem(VehicleColorsMenu, primaryColorsMenu, primaryColorsBtn); // secondary menu - Menu secondaryColorsMenu = new Menu("Vehicle Colors", "Secondary Colors"); + Menu secondaryColorsMenu = new Menu(LM.Get("Vehicle Colors"), LM.Get("Secondary Colors")); MenuController.AddSubmenu(VehicleColorsMenu, secondaryColorsMenu); - MenuItem secondaryColorsBtn = new MenuItem("Secondary Color") { Label = "→→→" }; + MenuItem secondaryColorsBtn = new MenuItem(LM.Get("Secondary Color")) { Label = "→→→" }; VehicleColorsMenu.AddMenuItem(secondaryColorsBtn); MenuController.BindMenuItem(VehicleColorsMenu, secondaryColorsMenu, secondaryColorsBtn); @@ -924,7 +925,7 @@ private void CreateMenu() List metals = new List(); List util = new List(); List worn = new List(); - List wheelColors = new List() { "Default Alloy" }; + List wheelColors = new List() { LM.Get("Default Alloy") }; // Just quick and dirty solution to put this in a new enclosed section so that we can still use 'i' as a counter in the other code parts. { @@ -966,12 +967,12 @@ private void CreateMenu() wheelColors.AddRange(classic); } - MenuListItem wheelColorsList = new MenuListItem("Wheel Color", wheelColors, 0); - MenuListItem dashColorList = new MenuListItem("Dashboard Color", classic, 0); - MenuListItem intColorList = new MenuListItem("Interior / Trim Color", classic, 0); - MenuSliderItem vehicleEnveffScale = new MenuSliderItem("Vehicle Enveff Scale", "This works on certain vehicles only, like the besra for example. It 'fades' certain paint layers.", 0, 20, 10, true); + MenuListItem wheelColorsList = new MenuListItem(LM.Get("Wheel Color"), wheelColors, 0); + MenuListItem dashColorList = new MenuListItem(LM.Get("Dashboard Color"), classic, 0); + MenuListItem intColorList = new MenuListItem(LM.Get("Interior / Trim Color"), classic, 0); + MenuSliderItem vehicleEnveffScale = new MenuSliderItem(LM.Get("Vehicle Enveff Scale"), LM.Get("This works on certain vehicles only, like the besra for example. It 'fades' certain paint layers."), 0, 20, 10, true); - MenuItem chrome = new MenuItem("Chrome"); + MenuItem chrome = new MenuItem(LM.Get("Chrome")); VehicleColorsMenu.AddMenuItem(chrome); VehicleColorsMenu.AddMenuItem(vehicleEnveffScale); @@ -987,7 +988,7 @@ private void CreateMenu() } else { - Notify.Error("You need to be the driver of a driveable vehicle to change this."); + Notify.Error(LM.Get("You need to be the driver of a driveable vehicle to change this.")); } }; VehicleColorsMenu.OnSliderPositionChange += (m, sliderItem, oldPosition, newPosition, itemIndex) => @@ -1002,7 +1003,7 @@ private void CreateMenu() } else { - Notify.Error("You need to be the driver of a driveable vehicle to change this slider."); + Notify.Error(LM.Get("You need to be the driver of a driveable vehicle to change this slider.")); } }; @@ -1116,20 +1117,20 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in } else { - Notify.Error("You need to be the driver of a vehicle in order to change the vehicle colors."); + Notify.Error(LM.Get("You need to be the driver of a vehicle in order to change the vehicle colors.")); } } for (int i = 0; i < 2; i++) { - var pearlescentList = new MenuListItem("Pearlescent", classic, 0); - var classicList = new MenuListItem("Classic", classic, 0); - var metallicList = new MenuListItem("Metallic", classic, 0); - var matteList = new MenuListItem("Matte", matte, 0); - var metalList = new MenuListItem("Metals", metals, 0); - var utilList = new MenuListItem("Util", util, 0); - var wornList = new MenuListItem("Worn", worn, 0); + var pearlescentList = new MenuListItem(LM.Get("Pearlescent"), classic, 0); + var classicList = new MenuListItem(LM.Get("Classic"), classic, 0); + var metallicList = new MenuListItem(LM.Get("Metallic"), classic, 0); + var matteList = new MenuListItem(LM.Get("Matte"), matte, 0); + var metalList = new MenuListItem(LM.Get("Metals"), metals, 0); + var utilList = new MenuListItem(LM.Get("Util"), util, 0); + var wornList = new MenuListItem(LM.Get("Worn"), worn, 0); if (i == 0) { @@ -1158,20 +1159,20 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in #endregion #region Vehicle Doors Submenu Stuff - MenuItem openAll = new MenuItem("Open All Doors", "Open all vehicle doors."); - MenuItem closeAll = new MenuItem("Close All Doors", "Close all vehicle doors."); - MenuItem LF = new MenuItem("Left Front Door", "Open/close the left front door."); - MenuItem RF = new MenuItem("Right Front Door", "Open/close the right front door."); - MenuItem LR = new MenuItem("Left Rear Door", "Open/close the left rear door."); - MenuItem RR = new MenuItem("Right Rear Door", "Open/close the right rear door."); - MenuItem HD = new MenuItem("Hood", "Open/close the hood."); - MenuItem TR = new MenuItem("Trunk", "Open/close the trunk."); - MenuItem E1 = new MenuItem("Extra 1", "Open/close the extra door (#1). Note this door is not present on most vehicles."); - MenuItem E2 = new MenuItem("Extra 2", "Open/close the extra door (#2). Note this door is not present on most vehicles."); - MenuItem BB = new MenuItem("Bomb Bay", "Open/close the bomb bay. Only available on some planes."); - var doors = new List() { "Front Left", "Front Right", "Rear Left", "Rear Right", "Hood", "Trunk", "Extra 1", "Extra 2" }; - MenuListItem removeDoorList = new MenuListItem("Remove Door", doors, 0, "Remove a specific vehicle door completely."); - MenuCheckboxItem deleteDoors = new MenuCheckboxItem("Delete Removed Doors", "When enabled, doors that you remove using the list above will be deleted from the world. If disabled, then the doors will just fall on the ground.", false); + MenuItem openAll = new MenuItem(LM.Get("Open All Doors"), LM.Get("Open all vehicle doors.")); + MenuItem closeAll = new MenuItem(LM.Get("Close All Doors"), LM.Get("Close all vehicle doors.")); + MenuItem LF = new MenuItem(LM.Get("Left Front Door"), LM.Get("Open/close the left front door.")); + MenuItem RF = new MenuItem(LM.Get("Right Front Door"), LM.Get("Open/close the right front door.")); + MenuItem LR = new MenuItem(LM.Get("Left Rear Door"), LM.Get("Open/close the left rear door.")); + MenuItem RR = new MenuItem(LM.Get("Right Rear Door"), LM.Get("Open/close the right rear door.")); + MenuItem HD = new MenuItem(LM.Get("Hood"), LM.Get("Open/close the hood.")); + MenuItem TR = new MenuItem(LM.Get("Trunk"), LM.Get("Open/close the trunk.")); + MenuItem E1 = new MenuItem(LM.Get("Extra 1"), LM.Get("Open/close the extra door (#1). Note this door is not present on most vehicles.")); + MenuItem E2 = new MenuItem(LM.Get("Extra 2"), LM.Get("Open/close the extra door (#2). Note this door is not present on most vehicles.")); + MenuItem BB = new MenuItem(LM.Get("Bomb Bay"), LM.Get("Open/close the bomb bay. Only available on some planes.")); + var doors = new List() { LM.Get("Front Left"), LM.Get("Front Right"), LM.Get("Rear Left"), LM.Get("Rear Right"), LM.Get("Hood"), LM.Get("Trunk"), LM.Get("Extra 1"), LM.Get("Extra 2") }; + MenuListItem removeDoorList = new MenuListItem(LM.Get("Remove Door"), doors, 0, LM.Get("Remove a specific vehicle door completely.")); + MenuCheckboxItem deleteDoors = new MenuCheckboxItem(LM.Get("Delete Removed Doors"), LM.Get("When enabled, doors that you remove using the list above will be deleted from the world. If disabled, then the doors will just fall on the ground."), false); VehicleDoorsMenu.AddMenuItem(LF); VehicleDoorsMenu.AddMenuItem(RF); @@ -1266,17 +1267,17 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in } else { - Notify.Alert(CommonErrors.NoVehicle, placeholderValue: "to open/close a vehicle door"); + Notify.Alert(CommonErrors.NoVehicle, placeholderValue: LM.Get("to open/close a vehicle door")); } }; #endregion #region Vehicle Windows Submenu Stuff - MenuItem fwu = new MenuItem("~y~↑~s~ Roll Front Windows Up", "Roll both front windows up."); - MenuItem fwd = new MenuItem("~o~↓~s~ Roll Front Windows Down", "Roll both front windows down."); - MenuItem rwu = new MenuItem("~y~↑~s~ Roll Rear Windows Up", "Roll both rear windows up."); - MenuItem rwd = new MenuItem("~o~↓~s~ Roll Rear Windows Down", "Roll both rear windows down."); + MenuItem fwu = new MenuItem(LM.Get("~y~↑~s~ Roll Front Windows Up"), LM.Get("Roll both front windows up.")); + MenuItem fwd = new MenuItem(LM.Get("~o~↓~s~ Roll Front Windows Down"), LM.Get("Roll both front windows down.")); + MenuItem rwu = new MenuItem(LM.Get("~y~↑~s~ Roll Rear Windows Up"), LM.Get("Roll both rear windows up.")); + MenuItem rwd = new MenuItem(LM.Get("~o~↓~s~ Roll Rear Windows Down"), LM.Get("Roll both rear windows down.")); VehicleWindowsMenu.AddMenuItem(fwu); VehicleWindowsMenu.AddMenuItem(fwd); VehicleWindowsMenu.AddMenuItem(rwu); @@ -1336,7 +1337,7 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in livery = GetLabelText(livery) != "NULL" ? GetLabelText(livery) : $"Livery #{i}"; liveryList.Add(livery); } - MenuListItem liveryListItem = new MenuListItem("Set Livery", liveryList, GetVehicleLivery(veh.Handle), "Choose a livery for this vehicle."); + MenuListItem liveryListItem = new MenuListItem(LM.Get("Set Livery"), liveryList, GetVehicleLivery(veh.Handle), LM.Get("Choose a livery for this vehicle.")); VehicleLiveriesMenu.AddMenuItem(liveryListItem); VehicleLiveriesMenu.OnListIndexChange += (_menu, listItem, oldIndex, newIndex, itemIndex) => { @@ -1351,12 +1352,12 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in } else { - Notify.Error("This vehicle does not have any liveries."); + Notify.Error(LM.Get("This vehicle does not have any liveries.")); VehicleLiveriesMenu.CloseMenu(); menu.OpenMenu(); - MenuItem backBtn = new MenuItem("No Liveries Available :(", "Click me to go back.") + MenuItem backBtn = new MenuItem(LM.Get("No Liveries Available :("), LM.Get("Click me to go back.")) { - Label = "Go Back" + Label = LM.Get("Go Back") }; VehicleLiveriesMenu.AddMenuItem(backBtn); VehicleLiveriesMenu.OnItemSelect += (sender2, item2, index2) => @@ -1373,12 +1374,12 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in } else { - Notify.Error("You have to be the driver of a vehicle to access this menu."); + Notify.Error(LM.Get("You have to be the driver of a vehicle to access this menu.")); } } else { - Notify.Error("You have to be the driver of a vehicle to access this menu."); + Notify.Error(LM.Get("You have to be the driver of a vehicle to access this menu.")); } } }; @@ -1450,7 +1451,7 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in if (vehicleExtras.Count > 0) { - MenuItem backBtn = new MenuItem("Go Back", "Go back to the Vehicle Options menu."); + MenuItem backBtn = new MenuItem(LM.Get("Go Back"), LM.Get("Go back to the Vehicle Options menu.")); VehicleComponentsMenu.AddMenuItem(backBtn); VehicleComponentsMenu.OnItemSelect += (sender3, item3, index3) => { @@ -1459,9 +1460,9 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in } else { - MenuItem backBtn = new MenuItem("No Extras Available :(", "Go back to the Vehicle Options menu.") + MenuItem backBtn = new MenuItem(LM.Get("No Extras Available :("), LM.Get("Go back to the Vehicle Options menu.")) { - Label = "Go Back" + Label = LM.Get("Go Back") }; VehicleComponentsMenu.AddMenuItem(backBtn); VehicleComponentsMenu.OnItemSelect += (sender3, item3, index3) => @@ -1490,16 +1491,16 @@ void HandleListIndexChanges(Menu sender, MenuListItem listItem, int oldIndex, in #endregion #region Underglow Submenu - MenuCheckboxItem underglowFront = new MenuCheckboxItem("Enable Front Light", "Enable or disable the underglow on the front side of the vehicle. Note not all vehicles have lights.", false); - MenuCheckboxItem underglowBack = new MenuCheckboxItem("Enable Rear Light", "Enable or disable the underglow on the left side of the vehicle. Note not all vehicles have lights.", false); - MenuCheckboxItem underglowLeft = new MenuCheckboxItem("Enable Left Light", "Enable or disable the underglow on the right side of the vehicle. Note not all vehicles have lights.", false); - MenuCheckboxItem underglowRight = new MenuCheckboxItem("Enable Right Light", "Enable or disable the underglow on the back side of the vehicle. Note not all vehicles have lights.", false); + MenuCheckboxItem underglowFront = new MenuCheckboxItem(LM.Get("Enable Front Light"), LM.Get("Enable or disable the underglow on the front side of the vehicle. Note not all vehicles have lights."), false); + MenuCheckboxItem underglowBack = new MenuCheckboxItem(LM.Get("Enable Rear Light"), LM.Get("Enable or disable the underglow on the left side of the vehicle. Note not all vehicles have lights."), false); + MenuCheckboxItem underglowLeft = new MenuCheckboxItem(LM.Get("Enable Left Light"), LM.Get("Enable or disable the underglow on the right side of the vehicle. Note not all vehicles have lights."), false); + MenuCheckboxItem underglowRight = new MenuCheckboxItem(LM.Get("Enable Right Light"), LM.Get("Enable or disable the underglow on the back side of the vehicle. Note not all vehicles have lights."), false); var underglowColorsList = new List(); for (int i = 0; i < 13; i++) { underglowColorsList.Add(GetLabelText($"CMOD_NEONCOL_{i}")); } - MenuListItem underglowColor = new MenuListItem(GetLabelText("CMOD_NEON_1"), underglowColorsList, 0, "Select the color of the neon underglow."); + MenuListItem underglowColor = new MenuListItem(GetLabelText("CMOD_NEON_1"), underglowColorsList, 0, LM.Get("Select the color of the neon underglow.")); VehicleUnderglowMenu.AddMenuItem(underglowFront); VehicleUnderglowMenu.AddMenuItem(underglowBack); @@ -1750,18 +1751,18 @@ public void UpdateMods(int selectedIndex = 0) #region more variables and setup veh = GetVehicle(); // Create the wheel types list & listitem and add it to the menu. - List wheelTypes = new List() { "Sports", "Muscle", "Lowrider", "SUV", "Offroad", "Tuner", "Bike Wheels", "High End", "Benny's (1)", "Benny's (2)" }; - MenuListItem vehicleWheelType = new MenuListItem("Wheel Type", wheelTypes, MathUtil.Clamp(GetVehicleWheelType(veh.Handle), 0, 9), $"Choose a ~y~wheel type~s~ for your vehicle."); + List wheelTypes = new List() { LM.Get("Sports"), LM.Get("Muscle"), LM.Get("Lowrider"), LM.Get("SUV"), LM.Get("Offroad"), LM.Get("Tuner"), LM.Get("Bike Wheels"), LM.Get("High End"), LM.Get("Benny's (1)"), LM.Get("Benny's (2)") }; + MenuListItem vehicleWheelType = new MenuListItem(LM.Get("Wheel Type"), wheelTypes, MathUtil.Clamp(GetVehicleWheelType(veh.Handle), 0, 9), $"Choose a ~y~wheel type~s~ for your vehicle."); if (!veh.Model.IsBoat && !veh.Model.IsHelicopter && !veh.Model.IsPlane && !veh.Model.IsBicycle && !veh.Model.IsTrain) { VehicleModMenu.AddMenuItem(vehicleWheelType); } // Create the checkboxes for some options. - MenuCheckboxItem toggleCustomWheels = new MenuCheckboxItem("Toggle Custom Wheels", "Press this to add or remove ~y~custom~s~ wheels.", GetVehicleModVariation(veh.Handle, 23)); - MenuCheckboxItem xenonHeadlights = new MenuCheckboxItem("Xenon Headlights", "Enable or disable ~b~xenon ~s~headlights.", IsToggleModOn(veh.Handle, 22)); - MenuCheckboxItem turbo = new MenuCheckboxItem("Turbo", "Enable or disable the ~y~turbo~s~ for this vehicle.", IsToggleModOn(veh.Handle, 18)); - MenuCheckboxItem bulletProofTires = new MenuCheckboxItem("Bullet Proof Tires", "Enable or disable ~y~bullet proof tires~s~ for this vehicle.", !GetVehicleTyresCanBurst(veh.Handle)); + MenuCheckboxItem toggleCustomWheels = new MenuCheckboxItem(LM.Get("Toggle Custom Wheels"), LM.Get("Press this to add or remove ~y~custom~s~ wheels."), GetVehicleModVariation(veh.Handle, 23)); + MenuCheckboxItem xenonHeadlights = new MenuCheckboxItem(LM.Get("Xenon Headlights"), LM.Get("Enable or disable ~b~xenon ~s~headlights."), IsToggleModOn(veh.Handle, 22)); + MenuCheckboxItem turbo = new MenuCheckboxItem(LM.Get("Turbo"), LM.Get("Enable or disable the ~y~turbo~s~ for this vehicle."), IsToggleModOn(veh.Handle, 18)); + MenuCheckboxItem bulletProofTires = new MenuCheckboxItem(LM.Get("Bullet Proof Tires"), LM.Get("Enable or disable ~y~bullet proof tires~s~ for this vehicle."), !GetVehicleTyresCanBurst(veh.Handle)); // Add the checkboxes to the menu. VehicleModMenu.AddMenuItem(toggleCustomWheels); @@ -1771,25 +1772,25 @@ public void UpdateMods(int selectedIndex = 0) { currentHeadlightColor = 13; } - MenuListItem headlightColor = new MenuListItem("Headlight Color", new List() { "White", "Blue", "Electric Blue", "Mint Green", "Lime Green", "Yellow", "Golden Shower", "Orange", "Red", "Pony Pink", "Hot Pink", "Purple", "Blacklight", "Default Xenon" }, currentHeadlightColor, "New in the Arena Wars GTA V update: Colored headlights. Note you must enable Xenon Headlights first."); + MenuListItem headlightColor = new MenuListItem(LM.Get("Headlight Color"), new List() { LM.Get("White"), LM.Get("Blue"), LM.Get("Electric Blue"), LM.Get("Mint Green"), LM.Get("Lime Green"), LM.Get("Yellow"), LM.Get("Golden Shower"), LM.Get("Orange"), LM.Get("Red"), LM.Get("Pony Pink"), LM.Get("Hot Pink"), LM.Get("Purple"), LM.Get("Blacklight"), LM.Get("Default Xenon") }, currentHeadlightColor, LM.Get("New in the Arena Wars GTA V update: Colored headlights. Note you must enable Xenon Headlights first.")); VehicleModMenu.AddMenuItem(headlightColor); VehicleModMenu.AddMenuItem(turbo); VehicleModMenu.AddMenuItem(bulletProofTires); // Create a list of tire smoke options. - List tireSmokes = new List() { "Red", "Orange", "Yellow", "Gold", "Light Green", "Dark Green", "Light Blue", "Dark Blue", "Purple", "Pink", "Black" }; + List tireSmokes = new List() { LM.Get("Red"), LM.Get("Orange"), LM.Get("Yellow"), LM.Get("Gold"), LM.Get("Light Green"), LM.Get("Dark Green"), LM.Get("Light Blue"), LM.Get("Dark Blue"), LM.Get("Purple"), LM.Get("Pink"), LM.Get("Black") }; Dictionary tireSmokeColors = new Dictionary() { - ["Red"] = new int[] { 244, 65, 65 }, - ["Orange"] = new int[] { 244, 167, 66 }, - ["Yellow"] = new int[] { 244, 217, 65 }, - ["Gold"] = new int[] { 181, 120, 0 }, - ["Light Green"] = new int[] { 158, 255, 84 }, - ["Dark Green"] = new int[] { 44, 94, 5 }, - ["Light Blue"] = new int[] { 65, 211, 244 }, - ["Dark Blue"] = new int[] { 24, 54, 163 }, - ["Purple"] = new int[] { 108, 24, 192 }, - ["Pink"] = new int[] { 192, 24, 172 }, - ["Black"] = new int[] { 1, 1, 1 } + [LM.Get("Red")] = new int[] { 244, 65, 65 }, + [LM.Get("Orange")] = new int[] { 244, 167, 66 }, + [LM.Get("Yellow")] = new int[] { 244, 217, 65 }, + [LM.Get("Gold")] = new int[] { 181, 120, 0 }, + [LM.Get("Light Green")] = new int[] { 158, 255, 84 }, + [LM.Get("Dark Green")] = new int[] { 44, 94, 5 }, + [LM.Get("Light Blue")] = new int[] { 65, 211, 244 }, + [LM.Get("Dark Blue")] = new int[] { 24, 54, 163 }, + [LM.Get("Purple")] = new int[] { 108, 24, 192 }, + [LM.Get("Pink")] = new int[] { 192, 24, 172 }, + [LM.Get("Black")] = new int[] { 1, 1, 1 } }; int smoker = 0, smokeg = 0, smokeb = 0; GetVehicleTyreSmokeColor(veh.Handle, ref smoker, ref smokeg, ref smokeb); @@ -1800,15 +1801,15 @@ public void UpdateMods(int selectedIndex = 0) index = 0; } - MenuListItem tireSmoke = new MenuListItem("Tire Smoke Color", tireSmokes, index, $"Choose a ~y~tire smoke color~s~ for your vehicle."); + MenuListItem tireSmoke = new MenuListItem(LM.Get("Tire Smoke Color"), tireSmokes, index, $"Choose a ~y~tire smoke color~s~ for your vehicle."); VehicleModMenu.AddMenuItem(tireSmoke); // Create the checkbox to enable/disable the tiresmoke. - MenuCheckboxItem tireSmokeEnabled = new MenuCheckboxItem("Tire Smoke", "Enable or disable ~y~tire smoke~s~ for your vehicle. ~h~~r~Important:~s~ When disabling tire smoke, you'll need to drive around before it takes affect.", IsToggleModOn(veh.Handle, 20)); + MenuCheckboxItem tireSmokeEnabled = new MenuCheckboxItem(LM.Get("Tire Smoke"), LM.Get("Enable or disable ~y~tire smoke~s~ for your vehicle. ~h~~r~Important:~s~ When disabling tire smoke, you'll need to drive around before it takes affect."), IsToggleModOn(veh.Handle, 20)); VehicleModMenu.AddMenuItem(tireSmokeEnabled); // Create list for window tint - List windowTints = new List() { "Stock [1/7]", "None [2/7]", "Limo [3/7]", "Light Smoke [4/7]", "Dark Smoke [5/7]", "Pure Black [6/7]", "Green [7/7]" }; + List windowTints = new List() { LM.Get("Stock [1/7]"), LM.Get("None [2/7]"), LM.Get("Limo [3/7]"), LM.Get("Light Smoke [4/7]"), LM.Get("Dark Smoke [5/7]"), LM.Get("Pure Black [6/7]"), LM.Get("Green [7/7]") }; var currentTint = GetVehicleWindowTint(veh.Handle); if (currentTint == -1) { @@ -1843,7 +1844,7 @@ public void UpdateMods(int selectedIndex = 0) break; } - MenuListItem windowTint = new MenuListItem("Window Tint", windowTints, currentTint, "Apply tint to your windows."); + MenuListItem windowTint = new MenuListItem(LM.Get("Window Tint"), windowTints, currentTint, LM.Get("Apply tint to your windows.")); VehicleModMenu.AddMenuItem(windowTint); #endregion diff --git a/vMenu/menus/VehicleSpawner.cs b/vMenu/menus/VehicleSpawner.cs index 79008e60..b5c10088 100644 --- a/vMenu/menus/VehicleSpawner.cs +++ b/vMenu/menus/VehicleSpawner.cs @@ -17,6 +17,7 @@ public class VehicleSpawner { // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); public static Dictionary AddonVehicles; public bool SpawnInVehicle { get; private set; } = UserDefaults.VehicleSpawnerSpawnInside; @@ -27,12 +28,12 @@ private void CreateMenu() { #region initial setup. // Create the menu. - menu = new Menu(Game.Player.Name, "Vehicle Spawner"); + menu = new Menu(Game.Player.Name, LM.Get("Vehicle Spawner")); // Create the buttons and checkboxes. - MenuItem spawnByName = new MenuItem("Spawn Vehicle By Model Name", "Enter the name of a vehicle to spawn."); - MenuCheckboxItem spawnInVeh = new MenuCheckboxItem("Spawn Inside Vehicle", "This will teleport you into the vehicle when you spawn it.", SpawnInVehicle); - MenuCheckboxItem replacePrev = new MenuCheckboxItem("Replace Previous Vehicle", "This will automatically delete your previously spawned vehicle when you spawn a new vehicle.", ReplaceVehicle); + MenuItem spawnByName = new MenuItem(LM.Get("Spawn Vehicle By Model Name"), LM.Get("Enter the name of a vehicle to spawn.")); + MenuCheckboxItem spawnInVeh = new MenuCheckboxItem(LM.Get("Spawn Inside Vehicle"), LM.Get("This will teleport you into the vehicle when you spawn it."), SpawnInVehicle); + MenuCheckboxItem replacePrev = new MenuCheckboxItem(LM.Get("Replace Previous Vehicle"), LM.Get("This will automatically delete your previously spawned vehicle when you spawn a new vehicle."), ReplaceVehicle); // Add the items to the menu. if (IsAllowed(Permission.VSSpawnByName)) @@ -45,8 +46,8 @@ private void CreateMenu() #region addon cars menu // Vehicle Addons List - Menu addonCarsMenu = new Menu("Addon Vehicles", "Spawn An Addon Vehicle"); - MenuItem addonCarsBtn = new MenuItem("Addon Vehicles", "A list of addon vehicles available on this server.") { Label = "→→→" }; + Menu addonCarsMenu = new Menu(LM.Get("Addon Vehicles"), LM.Get("Spawn An Addon Vehicle")); + MenuItem addonCarsBtn = new MenuItem(LM.Get("Addon Vehicles"), LM.Get("A list of addon vehicles available on this server.")) { Label = "→→→" }; menu.AddMenuItem(addonCarsBtn); @@ -58,20 +59,20 @@ private void CreateMenu() { MenuController.BindMenuItem(menu, addonCarsMenu, addonCarsBtn); MenuController.AddSubmenu(menu, addonCarsMenu); - Menu unavailableCars = new Menu("Addon Spawner", "Unavailable Vehicles"); - MenuItem unavailableCarsBtn = new MenuItem("Unavailable Vehicles", "These addon vehicles are not currently being streamed (correctly) and are not able to be spawned.") { Label = "→→→" }; + Menu unavailableCars = new Menu(LM.Get("Addon Spawner"), LM.Get("Unavailable Vehicles")); + MenuItem unavailableCarsBtn = new MenuItem(LM.Get("Unavailable Vehicles"), LM.Get("These addon vehicles are not currently being streamed (correctly) and are not able to be spawned.")) { Label = "→→→" }; MenuController.AddSubmenu(addonCarsMenu, unavailableCars); for (var cat = 0; cat < 22; cat++) { - Menu categoryMenu = new Menu("Addon Spawner", GetLabelText($"VEH_CLASS_{cat}")); + Menu categoryMenu = new Menu(LM.Get("Addon Spawner"), GetLabelText($"VEH_CLASS_{cat}")); MenuItem categoryBtn = new MenuItem(GetLabelText($"VEH_CLASS_{cat}"), $"Spawn an addon vehicle from the {GetLabelText($"VEH_CLASS_{cat}")} class.") { Label = "→→→" }; addonCarsMenu.AddMenuItem(categoryBtn); if (!allowedCategories[cat]) { - categoryBtn.Description = "This vehicle class is disabled by the server."; + categoryBtn.Description = LM.Get("This vehicle class is disabled by the server."); categoryBtn.Enabled = false; categoryBtn.LeftIcon = MenuItem.Icon.LOCK; categoryBtn.Label = ""; @@ -100,7 +101,7 @@ private void CreateMenu() else { carBtn.Enabled = false; - carBtn.Description = "This vehicle is not available. Please ask the server owner to check if the vehicle is being streamed correctly."; + carBtn.Description = LM.Get("This vehicle is not available. Please ask the server owner to check if the vehicle is being streamed correctly."); carBtn.LeftIcon = MenuItem.Icon.LOCK; unavailableCars.AddMenuItem(carBtn); } @@ -119,7 +120,7 @@ private void CreateMenu() } else { - categoryBtn.Description = "There are no addon cars available in this category."; + categoryBtn.Description = LM.Get("There are no addon cars available in this category."); categoryBtn.Enabled = false; categoryBtn.LeftIcon = MenuItem.Icon.LOCK; categoryBtn.Label = ""; @@ -142,21 +143,21 @@ private void CreateMenu() { addonCarsBtn.Enabled = false; addonCarsBtn.LeftIcon = MenuItem.Icon.LOCK; - addonCarsBtn.Description = "There are no addon vehicles available on this server."; + addonCarsBtn.Description = LM.Get("There are no addon vehicles available on this server."); } } else { addonCarsBtn.Enabled = false; addonCarsBtn.LeftIcon = MenuItem.Icon.LOCK; - addonCarsBtn.Description = "The list containing all addon cars could not be loaded, is it configured properly?"; + addonCarsBtn.Description = LM.Get("The list containing all addon cars could not be loaded, is it configured properly?"); } } else { addonCarsBtn.Enabled = false; addonCarsBtn.LeftIcon = MenuItem.Icon.LOCK; - addonCarsBtn.Description = "Access to this list has been restricted by the server owner."; + addonCarsBtn.Description = LM.Get("Access to this list has been restricted by the server owner."); } #endregion @@ -173,7 +174,7 @@ private void CreateMenu() Label = "→→→" }; - Menu vehicleClassMenu = new Menu("Vehicle Spawner", className); + Menu vehicleClassMenu = new Menu(LM.Get("Vehicle Spawner"), className); MenuController.AddSubmenu(menu, vehicleClassMenu); menu.AddMenuItem(btn); @@ -185,7 +186,7 @@ private void CreateMenu() else { btn.LeftIcon = MenuItem.Icon.LOCK; - btn.Description = "This category has been disabled by the server owner."; + btn.Description = LM.Get("This category has been disabled by the server owner."); btn.Enabled = false; } @@ -236,7 +237,7 @@ private void CreateMenu() } else { - var vehBtn = new MenuItem(vehName, "This vehicle is not available because the model could not be found in your game files. If this is a DLC vehicle, make sure the server is streaming it.") { Enabled = false, Label = $"({vehModelName.ToLower()})" }; + var vehBtn = new MenuItem(vehName, LM.Get("This vehicle is not available because the model could not be found in your game files. If this is a DLC vehicle, make sure the server is streaming it.")) { Enabled = false, Label = $"({vehModelName.ToLower()})" }; vehicleClassMenu.AddMenuItem(vehBtn); vehBtn.RightIcon = MenuItem.Icon.LOCK; } @@ -257,7 +258,7 @@ private void CreateMenu() } else { - var vehBtn = new MenuItem(vehName, "This vehicle is not available because the model could not be found in your game files. If this is a DLC vehicle, make sure the server is streaming it.") { Enabled = false, Label = $"({vehModelName.ToLower()})" }; + var vehBtn = new MenuItem(vehName, LM.Get("This vehicle is not available because the model could not be found in your game files. If this is a DLC vehicle, make sure the server is streaming it.")) { Enabled = false, Label = $"({vehModelName.ToLower()})" }; vehicleClassMenu.AddMenuItem(vehBtn); vehBtn.RightIcon = MenuItem.Icon.LOCK; } diff --git a/vMenu/menus/VoiceChat.cs b/vMenu/menus/VoiceChat.cs index cf14d622..34d82b00 100644 --- a/vMenu/menus/VoiceChat.cs +++ b/vMenu/menus/VoiceChat.cs @@ -17,16 +17,17 @@ public class VoiceChat { // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); public bool EnableVoicechat = UserDefaults.VoiceChatEnabled; public bool ShowCurrentSpeaker = UserDefaults.ShowCurrentSpeaker; public bool ShowVoiceStatus = UserDefaults.ShowVoiceStatus; public float currentProximity = UserDefaults.VoiceChatProximity; public List channels = new List() { - "Channel 1 (Default)", - "Channel 2", - "Channel 3", - "Channel 4", + LM.Get("Channel 1 (Default)"), + LM.Get("Channel 2"), + LM.Get("Channel 3"), + LM.Get("Channel 4"), }; public string currentChannel; private List proximityRange = new List() @@ -48,30 +49,30 @@ private void CreateMenu() currentChannel = channels[0]; if (IsAllowed(Permission.VCStaffChannel)) { - channels.Add("Staff Channel"); + channels.Add(LM.Get("Staff Channel")); } // Create the menu. - menu = new Menu(Game.Player.Name, "Voice Chat Settings"); + menu = new Menu(Game.Player.Name, LM.Get("Voice Chat Settings")); - MenuCheckboxItem voiceChatEnabled = new MenuCheckboxItem("Enable Voice Chat", "Enable or disable voice chat.", EnableVoicechat); - MenuCheckboxItem showCurrentSpeaker = new MenuCheckboxItem("Show Current Speaker", "Shows who is currently talking.", ShowCurrentSpeaker); - MenuCheckboxItem showVoiceStatus = new MenuCheckboxItem("Show Microphone Status", "Shows whether your microphone is open or muted.", ShowVoiceStatus); + MenuCheckboxItem voiceChatEnabled = new MenuCheckboxItem(LM.Get("Enable Voice Chat"), LM.Get("Enable or disable voice chat."), EnableVoicechat); + MenuCheckboxItem showCurrentSpeaker = new MenuCheckboxItem(LM.Get("Show Current Speaker"), LM.Get("Shows who is currently talking."), ShowCurrentSpeaker); + MenuCheckboxItem showVoiceStatus = new MenuCheckboxItem(LM.Get("Show Microphone Status"), LM.Get("Shows whether your microphone is open or muted."), ShowVoiceStatus); List proximity = new List() { - "5 m", - "10 m", - "15 m", - "20 m", - "100 m", - "300 m", - "1 km", - "2 km", - "Global", + LM.Get("5 m"), + LM.Get("10 m"), + LM.Get("15 m"), + LM.Get("20 m"), + LM.Get("100 m"), + LM.Get("300 m"), + LM.Get("1 km"), + LM.Get("2 km"), + LM.Get("Global"), }; - MenuListItem voiceChatProximity = new MenuListItem("Voice Chat Proximity", proximity, proximityRange.IndexOf(currentProximity), "Set the voice chat receiving proximity in meters."); - MenuListItem voiceChatChannel = new MenuListItem("Voice Chat Channel", channels, channels.IndexOf(currentChannel), "Set the voice chat channel."); + MenuListItem voiceChatProximity = new MenuListItem(LM.Get("Voice Chat Proximity"), proximity, proximityRange.IndexOf(currentProximity), LM.Get("Set the voice chat receiving proximity in meters.")); + MenuListItem voiceChatChannel = new MenuListItem(LM.Get("Voice Chat Channel"), channels, channels.IndexOf(currentChannel), LM.Get("Set the voice chat channel.")); if (IsAllowed(Permission.VCEnable)) { diff --git a/vMenu/menus/WeaponLoadouts.cs b/vMenu/menus/WeaponLoadouts.cs index d47c8018..d2ae8506 100644 --- a/vMenu/menus/WeaponLoadouts.cs +++ b/vMenu/menus/WeaponLoadouts.cs @@ -17,8 +17,9 @@ public class WeaponLoadouts { // Variables private Menu menu = null; - private Menu SavedLoadoutsMenu = new Menu("Saved Loadouts", "saved weapon loadouts list"); - private Menu ManageLoadoutMenu = new Menu("Mange Loadout", "Manage saved weapon loadout"); + private static LanguageManager LM = new LanguageManager(); + private Menu SavedLoadoutsMenu = new Menu(LM.Get("Saved Loadouts"), LM.Get("saved weapon loadouts list")); + private Menu ManageLoadoutMenu = new Menu(LM.Get("Mange Loadout"), LM.Get("Manage saved weapon loadout")); public bool WeaponLoadoutsSetLoadoutOnRespawn { get; private set; } = UserDefaults.WeaponLoadoutsSetLoadoutOnRespawn; private Dictionary> SavedWeapons = new Dictionary>(); @@ -78,14 +79,14 @@ private Dictionary> RefreshSavedWeaponsList() /// public void CreateMenu() { - menu = new Menu(Game.Player.Name, "weapon loadouts management"); + menu = new Menu(Game.Player.Name, LM.Get("weapon loadouts management")); MenuController.AddSubmenu(menu, SavedLoadoutsMenu); MenuController.AddSubmenu(SavedLoadoutsMenu, ManageLoadoutMenu); - MenuItem saveLoadout = new MenuItem("Save Loadout", "Save your current weapons into a new loadout slot."); - MenuItem savedLoadoutsMenuBtn = new MenuItem("Manage Loadouts", "Manage saved weapon loadouts.") { Label = "→→→" }; - MenuCheckboxItem enableDefaultLoadouts = new MenuCheckboxItem("Restore Default Loadout On Respawn", "If you've set a loadout as default loadout, then your loadout will be equipped automatically whenever you (re)spawn.", WeaponLoadoutsSetLoadoutOnRespawn); + MenuItem saveLoadout = new MenuItem(LM.Get("Save Loadout"), LM.Get("Save your current weapons into a new loadout slot.")); + MenuItem savedLoadoutsMenuBtn = new MenuItem(LM.Get("Manage Loadouts"), LM.Get("Manage saved weapon loadouts.")) { Label = "→→→" }; + MenuCheckboxItem enableDefaultLoadouts = new MenuCheckboxItem(LM.Get("Restore Default Loadout On Respawn"), LM.Get("If you've set a loadout as default loadout, then your loadout will be equipped automatically whenever you (re)spawn."), WeaponLoadoutsSetLoadoutOnRespawn); menu.AddMenuItem(saveLoadout); menu.AddMenuItem(savedLoadoutsMenuBtn); @@ -110,7 +111,7 @@ void RefreshSavedWeaponsMenu() foreach (var sw in SavedWeapons) { - MenuItem btn = new MenuItem(sw.Key.Replace("vmenu_string_saved_weapon_loadout_", ""), "Click to manage this loadout.") { Label = "→→→" }; + MenuItem btn = new MenuItem(sw.Key.Replace("vmenu_string_saved_weapon_loadout_", ""), LM.Get("Click to manage this loadout.")) { Label = "→→→" }; SavedLoadoutsMenu.AddMenuItem(btn); MenuController.BindMenuItem(SavedLoadoutsMenu, ManageLoadoutMenu, btn); } @@ -122,12 +123,12 @@ void RefreshSavedWeaponsMenu() } - MenuItem spawnLoadout = new MenuItem("Equip Loadout", "Spawn this saved weapons loadout. This will remove all your current weapons and replace them with this saved slot."); - MenuItem renameLoadout = new MenuItem("Rename Loadout", "Rename this saved loadout."); - MenuItem cloneLoadout = new MenuItem("Clone Loadout", "Clones this saved loadout to a new slot."); - MenuItem setDefaultLoadout = new MenuItem("Set As Default Loadout", "Set this loadout to be your default loadout for whenever you (re)spawn. This will override the 'Restore Weapons' option inside the Misc Settings menu. You can toggle this option in the main Weapon Loadouts menu."); - MenuItem replaceLoadout = new MenuItem("~r~Replace Loadout", "~r~This replaces this saved slot with the weapons that you currently have in your inventory. This action can not be undone!"); - MenuItem deleteLoadout = new MenuItem("~r~Delete Loadout", "~r~This will delete this saved loadout. This action can not be undone!"); + MenuItem spawnLoadout = new MenuItem(LM.Get("Equip Loadout"), LM.Get("Spawn this saved weapons loadout. This will remove all your current weapons and replace them with this saved slot.")); + MenuItem renameLoadout = new MenuItem(LM.Get("Rename Loadout"), LM.Get("Rename this saved loadout.")); + MenuItem cloneLoadout = new MenuItem(LM.Get("Clone Loadout"), LM.Get("Clones this saved loadout to a new slot.")); + MenuItem setDefaultLoadout = new MenuItem(LM.Get("Set As Default Loadout"), LM.Get("Set this loadout to be your default loadout for whenever you (re)spawn. This will override the 'Restore Weapons' option inside the Misc Settings menu. You can toggle this option in the main Weapon Loadouts menu.")); + MenuItem replaceLoadout = new MenuItem(LM.Get("~r~Replace Loadout"), LM.Get("~r~This replaces this saved slot with the weapons that you currently have in your inventory. This action can not be undone!")); + MenuItem deleteLoadout = new MenuItem(LM.Get("~r~Delete Loadout"), LM.Get("~r~This will delete this saved loadout. This action can not be undone!")); if (IsAllowed(Permission.WLEquip)) ManageLoadoutMenu.AddMenuItem(spawnLoadout); @@ -142,7 +143,7 @@ void RefreshSavedWeaponsMenu() { if (item == saveLoadout) { - string name = await GetUserInput("Enter a save name", 30); + string name = await GetUserInput(LM.Get("Enter a save name"), 30); if (string.IsNullOrEmpty(name)) { Notify.Error(CommonErrors.InvalidInput); @@ -182,7 +183,7 @@ void RefreshSavedWeaponsMenu() } else if (item == renameLoadout || item == cloneLoadout) // rename or clone { - string newName = await GetUserInput("Enter a save name", SelectedSavedLoadoutName.Replace("vmenu_string_saved_weapon_loadout_", ""), 30); + string newName = await GetUserInput(LM.Get("Enter a save name"), SelectedSavedLoadoutName.Replace("vmenu_string_saved_weapon_loadout_", ""), 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); @@ -208,35 +209,35 @@ void RefreshSavedWeaponsMenu() else if (item == setDefaultLoadout) // set as default { SetResourceKvp("vmenu_string_default_loadout", SelectedSavedLoadoutName); - Notify.Success("This is now your default loadout."); + Notify.Success(LM.Get("This is now your default loadout.")); item.LeftIcon = MenuItem.Icon.TICK; } else if (item == replaceLoadout) // replace { - if (replaceLoadout.Label == "Are you sure?") + if (replaceLoadout.Label == LM.Get("Are you sure?")) { replaceLoadout.Label = ""; SaveWeaponLoadout(SelectedSavedLoadoutName); Log("save weapons called from replace loadout"); - Notify.Success("Your saved loadout has been replaced with your current weapons."); + Notify.Success(LM.Get("Your saved loadout has been replaced with your current weapons.")); } else { - replaceLoadout.Label = "Are you sure?"; + replaceLoadout.Label = LM.Get("Are you sure?"); } } else if (item == deleteLoadout) // delete { - if (deleteLoadout.Label == "Are you sure?") + if (deleteLoadout.Label == LM.Get("Are you sure?")) { deleteLoadout.Label = ""; DeleteResourceKvp(SelectedSavedLoadoutName); ManageLoadoutMenu.GoBack(); - Notify.Success("Your saved loadout has been deleted."); + Notify.Success(LM.Get("Your saved loadout has been deleted.")); } else { - deleteLoadout.Label = "Are you sure?"; + deleteLoadout.Label = LM.Get("Are you sure?"); } } } diff --git a/vMenu/menus/WeaponOptions.cs b/vMenu/menus/WeaponOptions.cs index 0c384ff2..0664c298 100644 --- a/vMenu/menus/WeaponOptions.cs +++ b/vMenu/menus/WeaponOptions.cs @@ -17,6 +17,7 @@ public class WeaponOptions { // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); public bool UnlimitedAmmo { get; private set; } = UserDefaults.WeaponsUnlimitedAmmo; public bool NoReload { get; private set; } = UserDefaults.WeaponsNoReload; @@ -40,15 +41,15 @@ private void CreateMenu() #region create main weapon options menu and add items // Create the menu. - menu = new Menu(Game.Player.Name, "Weapon Options"); + menu = new Menu(Game.Player.Name, LM.Get("Weapon Options")); - MenuItem getAllWeapons = new MenuItem("Get All Weapons", "Get all weapons."); - MenuItem removeAllWeapons = new MenuItem("Remove All Weapons", "Removes all weapons in your inventory."); - MenuCheckboxItem unlimitedAmmo = new MenuCheckboxItem("Unlimited Ammo", "Unlimited ammonition supply.", UnlimitedAmmo); - MenuCheckboxItem noReload = new MenuCheckboxItem("No Reload", "Never reload.", NoReload); - MenuItem setAmmo = new MenuItem("Set All Ammo Count", "Set the amount of ammo in all your weapons."); - MenuItem refillMaxAmmo = new MenuItem("Refill All Ammo", "Give all your weapons max ammo."); - MenuItem spawnByName = new MenuItem("Spawn Weapon By Name", "Enter a weapon mode name to spawn."); + MenuItem getAllWeapons = new MenuItem(LM.Get("Get All Weapons"), LM.Get("Get all weapons.")); + MenuItem removeAllWeapons = new MenuItem(LM.Get("Remove All Weapons"), LM.Get("Removes all weapons in your inventory.")); + MenuCheckboxItem unlimitedAmmo = new MenuCheckboxItem(LM.Get("Unlimited Ammo"), LM.Get("Unlimited ammonition supply."), UnlimitedAmmo); + MenuCheckboxItem noReload = new MenuCheckboxItem(LM.Get("No Reload"), LM.Get("Never reload."), NoReload); + MenuItem setAmmo = new MenuItem(LM.Get("Set All Ammo Count"), LM.Get("Set the amount of ammo in all your weapons.")); + MenuItem refillMaxAmmo = new MenuItem(LM.Get("Refill All Ammo"), LM.Get("Give all your weapons max ammo.")); + MenuItem spawnByName = new MenuItem(LM.Get("Spawn Weapon By Name"), LM.Get("Enter a weapon mode name to spawn.")); // Add items based on permissions if (IsAllowed(Permission.WPGetAll)) @@ -79,8 +80,8 @@ private void CreateMenu() #endregion #region addonweapons submenu - MenuItem addonWeaponsBtn = new MenuItem("Addon Weapons", "Equip / remove addon weapons available on this server."); - Menu addonWeaponsMenu = new Menu("Addon Weapons", "Equip/Remove Addon Weapons"); + MenuItem addonWeaponsBtn = new MenuItem(LM.Get("Addon Weapons"), LM.Get("Equip / remove addon weapons available on this server.")); + Menu addonWeaponsMenu = new Menu(LM.Get("Addon Weapons"), LM.Get("Equip/Remove Addon Weapons")); menu.AddMenuItem(addonWeaponsBtn); #region manage creating and accessing addon weapons menu @@ -97,7 +98,7 @@ private void CreateMenu() { item.Enabled = false; item.LeftIcon = MenuItem.Icon.LOCK; - item.Description = "This model is not available. Please ask the server owner to verify it's being streamed correctly."; + item.Description = LM.Get("This model is not available. Please ask the server owner to verify it's being streamed correctly."); } } addonWeaponsMenu.OnItemSelect += (sender, item, index) => @@ -120,7 +121,7 @@ private void CreateMenu() { addonWeaponsBtn.LeftIcon = MenuItem.Icon.LOCK; addonWeaponsBtn.Enabled = false; - addonWeaponsBtn.Description = "This option is not available on this server because you don't have permission to use it, or it is not setup correctly."; + addonWeaponsBtn.Description = LM.Get("This option is not available on this server because you don't have permission to use it, or it is not setup correctly."); } #endregion addonWeaponsMenu.RefreshIndex(); @@ -131,8 +132,8 @@ private void CreateMenu() if (IsAllowed(Permission.WPParachute)) { // main parachute options menu setup - Menu parachuteMenu = new Menu("Parachute Options", "Parachute Options"); - MenuItem parachuteBtn = new MenuItem("Parachute Options", "All parachute related options can be changed here.") { Label = "→→→" }; + Menu parachuteMenu = new Menu(LM.Get("Parachute Options"), LM.Get("Parachute Options")); + MenuItem parachuteBtn = new MenuItem(LM.Get("Parachute Options"), LM.Get("All parachute related options can be changed here.")) { Label = "→→→" }; MenuController.AddSubmenu(menu, parachuteMenu); menu.AddMenuItem(parachuteBtn); @@ -169,20 +170,20 @@ private void CreateMenu() GetLabelText("PD_TINT7"), // broken in FiveM for some weird reason: - GetLabelText("PSD_CAN_0") + " ~r~For some reason this one doesn't seem to work in FiveM.", - GetLabelText("PSD_CAN_1") + " ~r~For some reason this one doesn't seem to work in FiveM.", - GetLabelText("PSD_CAN_2") + " ~r~For some reason this one doesn't seem to work in FiveM.", - GetLabelText("PSD_CAN_3") + " ~r~For some reason this one doesn't seem to work in FiveM.", - GetLabelText("PSD_CAN_4") + " ~r~For some reason this one doesn't seem to work in FiveM.", - GetLabelText("PSD_CAN_5") + " ~r~For some reason this one doesn't seem to work in FiveM." + GetLabelText("PSD_CAN_0") + LM.Get(" ~r~For some reason this one doesn't seem to work in FiveM."), + GetLabelText("PSD_CAN_1") + LM.Get(" ~r~For some reason this one doesn't seem to work in FiveM."), + GetLabelText("PSD_CAN_2") + LM.Get(" ~r~For some reason this one doesn't seem to work in FiveM."), + GetLabelText("PSD_CAN_3") + LM.Get(" ~r~For some reason this one doesn't seem to work in FiveM."), + GetLabelText("PSD_CAN_4") + LM.Get(" ~r~For some reason this one doesn't seem to work in FiveM."), + GetLabelText("PSD_CAN_5") + LM.Get(" ~r~For some reason this one doesn't seem to work in FiveM.") }; - MenuItem togglePrimary = new MenuItem("Toggle Primary Parachute", "Equip or remove the primary parachute"); - MenuItem toggleReserve = new MenuItem("Enable Reserve Parachute", "Enables the reserve parachute. Only works if you enabled the primary parachute first. Reserve parachute can not be removed from the player once it's activated."); - MenuListItem primaryChutes = new MenuListItem("Primary Chute Style", chutes, 0, $"Primary chute: {chuteDescriptions[0]}"); - MenuListItem secondaryChutes = new MenuListItem("Reserve Chute Style", chutes, 0, $"Reserve chute: {chuteDescriptions[0]}"); - MenuCheckboxItem unlimitedParachutes = new MenuCheckboxItem("Unlimited Parachutes", "Enable unlimited parachutes and reserve parachutes.", UnlimitedParachutes); - MenuCheckboxItem autoEquipParachutes = new MenuCheckboxItem("Auto Equip Parachutes", "Automatically equip a parachute and reserve parachute when entering planes/helicopters.", AutoEquipChute); + MenuItem togglePrimary = new MenuItem(LM.Get("Toggle Primary Parachute"), LM.Get("Equip or remove the primary parachute")); + MenuItem toggleReserve = new MenuItem(LM.Get("Enable Reserve Parachute"), LM.Get("Enables the reserve parachute. Only works if you enabled the primary parachute first. Reserve parachute can not be removed from the player once it's activated.")); + MenuListItem primaryChutes = new MenuListItem(LM.Get("Primary Chute Style"), chutes, 0, $"Primary chute: {chuteDescriptions[0]}"); + MenuListItem secondaryChutes = new MenuListItem(LM.Get("Reserve Chute Style"), chutes, 0, $"Reserve chute: {chuteDescriptions[0]}"); + MenuCheckboxItem unlimitedParachutes = new MenuCheckboxItem(LM.Get("Unlimited Parachutes"), LM.Get("Enable unlimited parachutes and reserve parachutes."), UnlimitedParachutes); + MenuCheckboxItem autoEquipParachutes = new MenuCheckboxItem(LM.Get("Auto Equip Parachutes"), LM.Get("Automatically equip a parachute and reserve parachute when entering planes/helicopters."), AutoEquipChute); // smoke color list List smokeColorsList = new List() @@ -204,7 +205,7 @@ private void CreateMenu() new int[3] { 20, 20, 20 }, }; - MenuListItem smokeColors = new MenuListItem("Smoke Trail Color", smokeColorsList, 0, "Choose a smoke trail color, then press select to change it. Changing colors takes 4 seconds, you can not use your smoke while the color is being changed."); + MenuListItem smokeColors = new MenuListItem(LM.Get("Smoke Trail Color"), smokeColorsList, 0, LM.Get("Choose a smoke trail color, then press select to change it. Changing colors takes 4 seconds, you can not use your smoke while the color is being changed.")); parachuteMenu.AddMenuItem(togglePrimary); parachuteMenu.AddMenuItem(toggleReserve); @@ -220,19 +221,19 @@ private void CreateMenu() { if (HasPedGotWeapon(Game.PlayerPed.Handle, (uint)GetHashKey("gadget_parachute"), false)) { - Subtitle.Custom("Primary parachute removed."); + Subtitle.Custom(LM.Get("Primary parachute removed.")); RemoveWeaponFromPed(Game.PlayerPed.Handle, (uint)GetHashKey("gadget_parachute")); } else { - Subtitle.Custom("Primary parachute added."); + Subtitle.Custom(LM.Get("Primary parachute added.")); GiveWeaponToPed(Game.PlayerPed.Handle, (uint)GetHashKey("gadget_parachute"), 0, false, false); } } else if (item == toggleReserve) { SetPlayerHasReserveParachute(Game.Player.Handle); - Subtitle.Custom("Reserve parachute has been added."); + Subtitle.Custom(LM.Get("Reserve parachute has been added.")); } }; @@ -283,32 +284,32 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex #endregion #region Create Weapon Category Submenus - MenuItem spacer = GetSpacerMenuItem("↓ Weapon Categories ↓"); + MenuItem spacer = GetSpacerMenuItem(LM.Get("↓ Weapon Categories ↓")); menu.AddMenuItem(spacer); - Menu handGuns = new Menu("Weapons", "Handguns"); - MenuItem handGunsBtn = new MenuItem("Handguns"); + Menu handGuns = new Menu(LM.Get("Weapons"), LM.Get("Handguns")); + MenuItem handGunsBtn = new MenuItem(LM.Get("Handguns")); - Menu rifles = new Menu("Weapons", "Assault Rifles"); - MenuItem riflesBtn = new MenuItem("Assault Rifles"); + Menu rifles = new Menu(LM.Get("Weapons"), LM.Get("Assault Rifles")); + MenuItem riflesBtn = new MenuItem(LM.Get("Assault Rifles")); - Menu shotguns = new Menu("Weapons", "Shotguns"); - MenuItem shotgunsBtn = new MenuItem("Shotguns"); + Menu shotguns = new Menu(LM.Get("Weapons"), LM.Get("Shotguns")); + MenuItem shotgunsBtn = new MenuItem(LM.Get("Shotguns")); - Menu smgs = new Menu("Weapons", "Sub-/Light Machine Guns"); - MenuItem smgsBtn = new MenuItem("Sub-/Light Machine Guns"); + Menu smgs = new Menu(LM.Get("Weapons"), LM.Get("Sub-/Light Machine Guns")); + MenuItem smgsBtn = new MenuItem(LM.Get("Sub-/Light Machine Guns")); - Menu throwables = new Menu("Weapons", "Throwables"); - MenuItem throwablesBtn = new MenuItem("Throwables"); + Menu throwables = new Menu(LM.Get("Weapons"), LM.Get("Throwables")); + MenuItem throwablesBtn = new MenuItem(LM.Get("Throwables")); - Menu melee = new Menu("Weapons", "Melee"); - MenuItem meleeBtn = new MenuItem("Melee"); + Menu melee = new Menu(LM.Get("Weapons"), LM.Get("Melee")); + MenuItem meleeBtn = new MenuItem(LM.Get("Melee")); - Menu heavy = new Menu("Weapons", "Heavy Weapons"); - MenuItem heavyBtn = new MenuItem("Heavy Weapons"); + Menu heavy = new Menu(LM.Get("Weapons"), LM.Get("Heavy Weapons")); + MenuItem heavyBtn = new MenuItem(LM.Get("Heavy Weapons")); - Menu snipers = new Menu("Weapons", "Sniper Rifles"); - MenuItem snipersBtn = new MenuItem("Sniper Rifles"); + Menu snipers = new Menu(LM.Get("Weapons"), LM.Get("Sniper Rifles")); + MenuItem snipersBtn = new MenuItem(LM.Get("Sniper Rifles")); MenuController.AddSubmenu(menu, handGuns); MenuController.AddSubmenu(menu, rifles); @@ -362,7 +363,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex { //Log($"[DEBUG LOG] [WEAPON-BUG] {weapon.Name} - {weapon.Perm} = {IsAllowed(weapon.Perm)} & All = {IsAllowed(Permission.WPGetAll)}"); #region Create menu for this weapon and add buttons - Menu weaponMenu = new Menu("Weapon Options", weapon.Name) + Menu weaponMenu = new Menu(LM.Get("Weapon Options"), weapon.Name) { ShowWeaponStatsPanel = true }; @@ -378,7 +379,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex weaponInfo.Add(weaponMenu, weapon); - MenuItem getOrRemoveWeapon = new MenuItem("Equip/Remove Weapon", "Add or remove this weapon to/form your inventory.") + MenuItem getOrRemoveWeapon = new MenuItem(LM.Get("Equip/Remove Weapon"), LM.Get("Add or remove this weapon to/form your inventory.")) { LeftIcon = MenuItem.Icon.GUN }; @@ -386,11 +387,11 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex if (!IsAllowed(Permission.WPSpawn)) { getOrRemoveWeapon.Enabled = false; - getOrRemoveWeapon.Description = "You do not have permission to use this option."; + getOrRemoveWeapon.Description = LM.Get("You do not have permission to use this option."); getOrRemoveWeapon.LeftIcon = MenuItem.Icon.LOCK; } - MenuItem fillAmmo = new MenuItem("Re-fill Ammo", "Get max ammo for this weapon.") + MenuItem fillAmmo = new MenuItem(LM.Get("Re-fill Ammo"), LM.Get("Get max ammo for this weapon.")) { LeftIcon = MenuItem.Icon.AMMO }; @@ -412,7 +413,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex } } - MenuListItem weaponTints = new MenuListItem("Tints", tints, 0, "Select a tint for your weapon."); + MenuListItem weaponTints = new MenuListItem(LM.Get("Tints"), tints, 0, LM.Get("Select a tint for your weapon.")); weaponMenu.AddMenuItem(weaponTints); #endregion @@ -427,7 +428,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex } else { - Notify.Error("You need to get the weapon first!"); + Notify.Error(LM.Get("You need to get the weapon first!")); } } }; @@ -446,14 +447,14 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex if (HasPedGotWeapon(Game.PlayerPed.Handle, hash, false)) { RemoveWeaponFromPed(Game.PlayerPed.Handle, hash); - Subtitle.Custom("Weapon removed."); + Subtitle.Custom(LM.Get("Weapon removed.")); } else { var ammo = 255; GetMaxAmmo(Game.PlayerPed.Handle, hash, ref ammo); GiveWeaponToPed(Game.PlayerPed.Handle, hash, ammo, false, true); - Subtitle.Custom("Weapon added."); + Subtitle.Custom(LM.Get("Weapon added.")); } } else if (item == fillAmmo) @@ -466,7 +467,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex } else { - Notify.Error("You need to get the weapon first before re-filling ammo!"); + Notify.Error(LM.Get("You need to get the weapon first before re-filling ammo!")); } } }; @@ -480,7 +481,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex foreach (var comp in weapon.Components) { //Log($"{weapon.Name} : {comp.Key}"); - MenuItem compItem = new MenuItem(comp.Key, "Click to equip or remove this component."); + MenuItem compItem = new MenuItem(comp.Key, LM.Get("Click to equip or remove this component.")); weaponComponents.Add(compItem, comp.Key); weaponMenu.AddMenuItem(compItem); @@ -498,7 +499,7 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex { RemoveWeaponComponentFromPed(Game.PlayerPed.Handle, Weapon.Hash, componentHash); - Subtitle.Custom("Component removed."); + Subtitle.Custom(LM.Get("Component removed.")); } else { @@ -512,12 +513,12 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex SetAmmoInClip(Game.PlayerPed.Handle, Weapon.Hash, clipAmmo); SetPedAmmo(Game.PlayerPed.Handle, Weapon.Hash, ammo); - Subtitle.Custom("Component equiped."); + Subtitle.Custom(LM.Get("Component equiped.")); } } else { - Notify.Error("You need to get the weapon first before you can modify it."); + Notify.Error(LM.Get("You need to get the weapon first before you can modify it.")); } } }; @@ -586,49 +587,49 @@ async void IndexChangedEventHandler(Menu sender, MenuListItem item, int oldIndex if (handGuns.Size == 0) { handGunsBtn.LeftIcon = MenuItem.Icon.LOCK; - handGunsBtn.Description = "The server owner removed the permissions for all weapons in this category."; + handGunsBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); handGunsBtn.Enabled = false; } if (rifles.Size == 0) { riflesBtn.LeftIcon = MenuItem.Icon.LOCK; - riflesBtn.Description = "The server owner removed the permissions for all weapons in this category."; + riflesBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); riflesBtn.Enabled = false; } if (shotguns.Size == 0) { shotgunsBtn.LeftIcon = MenuItem.Icon.LOCK; - shotgunsBtn.Description = "The server owner removed the permissions for all weapons in this category."; + shotgunsBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); shotgunsBtn.Enabled = false; } if (smgs.Size == 0) { smgsBtn.LeftIcon = MenuItem.Icon.LOCK; - smgsBtn.Description = "The server owner removed the permissions for all weapons in this category."; + smgsBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); smgsBtn.Enabled = false; } if (throwables.Size == 0) { throwablesBtn.LeftIcon = MenuItem.Icon.LOCK; - throwablesBtn.Description = "The server owner removed the permissions for all weapons in this category."; + throwablesBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); throwablesBtn.Enabled = false; } if (melee.Size == 0) { meleeBtn.LeftIcon = MenuItem.Icon.LOCK; - meleeBtn.Description = "The server owner removed the permissions for all weapons in this category."; + meleeBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); meleeBtn.Enabled = false; } if (heavy.Size == 0) { heavyBtn.LeftIcon = MenuItem.Icon.LOCK; - heavyBtn.Description = "The server owner removed the permissions for all weapons in this category."; + heavyBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); heavyBtn.Enabled = false; } if (snipers.Size == 0) { snipersBtn.LeftIcon = MenuItem.Icon.LOCK; - snipersBtn.Description = "The server owner removed the permissions for all weapons in this category."; + snipersBtn.Description = LM.Get("The server owner removed the permissions for all weapons in this category."); snipersBtn.Enabled = false; } #endregion diff --git a/vMenu/menus/WeatherOptions.cs b/vMenu/menus/WeatherOptions.cs index ac4102f8..ce6fe621 100644 --- a/vMenu/menus/WeatherOptions.cs +++ b/vMenu/menus/WeatherOptions.cs @@ -17,6 +17,7 @@ public class WeatherOptions { // Variables private Menu menu; + private static LanguageManager LM = new LanguageManager(); public static Dictionary weatherHashMenuIndex = new Dictionary(); public MenuCheckboxItem dynamicWeatherEnabled; public MenuCheckboxItem blackout; @@ -24,27 +25,27 @@ public class WeatherOptions private void CreateMenu() { // Create the menu. - menu = new Menu(Game.Player.Name, "Weather Options"); + menu = new Menu(Game.Player.Name, LM.Get("Weather Options")); - dynamicWeatherEnabled = new MenuCheckboxItem("Toggle Dynamic Weather", "Enable or disable dynamic weather changes.", EventManager.dynamicWeather); - blackout = new MenuCheckboxItem("Toggle Blackout", "This disables or enables all lights across the map.", EventManager.blackoutMode); - MenuItem extrasunny = new MenuItem("Extra Sunny", "Set the weather to ~y~extra sunny~s~!"); - MenuItem clear = new MenuItem("Clear", "Set the weather to ~y~clear~s~!"); - MenuItem neutral = new MenuItem("Neutral", "Set the weather to ~y~neutral~s~!"); - MenuItem smog = new MenuItem("Smog", "Set the weather to ~y~smog~s~!"); - MenuItem foggy = new MenuItem("Foggy", "Set the weather to ~y~foggy~s~!"); - MenuItem clouds = new MenuItem("Cloudy", "Set the weather to ~y~clouds~s~!"); - MenuItem overcast = new MenuItem("Overcast", "Set the weather to ~y~overcast~s~!"); - MenuItem clearing = new MenuItem("Clearing", "Set the weather to ~y~clearing~s~!"); - MenuItem rain = new MenuItem("Rainy", "Set the weather to ~y~rain~s~!"); - MenuItem thunder = new MenuItem("Thunder", "Set the weather to ~y~thunder~s~!"); - MenuItem blizzard = new MenuItem("Blizzard", "Set the weather to ~y~blizzard~s~!"); - MenuItem snow = new MenuItem("Snow", "Set the weather to ~y~snow~s~!"); - MenuItem snowlight = new MenuItem("Light Snow", "Set the weather to ~y~light snow~s~!"); - MenuItem xmas = new MenuItem("X-MAS Snow", "Set the weather to ~y~x-mas~s~!"); - MenuItem halloween = new MenuItem("Halloween", "Set the weather to ~y~halloween~s~!"); - MenuItem removeclouds = new MenuItem("Remove All Clouds", "Remove all clouds from the sky!"); - MenuItem randomizeclouds = new MenuItem("Randomize Clouds", "Add random clouds to the sky!"); + dynamicWeatherEnabled = new MenuCheckboxItem(LM.Get("Toggle Dynamic Weather"), LM.Get("Enable or disable dynamic weather changes."), EventManager.dynamicWeather); + blackout = new MenuCheckboxItem(LM.Get("Toggle Blackout"), LM.Get("This disables or enables all lights across the map."), EventManager.blackoutMode); + MenuItem extrasunny = new MenuItem(LM.Get("Extra Sunny"), LM.Get("Set the weather to ~y~extra sunny~s~!")); + MenuItem clear = new MenuItem(LM.Get("Clear"), LM.Get("Set the weather to ~y~clear~s~!")); + MenuItem neutral = new MenuItem(LM.Get("Neutral"), LM.Get("Set the weather to ~y~neutral~s~!")); + MenuItem smog = new MenuItem(LM.Get("Smog"), LM.Get("Set the weather to ~y~smog~s~!")); + MenuItem foggy = new MenuItem(LM.Get("Foggy"), LM.Get("Set the weather to ~y~foggy~s~!")); + MenuItem clouds = new MenuItem(LM.Get("Cloudy"), LM.Get("Set the weather to ~y~clouds~s~!")); + MenuItem overcast = new MenuItem(LM.Get("Overcast"), LM.Get("Set the weather to ~y~overcast~s~!")); + MenuItem clearing = new MenuItem(LM.Get("Clearing"), LM.Get("Set the weather to ~y~clearing~s~!")); + MenuItem rain = new MenuItem(LM.Get("Rainy"), LM.Get("Set the weather to ~y~rain~s~!")); + MenuItem thunder = new MenuItem(LM.Get("Thunder"), LM.Get("Set the weather to ~y~thunder~s~!")); + MenuItem blizzard = new MenuItem(LM.Get("Blizzard"), LM.Get("Set the weather to ~y~blizzard~s~!")); + MenuItem snow = new MenuItem(LM.Get("Snow"), LM.Get("Set the weather to ~y~snow~s~!")); + MenuItem snowlight = new MenuItem(LM.Get("Light Snow"), LM.Get("Set the weather to ~y~light snow~s~!")); + MenuItem xmas = new MenuItem(LM.Get("X-MAS Snow"), LM.Get("Set the weather to ~y~x-mas~s~!")); + MenuItem halloween = new MenuItem(LM.Get("Halloween"), LM.Get("Set the weather to ~y~halloween~s~!")); + MenuItem removeclouds = new MenuItem(LM.Get("Remove All Clouds"), LM.Get("Remove all clouds from the sky!")); + MenuItem randomizeclouds = new MenuItem(LM.Get("Randomize Clouds"), LM.Get("Add random clouds to the sky!")); var indexOffset = 2; if (IsAllowed(Permission.WODynamic)) diff --git a/vMenuServer/MainServer.cs b/vMenuServer/MainServer.cs index ffb7491a..64cd8926 100644 --- a/vMenuServer/MainServer.cs +++ b/vMenuServer/MainServer.cs @@ -7,6 +7,7 @@ using Newtonsoft.Json; using static vMenuServer.DebugLog; using static vMenuShared.ConfigManager; +using System.Collections; namespace vMenuServer { @@ -419,7 +420,7 @@ public MainServer() EventHandlers.Add("vMenu:SendMessageToPlayer", new Action(SendPrivateMessage)); EventHandlers.Add("vMenu:PmsDisabled", new Action(NotifySenderThatDmsAreDisabled)); EventHandlers.Add("vMenu:SaveTeleportLocation", new Action(AddTeleportLocation)); - + EventHandlers.Add("vMenu:DumpLanguages", new Action(DumpLanguages)); // check addons file for errors string addons = LoadResourceFile(GetCurrentResourceName(), "config/addons.json") ?? "{}"; @@ -894,5 +895,31 @@ private void AddTeleportLocation([FromSource]Player source, string locationJson) } #endregion + #region Dump language text + /// + /// Dump the language text + /// + /// + /// + private void DumpLanguages([FromSource] Player source, string text) + { + if (IsPlayerAceAllowed(source.Handle, "vMenu.DumpLanguages.Dump") || IsPlayerAceAllowed(source.Handle, "vMenu.Everything") || + IsPlayerAceAllowed(source.Handle, "vMenu.DumpLanguages.All")) + { + if (!SaveResourceFile(GetCurrentResourceName(), "dumped_text.json", text, -1)) + { + Log("Could not save dumped_text.json file, reason unknown.", LogLevel.error); + } + else + { + Log("Dumped data to dumped_text.json"); + } + } + else { + BanManager.BanCheater(source); + } + } + #endregion + } } diff --git a/vMenuServer/config/languages.json b/vMenuServer/config/languages.json new file mode 100644 index 00000000..6070ac3c --- /dev/null +++ b/vMenuServer/config/languages.json @@ -0,0 +1,1631 @@ +{ + "american": {}, + "french": {}, + "german": {}, + "italian": {}, + "spanish": {}, + "portuguese": {}, + "polish": {}, + "russian": {}, + "korean": {}, + "chinesetraditional": { + "Become an animal. ~r~Note this may crash your own or other players' game if you die as an animal, godmode can NOT prevent this.": "׃һb~r~Ոע@ܕ[ϵģʽҲܱɫ", + "Vehicle Doors Management": "d܇T", + "Set the voice chat receiving proximity in meters.": "OZɽվx", + "Rename Saved Ped": "Ľɫ", + "Show Vehicle Dimensions": "@ʾd߅", + "Cloudy": "", + "300 m": "300 ", + "Wet Player Clothes": "·", + "Shotguns": "", + "Save your current settings. All saving is done on the client side, if you re-install windows you will lose your settings. Settings are shared across all servers using vMenu.": "㮔ǰOOǃXϵģb Windows ͕Gʧⰲb vMenu ŷʹ", + "Night": "賿", + "Ban Record: ": "ӛ", + "Save your current ped. Note for the MP Male/Female peds this won't save most of their customization, just because that's impossible. Create those characters in the MP Character creator instead.": "㮔ǰՈע@Kܱھɫ@Dzܵģ㑪ԓͨ^ھɫ", + "Current Vehicle: None": "ǰ]Od", + "Rockstar Editor": "Rockstar ݋", + "Go in reverse gear": "", + "Save Loadout": "b", + "Set this loadout to be your default loadout for whenever you (re)spawn. This will override the 'Restore Weapons' option inside the Misc Settings menu. You can toggle this option in the main Weapon Loadouts menu.": "OÞĬJbKĕrԄӼd@x헕w ֏ x헣bˆο", + "~y~~s~ Roll Rear Windows Up": "~y~~s~ ܇", + "Toggle NoClip on or off.": "_P]oײw", + "Roll both front windows up.": "уɂȵǰ܇", + "Character Face Shape Options": "ɫĘx", + "Enables or disables the blip that gets added when you mark a vehicle as your personal vehicle.": "ûĂdλ@ʾһ", + "Select a father.": "xһH", + "Banned Players Management": "ѷҹ", + "Staff Channel": "Tl", + "Change the time, and edit other time related options.": "ĕrgK݋crgPx헡", + "Tune and customize your vehicle here.": "@ebԶxd", + "Assault Rifles": "ͻ", + "Change Voice Chat options here.": "޸ZPx", + "Toggle Night Vision": "_ҹҕģʽ", + "Show a speedometer on your screen indicating your speed in MPH.": "ӫĻ@ʾ܇lӢ/Сrʾ܇١", + "Makes your vehicle visible/invisible. ~r~Your vehicle will be made visible again as soon as you leave the vehicle. Otherwise you would not be able to get back in.": "׌܇v׃ÿҊ/Ҋ~r~܇܇v͕@ʾt㌢oص܇ϡ", + "Open/close the hood.": "_/P]w", + "Head Shape Mix": "Ęzƶ", + "Toggle Primary Parachute": "ГQ", + "Sub-/Light Machine Guns": "nh", + "Set the weather to ~y~overcast~s~!": "ГQ ~y~~s~", + "Force Stop Driving": "ֹͣ{", + "Show Current Speaker": "@ʾǰfԒ", + "Players: ": "ң", + "Util": "", + "Addon Weapons": "", + "Stop at traffic lights": "ڽͨǰͣ", + "Recording Controls": "ӛ䛲", + "Receive notifications when someone dies or gets killed.": "򱻚r@ʾ֪ͨ", + "Secondary Color": "ɫ{", + "Get ~g~Snail 3.0~s~ powers and jump like a champ!": "׌ı ~g~ARʿ~s~ ߀Ҫ", + "Show entity model/handle/dimension draw range.": "@ʾwģ͵Lux", + "Turn Camera Right": "zCD", + "Show Player Blips": "@ʾҹ", + "Make your player ped drive your vehicle to your waypoint.": "׌ҽɫ׃ NPC ܇_ӛλ", + "Strong Wheels": "Թ̵݆", + "Character Clothes": "ɫ·", + "Toggle Alarm Sound": "ГQ•", + "Show Entity Handles": "@ʾw", + "~r~YES, DELETE": "~r~ǵģՈh", + "Unlimited ammonition supply.": "oƵӏ", + " ~g~This character is currently set as your default character and will be used whenever you (re)spawn.": " ~g~@ɫѽOÞĬJɫKĕrԄӼd", + "Shows blips on the map for all players.": "ڵ؈D@ʾҵĹ", + "You need to re-apply this each time you change player model or load a saved ped.": "Ҫڸģͻdѱģ‘ôx", + "Lock Camera Vertical Rotation": "izCֱD", + "Location Blips": "λù", + "Set": "O", + "Missing Vehicles": "ȱʧd", + "Select how much dirt should be visible on your vehicle, press ~r~enter~s~ ": "xҪ@ʾ܇ϵĉme ~r~܇~s~", + "~r~Warning, unbanning the player can NOT be undone. You will NOT be able to ban them again until they re-join the server. Are you absolutely sure you want to unban this player? ~s~Tip: Tempbanned players will automatically get unbanned if they log on to the server after their ban date has expired.": "~r~ʾIJDzɳNģֱԓϾ֮ǰ㶼oٴη~s~ʾRrǕԄӽģԓҳ^Ͼr͕Ԅӽ", + "Show Time On Screen": "ڟĻ@ʾrg", + "Server Info": "ŷϢ", + "Delete this saved ped. Note this can not be undone!": "h@ѱ@DzɳNģ", + "Worn": "F", + "Locks your camera horizontal rotation. Could be useful in helicopters I guess.": "ĔzCiˮƽX@m_ֱC", + "Sounds the horn of the vehicle.": "׌܇vȰl•", + "Kill yourself by taking the pill. Or by using a pistol if you have one.": "ˎԚ֘Ҳʹ֘Ԛ", + "Watches": "l", + "Character tattoo options.": "ɫy", + "Make your player ped drive your vehicle randomly around the map.": "׌ҽɫ׃ NPC ڵ؈DSC{", + "Auto Pilot": "Ԅ{x", + "Set Engine Torque Multiplier": "OŤر", + "No Bike Helmet": "T܇^", + "This will stop the driving task immediately without finding a suitable place to stop.": "@ֹͣ܇vҺmͣ܇λ", + "Disables player ragdoll, makes you not fall off your bike anymore.": "Ҳ棬@Ͳˤ", + "Re-fill Ammo": "a䏗ˎ", + "Shirt / Accessory": "r / ", + "Get max ammo for this weapon.": "@@ˎ", + "Style your vehicle with fancy liveries!": "odNſĉTb", + "Turn vehicle lights on/off.": "dߟ_P", + "This ped is not (correctly) streamed. If you are the server owner, please ensure that the ped name and model are valid!": "ģ͛]ͨ^ʽݔ͑ˣՈ_JYԴѽӁKģQ_", + "Repair Vehicle": "ޏd", + "Give all your weapons max ammo.": "oӵˎ", + "Legs / Pants": " / ѝ", + "Equip/Remove Addon Weapons": "@ȡ / Ƴ", + "Disables your vehicle's siren. Only works if your vehicle actually has a siren.": "dߵľѣֻdоѵr", + "Reserve Chute Style": "Øʽ", + "Draws the model outlines for every ped that's currently close to you.": "@ʾ㸽ÿģ͵ײ", + "Normal": "ͨ", + "Set the time to 00:00.": "OÕrg 00:00", + "Reset": "", + "vMenu is made by ~b~Vespura~s~. For more info, checkout ~b~www.vespura.com/vmenu~s~. Thank you to: Deltanic, Brigliar, IllusiveTea, Shayan Doust and zr0iq for your contributions.": "vMenu ~b~Vespura~s~ _lwķg ~y~Akkariin", + "Toggle this driving style flag.": "ГQ@{L_P", + "Give this player a tempban of up to 30 days (max). You can specify duration and ban reason after clicking this button.": "ԓRr 30 죬xrg", + "Front Right": "ǰ", + "Edit Saved Character": "݋ѱĽɫ", + "Enables the reserve parachute. Only works if you enabled the primary parachute first. Reserve parachute can not be removed from the player once it's activated.": "Âý㡣ֻȆrЧýһӾͲ܏Ƴ", + "~r~Kick Player": "~r~߳", + "Time Options": "rgx", + "Location Display": "@ʾλ", + "Prevent others from sending you a private message via the Online Players menu. This also prevents you from sending messages to other players.": "ֹҽol˽Ϣ@ҲֹoҰl˽Ϣ", + "Spawn Inside Vehicle": "d߃", + "Spawn this saved weapons loadout. This will remove all your current weapons and replace them with this saved slot.": "@b@FеKԴbw", + "~r~Unknown Flag": "~r~δ֪", + "Select how much of your body skin tone should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom.": "xwwɫԓ^ĸHĸH߅һ㸸H߅һĸH", + "Hide Radar": "[_", + "Randomize Clouds": "SC", + "Overcast": "", + "~y~~s~ Roll Front Windows Up": "~y~~s~ ǰ܇", + "Unlock Vehicle Doors": "id܇T", + "Avoid vehicles": "_܇v", + "Clone Saved Ped": "}uѱĽɫ", + "Set the time to 21:00.": "OÕrg 21:00", + "Voice Chat Channel": "Zl", + "Change ped model by selecting one from the list or by selecting an addon ped from the list.": "бxһģͣxһģ", + "Open/close the left rear door.": "_/P]T", + "Left Indicator": "D", + "All currently connected players.": "ЮǰBӵ", + "Stop and save your current recording.": "ֹͣK㮔ǰӛ", + "In-game recording options.": "[ux", + "Set the weather to ~y~light snow~s~!": "ГQ ~y~ѩ~s~", + "Toggle Vehicle Alarm": "ГQd߾_P", + "Trunk": "܇β", + "Avoid highways (if possible)": "_ٹ·ã", + "All Tires": "݆̥", + "Ban this player permanently from the server. Are you sure you want to do this? You can specify the ban reason after clicking this button.": "÷ҡ_Ҫ@N᣿ָһԭ", + "Vehicle God Mode": "dϵģʽ", + "Classic": "", + "Banned Players": "ѷ", + "Hair Style / Color": "^ / ɫ", + "Select how much of your head shape should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom.": "xĘz߅һ㸸H߅һĸH", + "Makes you invisible to yourself and others.": "׌׃[ģԼ̈́e˶Ҋ", + "Spawn Ped": "ɽɫ", + "Server connection/game quit options.": "ŷB/[˳x", + "Enable or disable time freezing.": "_P]rgY", + "Save Personal Settings": "悀O", + "Set the time to 06:00.": "OÕrg 06:00", + "Disables all wanted levels.": "еͨȼ", + "No Wanted Level": "oͨȼ", + "Stop before vehicles": "܇vǰͣ܇", + "Get ~g~Snail~s~ powers and run very fast!": "׌ܵı ~g~ӛ~s~ ߀Ҫ", + "Various teleport options.": "Nx", + "Addon Spawner": "ʽ", + "Toggle Vehicle Doors": "d܇T", + "Developer Tools": "_lˆT", + "Restore your player's skin whenever you respawn after being dead. Re-joining a server will not restore your previous skin.": "K֏ƤwMŷr֏", + "Delete Vehicle, Are You Sure?": "hdߣ_᣿", + "Kill this player, note they will receive a notification saying that you killed them. It will also be logged in the Staff Actions log.": "ԓңՈע⌦յ֪ͨ㚢@Ҳӛ䛵TI", + "Vehicle Neon Kits": "d޺", + "Set All Ammo Count": "OЏˎ", + "Hide the radar/minimap.": "[_/С؈D", + "Are you sure? All unsaved work will be lost.": "_᣿δĹGʧ", + "Shows the vehicle health on the screen.": "ڟĻ@ʾdߵֵ", + "Manage Loadouts": "b", + "Disable Plane Turbulence": "wCwЁy", + "This will teleport you into the vehicle when you spawn it.": "@ԄӰ͵ɵd", + "Equip or remove the primary parachute": "bƳ", + "Smog": "F", + "Select a mother.": "xһĸH", + "1 km": "1 ", + "Flip Vehicle": "Dd", + "Infinite Fuel": "o޵ȼ", + "Change all weather related options here.": "޸cPx", + "Visual Damage": "ҕX", + "Show Entity Models": "@ʾwģ", + "Toggles the engine on or off, even when you're not inside of the vehicle. This does not work if someone else is currently using your vehicle.": "_P]㲻܇Ȼ_܇r]Ч", + "Your saved vehicle will be replaced with the vehicle you are currently sitting in. ~r~Warning: this can NOT be undone!": "ѱ܇vQ㮔ǰ{܇v@DzɳNģ", + "Channel 2": "l 2", + "Channel 3": "l 3", + "Teleport to the waypoint on your map.": "͵ڵ؈DϘӛc", + "Modify your ped's appearance.": "Ľɫ^", + "Channel 4": "l 4", + "Set the amount of ammo in all your weapons.": "Oďˎ", + "Equip Loadout": "bb", + "Saved Peds": "ѱĽɫ", + "Force Off": "P]", + "Set As Default Loadout": "OÞĬJb", + "to apply the selected level.": "푪xĵȼ", + "Vehicle Enveff Scale": "", + "Voice Chat Settings": "ZO", + "Bomb Bay": "ը}", + "Ignore roads": "Ե·", + "This allows you to edit everything about your saved character. The changes will be saved to this character's save file entry once you hit the save button.": "@S㾎݋ѱĽɫɫֻ㰴±水oŕ", + "Weapons": "", + "Vehicle Doors": "d܇T", + "Freezes your current location.": "̶㮔ǰλ", + "Sexy": "Ը", + "Change the walking style of your current ped. ": "x㮔ǰɫL", + "If enabled, then you will be the only one that can enter the drivers seat. Other players will not be able to drive the car. They can still be passengers.": "_ֻ{܇vֻܳ܇v", + "Give the player max health.": "oѪ", + "Foggy": "F", + "Badges / Logos": " / I", + "saved weapon loadouts list": "ѱbб", + "Various development/debug tools.": "N_l/{ԇߡ", + "Add or remove this weapon to/form your inventory.": "@ӵıƳ", + "Add/remove weapons, modify weapons and set ammo options.": "Ӻ̈́h޸ģԼOÏˎx", + "2 km": "2 ", + "Disables your engine from taking any damage.": "ʹ治ܵκ΂", + "Spawns the selected saved character.": "ѱĽɫģ", + "If you enable this, then you will (re)spawn as your default saved MP character. Note the server owner can globally disable this option. To set your default character, go to one of your saved MP Characters and click the 'Set As Default Character' button.": "rԄӼdĬJھģ͡Խ@x헣ҪOՈھģͲˆ΁KcOÞĬJɫ", + "Vehicle Neon Underglow Options": "dߵױP޺x", + "Player Scenarios": "҄", + "Automatically repairs your vehicle when it has ANY type of damage. It's recommended to keep this turned off to prevent glitchyness.": "dκΓpĵĕrԄޏͣhP]@xԱlһЩ}", + "weapon loadouts management": "b", + "Unlimited Ammo": "oƵďˎ", + "Rename your saved vehicle.": "d", + "Open/close the left front door.": "_/P]ǰT", + "Blizzard": "ѩ", + "Turn Head": "D^", + "Remove Door": "Ƴ܇T", + "Player Related Options": "Px", + "Roll both front windows down.": "ƒɂǰ܇", + "Stop Recording": "ֹͣu", + "~r~Commit Suicide": "~r~Ԛ", + "Walking Style": "L", + "Prevents you from being knocked off your bike, bicyle, ATV or similar.": "ֹ܇Ħ܇Ƶdˤ", + "Left Rear Door": "T", + "vMenu Version": "vMenu 汾", + "Set a vehicle as your personal vehicle, and control some things about that vehicle when you're not inside.": "һvdOÞĂdߣȻͿ܇һЩ|", + " ~r~For some reason this one doesn't seem to work in FiveM.": " ~r~һЩԭo FiveM ʹ", + "Flash": "Wq", + "Heal Player": "ί", + "Keeps your vehicle engine on when you exit your vehicle.": "x_dȻd_", + "Cycle through the available vehicle seats.": "d߿õλ֮gѭhГQλ", + "Set the weather to ~y~foggy~s~!": "ГQ ~y~F~s~", + "This will constantly clean your car if the vehicle dirt level goes above 0. Note that this only cleans ~o~dust~s~ or ~o~dirt~s~. This does not clean mud, snow or other ~r~damage decals~s~. Repair your vehicle to remove them.": "܇v坍Ȳ 0 rԄ坍Ոע@ֻ ~o~҉m~s~ ~o~۹~s~@KѩײNDޏd߁", + "Print Identifiers": "ӡϢ", + "Shirt Overlay / Jackets": "rw / ", + "Turn your engine on/off.": "_P", + "Franklin": "m", + "Misc": "s", + "Set the weather to ~y~snow~s~!": "ГQ ~y~ѩ~s~", + "Deletes the selected saved character. This can not be undone!": "hǰxĽɫ@DzɳNģ", + "Character face shape options.": "ɫĘx", + "No Ragdoll": "ˤ", + "~o~~s~ Roll Rear Windows Down": "~o~~s~ ܇", + "Clone Loadout": "}ub", + "Helicopter Spotlight": "ֱC۹", + "Enable or disable the underglow on the back side of the vehicle. Note not all vehicles have lights.": "û᷽޺d߶޺", + "Spawn this saved vehicle.": "@vѱd", + "Driving Style": "{L", + "Spawn, edit or delete your existing saved multiplayer characters.": "ɡ݋hѱھҽɫ", + "Toggle Engine": "", + "Engine Damage": "", + "View and manage all banned players in this menu.": "鿴Kѱ", + "Force Stop Scenario": "ֹͣ", + "Coming soon (TM): the ability to import and export your saved data.": "Ͼ (TM)S㌧ߌĔ", + "Character Inheritance Options": "ɫzx", + "Remove All Weapons": "Ƴ", + "Enable Front Light": "ǰ", + "Voice Chat Proximity": "Zx", + "Extra Sunny": "", + "Custom Driving Style": "Զx{L", + "Clone Saved Character": "}uѱĽɫ", + "Vehicle Godmode": "dϵģʽ", + "Misc Settings": "ˆO", + "Character clothes.": "ɫb", + "Draws the model outlines for every prop that's currently close to you.": "@ʾ㸽ÿģ͵ײ", + "Freeze/Unfreeze Time": "Y/rg", + "Mange, and spawn saved weapon loadouts.": "ѱb", + "Stop Driving": "ֹͣ{", + "Teleport Options": "x", + "Shows you the current time on screen.": "ڟĻ@ʾǰ[rg", + "Select the color of the neon underglow.": "xױP޺ɫ", + "Show Dimensions Radius": "@ʾγߴ繠", + "Flash Highbeams On Honk": "ȕrh", + "Everyone Ignore Player": "˶oҕ", + "Rear Left": "", + "Makes your vehicle not take any damage. Note, you need to go into the god menu options below to select what kind of damage you want to disable.": "׌d׃ɟoģҪϵģʽxxwҪõĂ", + "~r~Ban Player Temporarily": "~r~Rr", + "Click to equip or remove this component.": "bƳ", + "Draws the model outlines for every vehicle that's currently close to you.": "@ʾ㸽ÿdģ͵ײ", + "Vehicle Windows": "dߴ", + "Quit Game": "˳[", + "Keep Vehicle Clean": "܇v坍", + "Save Current Vehicle": "殔ǰd", + "Weather Options": "x", + "Click to spawn this ped.": "c@ɫ", + "Mod Menu": "܇vbˆ", + "Disables your wheels from being deformed and causing reduced handling. This does not make tires bulletproof.": "ֹ܇݆׃΁Kpٲٿv @ʹ݆̥", + "Set the weather to ~y~clearing~s~!": "ГQ ~y~~s~", + "This works on certain vehicles only, like the besra for example. It 'fades' certain paint layers.": "@HmijЩdߣ besraijЩT", + "On": "_", + "A list of addon vehicles available on this server.": "ŷпõĸdб", + "Clean your vehicle.": "d", + "Character Appearance Options": "ɫ^x", + "No Armor": "oo", + "Enter a weapon mode name to spawn.": "ݔһQ", + "Set Custom Minute": "OԶx", + "Open/close the trunk.": "_/P]܇β", + "Set the time to 12:00.": "OÕrg 12:00", + "~r~Replace Saved Ped": "~r~wѱĽɫ", + "Get all weapons.": "@", + "Tough Guy": "Ӳh", + "Allow going wrong way": "Se·", + "Character Inheritance": "ɫz", + "Restore Default Loadout On Respawn": "rԄӻ֏ĬJb", + "Shows who is currently talking.": "@ʾǰlfԒ", + "Heavy Weapons": "", + "Roll both rear windows down.": "ƒɂ܇", + "Neck / Scarfs": " / ", + "Enable Rear Light": "", + "Set Custom Hour": "OԶxСr", + "Disconnect From Server": "ŷ_B", + "Manage Saved Characters": "ѱĽɫ", + "Draws the the entity models for all close entities (you must enable the outline functions above for this to work).": "@ʾЌwģͣҪײ@ʾã", + "Wheel Color": "݆ݞɫ", + "Unlimited Parachutes": "oƵĽ", + "Light Snow": "ѩ", + "Tire #8": "݆̥ #8", + "Character Appearance": "ɫ^", + "Save Ped": "ɫ", + "Tire #4": "݆̥ #4", + "Tire #5": "݆̥ #5", + "Tire #6": "݆̥ #6", + "Tire #7": "݆̥ #7", + "Tire #1": "݆̥ #1", + "Tire #2": "݆̥ #2", + "Tire #3": "݆̥ #3", + "Show Player Names": "@ʾ", + "Spawn a vehicle by name or choose one from a specific category.": "ݔQdߣбxһd", + "Restore Player Appearance": "֏^", + "Off": "P]", + "15 m": "15 ", + "Set the weather to ~y~extra sunny~s~!": "ГQ ~y~~s~", + "Create a new female character.": "һµŮԽɫ", + "Sniper Rifles": "ѓ", + "Enable Left Light": "", + "Early Afternoon": "", + "Rename this saved ped.": "@ѱĽɫ", + "Player Name": "", + "Fast Swim": "Ӿ", + "Unlimited Stamina": "ow", + "Delete Saved Character": "hѱĽɫ", + "Mother": "ĸH", + "Avoid highways": "_ٹ·", + "~r~Unban": "~r~", + "Ramp Damage": "б", + "About vMenu / Credits": "[ˆϢ", + "Roll your windows up/down or remove/restore your vehicle windows here.": "܇/Ƴ/֏܇", + "Neutral": "", + "Banned Player": "ѷ", + "~r~Replace Vehicle": "~r~Qd", + "Body Skin Mix": "Ƥwz", + "Show Prop Dimensions": "@ʾģγߴ", + "10 m": "10 ", + "Shows whether your microphone is open or muted.": "L_P]r@ʾ", + "Open/close the bomb bay. Only available on some planes.": "_/P]ը}@HһЩwCϿ", + "Repair any visual and physical damage present on your vehicle.": "ޏdе^p", + "Show a speedometer on your screen indicating your speed in KM/h.": "ӫĻ@ʾ܇lԹ/Сrʾ܇١", + "Enables the torque multiplier selected from the list below.": "бxҪõŤر", + "Teleport to this player.": "͵ԓ", + "Enter the name of a vehicle to spawn.": "ݔһdߵQ", + "Primary Color": "ɫ{", + "Banned By": "", + "Remove All Clouds": "Ƴе", + "Enable or disable the underglow on the front side of the vehicle. Note not all vehicles have lights.": "ûǰ޺d߶޺", + "Vehicle Options": "dx", + "Restore your weapons whenever you respawn after being dead. Re-joining a server will not restore your previous weapons.": "K֏Mŷ᲻ܻ֏", + "Teleport Into Player Vehicle": "͵ҵd߃", + "Equip / remove addon weapons available on this server.": "b/Ƴ˸", + "Save Teleport Location": "λ", + "Teleport to your waypoint when pressing the keybind. By default, this keybind is set to ~r~F7~s~, server owners are able to change this however so ask them if you don't know what it is.": "͵ČcĬJI ~r~F7~s~Ը@I㲻֪Ո", + "Set the weather to ~y~smog~s~!": "ГQ ~y~F~s~", + "Enables the finger point toggle key. The default QWERTY keyboard mapping for this is 'B', or for controller quickly double tap the right analog stick.": "ָָIIPĬJI BֱǿٰƒɴғuU", + "Spawn By Name": "Q", + "Hipster": "", + "Character inheritance options.": "ɫzPx", + "Roll both rear windows up.": "уɂȵ܇", + "Exits the game after 5 seconds.": " 5 ˳[", + "Choose a smoke trail color, then press select to change it. Changing colors takes 4 seconds, you can not use your smoke while the color is being changed.": "ğFEɫȻᰴx׃ɫҪ 4 룬g㲻ʹßF", + "Select a female ped.": "xһŮԽɫ", + "This prevents scratches and other damage decals from being applied to your vehicle. It does not prevent (body) deformation damage.": "@ӿԷֹβpЧF܇vϡֹܷ܇׃Γpġ", + "Set the weather to ~y~halloween~s~!": "ГQ ~y~f}~s~", + "Thunder": "ױ", + "Freeze Vehicle": "̶dλ", + "Enables or disables the GPS route on your radar to this player.": "ûõ@λõ GPS ", + "Manage this saved vehicle.": "@vѱd", + "Snow": "ѩ", + "Remove a specific vehicle door completely.": "ȫжض܇T", + "Teleport To Player": "͵", + "If you set this character as your default character, and you enable the 'Respawn As Default MP Character' option in the Misc Settings menu, then you will be set as this character whenever you (re)spawn.": "㌢@ɫOÞĬJɫK҆ھҽɫܣ㌢ԄӼd˽ɫ", + "Manage saved weapon loadouts.": "ѱb", + "This disables the controller menu toggle key. This does NOT disable the navigation buttons.": "@ֱIJˆГQI@Ìo", + "Disable Controller Support": "ֱ֧", + "Open/close the right rear door.": "_/P]T", + "Drive in reverse": "܇{", + "Shows blips on the map for some common locations.": "ڵ؈D@ʾһЩҊλù", + "Turn on your highbeams on your vehicle when honking your horn. Does not work during the day when you have your lights turned off.": "㰴ȵĕrWqhڰP]܇ĕr", + "Parachute Options": "x", + "Replace Previous Vehicle": "w֮ǰd", + "This will enable or disable your vehicle headlights, the engine of your vehicle needs to be running for this to work.": "û܇v⣬ֻ܇vlӵr¿", + "Open this submenu for vehicle related subcategories.": "_cdPIJˆ", + "Drive Around Randomly": "ڸSC{", + "Freeze Player": "̶", + "Click to spawn, edit, clone, rename or delete this saved character.": "cɡ݋}uh@ѱĽɫ", + "Receive notifications when someone joins or leaves the server.": "Mx_ŷĕr@ʾ֪ͨ", + "Weapon Options": "x", + "Manage Vehicle": "d", + "North Yankton": "D", + "Teleport To Coords": "͵", + "You can rename this saved character. If the name is already taken then the action will be canceled.": "˽ɫѽڌȡ˲", + "Delete Vehicle!": "hdߣ", + "~r~This will delete your saved vehicle. Warning: this can NOT be undone!": "~r~@hѱdߡע⣺@DzɳNģ", + "Global": "ȫ", + "Throwables": "ͶS", + "Metals": "߹", + "Metallic": "", + "Enable or disable specific damage types.": "ûضĂ", + "Enable Right Light": "ҟ", + "Character appearance options.": "ɫ^x", + "Send Private Message": "l˽Ϣ", + "Choose a license plate type and press ~r~enter ~s~to apply ": "xһ܇Ȼᰴ ~r~܇~s~ 푪", + "Primary Colors": "ɫ{", + "About vMenu": "[ˆϢ", + "~r~Auto Repair": "~r~Ԅޏ", + "Clean your player clothes.": "·", + "Locks your camera vertical rotation. Could be useful in helicopters I guess.": "zCҕi鴹ֱXmֱC", + "Interior / Trim Color": "/bɫ", + "renameme": "", + "Banned Until": "rg", + "Back": "", + "Use blinkers": "ʹ̖", + "Set Wanted Level": "Oͨȼ", + "Information about vMenu.": "P vMenu Ϣ", + "God Mode Options": "ϵģʽx", + "Other Peds": "ģ", + "Toggle NoClip": "_Poײwģʽ", + "Player Identifiers": "҂Ϣ", + "Show Speed KM/H": "@ʾٶ KM/H", + "Timecycle Modifier Intensity": "rgѭh޸", + "Set the time to 09:00.": "OÕrg 09:00", + "Extra 2": " 2", + "Extra 1": " 1", + "License Plate Type": "܇", + "Toggle GPS": "_ GPS", + "Stay In Vehicle": "d߃", + "Set the weather to ~y~rain~s~!": "ГQ ~y~~s~", + "Hats / Helmets": "ñ / ^", + "Set Vehicle": "Od", + "Finger Point Controls": "ָָ", + "Dashboard Color": "xlPɫ", + "Everyone will leave you alone.": "˶hx", + "All parachute related options can be changed here.": "cPx헶ڴ̎", + "~r~Delete Vehicle": "~r~hd", + "The player ped will find a suitable place to stop the vehicle. The task will be stopped once the vehicle has reached the suitable stop location.": "ҽɫLԇһطͣ܇һҵmλͣ܇΄վֹ͕ͣ", + "Spawn Peds": "ģ", + "Edit, rename, clone, spawn or delete saved peds.": "݋}uɻhѱĽɫ", + "Spawn Weapon By Name": "Q", + "Vehicle Extras/Components": "d߸ӽM", + "Make your player clothes wet.": "׌·׃ɝ", + "Teleport Locations": "λ", + "vMenu": "vMenu", + "Vehicle Mods": "d߸bˆ", + "Re-join Session": "¼[", + "Join / Quit Notifications": "M/˳֪ͨ", + "Avoid empty vehicles": "_յd", + "Toggles the vehicle alarm sound on or off. This does not set an alarm. It only toggles the current sounding status of the alarm.": "_P]܇v•@OþHГQĮǰl•B", + "Player:": "ң", + "Business": "̄", + "Open All Doors": "_܇T", + "Fix / Destroy Tires": "ޏ/Ɖ݆̥", + "Disables the turbulence for all planes. Note only works for planes. Helicopters and other flying vehicles are not supported.": "wCעHmwCֱ֧Cw", + "Clear Area": "^", + "Stop before peds": "ǰͣ", + "Enable or disable thermal vision.": "ûßģʽ", + "Enable Timecycle Modifier": "Õrgѭh޸", + "Ped Customization": "ɫԶx", + "Death Notifications": "֪ͨ", + "Spawn Saved Character": "ѱĽɫ", + "Sets your current vehicle as your personal vehicle. If you already have a personal vehicle set then this will override your selection.": "㮔ǰdOÞ邀dߣѽһvdˣ@w֮ǰd", + "Filter List": "Yxб", + "Saved Characters": "Ľɫ", + "Enable Voice Chat": "Z", + "Close all vehicle doors.": "P]е܇T", + "Injured": "܂", + "Enables or disables the recording (gameplay recording for the Rockstar editor) hotkeys on both keyboard and controller.": "ûIPֱ[uRockstar ݋I", + "Vehicle Spawner": "d", + "If you want vMenu to appear on the left side of your screen, disable this option. This option will be saved immediately. You don't need to click save preferences.": "Ҫ׌ vMenu @ʾڟĻȣՈôx헣@xԄӱģoքӱ", + "Online Players": "ھб", + "Make your player clothes dry.": "׌·׃Ǭ", + "Disable Private Messages": "˽Ϣ", + "Set the time to 03:00.": "OÕrg 03:00", + "Show Vehicle Health": "@ʾdֵ", + "Create Female Character": "ŮԽɫ", + "Add/remove vehicle components/extras.": "/hd߸ӽM", + "Speed Limiter": "ٶ", + "Recording Options": "[ux", + "Vehicle Godmode Options": "dϵģʽx", + "Vehicle Related Options": "dPx", + "Male Peds": "Խɫ", + "Toggle Dynamic Weather": "ÄӑB", + "Character Props": "ɫ", + "Smoke Trail Color": "FEɫ", + "Set the engine power multiplier.": "O湦ʱ", + "Disconnects you from the server and returns you to the serverlist. ~r~This feature is not recommended, quit the game completely instead and restart it for a better experience.": "_BӁKصŷб~r~]˹ܣ˳[MһЩ", + "Character props.": "ɫ", + "Glasses": "R", + "Create a new male character.": "һµԽɫ", + "Show Speed MPH": "@ʾٶ MPH", + "Toggle Vehicle Visibility": "ГQdҊ", + "Show Microphone Status": "@ʾLB", + "This vehicle is not available because the model could not be found in your game files. If this is a DLC vehicle, make sure the server is streaming it.": "@d߲ã][ļҵ@ DLC dߣՈ_ŷѽ_ʽݔ͑", + "Enables or disables player overhead names.": "û^픵@ʾ", + "NO, do NOT delete my vehicle and go back!": "Ҫhҵd߁K", + "Left Front Door": "ǰT", + "Dry Player Clothes": "ʹ·׃Ǭ", + "Set the weather to ~y~thunder~s~!": "ГQ ~y~ױ~s~", + "Clones this saved loadout to a new slot.": "}u@ѱbһµb", + "Hazard Lights": "ʾ", + " Weapon Categories ": " ", + "Select a male ped.": "xһԽɫ", + "Allows you to run forever without slowing down or taking damage.": "SһֱҲ܂", + "Development Tools": "_lˆT", + "Spectate Player": "^", + "Ignore all pathing": "·", + "These vehicles are currently unavailable because the models are not present in the game. These vehicles are most likely not being streamed from the server.": "@vd߮ǰãģ͛]мd[ͨŷ]ʽݔ͑", + "Weapon Loadouts": "b", + "Create Male Character": "Խɫ", + "Turn Character": "Dӽɫ", + "Front Left": "ǰ", + "Vehicle Auto Pilot Menu": "dԄ{ˆ", + "Channel 1 (Default)": "l 1ĬJ", + "Manage MP Character": "ھɫ", + "Manage vehicle auto pilot options.": "dԄ{x", + "Draws the the entity handles for all close entities (you must enable the outline functions above for this to work).": "@ʾЌwľҪȆײx헣", + "Freeze your vehicle's position.": "̶dλ", + "Rushed": "", + "Spawn Saved Ped": "ѱĽɫ", + "This disables or enables all lights across the map.": "ûõ؈Dеğ", + "Sound Horn": "", + "Rename this saved loadout.": "@ѱb", + "Saved Ped": "ѱĽɫ", + "Automatically equip a parachute and reserve parachute when entering planes/helicopters.": "MwC/ֱCrԄbK", + "Select a scenario and hit enter to start it. Selecting another scenario will override the current scenario. If you're already playing the selected scenario, selecting it again will stop the scenario.": "xһȻᰴ܇IԆxһwǰѽڲxĈtٴxֹͣԓ", + "Create, edit, save and load multiplayer peds. ~r~Note, you can only save peds created in this submenu. vMenu can NOT detect peds created outside of this submenu. Simply due to GTA limitations.": "݋dھɫ~r~Ոע⣺ֻ@ˆeфĽɫvMenu ozyˆℓĽɫ GTA ơ", + "Get All Weapons": "@", + "Equip/Remove Weapon": "b/Ƴ", + "World Options": "x", + "Open all vehicle doors.": "_е܇T", + "Respawn As Default MP Character": "ĬJھɫ", + "Sets your current vehicle on all 4 wheels.": "㮔ǰ{d 4 ݆ӷڵ", + "If you've set a loadout as default loadout, then your loadout will be equipped automatically whenever you (re)spawn.": "OһĬJbĕrԄӼd", + "MP Ped Customization": "ھɫԶx", + "X-MAS Snow": "}Qѩ", + "Head": "^", + "Rename Loadout": "b", + "Never Wanted": "ͨ", + "Connection Options": "Bx", + "Enables the power multiplier selected from the list below.": "ùʱȻxһֵ", + "Right Indicator": "D", + "~r~Delete Saved Ped": "~r~hѱĽɫ", + "Set the voice chat channel.": "OZl", + "Enable or disable the timecycle modifier from the list below.": "ûÕrg޸бx", + "Removes all weapons in your inventory.": "ıЄhе", + "Custom": "Զx", + "Enable or disable voice chat.": "ûZ", + "Open/close the extra door (#2). Note this door is not present on most vehicles.": "_/P]܇T 2@ֻڲdЧ", + "Miscellaneous vMenu options/settings can be configured here. You can also save your settings in this menu.": "ͲˆPOö@eҲ@eO", + "This will unlock all your vehicle doors for all players.": "@iе܇T", + "There are no addon cars available in this category.": "@e]пõĸd", + "This will print the player's identifiers to the client console (F8). And also save it to the CitizenFX.log file.": "@ҵϢݔ̨ CitizenFX.log ļeҵ", + "Open/close the extra door (#1). Note this door is not present on most vehicles.": "_/P]܇T 1@ֻڲdЧ", + "Matte": "", + "Femme": "Ů", + "Primary Chute Style": "L", + "Halloween": "f}", + "Exclusive Driver": "˾C", + "Enables or disables infinite fuel for this vehicle, only works if FRFuel is installed.": "ûßoֻͣ FRFuel b˵ĕr", + "Wash Vehicle": "ϴd", + "Set the style of the animation used on your player's illuminated clothing items.": "Oҵİl·ʹõĄӮʽ", + "Show Coordinates": "@ʾ", + "Shoes": "Ь", + "Drift Mode": "Ưģʽ", + "Here you can change common vehicle options, as well as tune & style your vehicle.": "@eĴ󲿷ֵdPx헣b܇v", + "Set the timecycle modifier intensity.": "OÕrgL޸", + "FreemodeFemale01": "ھŮɫ", + "Makes your vehicle have almost no traction while holding left shift on keyboard, or X on controller.": "IPϵ Shift Iֱϵ X I׌܇v׺]ץ", + "Restore Player Weapons": "֏", + "This may not work in all cases, but you can try to use this if you want to re-join the previous session after clicking 'Quit Session'.": "@܁Kr¶ЧچΓ˳Ԓ¼һԒtԇLԇʹô˹", + "Midnight": "ҹ", + "Set the weather to ~y~clear~s~!": "ГQ ~y~~s~", + "Vehicle Windows Management": "dߴ", + "Show Ped Dimensions": "@ʾγߴ", + "Open, close, remove and restore vehicle doors here.": "_P]h֏d܇T", + "Lock Camera Horizontal Rotation": "izCˮƽD", + "Sends a private message to this player. ~r~Note: staff may be able to see all PM's.": "oԓҰl˽Ϣ~r~ע⣺TԿ˵˽", + "Addon Peds": "", + "No Dirt": "om", + "Enable Torque Multiplier": "Ťر", + "~o~~s~ Roll Front Windows Down": "~o~~s~ ǰ܇", + "Vehicle Lights": "d܇", + "Teleport to pre-configured locations, added by the server owner.": "͵AOλãɷO", + "Interior Lights": "", + "Remove all clouds from the sky!": "Ƴе", + "Enable or disable the underglow on the right side of the vehicle. Note not all vehicles have lights.": "û҂ȵ޺d߶޺", + "Press the Multiplayer Info (z on keyboard, down arrow on controller) key to switch between expanded radar and normal radar.": "¶[IZ Iֱ¼^ГQС؈Dʹ؈D", + "Custom Speed Limit": "Զxٶ", + "Unavailable Vehicles": "õd", + "Exit Without Saving": "˳", + "Refill All Ammo": "Џˎ", + "Spawn this saved ped.": "@ѱĽɫ", + "it to your vehicle.": "d", + "Right Rear Door": "T", + "Set Armor Type": "Oo", + "Clears the area around your player (100 meters). Damage, dirt, peds, props, vehicles, etc. Everything gets cleaned up, fixed and reset to the default world state.": "㸽 100 ׵ą^ƉġmߡdߵȵȡЖ|ޏ́KõĬJB", + "Hide Hud": "[ Hud", + "Manage saved weapon loadout": "ѱb", + "Godmode": "ϵģʽ", + "Create A New Character": "µĽɫ", + "Use shortest path": "ʹ·", + "Add Blip For Personal Vehicle": "邀dӹ", + "Toggle Thermal Vision": "ГQģʽ", + "Spawn a ped by entering it's name manually.": "քݔģց", + "Common player options can be accessed here.": "cPx헶@e", + "Saved Loadouts": "b", + "Enable Reserve Parachute": "Âý", + "Player Appearance": "^", + "Enable or disable dynamic weather changes.": "ûÄӑB", + "Makes the car invincible. Includes fire damage, explosion damage, collision damage and more.": "׌܇v׃ɟoģըײ", + "Manage Saved Vehicles": "ѱd", + "This will lock all your vehicle doors for all players. Anyone already inside will always be able to leave the vehicle, even if the doors are locked.": "@iе܇TҟoM룬ѽ܇ϵȻx_d", + "Shows your current location and heading, as well as the nearest cross road. Similar like PLD. ~r~Warning: This feature (can) take(s) up to -4.6 FPS when running at 60 Hz.": "@ʾλúͳ總ĵ·~r~Ոע⣺@ʾ 60Hz r@ܕ 4.6FPS", + "Personal Vehicle Options": "dx", + "Chrome": "tϽ", + "Set the weather to ~y~neutral~s~!": "ГQ ~y~~s~", + "Set As Default Character": "OÞĬJɫ", + "World Related Options": "Px", + "Enable or disable night vision.": "ûҹҕģʽ", + "Get ~g~Snail 2.0~s~ powers and swim super fast!": "׌Ӿٶ׃ ~g~~s~", + "Customize Saved Ped": "ԶxĽɫ", + "Enter a custom license plate for your vehicle.": "ݔһԶxd܇", + "This will make a clone of your saved character. It will ask you to provide a name for that character. If that name is already taken the action will be canceled.": "@}uһѱĽɫKҕԃµ֣ѽڌȡ", + "Select a ped.": "xһɫ", + "Bike Seatbelt": "T܇ȫ", + "Minimap Controls": "С؈D", + "No Reload": "obˎ", + "Delete Removed Doors": "hƳ܇T", + "Make your vehicle shine with some fancy neon underglow!": "od߰bһЩſĵױP", + "Set the weather to ~y~x-mas~s~!": "ГQ ~y~}Qѩ~s~", + "Set your vehicles max speed to your ~y~current speed~s~. Resetting your vehicles max speed will set the max speed of your current vehicle back to default. Only your current vehicle is affected by this option.": "܇vٶOÞ ~y~ǰٶ~s~܇vٶȕǰ܇vٶȻ֏͞ĬJֵx헃HӰ푮ǰ܇v", + "Character Tattoo Options": "ɫyx", + "Set the driving style that is used for the Drive to Waypoint and Drive Around Randomly functions.": "{L񌢕{񂵽ĿĵغSC{rЧ", + "Vehicle auto pilot options.": "dԄ{ˆO", + "Click to spawn this animal.": "c@", + "This will force a playing scenario to stop immediately, without waiting for it to finish it's 'stopping' animation.": "@ʹڲŵĈֹͣoȴɡֹͣӮ", + "Personal Vehicle": "d", + "Save new vehicles, or spawn or delete already saved vehicles.": "µdߣɡhѽڵd", + "Recording": "ӛ", + "Gangster": "", + "Kick Passengers": "߳˿", + "Set Vehicle Lights": "Odߟ", + "Right Align Menu": "҂@ʾˆ", + "Save your current weapons into a new loadout slot.": "㮔ǰһµb", + "Fix or destroy a specific vehicle tire, or all of them at once. Note, not all indexes are valid for all vehicles, some might not do anything on certain vehicles.": "ޏͻƉָd݆̥Сеd߶ЧЩdϲʹá", + "Saved Vehicles": "ѱd", + "This will remove all passengers from your personal vehicle.": "@むdег˿߳ȥ", + "Handguns": "֘", + "Pearlescent": "", + "Show your current coordinates at the top of your screen.": "ڟĻ픶@ʾ㮔ǰ", + "Female Peds": "ŮԽɫ", + "Spawn An Addon Vehicle": "ɸd", + "These addon vehicles are not currently being streamed (correctly) and are not able to be spawned.": "˸dߛ]_ʽݔ͑ˣԲʹ", + "Add random clouds to the sky!": "SC녵У", + "Never reload.": "hҪQA", + "Style your vehicle even further by giving it some ~g~Snailsome ~s~colors!": "dߓQϲgɫ", + "When this is enabled, NPCs will not be able to drag you out of your vehicle if they get angry at you.": "_@x헕rNPC odeŭĕr", + "Set the weather to ~y~blizzard~s~!": "ГQ ~y~ѩ~s~", + "Set your wanted level by selecting a value, and pressing enter.": "OͨȼȻᰴ»܇", + "Super Jump": "S", + "Illuminated Clothing Style": "l·L", + "Spawn a ped from the addon peds list.": "Ľɫбxһɫ", + "Set the time to 15:00.": "OÕrg 15:00", + "Spawn A Ped": "һɫ", + "Trevor": "޷", + "Kick the player from the server.": "ԓ߳ŷ", + "Delete your vehicle, this ~r~can NOT be undone~s~!": "hdߣ@ ~r~ɳN~s~", + "Spawn Vehicle By Model Name": "ģQd", + "Player Options": "x", + "Fast Run": "ٱ", + "This model is not available. Please ask the server owner to verify it's being streamed correctly.": "@ģͲãՈԃǷѽ_ʽݔ͑", + "Engine Always On": "h_", + "Close All Doors": "P]܇T", + "Disable Siren": "þ", + "Save your character.": "Ľɫ", + "~r~Ban Player Permanently": "~r~Rr", + "Invisible": "[ģʽ", + "Enable or disable keybinds for some options.": "ûһЩIĽ", + "~r~Replace Loadout": "~r~Qb", + "Start a new game recording using GTA V's built in recording.": "_ʼһµ GTA5 [u", + "Force On": "_", + "Early Morning": "峿", + "Bags / Parachutes": " / ", + "Toggle Blackout": "_ͣ", + "Drunk": "", + "Avoid peds": "_", + "Teleport To Waypoint": "͵ӛ̎", + "Main Menu": "ˆ", + "Rainy": "", + "Filter Options": "Yxx", + "Spawn Vehicle": "d", + "Character Props Options": "ɫx", + "Export/Import Data": "/딵", + "Clear": "", + "Set the weather to ~y~clouds~s~!": "ГQ ~y~~s~", + "Start Recording": "_ʼu", + "Posh": "r", + "Facial Expression": "", + "Bracelets": "", + "Invincible": "o", + "Adds your current location to the teleport locations menu and saves it on the server.": "㮔ǰλӵͲˆ΁K浽ŷ", + "Fade": "ɫ", + "Save the vehicle you are currently sitting in.": "㮔ǰڳ܇v", + "Melee": "", + "Addon Vehicles": "d", + "Lock Vehicle Doors": "id܇T", + "Keybind Settings": "IO", + "Father": "H", + "Vehicle Extras": "d߸ӽM", + "Animals": "", + "Click to spawn this model.": "@ģ", + "Set the time to 18:00.": "OÕrg 18:00", + "Clearing": "", + "Starts/stops your vehicle's alarm.": "/ֹͣd߾", + "Vehicle Colors": "dɫ", + "~r~This will delete this saved loadout. This action can not be undone!": "~r~@hb@DzɳNģ", + "Morning": "", + "100 m": "100 ", + "Choose a ped model, customize it and save & load your customized characters.": "xһģͣԶxK棬dԶxɫ", + "Click to manage this loadout.": "c@b", + "Create Character": "ɫ", + "Enable or disable the underglow on the left side of the vehicle. Note not all vehicles have lights.": "ûȵ޺d߶޺", + "~r~Delete Loadout": "~r~hb", + "Teleport the player to you.": "҂͵߅", + "Disables vehicles such as the Ramp Buggy from taking damage when using the ramp.": "бħ܇vʹбrܵp", + "Repalce this saved ped with your current ped. Note this can not be undone!": "㮔ǰĽɫQѱĽɫ@DzɳNģ", + "Character Clothing Options": "ɫ·x", + "Default Alloy": "ԭSɫ", + "Vehicle Liveries": "d߉Tbx", + "Hide all hud elements.": "[н", + "When enabled, doors that you remove using the list above will be deleted from the world. If disabled, then the doors will just fall on the ground.": "ᣬThãtTڵ", + "Michael": "", + "Secondary Colors": "ɫ{", + "Open/close the right front door.": "_/P]ǰT", + "Makes you invincible.": "׌׃ɟo", + "Open this submenu for player related subcategories.": "_@ˆԲ鿴Px", + "~r~This replaces this saved slot with the weapons that you currently have in your inventory. This action can not be undone!": "~r~@ʹ㮔ǰeеQѱb@DzɳNģ", + "Set the engine torque multiplier.": "OŤر", + "FreemodeMale01": "ھɫ", + "~r~Kill Player": "~r~", + "Save Character": "ɫ", + "Avoid objects": "_", + "Leaves you connected to the server, but quits the network session. ~r~Can not be used when you are the host.": "׌cŷBӣ˳WjԒ~r~Ƿroʹ", + "This is disabled by the server owner, probably for a good reason because animals quite often crash the game.": "xѽãͨ[", + "Select a custom driving style. Make sure to also enable it by selecting the 'Custom' driving style in the driving styles list.": "xһԶx{L񣬲ҪӛбexL顰Զx", + "Drive To Waypoint": "{񂵽ӛc", + "20 m": "20 ", + "Open this submenu for world related subcategories.": "鿴cPx헲ˆ", + "Unavailable Saved Vehicles": "õdб", + "Rear Right": "", + "Yes I'm sure, delete my vehicle please, I understand that this cannot be undone.": "ǵģҴ_Ոhҵd", + "NO, CANCEL": "ȡ", + "Body Armor / Accessory 2": " / 2", + "Noon": "", + "Afternoon": "", + "No longer auto-equip a helmet when getting on a bike or quad.": "T܇ĦЕrԄb^", + "Enable unlimited parachutes and reserve parachutes.": "oƵĽ͂ý", + "Rename Vehicle": "d", + "Open the rockstar editor, note you might want to quit the session first before doing this to prevent some issues.": " Rockstar ݋h˳ԒM룬F}", + "5 m": "5 ", + "Hands / Upper Body": " / ϰ", + "Confirm Action": "_", + "Set License Plate Text": "O܇̖a", + "Right Front Door": "ǰT", + "Select a new ped from the main player-peds list.": "Ҫбexһµ", + "This vehicle is not available. Please ask the server owner to check if the vehicle is being streamed correctly.": "@vd߮ǰãՈ“MԃǷѽ_ʽݔ͑", + "This will automatically delete your previously spawned vehicle when you spawn a new vehicle.": "@µdߕrh֮ǰd", + "Set Engine Power Multiplier": "O湦ʱ", + "Enable Power Multiplier": "湦ʱ", + "Turn Camera Left": "zCD", + "Spectate this player. Click this button again to stop spectating.": "^@ңٴcoȡ^", + "Banned For": "ԭ", + "Auto Equip Parachutes": "Ԅb併", + "Main Peds": "Ҫ", + "Tints": "ɫ", + "Mask / Facial Hair": " / 沿ë", + "Toggle Engine On/Off": "_P", + "Enter x, y, z coordinates and you will be teleported to that location.": "ݔ x, y, z ˣȻ㌢͵@λ", + "Clone this saved ped.": "}uѱĽɫ", + "Rename Saved Character": "ѱĽɫ", + "Summon Player": "ن", + "Quit Session": "˳Ԓ", + "Clean Player Clothes": "·", + "Teleport into the vehicle of the player.": "͵ԓ{d߃", + "Evening": "ҹ", + "Select a tint for your weapon.": "xɫ", + "Hood": "w", + "Cycle Through Vehicle Seats": "ѭhГQd", + "Set Dirt Level": "Od坍", + "Mange Loadout": "b" + }, + "japanese": {}, + "mexican": {}, + "chinesesimplified": { + "Become an animal. ~r~Note this may crash your own or other players' game if you die as an animal, godmode can NOT prevent this.": "һֻ~r~עܻᵼϷϵģʽҲܱɫ", + "Vehicle Doors Management": "ؾ߳ſ", + "Set the voice chat receiving proximity in meters.": "ɽվ", + "Rename Saved Ped": "Ľɫ", + "Show Vehicle Dimensions": "ʾؾ߱߿", + "Cloudy": "", + "300 m": "300 ", + "Wet Player Clothes": "ʪ·", + "Shotguns": "ǹ", + "Save your current settings. All saving is done on the client side, if you re-install windows you will lose your settings. Settings are shared across all servers using vMenu.": "㵱ǰ趨趨Ǵĵϵģװ Windows ͻᶪʧݣⰲװ vMenu ķʹǡ", + "Night": "賿", + "Ban Record: ": "¼", + "Save your current ped. Note for the MP Male/Female peds this won't save most of their customization, just because that's impossible. Create those characters in the MP Character creator instead.": "㵱ǰעⲢܱɫDzܵģӦ߽ͨɫǡ", + "Current Vehicle: None": "ǰû趨ؾ", + "Rockstar Editor": "Rockstar ༭", + "Go in reverse gear": "ʻ", + "Save Loadout": "װ", + "Set this loadout to be your default loadout for whenever you (re)spawn. This will override the 'Restore Weapons' option inside the Misc Settings menu. You can toggle this option in the main Weapon Loadouts menu.": "ΪĬϵװʱԶأѡḲ ָ ѡװ˵", + "~y~~s~ Roll Rear Windows Up": "~y~~s~ 󳵴", + "Toggle NoClip on or off.": "رײ", + "Roll both front windows up.": "ǰ", + "Character Face Shape Options": "ɫѡ", + "Enables or disables the blip that gets added when you mark a vehicle as your personal vehicle.": "ûĸؾλʾһ", + "Select a father.": "ѡһ", + "Banned Players Management": "ѷҹ", + "Staff Channel": "ԱƵ", + "Change the time, and edit other time related options.": "ʱ䣬༭ʱصѡ", + "Tune and customize your vehicle here.": "װԶؾ", + "Assault Rifles": "ͻǹ", + "Change Voice Chat options here.": "޸صѡ", + "Toggle Night Vision": "ҹģʽ", + "Show a speedometer on your screen indicating your speed in MPH.": "ĻʾٱӢ/Сʱʾ١", + "Makes your vehicle visible/invisible. ~r~Your vehicle will be made visible again as soon as you leave the vehicle. Otherwise you would not be able to get back in.": "ijÿɼ/ɼ~r~³ͻʾ㽫޷صϡ", + "Open/close the hood.": "/ر", + "Head Shape Mix": "Ŵƶ", + "Toggle Primary Parachute": "лɡ", + "Sub-/Light Machine Guns": "nǹ", + "Set the weather to ~y~overcast~s~!": "л ~y~~s~", + "Force Stop Driving": "ǿֹͣʻ", + "Show Current Speaker": "ʾǰ˵", + "Players: ": "ң", + "Util": "", + "Addon Weapons": "", + "Stop at traffic lights": "ڽͨǰͣ", + "Recording Controls": "ڼ¼", + "Receive notifications when someone dies or gets killed.": "ɱʱʾ֪ͨ", + "Secondary Color": "ɫ", + "Get ~g~Snail 3.0~s~ powers and jump like a champ!": "ı ~g~ʿ~s~ Ҫ", + "Show entity model/handle/dimension draw range.": "ʾʵģ͵Ļƾ", + "Turn Camera Right": "ת", + "Show Player Blips": "ʾҹ", + "Make your player ped drive your vehicle to your waypoint.": "ҽɫ NPC ѳǵλ", + "Strong Wheels": "̵", + "Character Clothes": "ɫ·", + "Toggle Alarm Sound": "л", + "Show Entity Handles": "ʾʵ", + "~r~YES, DELETE": "~r~ǵģɾ", + "Unlimited ammonition supply.": "Ƶӵ", + " ~g~This character is currently set as your default character and will be used whenever you (re)spawn.": " ~g~ɫѾΪĬϽɫʱԶ", + "Shows blips on the map for all players.": "ڵͼʾҵĹ", + "You need to re-apply this each time you change player model or load a saved ped.": "ҪڸģͻѱģͺӦôѡ", + "Lock Camera Vertical Rotation": "ֱת", + "Location Blips": "λù", + "Set": "", + "Missing Vehicles": "ȱʧؾ", + "Select how much dirt should be visible on your vehicle, press ~r~enter~s~ ": "ѡҪʾ㳵ϵij𣬰 ~r~س~s~", + "~r~Warning, unbanning the player can NOT be undone. You will NOT be able to ban them again until they re-join the server. Are you absolutely sure you want to unban this player? ~s~Tip: Tempbanned players will automatically get unbanned if they log on to the server after their ban date has expired.": "~r~ʾIJDzɳģֱ֮ǰ㶼޷ٴη~s~ʾʱǻԶģҳ޺ʱͻԶ", + "Show Time On Screen": "Ļʾʱ", + "Server Info": "Ϣ", + "Delete this saved ped. Note this can not be undone!": "ɾѱDzɳģ", + "Worn": "", + "Locks your camera horizontal rotation. Could be useful in helicopters I guess.": "ˮƽҾʺϿֱ", + "Sounds the horn of the vehicle.": "óȷ", + "Kill yourself by taking the pill. Or by using a pistol if you have one.": "ҩɱǹҲʹǹɱ", + "Watches": "ֱ", + "Character tattoo options.": "ɫ", + "Make your player ped drive your vehicle randomly around the map.": "ҽɫ NPC ڵͼʻ", + "Auto Pilot": "Զʻѡ", + "Set Engine Torque Multiplier": "Ťر", + "No Bike Helmet": "ﳵͷ", + "This will stop the driving task immediately without finding a suitable place to stop.": "⽫ֹͣѰҺʵͣλ", + "Disables player ragdoll, makes you not fall off your bike anymore.": "Ҳ棬Ͳˤ", + "Re-fill Ammo": "䵯ҩ", + "Shirt / Accessory": " / ", + "Get max ammo for this weapon.": "ҩ", + "Style your vehicle with fancy liveries!": "ؾſͿװ", + "Turn vehicle lights on/off.": "ؾߵƹ⿪", + "This ped is not (correctly) streamed. If you are the server owner, please ensure that the ped name and model are valid!": "ģûͨʽ䵽ͻˣȷԴѾģȷ", + "Repair Vehicle": "޸ؾ", + "Give all your weapons max ammo.": "ӵҩ", + "Legs / Pants": " / ", + "Equip/Remove Addon Weapons": "ȡ / Ƴ", + "Disables your vehicle's siren. Only works if your vehicle actually has a siren.": "ؾߵľѣֻؾоѵ", + "Reserve Chute Style": "ʽ", + "Draws the model outlines for every ped that's currently close to you.": "ʾ㸽ÿģ͵ײ", + "Normal": "ͨ", + "Set the time to 00:00.": "ʱΪ 00:00", + "Reset": "", + "vMenu is made by ~b~Vespura~s~. For more info, checkout ~b~www.vespura.com/vmenu~s~. Thank you to: Deltanic, Brigliar, IllusiveTea, Shayan Doust and zr0iq for your contributions.": "vMenu ~b~Vespura~s~ ķ ~y~Akkariin", + "Toggle this driving style flag.": "лʻĿ", + "Give this player a tempban of up to 30 days (max). You can specify duration and ban reason after clicking this button.": "ʱ 30 죬ѡʱ", + "Front Right": "ǰ", + "Edit Saved Character": "༭ѱĽɫ", + "Enables the reserve parachute. Only works if you enabled the primary parachute first. Reserve parachute can not be removed from the player once it's activated.": "ñýɡֻɡʱЧýɡһͲܴƳ", + "~r~Kick Player": "~r~߳", + "Time Options": "ʱѡ", + "Location Display": "ʾλ", + "Prevent others from sending you a private message via the Online Players menu. This also prevents you from sending messages to other players.": "ֹҸ㷢˽ϢҲֹҷ˽Ϣ", + "Spawn Inside Vehicle": "ɺؾ", + "Spawn this saved weapons loadout. This will remove all your current weapons and replace them with this saved slot.": "װ⽫еԴװ", + "~r~Unknown Flag": "~r~δ֪", + "Select how much of your body skin tone should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom.": "ѡɫӦü̳ĸ׻ĸסһ㸸ףұһĸס", + "Hide Radar": "״", + "Randomize Clouds": "", + "Overcast": "", + "~y~~s~ Roll Front Windows Up": "~y~~s~ ǰ", + "Unlock Vehicle Doors": "ؾ߳", + "Avoid vehicles": "ܿ", + "Clone Saved Ped": "ѱĽɫ", + "Set the time to 21:00.": "ʱΪ 21:00", + "Voice Chat Channel": "Ƶ", + "Change ped model by selecting one from the list or by selecting an addon ped from the list.": "бѡһģͣѡһģ", + "Open/close the left rear door.": "/ر", + "Left Indicator": "ת", + "All currently connected players.": "еǰӵ", + "Stop and save your current recording.": "ֹͣ㵱ǰļ¼", + "In-game recording options.": "Ϸ¼ѡ", + "Set the weather to ~y~light snow~s~!": "л ~y~ѩ~s~", + "Toggle Vehicle Alarm": "лؾ߾", + "Trunk": "β", + "Avoid highways (if possible)": "ܿٹ·ã", + "All Tires": "̥", + "Ban this player permanently from the server. Are you sure you want to do this? You can specify the ban reason after clicking this button.": "÷ҡȷҪôָһԭ", + "Vehicle God Mode": "ؾϵģʽ", + "Classic": "", + "Banned Players": "ѷ", + "Hair Style / Color": "ͷ / ɫ", + "Select how much of your head shape should be inherited from your father or mother. All the way on the left is your dad, all the way on the right is your mom.": "ѡŴһ㸸ףұһĸס", + "Makes you invisible to yourself and others.": "ģԼͱ˶", + "Spawn Ped": "ɽɫ", + "Server connection/game quit options.": "/Ϸ˳ѡ", + "Enable or disable time freezing.": "رʱ䶳", + "Save Personal Settings": "趨", + "Set the time to 06:00.": "ʱΪ 06:00", + "Disables all wanted levels.": "еͨȼ", + "No Wanted Level": "ͨȼ", + "Stop before vehicles": "ڳǰͣ", + "Get ~g~Snail~s~ powers and run very fast!": "ܵı ~g~ۼ~s~ Ҫ", + "Various teleport options.": "ִѡ", + "Addon Spawner": "ʽ", + "Toggle Vehicle Doors": "ؾ߳", + "Developer Tools": "Ա", + "Restore your player's skin whenever you respawn after being dead. Re-joining a server will not restore your previous skin.": "ָƤ½ʱָ", + "Delete Vehicle, Are You Sure?": "ɾؾߣȷ", + "Kill this player, note they will receive a notification saying that you killed them. It will also be logged in the Staff Actions log.": "ɱңעԷյ֪ͨɱҲᱻ¼Ա־", + "Vehicle Neon Kits": "ؾ޺", + "Set All Ammo Count": "еҩ", + "Hide the radar/minimap.": "״/Сͼ", + "Are you sure? All unsaved work will be lost.": "ȷδĹᶪʧ", + "Shows the vehicle health on the screen.": "Ļʾؾߵֵ", + "Manage Loadouts": "װ", + "Disable Plane Turbulence": "÷ɻ", + "This will teleport you into the vehicle when you spawn it.": "⽫Զ㴫͵ɵؾ", + "Equip or remove the primary parachute": "װƳɡ", + "Smog": "", + "Select a mother.": "ѡһĸ", + "1 km": "1 ", + "Flip Vehicle": "תؾ", + "Infinite Fuel": "޵ȼ", + "Change all weather related options here.": "޸йصѡ", + "Visual Damage": "Ӿ˺", + "Show Entity Models": "ʾʵģ", + "Toggles the engine on or off, even when you're not inside of the vehicle. This does not work if someone else is currently using your vehicle.": "濪رգ㲻ڳڻڿijʱûЧ", + "Your saved vehicle will be replaced with the vehicle you are currently sitting in. ~r~Warning: this can NOT be undone!": "ѱij滻Ϊ㵱ǰڼʻijDzɳģ", + "Channel 2": "Ƶ 2", + "Channel 3": "Ƶ 3", + "Teleport to the waypoint on your map.": "͵ڵͼϱǵĵ", + "Modify your ped's appearance.": "Ľɫ", + "Channel 4": "Ƶ 4", + "Set the amount of ammo in all your weapons.": "ĵҩ", + "Equip Loadout": "װװ", + "Saved Peds": "ѱĽɫ", + "Force Off": "ǿƹر", + "Set As Default Loadout": "ΪĬװ", + "to apply the selected level.": "Ӧѡĵȼ", + "Vehicle Enveff Scale": "", + "Voice Chat Settings": "", + "Bomb Bay": "ը", + "Ignore roads": "Ե·", + "This allows you to edit everything about your saved character. The changes will be saved to this character's save file entry once you hit the save button.": "⽫༭ѱĽɫɫֻ㰴±水ťŻᱣ", + "Weapons": "", + "Vehicle Doors": "ؾ߳", + "Freezes your current location.": "̶㵱ǰλ", + "Sexy": "Ը", + "Change the walking style of your current ped. ": "ѡ㵱ǰɫ߷", + "If enabled, then you will be the only one that can enter the drivers seat. Other players will not be able to drive the car. They can still be passengers.": "ֻԼʻֻܳ", + "Give the player max health.": "Ѫ", + "Foggy": "", + "Badges / Logos": " / ־", + "saved weapon loadouts list": "ѱװб", + "Various development/debug tools.": "ֿ/Թߡ", + "Add or remove this weapon to/form your inventory.": "ӵıƳ", + "Add/remove weapons, modify weapons and set ammo options.": "Ӻɾ޸ģԼõҩѡ", + "2 km": "2 ", + "Disables your engine from taking any damage.": "ʹ治ܵκ˺", + "Spawns the selected saved character.": "ѱĽɫģ", + "If you enable this, then you will (re)spawn as your default saved MP character. Note the server owner can globally disable this option. To set your default character, go to one of your saved MP Characters and click the 'Set As Default Character' button.": "ʱԶĬģ͡ԽѡҪ뵽ģͲ˵ΪĬϽɫ", + "Vehicle Neon Underglow Options": "ؾߵ޺ѡ", + "Player Scenarios": "Ҷ", + "Automatically repairs your vehicle when it has ANY type of damage. It's recommended to keep this turned off to prevent glitchyness.": "ؾκ𻵵ʱԶ޸رѡԱⷢһЩ", + "weapon loadouts management": "װ", + "Unlimited Ammo": "Ƶĵҩ", + "Rename your saved vehicle.": "ؾ", + "Open/close the left front door.": "/رǰ", + "Blizzard": "ѩ", + "Turn Head": "תͷ", + "Remove Door": "Ƴ", + "Player Related Options": "ѡ", + "Roll both front windows down.": "ǰ", + "Stop Recording": "ֹͣ¼", + "~r~Commit Suicide": "~r~ɱ", + "Walking Style": "߷", + "Prevents you from being knocked off your bike, bicyle, ATV or similar.": "ֹгĦгƵؾˤ", + "Left Rear Door": "", + "vMenu Version": "vMenu 汾", + "Set a vehicle as your personal vehicle, and control some things about that vehicle when you're not inside.": "һؾΪĸؾߣȻͿڳһЩ", + " ~r~For some reason this one doesn't seem to work in FiveM.": " ~r~ΪһЩԭ޷ FiveM ʹ", + "Flash": "˸", + "Heal Player": "", + "Keeps your vehicle engine on when you exit your vehicle.": "뿪ؾߺȻؾ濪", + "Cycle through the available vehicle seats.": "ؾ߿õλ֮ѭлλ", + "Set the weather to ~y~foggy~s~!": "л ~y~~s~", + "This will constantly clean your car if the vehicle dirt level goes above 0. Note that this only cleans ~o~dust~s~ or ~o~dirt~s~. This does not clean mud, snow or other ~r~damage decals~s~. Repair your vehicle to remove them.": "ijȲΪ 0 ʱԶ࣬עֻ ~o~ҳ~s~ ~o~۹~s~Ⲣѩײ˺ͼ޸ؾǡ", + "Print Identifiers": "ӡϢ", + "Shirt Overlay / Jackets": " / ", + "Turn your engine on/off.": "濪", + "Franklin": "", + "Misc": "", + "Set the weather to ~y~snow~s~!": "л ~y~ѩ~s~", + "Deletes the selected saved character. This can not be undone!": "ɾǰѡĽɫDzɳģ", + "Character face shape options.": "ɫѡ", + "No Ragdoll": "ˤ", + "~o~~s~ Roll Rear Windows Down": "~o~~s~ º󳵴", + "Clone Loadout": "װ", + "Helicopter Spotlight": "ֱ۹", + "Enable or disable the underglow on the back side of the vehicle. Note not all vehicles have lights.": "ûú󷽵޺ơؾ߶޺ơ", + "Spawn this saved vehicle.": "ѱؾ", + "Driving Style": "ʻ", + "Spawn, edit or delete your existing saved multiplayer characters.": "ɡ༭ɾѱҽɫ", + "Toggle Engine": "", + "Engine Damage": "˺", + "View and manage all banned players in this menu.": "鿴ѱ", + "Force Stop Scenario": "ǿֹͣ", + "Coming soon (TM): the ability to import and export your saved data.": " (TM)㵼ߵ", + "Character Inheritance Options": "ɫŴѡ", + "Remove All Weapons": "Ƴ", + "Enable Front Light": "ǰƹ", + "Voice Chat Proximity": "", + "Extra Sunny": "", + "Custom Driving Style": "Զʻ", + "Clone Saved Character": "ѱĽɫ", + "Vehicle Godmode": "ؾϵģʽ", + "Misc Settings": "˵", + "Character clothes.": "ɫװ", + "Draws the model outlines for every prop that's currently close to you.": "ʾ㸽ÿģ͵ײ", + "Freeze/Unfreeze Time": "/ⶳʱ", + "Mange, and spawn saved weapon loadouts.": "ѱװ", + "Stop Driving": "ֹͣʻ", + "Teleport Options": "ѡ", + "Shows you the current time on screen.": "ĻʾǰϷʱ", + "Select the color of the neon underglow.": "ѡ޺Ƶɫ", + "Show Dimensions Radius": "ʾγߴ緶Χ", + "Flash Highbeams On Honk": "ʱԶ", + "Everyone Ignore Player": "˶", + "Rear Left": "", + "Makes your vehicle not take any damage. Note, you need to go into the god menu options below to select what kind of damage you want to disable.": "ؾ߱޵еģҪϵģʽѡѡҪõ˺", + "~r~Ban Player Temporarily": "~r~ʱ", + "Click to equip or remove this component.": "װƳ", + "Draws the model outlines for every vehicle that's currently close to you.": "ʾ㸽ÿؾģ͵ײ", + "Vehicle Windows": "ؾߴ", + "Quit Game": "˳Ϸ", + "Keep Vehicle Clean": "ֳ", + "Save Current Vehicle": "浱ǰؾ", + "Weather Options": "ѡ", + "Click to spawn this ped.": "ɫ", + "Mod Menu": "װ˵", + "Disables your wheels from being deformed and causing reduced handling. This does not make tires bulletproof.": "ֱֹβٲݡ ⲻʹ̥", + "Set the weather to ~y~clearing~s~!": "л ~y~~s~", + "This works on certain vehicles only, like the besra for example. It 'fades' certain paint layers.": "ijЩؾߣ besraᵭijЩͿ", + "On": "", + "A list of addon vehicles available on this server.": "пõĸؾб", + "Clean your vehicle.": "ؾ", + "Character Appearance Options": "ɫѡ", + "No Armor": "޻", + "Enter a weapon mode name to spawn.": "һ", + "Set Custom Minute": "Զ", + "Open/close the trunk.": "/رճβ", + "Set the time to 12:00.": "ʱΪ 12:00", + "~r~Replace Saved Ped": "~r~ѱĽɫ", + "Get all weapons.": "", + "Tough Guy": "Ӳ", + "Allow going wrong way": "ߴ·", + "Character Inheritance": "ɫŴ", + "Restore Default Loadout On Respawn": "ʱԶָĬװ", + "Shows who is currently talking.": "ʾǰ˭˵", + "Heavy Weapons": "", + "Roll both rear windows down.": "󳵴", + "Neck / Scarfs": " / Χ", + "Enable Rear Light": "úƹ", + "Set Custom Hour": "ԶСʱ", + "Disconnect From Server": "ӷϿ", + "Manage Saved Characters": "ѱĽɫ", + "Draws the the entity models for all close entities (you must enable the outline functions above for this to work).": "ʾʵģͣҪײʾã", + "Wheel Color": "ɫ", + "Unlimited Parachutes": "ƵĽɡ", + "Light Snow": "ѩ", + "Tire #8": "̥ #8", + "Character Appearance": "ɫ", + "Save Ped": "ɫ", + "Tire #4": "̥ #4", + "Tire #5": "̥ #5", + "Tire #6": "̥ #6", + "Tire #7": "̥ #7", + "Tire #1": "̥ #1", + "Tire #2": "̥ #2", + "Tire #3": "̥ #3", + "Show Player Names": "ʾ", + "Spawn a vehicle by name or choose one from a specific category.": "ؾߣбѡһؾ", + "Restore Player Appearance": "ָ", + "Off": "ر", + "15 m": "15 ", + "Set the weather to ~y~extra sunny~s~!": "л ~y~~s~", + "Create a new female character.": "һµŮԽɫ", + "Sniper Rifles": "ѻǹ", + "Enable Left Light": "ƹ", + "Early Afternoon": "", + "Rename this saved ped.": "ѱĽɫ", + "Player Name": "", + "Fast Swim": "Ӿ", + "Unlimited Stamina": "", + "Delete Saved Character": "ɾѱĽɫ", + "Mother": "ĸ", + "Avoid highways": "ܿٹ·", + "~r~Unban": "~r~", + "Ramp Damage": "б˺", + "About vMenu / Credits": "Ϸ˵Ϣ", + "Roll your windows up/down or remove/restore your vehicle windows here.": "ij/Ƴ/ָij", + "Neutral": "", + "Banned Player": "ѷ", + "~r~Replace Vehicle": "~r~滻ؾ", + "Body Skin Mix": "ƤŴ", + "Show Prop Dimensions": "ʾģγߴ", + "10 m": "10 ", + "Shows whether your microphone is open or muted.": "˷翪رʱʾ", + "Open/close the bomb bay. Only available on some planes.": "/رը֣һЩɻϿ", + "Repair any visual and physical damage present on your vehicle.": "޸ؾеۺ", + "Show a speedometer on your screen indicating your speed in KM/h.": "ĻʾٱԹ/Сʱʾ١", + "Enables the torque multiplier selected from the list below.": "бѡҪõŤر", + "Teleport to this player.": "͵", + "Enter the name of a vehicle to spawn.": "һؾߵ", + "Primary Color": "ɫ", + "Banned By": "", + "Remove All Clouds": "Ƴе", + "Enable or disable the underglow on the front side of the vehicle. Note not all vehicles have lights.": "ûǰ޺ơؾ߶޺ơ", + "Vehicle Options": "ؾѡ", + "Restore your weapons whenever you respawn after being dead. Re-joining a server will not restore your previous weapons.": "ָ½ָܻ", + "Teleport Into Player Vehicle": "͵ҵؾ", + "Equip / remove addon weapons available on this server.": "װ/Ƴ˸", + "Save Teleport Location": "洫λ", + "Teleport to your waypoint when pressing the keybind. By default, this keybind is set to ~r~F7~s~, server owners are able to change this however so ask them if you don't know what it is.": "㴫͵ĵ㣬Ĭϰ󶨰 ~r~F7~s~Ը㲻֪", + "Set the weather to ~y~smog~s~!": "л ~y~~s~", + "Enables the finger point toggle key. The default QWERTY keyboard mapping for this is 'B', or for controller quickly double tap the right analog stick.": "ָָ򰴼Ĭϰ Bֱǿٰҡ", + "Spawn By Name": "", + "Hipster": "", + "Character inheritance options.": "ɫŴѡ", + "Roll both rear windows up.": "ĺ󳵴", + "Exits the game after 5 seconds.": " 5 ˳Ϸ", + "Choose a smoke trail color, then press select to change it. Changing colors takes 4 seconds, you can not use your smoke while the color is being changed.": "ۼɫȻѡıɫҪ 4 룬ڼ㲻ʹ", + "Select a female ped.": "ѡһŮԽɫ", + "This prevents scratches and other damage decals from being applied to your vehicle. It does not prevent (body) deformation damage.": "ԷֹβЧijϡֹܷ𻵡", + "Set the weather to ~y~halloween~s~!": "л ~y~ʥ~s~", + "Thunder": "ױ", + "Freeze Vehicle": "̶ؾλ", + "Enables or disables the GPS route on your radar to this player.": "ûõλõ GPS ", + "Manage this saved vehicle.": "ѱؾ", + "Snow": "ѩ", + "Remove a specific vehicle door completely.": "ȫжضij", + "Teleport To Player": "͵", + "If you set this character as your default character, and you enable the 'Respawn As Default MP Character' option in the Misc Settings menu, then you will be set as this character whenever you (re)spawn.": "㽫ɫΪĬϽɫΪҽɫܣ㽫Զش˽ɫ", + "Manage saved weapon loadouts.": "ѱװ", + "This disables the controller menu toggle key. This does NOT disable the navigation buttons.": "⽫ֱIJ˵лⲻõť", + "Disable Controller Support": "ֱ֧", + "Open/close the right rear door.": "/رҺ", + "Drive in reverse": "ʻ", + "Shows blips on the map for some common locations.": "ڵͼʾһЩλù", + "Turn on your highbeams on your vehicle when honking your horn. Does not work during the day when you have your lights turned off.": "㰴ȵʱ˸ԶƣڰرճƵʱ", + "Parachute Options": "ɡѡ", + "Replace Previous Vehicle": "֮ǰؾ", + "This will enable or disable your vehicle headlights, the engine of your vehicle needs to be running for this to work.": "ûóƹ⣬ֻڳ淢¿", + "Open this submenu for vehicle related subcategories.": "ؾйصIJ˵", + "Drive Around Randomly": "ڸʻ", + "Freeze Player": "̶", + "Click to spawn, edit, clone, rename or delete this saved character.": "ɡ༭ơɾѱĽɫ", + "Receive notifications when someone joins or leaves the server.": "ҽ뿪ʱʾ֪ͨ", + "Weapon Options": "ѡ", + "Manage Vehicle": "ؾ", + "North Yankton": "˶", + "Teleport To Coords": "͵", + "You can rename this saved character. If the name is already taken then the action will be canceled.": "˽ɫѾڽȡ˲", + "Delete Vehicle!": "ɾؾߣ", + "~r~This will delete your saved vehicle. Warning: this can NOT be undone!": "~r~⽫ɾѱؾߡע⣺Dzɳģ", + "Global": "ȫ", + "Throwables": "Ͷ", + "Metals": "߹", + "Metallic": "", + "Enable or disable specific damage types.": "ûض˺", + "Enable Right Light": "ҵƹ", + "Character appearance options.": "ɫѡ", + "Send Private Message": "˽Ϣ", + "Choose a license plate type and press ~r~enter ~s~to apply ": "ѡһȻ ~r~س~s~ Ӧ", + "Primary Colors": "ɫ", + "About vMenu": "Ϸ˵Ϣ", + "~r~Auto Repair": "~r~Զ޸", + "Clean your player clothes.": "·", + "Locks your camera vertical rotation. Could be useful in helicopters I guess.": "ӽΪֱҾʺֱ", + "Interior / Trim Color": "/װɫ", + "renameme": "", + "Banned Until": "ʱ", + "Back": "", + "Use blinkers": "ʹźŵ", + "Set Wanted Level": "ͨȼ", + "Information about vMenu.": " vMenu Ϣ", + "God Mode Options": "ϵģʽѡ", + "Other Peds": "ģ", + "Toggle NoClip": "ײģʽ", + "Player Identifiers": "ҸϢ", + "Show Speed KM/H": "ʾٶ KM/H", + "Timecycle Modifier Intensity": "ʱѭ޸", + "Set the time to 09:00.": "ʱΪ 09:00", + "Extra 2": " 2", + "Extra 1": " 1", + "License Plate Type": "", + "Toggle GPS": " GPS", + "Stay In Vehicle": "ؾ", + "Set the weather to ~y~rain~s~!": "л ~y~~s~", + "Hats / Helmets": "ñ / ͷ", + "Set Vehicle": "ؾ", + "Finger Point Controls": "ָָ", + "Dashboard Color": "DZɫ", + "Everyone will leave you alone.": "˶Զ", + "All parachute related options can be changed here.": "뽵ɡصѡڴ˴", + "~r~Delete Vehicle": "~r~ɾؾ", + "The player ped will find a suitable place to stop the vehicle. The task will be stopped once the vehicle has reached the suitable stop location.": "ҽɫ᳢Ѱһطͣһҵʵλͣͻֹͣ", + "Spawn Peds": "ģ", + "Edit, rename, clone, spawn or delete saved peds.": "༭ơɻɾѱĽɫ", + "Spawn Weapon By Name": "", + "Vehicle Extras/Components": "ؾ߸", + "Make your player clothes wet.": "·ʪ", + "Teleport Locations": "λ", + "vMenu": "vMenu", + "Vehicle Mods": "ؾ߸װ˵", + "Re-join Session": "¼Ϸ", + "Join / Quit Notifications": "/˳֪ͨ", + "Avoid empty vehicles": "ܿյؾ", + "Toggles the vehicle alarm sound on or off. This does not set an alarm. It only toggles the current sounding status of the alarm.": "򿪻رճⲻþлĵǰ״̬", + "Player:": "ң", + "Business": "", + "Open All Doors": "г", + "Fix / Destroy Tires": "޸/ƻ̥", + "Disables the turbulence for all planes. Note only works for planes. Helicopters and other flying vehicles are not supported.": "зɻעڷɻֱ֧", + "Clear Area": "", + "Stop before peds": "ǰͣ", + "Enable or disable thermal vision.": "ûȳģʽ", + "Enable Timecycle Modifier": "ʱѭ޸", + "Ped Customization": "ɫԶ", + "Death Notifications": "֪ͨ", + "Spawn Saved Character": "ѱĽɫ", + "Sets your current vehicle as your personal vehicle. If you already have a personal vehicle set then this will override your selection.": "㵱ǰؾΪؾߣѾһؾˣ⽫Ḳ֮ǰؾ", + "Filter List": "ɸѡб", + "Saved Characters": "Ľɫ", + "Enable Voice Chat": "", + "Close all vehicle doors.": "رеij", + "Injured": "", + "Enables or disables the recording (gameplay recording for the Rockstar editor) hotkeys on both keyboard and controller.": "ûüֱ̺Ϸ¼ƣRockstar ༭ݼ", + "Vehicle Spawner": "ؾ", + "If you want vMenu to appear on the left side of your screen, disable this option. This option will be saved immediately. You don't need to click save preferences.": "Ҫ vMenu ʾĻ࣬ôѡѡԶģֶ", + "Online Players": "б", + "Make your player clothes dry.": "·ɸɵ", + "Disable Private Messages": "˽Ϣ", + "Set the time to 03:00.": "ʱΪ 03:00", + "Show Vehicle Health": "ʾؾֵ", + "Create Female Character": "ŮԽɫ", + "Add/remove vehicle components/extras.": "/ɾؾ߸", + "Speed Limiter": "ٶ", + "Recording Options": "Ϸ¼ѡ", + "Vehicle Godmode Options": "ؾϵģʽѡ", + "Vehicle Related Options": "ؾѡ", + "Male Peds": "Խɫ", + "Toggle Dynamic Weather": "ö̬", + "Character Props": "ɫ", + "Smoke Trail Color": "ۼɫ", + "Set the engine power multiplier.": "湦ʱ", + "Disconnects you from the server and returns you to the serverlist. ~r~This feature is not recommended, quit the game completely instead and restart it for a better experience.": "ϿӲصб~r~Ƽ˹ܣ˳ϷٽһЩ", + "Character props.": "ɫ", + "Glasses": "۾", + "Create a new male character.": "һµԽɫ", + "Show Speed MPH": "ʾٶ MPH", + "Toggle Vehicle Visibility": "лؾܼ", + "Show Microphone Status": "ʾ˷״̬", + "This vehicle is not available because the model could not be found in your game files. If this is a DLC vehicle, make sure the server is streaming it.": "ؾ߲ãΪûϷļҵ DLC ؾߣȷѾȷʽ䵽ͻ", + "Enables or disables player overhead names.": "ûͷʾ", + "NO, do NOT delete my vehicle and go back!": "Ҫɾҵؾ߲", + "Left Front Door": "ǰ", + "Dry Player Clothes": "ʹ·", + "Set the weather to ~y~thunder~s~!": "л ~y~ױ~s~", + "Clones this saved loadout to a new slot.": "ѱװһµװ", + "Hazard Lights": "ʾ", + " Weapon Categories ": " ", + "Select a male ped.": "ѡһԽɫ", + "Allows you to run forever without slowing down or taking damage.": "һֱҲ", + "Development Tools": "Ա", + "Spectate Player": "Թ", + "Ignore all pathing": "·", + "These vehicles are currently unavailable because the models are not present in the game. These vehicles are most likely not being streamed from the server.": "ؾߵǰãΪģûмصϷͨΪûʽ䵽ͻ", + "Weapon Loadouts": "װ", + "Create Male Character": "Խɫ", + "Turn Character": "תɫ", + "Front Left": "ǰ", + "Vehicle Auto Pilot Menu": "ؾԶʻ˵", + "Channel 1 (Default)": "Ƶ 1Ĭϣ", + "Manage MP Character": "߽ɫ", + "Manage vehicle auto pilot options.": "ؾԶʻѡ", + "Draws the the entity handles for all close entities (you must enable the outline functions above for this to work).": "ʾʵľҪײѡ", + "Freeze your vehicle's position.": "̶ؾλ", + "Rushed": "³", + "Spawn Saved Ped": "ѱĽɫ", + "This disables or enables all lights across the map.": "ûõͼеĵ", + "Sound Horn": "", + "Rename this saved loadout.": "ѱװ", + "Saved Ped": "ѱĽɫ", + "Automatically equip a parachute and reserve parachute when entering planes/helicopters.": "ɻ/ֱʱԶװɡ", + "Select a scenario and hit enter to start it. Selecting another scenario will override the current scenario. If you're already playing the selected scenario, selecting it again will stop the scenario.": "ѡһȻ󰴻سѡһǵǰѾڲѡijٴѡֹͣó", + "Create, edit, save and load multiplayer peds. ~r~Note, you can only save peds created in this submenu. vMenu can NOT detect peds created outside of this submenu. Simply due to GTA limitations.": "༭ɫ~r~ע⣺ֻ˵ﱣѴĽɫvMenu ޷˵ⴴĽɫΪ GTA ơ", + "Get All Weapons": "", + "Equip/Remove Weapon": "װ/Ƴ", + "World Options": "ѡ", + "Open all vehicle doors.": "еij", + "Respawn As Default MP Character": "ΪĬϵɫ", + "Sets your current vehicle on all 4 wheels.": "㵱ǰʻؾ 4 ӷڵ", + "If you've set a loadout as default loadout, then your loadout will be equipped automatically whenever you (re)spawn.": "һĬװʱԶ", + "MP Ped Customization": "ɫԶ", + "X-MAS Snow": "ʥڵѩ", + "Head": "ͷ", + "Rename Loadout": "װ", + "Never Wanted": "ͨ", + "Connection Options": "ѡ", + "Enables the power multiplier selected from the list below.": "ùʱȻѡһֵ", + "Right Indicator": "ת", + "~r~Delete Saved Ped": "~r~ɾѱĽɫ", + "Set the voice chat channel.": "Ƶ", + "Enable or disable the timecycle modifier from the list below.": "ûʱ޸бѡ", + "Removes all weapons in your inventory.": "ıɾе", + "Custom": "Զ", + "Enable or disable voice chat.": "û", + "Open/close the extra door (#2). Note this door is not present on most vehicles.": "/رոӳ 2ֻڲؾЧ", + "Miscellaneous vMenu options/settings can be configured here. You can also save your settings in this menu.": "Ͳ˵صöҲﱣ", + "This will unlock all your vehicle doors for all players.": "⽫еij", + "There are no addon cars available in this category.": "ûпõĸؾ", + "This will print the player's identifiers to the client console (F8). And also save it to the CitizenFX.log file.": "⽫ҵϢ̨ CitizenFX.log ļҵ", + "Open/close the extra door (#1). Note this door is not present on most vehicles.": "/رոӳ 1ֻڲؾЧ", + "Matte": "ƹ", + "Femme": "Ů", + "Primary Chute Style": "ɡ", + "Halloween": "ʥ", + "Exclusive Driver": "ר˾", + "Enables or disables infinite fuel for this vehicle, only works if FRFuel is installed.": "ûֻͣ FRFuel װ˵ʱ", + "Wash Vehicle": "ϴؾ", + "Set the style of the animation used on your player's illuminated clothing items.": "ҵķ·ʹõĶʽ", + "Show Coordinates": "ʾ", + "Shoes": "Ь", + "Drift Mode": "Ưģʽ", + "Here you can change common vehicle options, as well as tune & style your vehicle.": "Ĵ󲿷ֵؾѡװij", + "Set the timecycle modifier intensity.": "ʱ޸ǿ", + "FreemodeFemale01": "Ůɫ", + "Makes your vehicle have almost no traction while holding left shift on keyboard, or X on controller.": "¼ϵ Shift ֱϵ X óûץ", + "Restore Player Weapons": "ָ", + "This may not work in all cases, but you can try to use this if you want to re-join the previous session after clicking 'Quit Session'.": "ܲ¶Чڵ˳Ự¼һỰԳʹô˹", + "Midnight": "ҹ", + "Set the weather to ~y~clear~s~!": "л ~y~~s~", + "Vehicle Windows Management": "ؾߴ", + "Show Ped Dimensions": "ʾγߴ", + "Open, close, remove and restore vehicle doors here.": "رաɾָؾ߳", + "Lock Camera Horizontal Rotation": "ˮƽת", + "Sends a private message to this player. ~r~Note: staff may be able to see all PM's.": "ҷ˽Ϣ~r~ע⣺ԱԿ˵˽", + "Addon Peds": "", + "No Dirt": "޳", + "Enable Torque Multiplier": "Ťر", + "~o~~s~ Roll Front Windows Down": "~o~~s~ ǰ", + "Vehicle Lights": "ؾ߳", + "Teleport to pre-configured locations, added by the server owner.": "͵Ԥλãɷ趨", + "Interior Lights": "ε", + "Remove all clouds from the sky!": "Ƴе", + "Enable or disable the underglow on the right side of the vehicle. Note not all vehicles have lights.": "ûҲ޺ơؾ߶޺ơ", + "Press the Multiplayer Info (z on keyboard, down arrow on controller) key to switch between expanded radar and normal radar.": "¶ϷZ ֱ¼ͷлСͼʹͼ", + "Custom Speed Limit": "Զٶ", + "Unavailable Vehicles": "õؾ", + "Exit Without Saving": "˳", + "Refill All Ammo": "еҩ", + "Spawn this saved ped.": "ѱĽɫ", + "it to your vehicle.": "ؾ", + "Right Rear Door": "Һ", + "Set Armor Type": "û", + "Clears the area around your player (100 meters). Damage, dirt, peds, props, vehicles, etc. Everything gets cleaned up, fixed and reset to the default world state.": "㸽 100 ׵ƻߡؾߵȵȡж޸õĬ״̬", + "Hide Hud": " Hud", + "Manage saved weapon loadout": "ѱװ", + "Godmode": "ϵģʽ", + "Create A New Character": "µĽɫ", + "Use shortest path": "ʹ·", + "Add Blip For Personal Vehicle": "Ϊؾӹ", + "Toggle Thermal Vision": "лȳģʽ", + "Spawn a ped by entering it's name manually.": "ֶģ", + "Common player options can be accessed here.": "صѡ", + "Saved Loadouts": "װ", + "Enable Reserve Parachute": "ñýɡ", + "Player Appearance": "", + "Enable or disable dynamic weather changes.": "ûö̬", + "Makes the car invincible. Includes fire damage, explosion damage, collision damage and more.": "ó޵еģ˺ը˺ײ˺", + "Manage Saved Vehicles": "ѱؾ", + "This will lock all your vehicle doors for all players. Anyone already inside will always be able to leave the vehicle, even if the doors are locked.": "⽫еijţ޷룬ѾڳϵȻ뿪ؾ", + "Shows your current location and heading, as well as the nearest cross road. Similar like PLD. ~r~Warning: This feature (can) take(s) up to -4.6 FPS when running at 60 Hz.": "ʾλúͳ總ĵ·~r~ע⣺ʾ 60Hz ʱܻή 4.6FPS", + "Personal Vehicle Options": "ؾѡ", + "Chrome": "Ͻ", + "Set the weather to ~y~neutral~s~!": "л ~y~~s~", + "Set As Default Character": "ΪĬϽɫ", + "World Related Options": "ѡ", + "Enable or disable night vision.": "ûҹģʽ", + "Get ~g~Snail 2.0~s~ powers and swim super fast!": "Ӿٶȱ ~g~~s~", + "Customize Saved Ped": "Զ屣Ľɫ", + "Enter a custom license plate for your vehicle.": "һԶؾ߳", + "This will make a clone of your saved character. It will ask you to provide a name for that character. If that name is already taken the action will be canceled.": "⽫ḴһѱĽɫһѯµ֣Ѿڽȡ", + "Select a ped.": "ѡһɫ", + "Bike Seatbelt": "ﳵȫ", + "Minimap Controls": "Сͼ", + "No Reload": "װҩ", + "Delete Removed Doors": "ɾƳij", + "Make your vehicle shine with some fancy neon underglow!": "ؾ߰װһЩſĵ̵ƣ", + "Set the weather to ~y~x-mas~s~!": "л ~y~ʥڵѩ~s~", + "Set your vehicles max speed to your ~y~current speed~s~. Resetting your vehicles max speed will set the max speed of your current vehicle back to default. Only your current vehicle is affected by this option.": "ٶΪ ~y~ǰٶ~s~óٶȻὫǰٶȻָΪĬֵѡӰ쵱ǰij", + "Character Tattoo Options": "ɫѡ", + "Set the driving style that is used for the Drive to Waypoint and Drive Around Randomly functions.": "ʻ񽫻ڼʻĿĵغʻʱЧ", + "Vehicle auto pilot options.": "ؾԶʻ˵", + "Click to spawn this animal.": "", + "This will force a playing scenario to stop immediately, without waiting for it to finish it's 'stopping' animation.": "⽫ʹڲŵijֹͣȴɡֹͣ", + "Personal Vehicle": "ؾ", + "Save new vehicles, or spawn or delete already saved vehicles.": "µؾߣɡɾѾڵؾ", + "Recording": "¼", + "Gangster": "", + "Kick Passengers": "߳˿", + "Set Vehicle Lights": "ؾߵƹ", + "Right Align Menu": "Ҳʾ˵", + "Save your current weapons into a new loadout slot.": "㵱ǰһµװ", + "Fix or destroy a specific vehicle tire, or all of them at once. Note, not all indexes are valid for all vehicles, some might not do anything on certain vehicles.": "޸ƻָؾ̥Сеؾ߶ЧЩؾϲʹá", + "Saved Vehicles": "ѱؾ", + "This will remove all passengers from your personal vehicle.": "⽫ؾег˿߳ȥ", + "Handguns": "ǹ", + "Pearlescent": "", + "Show your current coordinates at the top of your screen.": "Ļʾ㵱ǰ", + "Female Peds": "ŮԽɫ", + "Spawn An Addon Vehicle": "ɸؾ", + "These addon vehicles are not currently being streamed (correctly) and are not able to be spawned.": "˸ؾûȷʽ䵽ͻˣԲʹ", + "Add random clouds to the sky!": "ƵУ", + "Never reload.": "ԶҪ", + "Style your vehicle even further by giving it some ~g~Snailsome ~s~colors!": "Ϊؾ߻ϲɫ", + "When this is enabled, NPCs will not be able to drag you out of your vehicle if they get angry at you.": "ѡʱNPC ޷ؾǷŭʱ", + "Set the weather to ~y~blizzard~s~!": "л ~y~ѩ~s~", + "Set your wanted level by selecting a value, and pressing enter.": "ͨȼȻ»س", + "Super Jump": "Ծ", + "Illuminated Clothing Style": "·", + "Spawn a ped from the addon peds list.": "ӽɫбѡһɫ", + "Set the time to 15:00.": "ʱΪ 15:00", + "Spawn A Ped": "һɫ", + "Trevor": "޷", + "Kick the player from the server.": "߳", + "Delete your vehicle, this ~r~can NOT be undone~s~!": "ɾؾߣ ~r~ɳ~s~", + "Spawn Vehicle By Model Name": "ģؾ", + "Player Options": "ѡ", + "Fast Run": "ٱ", + "This model is not available. Please ask the server owner to verify it's being streamed correctly.": "ģͲãѯʷǷѾȷʽ䵽ͻ", + "Engine Always On": "Զ", + "Close All Doors": "رг", + "Disable Siren": "þ", + "Save your character.": "Ľɫ", + "~r~Ban Player Permanently": "~r~ʱ", + "Invisible": "ģʽ", + "Enable or disable keybinds for some options.": "ûһЩİ", + "~r~Replace Loadout": "~r~滻װ", + "Start a new game recording using GTA V's built in recording.": "ʼһµ GTA5 Ϸ¼", + "Force On": "ǿƿ", + "Early Morning": "峿", + "Bags / Parachutes": " / ɡ", + "Toggle Blackout": "ͣ", + "Drunk": "", + "Avoid peds": "ܿ", + "Teleport To Waypoint": "͵Ǵ", + "Main Menu": "˵", + "Rainy": "", + "Filter Options": "ɸѡѡ", + "Spawn Vehicle": "ؾ", + "Character Props Options": "ɫѡ", + "Export/Import Data": "/", + "Clear": "", + "Set the weather to ~y~clouds~s~!": "л ~y~~s~", + "Start Recording": "ʼ¼", + "Posh": "ʱ", + "Facial Expression": "", + "Bracelets": "", + "Invincible": "޵", + "Adds your current location to the teleport locations menu and saves it on the server.": "㵱ǰλӵͲ˵浽", + "Fade": "ɫ", + "Save the vehicle you are currently sitting in.": "㵱ǰڳij", + "Melee": "ս", + "Addon Vehicles": "ؾ", + "Lock Vehicle Doors": "ؾ߳", + "Keybind Settings": "", + "Father": "", + "Vehicle Extras": "ؾ߸", + "Animals": "", + "Click to spawn this model.": "ģ", + "Set the time to 18:00.": "ʱΪ 18:00", + "Clearing": "", + "Starts/stops your vehicle's alarm.": "/ֹͣؾ߾", + "Vehicle Colors": "ؾɫ", + "~r~This will delete this saved loadout. This action can not be undone!": "~r~⽫ɾװDzɳģ", + "Morning": "", + "100 m": "100 ", + "Choose a ped model, customize it and save & load your customized characters.": "ѡһģͣԶ棬Զɫ", + "Click to manage this loadout.": "װ", + "Create Character": "ɫ", + "Enable or disable the underglow on the left side of the vehicle. Note not all vehicles have lights.": "û޺ơؾ߶޺ơ", + "~r~Delete Loadout": "~r~ɾװ", + "Teleport the player to you.": "Ҵ͵Ա", + "Disables vehicles such as the Ramp Buggy from taking damage when using the ramp.": "бħȳʹбʱܵ", + "Repalce this saved ped with your current ped. Note this can not be undone!": "㵱ǰĽɫ滻ѱĽɫDzɳģ", + "Character Clothing Options": "ɫ·ѡ", + "Default Alloy": "ԭɫ", + "Vehicle Liveries": "ؾͿװѡ", + "Hide all hud elements.": "н", + "When enabled, doors that you remove using the list above will be deleted from the world. If disabled, then the doors will just fall on the ground.": "ú󣬲ŽɾãŻڵ", + "Michael": "", + "Secondary Colors": "ɫ", + "Open/close the right front door.": "/رǰ", + "Makes you invincible.": "޵е", + "Open this submenu for player related subcategories.": "˵Բ鿴صѡ", + "~r~This replaces this saved slot with the weapons that you currently have in your inventory. This action can not be undone!": "~r~⽫ʹ㵱ǰе滻ѱװDzɳģ", + "Set the engine torque multiplier.": "Ťر", + "FreemodeMale01": "ɫ", + "~r~Kill Player": "~r~ɱ", + "Save Character": "ɫ", + "Avoid objects": "ܿ", + "Leaves you connected to the server, but quits the network session. ~r~Can not be used when you are the host.": "ӣ˳Ự~r~Ƿʱ޷ʹ", + "This is disabled by the server owner, probably for a good reason because animals quite often crash the game.": "ѡѾãͨΪϷ", + "Select a custom driving style. Make sure to also enable it by selecting the 'Custom' driving style in the driving styles list.": "ѡһԶļʻ񣬲ҪбѡΪԶ塱", + "Drive To Waypoint": "ʻǵ", + "20 m": "20 ", + "Open this submenu for world related subcategories.": "鿴йصѡ˵", + "Unavailable Saved Vehicles": "õؾб", + "Rear Right": "Һ", + "Yes I'm sure, delete my vehicle please, I understand that this cannot be undone.": "ǵģȷɾҵؾ", + "NO, CANCEL": "ȡ", + "Body Armor / Accessory 2": " / 2", + "Noon": "", + "Afternoon": "", + "No longer auto-equip a helmet when getting on a bike or quad.": "гĦʱԶװͷ", + "Enable unlimited parachutes and reserve parachutes.": "ƵĽɡͱýɡ", + "Rename Vehicle": "ؾ", + "Open the rockstar editor, note you might want to quit the session first before doing this to prevent some issues.": " Rockstar ༭˳Ựٽ룬", + "5 m": "5 ", + "Hands / Upper Body": " / ϰ", + "Confirm Action": "ȷ", + "Set License Plate Text": "óƺ", + "Right Front Door": "ǰ", + "Select a new ped from the main player-peds list.": "Ҫбѡһµ", + "This vehicle is not available. Please ask the server owner to check if the vehicle is being streamed correctly.": "ؾߵǰãMѯǷѾȷʽ䵽ͻ", + "This will automatically delete your previously spawned vehicle when you spawn a new vehicle.": "⽫µؾʱɾ֮ǰؾ", + "Set Engine Power Multiplier": "湦ʱ", + "Enable Power Multiplier": "湦ʱ", + "Turn Camera Left": "ת", + "Spectate this player. Click this button again to stop spectating.": "ԹңٴεťȡԹ", + "Banned For": "ԭ", + "Auto Equip Parachutes": "Զװɡ", + "Main Peds": "Ҫ", + "Tints": "ɫ", + "Mask / Facial Hair": " / 沿ë", + "Toggle Engine On/Off": "濪", + "Enter x, y, z coordinates and you will be teleported to that location.": " x, y, z ꣬Ȼ㽫ᴫ͵λ", + "Clone this saved ped.": "ѱĽɫ", + "Rename Saved Character": "ѱĽɫ", + "Summon Player": "ٻ", + "Quit Session": "˳Ự", + "Clean Player Clothes": "·", + "Teleport into the vehicle of the player.": "͵ڼʻؾ", + "Evening": "ҹ", + "Select a tint for your weapon.": "ѡɫ", + "Hood": "", + "Cycle Through Vehicle Seats": "ѭлؾ", + "Set Dirt Level": "ؾ", + "Mange Loadout": "װ" + } +} \ No newline at end of file diff --git a/vMenuServer/vMenuServer.csproj b/vMenuServer/vMenuServer.csproj index 3b44b398..21418c11 100644 --- a/vMenuServer/vMenuServer.csproj +++ b/vMenuServer/vMenuServer.csproj @@ -11,6 +11,14 @@ x64 + + + + + + PreserveNewest + +