/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { string menuTitle = "Saved Vehicles"; #region Create menus and submenus // Create the menu. menu = new Menu(menuTitle, "Manage Saved Vehicles"); MenuItem saveVehicle = new MenuItem("Save Current Vehicle", "Save the vehicle you are currently sitting in."); menu.AddMenuItem(saveVehicle); saveVehicle.LeftIcon = MenuItem.Icon.CAR; menu.OnItemSelect += (sender, item, index) => { if (item == saveVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(); } else { Notify.Error("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}")); MenuItem categoryButton = new MenuItem(GetLabelText($"VEH_CLASS_{i}"), $"All saved vehicles from the {(GetLabelText($"VEH_CLASS_{i}"))} category."); subMenus.Add(categoryMenu); MenuController.AddSubmenu(menu, categoryMenu); menu.AddMenuItem(categoryButton); categoryButton.Label = "→→→"; MenuController.BindMenuItem(menu, categoryMenu, categoryButton); categoryMenu.OnMenuClose += (sender) => { UpdateMenuAvailableCategories(); }; categoryMenu.OnItemSelect += (sender, item, index) => { UpdateSelectedVehicleMenu(item, sender); }; } 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."); unavailableModels.Label = "→→→"; menu.AddMenuItem(unavailableModels); MenuController.BindMenuItem(menu, unavailableVehiclesMenu, unavailableModels); MenuController.AddSubmenu(menu, unavailableVehiclesMenu); 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!"); selectedVehicleMenu.AddMenuItem(spawnVehicle); selectedVehicleMenu.AddMenuItem(renameVehicle); selectedVehicleMenu.AddMenuItem(replaceVehicle); selectedVehicleMenu.AddMenuItem(deleteVehicle); selectedVehicleMenu.OnMenuClose += (sender) => { selectedVehicleMenu.RefreshIndex(); deleteButtonPressedCount = 0; deleteVehicle.Label = ""; }; selectedVehicleMenu.OnItemSelect += async(sender, item, index) => { if (item == spawnVehicle) { if (MainMenu.VehicleSpawnerMenu != null) { SpawnVehicle(currentlySelectedVehicle.Value.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } else { SpawnVehicle(currentlySelectedVehicle.Value.model, true, true, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } } else if (item == renameVehicle) { string newName = await GetUserInput(windowTitle : "Enter a new name for this vehicle.", maxInputLength : 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); } else { if (StorageManager.SaveVehicleInfo("veh_" + newName, currentlySelectedVehicle.Value, false)) { DeleteResourceKvp(currentlySelectedVehicle.Key); while (!selectedVehicleMenu.Visible) { await BaseScript.Delay(0); } Notify.Success("Your vehicle has successfully been renamed."); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); currentlySelectedVehicle = new KeyValuePair <string, VehicleInfo>(); // 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."); } } } else if (item == replaceVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(currentlySelectedVehicle.Key.Substring(4)); selectedVehicleMenu.GoBack(); Notify.Success("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."); } } else if (item == deleteVehicle) { 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."); } else { deleteButtonPressedCount = 0; item.Label = ""; DeleteResourceKvp(currentlySelectedVehicle.Key); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); Notify.Success("Your saved vehicle has been deleted."); } } if (item != deleteVehicle) // if any other button is pressed, restore the delete vehicle button pressed count. { deleteButtonPressedCount = 0; deleteVehicle.Label = ""; } }; #endregion }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { string menuTitle = "YDDY:RP"; #region Create menus and submenus // Create the menu. menu = new Menu(menuTitle, "Меню сохраненных автомобилей"); MenuItem saveVehicle = new MenuItem("Сохранить текущий автомобиль", ""); menu.AddMenuItem(saveVehicle); saveVehicle.LeftIcon = MenuItem.Icon.CAR; menu.OnItemSelect += (sender, item, index) => { if (item == saveVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(); } else { Notify.Error("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("Сохраненные", GetLabelText($"VEH_CLASS_{i}")); MenuItem categoryButton = new MenuItem(GetLabelText($"VEH_CLASS_{i}"), $"Все сохраненные автомобили категории {(GetLabelText($"VEH_CLASS_{i}"))}."); subMenus.Add(categoryMenu); MenuController.AddSubmenu(menu, categoryMenu); menu.AddMenuItem(categoryButton); categoryButton.Label = "→→→"; MenuController.BindMenuItem(menu, categoryMenu, categoryButton); categoryMenu.OnMenuClose += (sender) => { UpdateMenuAvailableCategories(); }; categoryMenu.OnItemSelect += (sender, item, index) => { UpdateSelectedVehicleMenu(item, sender); }; } MenuItem unavailableModels = new MenuItem("Недоступные сохраненные автомобили", "") { Label = "→→→" }; menu.AddMenuItem(unavailableModels); MenuController.BindMenuItem(menu, unavailableVehiclesMenu, unavailableModels); MenuController.AddSubmenu(menu, unavailableVehiclesMenu); MenuController.AddMenu(selectedVehicleMenu); MenuItem spawnVehicle = new MenuItem("Заспавнить", ""); MenuItem renameVehicle = new MenuItem("Переименовать", ""); MenuItem replaceVehicle = new MenuItem("~r~Заменить текущим", ""); MenuItem deleteVehicle = new MenuItem("~r~Удалить", ""); selectedVehicleMenu.AddMenuItem(spawnVehicle); selectedVehicleMenu.AddMenuItem(renameVehicle); selectedVehicleMenu.AddMenuItem(replaceVehicle); selectedVehicleMenu.AddMenuItem(deleteVehicle); selectedVehicleMenu.OnMenuClose += (sender) => { selectedVehicleMenu.RefreshIndex(); deleteButtonPressedCount = 0; deleteVehicle.Label = ""; }; selectedVehicleMenu.OnItemSelect += async(sender, item, index) => { if (item == spawnVehicle) { if (MainMenu.VehicleSpawnerMenu != null) { SpawnVehicle(currentlySelectedVehicle.Value.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } else { SpawnVehicle(currentlySelectedVehicle.Value.model, true, true, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } } else if (item == renameVehicle) { string newName = await GetUserInput(windowTitle : "Enter a new name for this vehicle.", maxInputLength : 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); } else { if (StorageManager.SaveVehicleInfo("veh_" + newName, currentlySelectedVehicle.Value, false)) { DeleteResourceKvp(currentlySelectedVehicle.Key); while (!selectedVehicleMenu.Visible) { await BaseScript.Delay(0); } Notify.Success("Your vehicle has successfully been renamed."); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); currentlySelectedVehicle = new KeyValuePair <string, VehicleInfo>(); // 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."); } } } else if (item == replaceVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(currentlySelectedVehicle.Key.Substring(4)); selectedVehicleMenu.GoBack(); Notify.Success("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."); } } else if (item == deleteVehicle) { 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."); } else { deleteButtonPressedCount = 0; item.Label = ""; DeleteResourceKvp(currentlySelectedVehicle.Key); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); Notify.Success("Your saved vehicle has been deleted."); } } if (item != deleteVehicle) // if any other button is pressed, restore the delete vehicle button pressed count. { deleteButtonPressedCount = 0; deleteVehicle.Label = ""; } }; #endregion }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { string menuTitle = "Saved Vehicles"; #region Create menus and submenus // Create the menu. menu = new Menu(menuTitle, "Manage Saved Vehicles"); MenuItem saveVehicle = new MenuItem("Save Current Vehicle", "Save the vehicle you are currently sitting in."); menu.AddMenuItem(saveVehicle); saveVehicle.LeftIcon = MenuItem.Icon.CAR; menu.OnItemSelect += (sender, item, index) => { if (item == saveVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(); } else { Notify.Error("You are currently not in any vehicle. Please enter a vehicle before trying to save it."); } } }; for (int i = 0; i < 23; i++) { Menu categoryMenu = new Menu("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); MenuController.AddSubmenu(menu, categoryMenu); menu.AddMenuItem(categoryButton); categoryButton.Label = "→→→"; MenuController.BindMenuItem(menu, categoryMenu, categoryButton); categoryMenu.OnMenuClose += (sender) => { UpdateMenuAvailableCategories(); }; categoryMenu.OnItemSelect += (sender, item, index) => { UpdateSelectedVehicleMenu(item, sender); }; } 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.") { Label = "→→→" }; menu.AddMenuItem(unavailableModels); MenuController.BindMenuItem(menu, unavailableVehiclesMenu, unavailableModels); MenuController.AddSubmenu(menu, unavailableVehiclesMenu); 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!"); selectedVehicleMenu.AddMenuItem(spawnVehicle); selectedVehicleMenu.AddMenuItem(renameVehicle); selectedVehicleMenu.AddMenuItem(replaceVehicle); selectedVehicleMenu.AddMenuItem(deleteVehicle); selectedVehicleMenu.OnMenuOpen += (sender) => { spawnVehicle.Label = "(" + GetDisplayNameFromVehicleModel(currentlySelectedVehicle.Value.model).ToLower() + ")"; }; selectedVehicleMenu.OnMenuClose += (sender) => { selectedVehicleMenu.RefreshIndex(); deleteButtonPressedCount = 0; deleteVehicle.Label = ""; }; selectedVehicleMenu.OnItemSelect += async(sender, item, index) => { if (item == spawnVehicle) { if (MainMenu.VehicleSpawnerMenu != null) { SpawnVehicle(currentlySelectedVehicle.Value.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); TriggerServerEvent("tallerik:logMessage", GetPlayerName(PlayerId()) + " spawnt ein Fahrzeug (" + currentlySelectedVehicle.Value.model + ")"); } else { SpawnVehicle(currentlySelectedVehicle.Value.model, true, true, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); TriggerServerEvent("tallerik:logMessage", GetPlayerName(PlayerId()) + " spawnt ein Fahrzeug (" + currentlySelectedVehicle.Value.model + ")"); } } else if (item == renameVehicle) { string newName = await GetUserInput(windowTitle : "Enter a new name for this vehicle.", maxInputLength : 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); } else { if (StorageManager.SaveVehicleInfo("veh_" + newName, currentlySelectedVehicle.Value, false)) { DeleteResourceKvp(currentlySelectedVehicle.Key); while (!selectedVehicleMenu.Visible) { await BaseScript.Delay(0); } Notify.Success("Your vehicle has successfully been renamed."); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); currentlySelectedVehicle = new KeyValuePair <string, VehicleInfo>(); // 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."); } } } else if (item == replaceVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(currentlySelectedVehicle.Key.Substring(4)); selectedVehicleMenu.GoBack(); Notify.Success("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."); } } else if (item == deleteVehicle) { 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."); } else { deleteButtonPressedCount = 0; item.Label = ""; DeleteResourceKvp(currentlySelectedVehicle.Key); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); Notify.Success("Your saved vehicle has been deleted."); } } if (item != deleteVehicle) // if any other button is pressed, restore the delete vehicle button pressed count. { deleteButtonPressedCount = 0; deleteVehicle.Label = ""; } }; unavailableVehiclesMenu.InstructionalButtons.Add(Control.FrontendDelete, "Delete Vehicle!"); unavailableVehiclesMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.FrontendDelete, Menu.ControlPressCheckType.JUST_RELEASED, new Action <Menu, Control>((m, c) => { if (m.Size > 0) { int index = m.CurrentIndex; if (index < m.Size) { MenuItem item = m.GetMenuItems().Find(i => i.Index == index); if (item != null && (item.ItemData is KeyValuePair <string, VehicleInfo> sd)) { if (item.Label == "~r~Are you sure?") { Log("Unavailable saved vehicle deleted, data: " + JsonConvert.SerializeObject(sd)); DeleteResourceKvp(sd.Key); unavailableVehiclesMenu.GoBack(); UpdateMenuAvailableCategories(); } else { item.Label = "~r~Are you sure?"; } } else { Notify.Error("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...?"); } }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { string menuTitle = "儲存載具"; #region Create menus and submenus // Create the menu. menu = new Menu(menuTitle, "管理已保存的載具"); MenuItem saveVehicle = new MenuItem("保存當前載具", "保存您當前坐入之載具."); menu.AddMenuItem(saveVehicle); saveVehicle.LeftIcon = MenuItem.Icon.CAR; menu.OnItemSelect += (sender, item, index) => { if (item == saveVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(); } else { Notify.Error("您目前不在任何車輛中。 請先輸入車輛再嘗試保存."); } } }; for (int i = 0; i < 22; i++) { Menu categoryMenu = new Menu("儲存車輛", GetLabelText($"VEH_CLASS_{i}")); MenuItem categoryButton = new MenuItem(GetLabelText($"VEH_CLASS_{i}"), $"從中保存的所有車輛 {(GetLabelText($"VEH_CLASS_{i}"))} 類型."); subMenus.Add(categoryMenu); MenuController.AddSubmenu(menu, categoryMenu); menu.AddMenuItem(categoryButton); categoryButton.Label = "→→→"; MenuController.BindMenuItem(menu, categoryMenu, categoryButton); categoryMenu.OnMenuClose += (sender) => { UpdateMenuAvailableCategories(); }; categoryMenu.OnItemSelect += (sender, item, index) => { UpdateSelectedVehicleMenu(item, sender); }; } MenuItem unavailableModels = new MenuItem("車輛遺失", "在遊戲文件中找不到該模組。可能原因這是一個附加載具,並且伺服器當前未對其進行處理.") { Label = "→→→" }; menu.AddMenuItem(unavailableModels); MenuController.BindMenuItem(menu, unavailableVehiclesMenu, unavailableModels); MenuController.AddSubmenu(menu, unavailableVehiclesMenu); MenuController.AddMenu(selectedVehicleMenu); MenuItem spawnVehicle = new MenuItem("生成車輛", "生成此已保存的車輛."); MenuItem renameVehicle = new MenuItem("重命名車輛", "重命名您保存的車輛."); MenuItem replaceVehicle = new MenuItem("~r~更換車輛", "您保存的車輛將被您當前所坐的車輛代替。~r~警告:這無法撤消!"); MenuItem deleteVehicle = new MenuItem("~r~刪除車輛", "~r~這將刪除您保存的車輛。警告:這不能撤消!"); selectedVehicleMenu.AddMenuItem(spawnVehicle); selectedVehicleMenu.AddMenuItem(renameVehicle); selectedVehicleMenu.AddMenuItem(replaceVehicle); selectedVehicleMenu.AddMenuItem(deleteVehicle); selectedVehicleMenu.OnMenuOpen += (sender) => { spawnVehicle.Label = "(" + GetDisplayNameFromVehicleModel(currentlySelectedVehicle.Value.model).ToLower() + ")"; }; selectedVehicleMenu.OnMenuClose += (sender) => { selectedVehicleMenu.RefreshIndex(); deleteButtonPressedCount = 0; deleteVehicle.Label = ""; }; selectedVehicleMenu.OnItemSelect += async(sender, item, index) => { if (item == spawnVehicle) { if (MainMenu.VehicleSpawnerMenu != null) { SpawnVehicle(currentlySelectedVehicle.Value.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } else { SpawnVehicle(currentlySelectedVehicle.Value.model, true, true, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } } else if (item == renameVehicle) { string newName = await GetUserInput(windowTitle : "輸入此車輛的新名稱.", maxInputLength : 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); } else { if (StorageManager.SaveVehicleInfo("veh_" + newName, currentlySelectedVehicle.Value, false)) { DeleteResourceKvp(currentlySelectedVehicle.Key); while (!selectedVehicleMenu.Visible) { await BaseScript.Delay(0); } Notify.Success("您的車輛已成功重命名."); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); currentlySelectedVehicle = new KeyValuePair <string, VehicleInfo>(); // clear the old info } else { Notify.Error("此名稱已被使用或未知失敗。 如果您認為有問題,請與服務器所有者聯繫。"); } } } else if (item == replaceVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(currentlySelectedVehicle.Key.Substring(4)); selectedVehicleMenu.GoBack(); Notify.Success("您保存的車輛已替換為當前車輛."); } else { Notify.Error("您需要先上車才能更換舊車."); } } else if (item == deleteVehicle) { if (deleteButtonPressedCount == 0) { deleteButtonPressedCount = 1; item.Label = "再按一次確認."; Notify.Alert("您確定要刪除這輛車嗎? 再按一次按鈕確認."); } else { deleteButtonPressedCount = 0; item.Label = ""; DeleteResourceKvp(currentlySelectedVehicle.Key); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); Notify.Success("您保存的車輛已被刪除."); } } if (item != deleteVehicle) // if any other button is pressed, restore the delete vehicle button pressed count. { deleteButtonPressedCount = 0; deleteVehicle.Label = ""; } }; unavailableVehiclesMenu.InstructionalButtons.Add(Control.FrontendDelete, "刪除載具!"); unavailableVehiclesMenu.ButtonPressHandlers.Add(new Menu.ButtonPressHandler(Control.FrontendDelete, Menu.ControlPressCheckType.JUST_RELEASED, new Action <Menu, Control>((m, c) => { if (m.Size > 0) { int index = m.CurrentIndex; if (index < m.Size) { MenuItem item = m.GetMenuItems().Find(i => i.Index == index); if (item != null && (item.ItemData is KeyValuePair <string, VehicleInfo> sd)) { if (item.Label == "~r~您確定嗎?") { Log("Unavailable saved vehicle deleted, data: " + JsonConvert.SerializeObject(sd)); DeleteResourceKvp(sd.Key); unavailableVehiclesMenu.GoBack(); UpdateMenuAvailableCategories(); } else { item.Label = "~r~您確定嗎?"; } } else { Notify.Error("不知何故找不到這輛車."); } } else { Notify.Error("您以某種方式設法觸發了一個不存在的菜單項的刪除...?"); } }
/// <summary> /// Creates the menu. /// </summary> void CreateMenu() { #region Create menus and submenus // Create the menu. menu = new Menu("Saved Vehicles", "Manage Saved Vehicles"); var saveVehicle = new MenuItem("Save Current Vehicle", "Save the vehicle you are currently sitting in."); menu.AddMenuItem(saveVehicle); saveVehicle.RightIcon = MenuItem.Icon.CAR; menu.OnItemSelect += (sender, item, index) => { if (item == saveVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(); } else { Notify.Error("You are currently not in any vehicle. Please enter a vehicle before trying to save it."); } } }; for (int i = 0; i < array.brands.Count(); i++) { var categoryName = array.brands[i].brandName; var categoryMenu = new Menu("Saved Vehicles", categoryName); var categoryButton = new MenuItem(categoryName, $"All saved vehicles from the {categoryName} category."); subMenus.Add(categoryMenu); MenuController.AddSubmenu(menu, categoryMenu); menu.AddMenuItem(categoryButton); categoryButton.Label = "→→→"; MenuController.BindMenuItem(menu, categoryMenu, categoryButton); categoryMenu.OnMenuClose += (sender) => { UpdateMenuAvailableCategories(); }; categoryMenu.OnItemSelect += (sender, item, index) => { UpdateSelectedVehicleMenu(item, sender); }; } var 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.") { Label = "→→→" }; MenuController.AddMenu(selectedVehicleMenu); var spawnVehicle = new MenuItem("Spawn Vehicle", "Spawn this saved vehicle."); var renameVehicle = new MenuItem("Rename Vehicle", "Rename your saved vehicle."); var 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!"); var deleteVehicle = new MenuItem("~r~Delete Vehicle", "~r~This will delete your saved vehicle. Warning: this can NOT be undone!"); selectedVehicleMenu.AddMenuItem(spawnVehicle); selectedVehicleMenu.AddMenuItem(renameVehicle); selectedVehicleMenu.AddMenuItem(replaceVehicle); selectedVehicleMenu.AddMenuItem(deleteVehicle); selectedVehicleMenu.OnMenuOpen += (sender) => { spawnVehicle.Label = "(" + GetDisplayNameFromVehicleModel(currentlySelectedVehicle.Value.model).ToLower() + ")"; }; selectedVehicleMenu.OnMenuClose += (sender) => { selectedVehicleMenu.RefreshIndex(); deleteButtonPressedCount = 0; deleteVehicle.Label = ""; }; selectedVehicleMenu.OnItemSelect += async(sender, item, index) => { if (item == spawnVehicle) { if (MainMenu.VehicleSpawnerMenu != null) { if (IsAllowed(Permission.VSSpawnByName)) { SpawnVehicle(currentlySelectedVehicle.Value.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); Exports["vstancer"].LoadVStancerPreset(); } else { if (CanSpawn) { SpawnVehicle(currentlySelectedVehicle.Value.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); Exports["vstancer"].LoadVStancerPreset(); Spawned(); int tmpTimer = GetGameTimer(); while (GetGameTimer() - tmpTimer < 6000) // wait 30 _real_ seconds { await Delay(0); float carCoolDownState = (GetGameTimer() - (float)tmpTimer) / 6000f; spawnVehicle.Enabled = false; spawnVehicle.Description = $"Cooldown: {Math.Ceiling(6f - (6f * carCoolDownState))}"; } spawnVehicle.Enabled = true; spawnVehicle.Description = "Spawn this saved vehicle."; } else { Notify.Info("Wait for the 6 second cooldown before spawning another car"); } MainMenu.SavedVehiclesMenu.GetMenu().CounterPreText = null; } } else { SpawnVehicle(currentlySelectedVehicle.Value.model, true, true, false, vehicleInfo: currentlySelectedVehicle.Value, saveName: currentlySelectedVehicle.Key.Substring(4)); } } else if (item == renameVehicle) { var newName = await GetUserInput(windowTitle : "Enter a new name for this vehicle.", maxInputLength : 30); if (string.IsNullOrEmpty(newName)) { Notify.Error(CommonErrors.InvalidInput); } else { if (StorageManager.SaveVehicleInfo("veh_" + newName, currentlySelectedVehicle.Value, false)) { DeleteResourceKvp(currentlySelectedVehicle.Key); while (!selectedVehicleMenu.Visible) { await Delay(0); } Notify.Success("Your vehicle has successfully been renamed."); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); currentlySelectedVehicle = new KeyValuePair <string, VehicleInfo>(); // 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."); } } } else if (item == replaceVehicle) { if (Game.PlayerPed.IsInVehicle()) { SaveVehicle(currentlySelectedVehicle.Key.Substring(4)); selectedVehicleMenu.GoBack(); Notify.Success("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."); } } else if (item == deleteVehicle) { 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."); } else { deleteButtonPressedCount = 0; item.Label = ""; DeleteResourceKvp(currentlySelectedVehicle.Key); UpdateMenuAvailableCategories(); selectedVehicleMenu.GoBack(); Notify.Success("Your saved vehicle has been deleted."); } } if (item != deleteVehicle) // if any other button is pressed, restore the delete vehicle button pressed count. { deleteButtonPressedCount = 0; deleteVehicle.Label = ""; } }; #endregion }