public void AddCraftingCooking(UIMenu menu) { UIMenuItem cookRawMeat = new UIMenuItem("Cook Raw Meat", "Cook Raw Meat so it can be eaten"); cookRawMeat.SetRightLabel("(" + playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount + ")"); menu.AddItem(cookRawMeat); craftCampfireMenu.OnItemSelect += (sender, item, index) => { int invRawMeatAmount = playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount; int invCookedMeatAmount = playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount; int invCookedMeatMaxAmount = playerMaterialInventory.Find(material => material.Name == "Raw Meat").MaxAmount; if (invRawMeatAmount > 0) { if (invCookedMeatAmount != invCookedMeatMaxAmount) { playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount--; playerItemInventory.Find(items => items.Name == "Cooked Meat").Amount++; cookRawMeat.SetRightLabel("(" + playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount + ")"); materialsSubMenu.MenuItems.Find(material => material.Text == "Raw Meat").SetRightLabel("(" + playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount + "/" + playerMaterialInventory.Find(material => material.Name == "Raw Meat").MaxAmount + ")"); itemsSubMenu.MenuItems.Find(items => items.Text == "Cooked Meat").SetRightLabel("(" + playerItemInventory.Find(items => items.Name == "Cooked Meat").Amount + "/" + playerItemInventory.Find(items => items.Name == "Cooked Meat").MaxAmount + ")"); UI.Notify("You've made some ~b~Cooked Meat~w~!"); } else { UI.Notify("Your inventory is full!"); } } else { UI.Notify("You have no ~b~Raw Meat~w~ to cook"); } }; }
public void OnTick() { position.Text = "Pos: " + Game.PlayerPed.Position.ToString(); if (Game.PlayerPed.IsInVehicle()) { Vehicle vehicle = Game.PlayerPed.CurrentVehicle; knownVehicle.SetRightLabel(VehiclesPetrolTanks.dict.ContainsKey(vehicle.Model.Hash) ? "Yes" : "No"); vehicleModelId.SetRightLabel(vehicle.DisplayName.ToString()); vehicleFuelTank.SetRightLabel(vehicle.FuelLevel.ToString()); } else { vehicleModelId.SetRightLabel("ped or not driver"); vehicleFuelTank.SetRightLabel("ped or not driver"); } mainMenu.MouseControlsEnabled = false; menuPool.MouseEdgeEnabled = false; menuPool.ControlDisablingEnabled = false; menuPool.ProcessMenus(); if (Game.IsControlJustReleased(0, Control.InteractionMenu)) { mainMenu.Visible = !mainMenu.Visible; } }
#pragma warning disable 1574 /// <summary> /// Get's input from the <see cref="Game.GetUserInput"/> method, and sets the returnValue to a parsed float. /// </summary> /// <param name="selectedItem">The menu item. If this is a list item, we will try to set the value of the index. If this /// is a regular <see cref="UIMenuItem"/> we will set the right badge of the item.</param> /// <param name="maxLetters">The maximum amount of letters the input box can recieve.</param> /// <param name="returnValue">The value from the user's input that will be returned as a <see cref="float"/>.</param> /// <param name="defaultText">The default text of the input box.</param> public void GetUserInput(UIMenuItem selectedItem, int maxLetters, ref float returnValue, string defaultText = "") { var input = Game.GetUserInput(defaultText, maxLetters); float value; if (!float.TryParse(input, out value)) { return; } returnValue = value; if (selectedItem.GetType() == typeof(CustomListItem)) { var uiListItem = selectedItem as CustomListItem; try { if (uiListItem != null) { uiListItem.Index = uiListItem.ItemToIndex(value); } } catch { UI.ShowSubtitle("Failed to set value."); } return; } selectedItem.SetRightLabel($"{returnValue}"); }
private void Food(UIMenu menu) { var food = _storemenuPool.AddSubMenu(menu, "Food"); for (int i = 0; i < 1; i++) { ; } food.MouseEdgeEnabled = false; food.ControlDisablingEnabled = false; var bread = new UIMenuItem("Buy Bread"); bread.SetRightLabel("$1"); food.AddItem(bread); food.OnItemSelect += (sender, item, index) => { if (item == bread) { if (Utilities.Constructors.playerMoney >= 1) { //Take Away Money API.SetPedMoney(API.GetPlayerPed(-1), Utilities.Constructors.playerMoney - 1); //Give Item Utilities.Constructors.Bread = Utilities.Constructors.Bread + 1; //Refresh Main MainMenu._menuPool.RefreshIndex(); } } }; }
private void CreateMenu() { // Create the menu. menu = new UIMenu("vMenu", "About vMenu", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Create menu items. UIMenuItem version = new UIMenuItem("Version", $"This server is using vMenu ~b~~h~{MainMenu.Version}~h~~s~."); version.SetRightLabel($"~h~{MainMenu.Version}~h~"); UIMenuItem credits = new UIMenuItem("About / Credits", $"vMenu is made by ~b~Vespura~s~. For more info, checkout ~b~www.vespura.com/vmenu~s~."); //UIMenuItem info = new UIMenuItem("More Info About vMenu", "If you'd like to find out more about vMenu and all of it's features, " + // "checkout the forum post at ~b~vespura.com/vmenu~s~."); //UIMenuItem help = new UIMenuItem("Need Help?", $"If you want to learn more about vMenu, report a bug or you need to contact me, go to ~b~vespura.com/vmenu~s~."); //UIMenuItem support = new UIMenuItem("Info For Server Owners", "If you want to learn how to setup vMenu for your server, please visit the vMenu wiki page " + // "at: ~b~vespura.com/vmenu/wiki~s~."); menu.AddItem(version); menu.AddItem(credits); //menu.AddItem(info); //menu.AddItem(help); //menu.AddItem(support); }
private void CreateMenu() { // Create the menu. menu = new UIMenu("vMenu", "About vMenu", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; //var currentVersion = ($"v{GetResourceMetadata(GetCurrentResourceName(), "version", 0)}"); // Create menu items. UIMenuItem version = new UIMenuItem("Version", $"Currently installed version of vMenu: ~h~v{MainMenu.Version}~h~"); version.SetRightLabel($"~h~v{MainMenu.Version}~h~"); UIMenuItem credits = new UIMenuItem("Credits", $"vMenu is made by ~r~Vespura~s~. Big thank you to ~y~Briglair~s~, ~y~Shayan~s~ for helping out with various things! " + $"Also thanks to ~y~IllusiveTea~s~ for alpha testing and for providing feedback."); UIMenuItem info = new UIMenuItem("More Info About vMenu", "If you'd like to find out more about vMenu and all of it's features, " + "checkout the forum post at ~b~vespura.com/vmenu~s~."); UIMenuItem help = new UIMenuItem("Need Help?", $"If you want to learn more about vMenu, report a bug or you need to contact me, go to ~b~vespura.com/vmenu~s~."); UIMenuItem support = new UIMenuItem("Info For Server Owners", "If you want to learn how to setup vMenu for your server, please visit the vMenu wiki page " + "at: ~b~vespura.com/vmenu/wiki~s~."); menu.AddItem(version); menu.AddItem(credits); menu.AddItem(info); menu.AddItem(help); menu.AddItem(support); }
public MainMenu() { _menuPool = new MenuPool(); mainMenu = new UIMenu("Main Menu", "~p~Freedom Framework ~w~by ~b~Abel Gaming"); _menuPool.Add(mainMenu); Inventory(mainMenu); MenuItems(mainMenu); _menuPool.MouseEdgeEnabled = false; _menuPool.ControlDisablingEnabled = false; _menuPool.RefreshIndex(); Tick += async() => { _menuPool.ProcessMenus(); if (API.IsControlJustPressed(0, 168) && !_menuPool.IsAnyMenuOpen()) // Our menu on/off switch { mainMenu.Visible = !mainMenu.Visible; } bread.SetRightLabel($"{Utilities.Constructors.Bread.ToString()}"); cola.SetRightLabel($"{Utilities.Constructors.Colas.ToString()}"); water.SetRightLabel($"{Utilities.Constructors.Waters.ToString()}"); }; }
public void AddCraftingCooking(UIMenu menu) { UIMenuItem cookRawMeat = new UIMenuItem("Cook Raw Meat", "Cook Raw Meat so it can be eaten"); cookRawMeat.SetRightLabel("(" + playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount + ")"); menu.AddItem(cookRawMeat); craftCampfireMenu.OnItemSelect += delegate(UIMenu sender, UIMenuItem item, int index) { int amount = playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount; int num2 = playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount; int maxAmount = playerMaterialInventory.Find(material => material.Name == "Raw Meat").MaxAmount; if (amount <= 0) { UI.Notify("You have no ~b~Raw Meat~w~ to cook"); } else if (num2 == maxAmount) { UI.Notify("Your inventory is full!"); } else { InventoryMaterial local5 = playerMaterialInventory.Find(material => material.Name == "Raw Meat"); local5.Amount--; InventoryItem local7 = playerItemInventory.Find(items => items.Name == "Cooked Meat"); local7.Amount++; cookRawMeat.SetRightLabel("(" + playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount + ")"); object[] objArray1 = new object[5]; objArray1[0] = "("; objArray1[1] = playerMaterialInventory.Find(material => material.Name == "Raw Meat").Amount; object[] local11 = objArray1; local11[2] = "/"; local11[3] = playerMaterialInventory.Find(material => material.Name == "Raw Meat").MaxAmount; object[] local13 = local11; local13[4] = ")"; materialsSubMenu.MenuItems.Find(material => material.Text == "Raw Meat").SetRightLabel(string.Concat(local13)); object[] objArray2 = new object[5]; objArray2[0] = "("; objArray2[1] = playerItemInventory.Find(items => items.Name == "Cooked Meat").Amount; object[] local16 = objArray2; local16[2] = "/"; local16[3] = playerItemInventory.Find(items => items.Name == "Cooked Meat").MaxAmount; object[] local18 = local16; local18[4] = ")"; itemsSubMenu.MenuItems.Find(items => items.Text == "Cooked Meat").SetRightLabel(string.Concat(local18)); UI.Notify("You've made some ~b~Cooked Meat~w~!"); } }; }
private void AddItemsToMenu() { List <dynamic> cache; var createCameraItem = new UIMenuItem("Create Camera"); var removeCameraItem = new UIMenuItem("Remove Camera"); var pivotOffsetMenu = _menuPool.AddSubMenu(_mainMenu, "Pivot Offset", "Set the camera's pivot offset."); var xPosItem = new CustomListItem("X Offset", cache = Enumerable.Range(-500, 1000).Select(i => (dynamic)i / 10f).ToList(), cache.IndexOf(_xPos)); var yPosItem = new CustomListItem("Y Offset", cache = Enumerable.Range(-500, 1000).Select(i => (dynamic)i / 10f).ToList(), cache.IndexOf(_yPos)); var zPosItem = new CustomListItem("Z Offset", cache = Enumerable.Range(-500, 1000).Select(i => (dynamic)i / 10f).ToList(), cache.IndexOf(_zPos)); var cameraOffsetMenu = _menuPool.AddSubMenu(_mainMenu, "Camera Offset", "Set the camera's offset from the pivot."); var xPosItem2 = new CustomListItem("X Offset", cache = Enumerable.Range(-500, 1000).Select(i => (dynamic)i / 10f).ToList(), cache.IndexOf(_xPos2)); var yPosItem2 = new CustomListItem("Y Offset", cache = Enumerable.Range(-500, 1000).Select(i => (dynamic)i / 10f).ToList(), cache.IndexOf(_yPos2)); var zPosItem2 = new CustomListItem("Z Offset", cache = Enumerable.Range(-500, 1000).Select(i => (dynamic)i / 10f).ToList(), cache.IndexOf(_zPos2)); var cameraFieldOfViewItem = new CustomListItem("Field Of View", cache = Enumerable.Range(1, 179).Select(i => (dynamic)i).ToList(), cache.IndexOf(60)); var sensitivtyItem = new UIMenuItem("Sensitivity", "Set the sensitivity."); var invertLookItem = new UIMenuCheckboxItem("Invert Look", false, "Invert up and down look."); var speedBoostItem = new CustomListItem("Player Speed Boost", cache = Enumerable.Range(0, 50).Select(i => (dynamic)(float)i).ToList(), cache.IndexOf(0f), "Used so larger characters " + "can walk and move faster since root motion keeps them at the same speed as a regular sized characters."); var disableInVehicleItem = new UIMenuCheckboxItem("Disable Cam In Vehicle", _disableInVehicle, "Disable the camera while in a vehicle."); sensitivtyItem.SetRightLabel(cameraFieldOfViewItem.Index.ToString()); createCameraItem.Activated += CreateCameraItemOnActivated; removeCameraItem.Activated += RemoveCameraItemOnActivated; xPosItem.OnListChanged += XPosItemOnOnListChanged; yPosItem.OnListChanged += YPosItemOnOnListChanged; zPosItem.OnListChanged += ZPosItemOnOnListChanged; xPosItem2.OnListChanged += XPosItemOnOnListChanged2; yPosItem2.OnListChanged += YPosItemOnOnListChanged2; zPosItem2.OnListChanged += ZPosItemOnOnListChanged2; cameraFieldOfViewItem.OnListChanged += CameraFieldOfViewItemOnOnListChanged; sensitivtyItem.Activated += (sender, item) => GetUserInput(item, 3, ref _sensitivity); invertLookItem.CheckboxEvent += InvertLookItemOnCheckboxEvent; speedBoostItem.OnListChanged += SpeedBoostItemOnOnListChanged; disableInVehicleItem.CheckboxEvent += DisableInVehicleItemOnCheckboxEvent; xPosItem.Activated += (sender, item) => GetUserInput(item, 10, ref _xPos, xPosItem.IndexToItem(xPosItem.Index).ToString()); yPosItem.Activated += (sender, item) => GetUserInput(item, 10, ref _yPos, yPosItem.IndexToItem(yPosItem.Index).ToString()); zPosItem.Activated += (sender, item) => GetUserInput(item, 10, ref _zPos, zPosItem.IndexToItem(zPosItem.Index).ToString()); xPosItem2.Activated += (sender, item) => GetUserInput(item, 10, ref _xPos2, xPosItem2.IndexToItem(xPosItem2.Index).ToString()); yPosItem2.Activated += (sender, item) => GetUserInput(item, 10, ref _yPos2, yPosItem2.IndexToItem(yPosItem2.Index).ToString()); zPosItem2.Activated += (sender, item) => GetUserInput(item, 10, ref _zPos2, zPosItem2.IndexToItem(zPosItem2.Index).ToString()); speedBoostItem.Activated += (sender, item) => GetUserInput(item, 2, ref _speedBoost, speedBoostItem.IndexToItem(speedBoostItem.Index).ToString()); pivotOffsetMenu.AddItem(xPosItem); pivotOffsetMenu.AddItem(yPosItem); pivotOffsetMenu.AddItem(zPosItem); cameraOffsetMenu.AddItem(xPosItem2); cameraOffsetMenu.AddItem(yPosItem2); cameraOffsetMenu.AddItem(zPosItem2); _mainMenu.AddItem(cameraFieldOfViewItem); _mainMenu.AddItem(invertLookItem); _mainMenu.AddItem(disableInVehicleItem); _mainMenu.AddItem(createCameraItem); _mainMenu.AddItem(removeCameraItem); _mainMenu.AddItem(speedBoostItem); }
private void Drinks(UIMenu menu) { var drinks = _storemenuPool.AddSubMenu(menu, "Drinks"); for (int i = 0; i < 1; i++) { ; } drinks.MouseEdgeEnabled = false; drinks.ControlDisablingEnabled = false; var cola = new UIMenuItem("Buy Cola"); cola.SetRightLabel("$2"); drinks.AddItem(cola); drinks.OnItemSelect += (sender, item, index) => { if (item == cola) { if (Utilities.Constructors.playerMoney >= 2) { //Take Away Money API.SetPedMoney(API.GetPlayerPed(-1), Utilities.Constructors.playerMoney - 2); //Give Item Utilities.Constructors.Colas = Utilities.Constructors.Colas + 1; //Refresh Main MainMenu._menuPool.RefreshIndex(); } } }; var water = new UIMenuItem("Buy Water"); water.SetRightLabel("$1"); drinks.AddItem(water); drinks.OnItemSelect += (sender, item, index) => { if (item == water) { if (Utilities.Constructors.playerMoney >= 1) { //Take Away Money API.SetPedMoney(API.GetPlayerPed(-1), Utilities.Constructors.playerMoney - 1); //Give Item Utilities.Constructors.Waters = Utilities.Constructors.Waters + 1; //Refresh Main MainMenu._menuPool.RefreshIndex(); } } }; }
private void InBuildingZoom_Activated(UIMenu sender, UIMenuItem selectedItem) { string userInput = Game.GetUserInput(RadarZoomSettings.ZoomLevelInBuilding.ToString(), 4); if (Regex.IsMatch(userInput, "^[0-9]+$")) { RadarZoomSettings.ZoomLevelInBuilding = int.Parse(userInput); inBuildingZoom.SetRightLabel(RadarZoomSettings.ZoomLevelInBuilding.ToString()); } }
public void AddedVehicles(UIMenu menu) { //Tahoe var chevytahoe = new UIMenuItem("Chevy Tahoe"); chevytahoe.SetRightLabel($"~g~$7500"); ADDON.AddItem(chevytahoe); ADDON.OnItemSelect += async(sender, item, index) => { if (item == chevytahoe) { if (Utilities.Constructors.playerMoney >= 7500) //Check to ensure player has enough money { //Convert to hash var modelName = "tahoe"; var modelHash = (uint)API.GetHashKey(modelName); //Check if model is valid if (API.IsModelInCdimage(modelHash)) { //Request Model API.RequestModel(modelHash); //Check if model has loaded while (!API.HasModelLoaded(modelHash)) { await Delay(0); } //Spawn Vehicle var vehicle = API.CreateVehicle(modelHash, CarSpawn.X, CarSpawn.Y, CarSpawn.Z, CarSpawnHeading, true, true); //Warp Into Vehicle API.TaskWarpPedIntoVehicle(Game.Player.Character.Handle, vehicle, -1); } else { //Show notification that model does not exist Screen.ShowNotification("~r~Model does not exist"); } //Take Money API.SetPedMoney(API.GetPlayerPed(-1), Utilities.Constructors.playerMoney - 7500); } else { Screen.ShowNotification("~r~Not enough money"); } } }; }
private void RedrawLists(string type) { Clear(); var typeList = _database.Select(pair => pair.Key).Cast <dynamic>().ToList(); var typeItem = new UIMenuListItem("Ammo Type", typeList, typeList.FindIndex(n => n.ToString() == type), "Select an ammo type to purchase."); AddItem(typeItem); typeItem.OnListChanged += (list, newindex) => { string newType = ((UIMenuListItem)MenuItems[0]).IndexToItem(((UIMenuListItem)MenuItems[0]).Index).ToString(); RedrawLists(newType); }; var weaponItem = new UIMenuListItem("Weapon", GetListForType(type), 0); AddItem(weaponItem); var buyRounds = new UIMenuItem("Rounds x 24"); buyRounds.SetRightLabel("113$"); var buyAllRounds = new UIMenuItem("Full Ammo"); buyRounds.SetRightLabel("113$"); buyRounds.Activated += (menu, item) => { Game.Player.Character.Weapons.Give((WeaponHash)Enum.Parse(typeof(WeaponHash), ((UIMenuListItem)MenuItems[1]).IndexToItem(((UIMenuListItem)MenuItems[1]).Index).ToString()), 24, false, false); }; buyAllRounds.Activated += (menu, item) => { Game.Player.Character.Weapons.Give((WeaponHash)Enum.Parse(typeof(WeaponHash), ((UIMenuListItem)MenuItems[1]).IndexToItem(((UIMenuListItem)MenuItems[1]).Index).ToString()), 9999, false, false); }; AddItem(buyRounds); AddItem(buyAllRounds); }
public UIMenuItem AddMenuItem(UIMenu menu, string title = "Menu", string subTitle = "", string rightLabel = "", UIMenuItem.BadgeStyle badge = UIMenuItem.BadgeStyle.None, bool isBadgeLeft = true) { var menuItem = new UIMenuItem(title, subTitle); if (rightLabel != "") { menuItem.SetRightLabel(rightLabel); } if (isBadgeLeft) { menuItem.SetLeftBadge(badge); } else { menuItem.SetRightBadge(badge); } menu.AddItem(menuItem); return(menuItem); }
public void BodyArmor(UIMenu menu) { var armorsub = _weaponmenuPool.AddSubMenu(menu, "Body Armor"); for (int i = 0; i < 1; i++) { ; } armorsub.MouseEdgeEnabled = false; armorsub.ControlDisablingEnabled = false; //Body Armor var Armor = new UIMenuItem("Body Armor"); Armor.SetRightLabel("~g~$250"); armorsub.AddItem(Armor); armorsub.OnItemSelect += (sender, item, index) => { if (item == Armor) { if (Utilities.Constructors.playerMoney >= 250) //Check to ensure player has enough money { //Take Money Away API.SetPedMoney(API.GetPlayerPed(-1), Utilities.Constructors.playerMoney - 250); //Give Player Knife Game.Player.Character.Armor += 100; } else { Screen.ShowNotification("~r~Not enough money"); } } }; }
/// <summary> /// Setting up the menu. /// </summary> private void Setup() { noclipMenu = new UIMenu("No Clip", "Controls", true) { MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false, ScaleWithSafezone = false }; noclipMenu.SetMenuWidthOffset(50); UIMenuItem speed = new UIMenuItem("Current Moving Speed", "This is your current moving speed."); speed.SetRightLabel(speeds[currentSpeed]); noclipMenu.AddItem(speed); noclipMenu.DisableInstructionalButtons(true); noclipMenu.DisableInstructionalButtons(false); // Only disable the default instructional buttons (back & select) (requires modified NativeUI build.) noclipMenu.DisableInstructionalButtons(false, disableDefaultButtons: true); noclipMenu.AddInstructionalButton(new InstructionalButton(Control.Sprint, "Change Speed")); noclipMenu.AddInstructionalButton(new InstructionalButton(Control.MoveUpDown, "Go Forwards/Backwards")); noclipMenu.AddInstructionalButton(new InstructionalButton(Control.MoveLeftRight, "Turn Left/Right")); noclipMenu.AddInstructionalButton(new InstructionalButton(Control.Cover, "Go Up")); noclipMenu.AddInstructionalButton(new InstructionalButton(Control.MultiplayerInfo, "Go Down")); MainMenu.Mp.Add(noclipMenu); setupDone = true; }
/// <summary> /// Initializes a new instance of the <see cref="SettingsMenu"/> class. /// </summary> internal SettingsMenu() { // Set up the settings menu. settingsMenu = new UIMenu(SettingsMenuTitle, SettingsMenuSubTitle); // Set up menu options. onFootZoom = new UIMenuItem("On Foot Zoom") { Description = "The zoom level when on foot." }; onFootZoom.SetRightLabel(RadarZoomSettings.ZoomLevelOnFoot.ToString()); inVehicleZoom = new UIMenuItem("In Vehicle Zoom") { Description = "The zoom level when in a vehicle." }; inVehicleZoom.SetRightLabel(RadarZoomSettings.ZoomLevelInVehicle.ToString()); inBuildingZoom = new UIMenuItem("In Building Zoom") { Description = "The zoom level when in a building." }; inBuildingZoom.SetRightLabel(RadarZoomSettings.ZoomLevelInBuilding.ToString()); // Add options to the menu. settingsMenu.AddItem(onFootZoom); settingsMenu.AddItem(inVehicleZoom); settingsMenu.AddItem(inBuildingZoom); settingsMenu.RefreshIndex(); // Subscribe to UI events. settingsMenu.OnMenuClose += SettingsMenu_OnMenuClose; onFootZoom.Activated += OnFootZoom_Activated; inVehicleZoom.Activated += InVehicleZoom_Activated; inBuildingZoom.Activated += InBuildingZoom_Activated; }
public Main() { // Load settings try { string configFile = Path.Combine("scripts", "methoperation_config.ini"); ScriptSettings config = ScriptSettings.Load(configFile); if (File.Exists(configFile)) { InteractionControl = config.GetValue("CONFIG", "INTERACTION_CONTROL", 51); MissionTime = config.GetValue("CONFIG", "MISSION_TIME", 15); ProductionTime = config.GetValue("CONFIG", "PRODUCTION_TIME", 6); PoliceChance = config.GetValue("CONFIG", "POLICE_CHANCE", 15); PoliceStars = config.GetValue("CONFIG", "POLICE_STARS", 2); EquipmentUpgradePrice = config.GetValue("PRICES", "EQUIPMENT_UPGRADE", 1100000); StaffUpgradePrice = config.GetValue("PRICES", "STAFF_UPGRADE", 331500); SecurityUpgradePrice = config.GetValue("PRICES", "SECURITY_UPGRADE", 513000); ProductValue = config.GetValue("PRICES", "PRODUCT_VALUE", 8500); } else { config.SetValue("CONFIG", "INTERACTION_CONTROL", InteractionControl); config.SetValue("CONFIG", "MISSION_TIME", MissionTime); config.SetValue("CONFIG", "PRODUCTION_TIME", ProductionTime); config.SetValue("CONFIG", "POLICE_CHANCE", PoliceChance); config.SetValue("CONFIG", "POLICE_STARS", PoliceStars); config.SetValue("PRICES", "EQUIPMENT_UPGRADE", EquipmentUpgradePrice); config.SetValue("PRICES", "STAFF_UPGRADE", StaffUpgradePrice); config.SetValue("PRICES", "SECURITY_UPGRADE", SecurityUpgradePrice); config.SetValue("PRICES", "PRODUCT_VALUE", ProductValue); // this will cause an exception when writing to Program Files folder config.Save(); } } catch (Exception e) { UI.Notify($"~r~MethOperation settings error: {e.Message}"); } // Set up NativeUI ManagementMenuPool = new MenuPool(); ManagementMain = new UIMenu("Meth Lab", string.Empty); UpgradesMenu = new UIMenu("Meth Lab", "~b~UPGRADES"); SaleConfirmationMenu = new UIMenu("Meth Lab", "~b~PRODUCT SALE CONFIRMATION"); LabSaleConfirmationMenu = new UIMenu("Meth Lab", "~b~LAB SALE CONFIRMATION"); // Upgrades menu UIMenuItem tempItem = new UIMenuItem("Equipment Upgrade", "Buy better equipment to speed up the production. ~r~No refunds!"); tempItem.SetRightLabel($"${EquipmentUpgradePrice:N0}"); UpgradesMenu.AddItem(tempItem); tempItem = new UIMenuItem("Staff Upgrade", "Hire more people to speed up the production. ~r~No refunds!"); tempItem.SetRightLabel($"${StaffUpgradePrice:N0}"); UpgradesMenu.AddItem(tempItem); tempItem = new UIMenuItem("Security Upgrade", "Eyes and ears in the lab to enforce discipline. ~r~No refunds!"); tempItem.SetRightLabel($"${SecurityUpgradePrice:N0}"); UpgradesMenu.AddItem(tempItem); // Product sale confirmation menu SaleConfirmationMenu.AddItem(new UIMenuItem("Confirm", "Start a delivery mission to sell your product. ~r~All product will be lost if you fail!")); SaleConfirmationMenu.AddItem(new UIMenuItem("Cancel", "Go back to the management menu.")); // Lab sale confirmation menu LabSaleConfirmationMenu.AddItem(new UIMenuItem("Confirm", "You'll get the amount displayed on right. ~r~Upgrades and all produced meth will be lost!")); LabSaleConfirmationMenu.AddItem(new UIMenuItem("Cancel", "Go back to the management menu.")); ManagementMenuPool.Add(ManagementMain); ManagementMenuPool.Add(UpgradesMenu); ManagementMenuPool.Add(SaleConfirmationMenu); ManagementMenuPool.Add(LabSaleConfirmationMenu); // Set up event handlers EnteredMethLab += Script_EnteredMethLab; LeftMethLab += Script_LeftMethLab; ManagementMain.OnItemSelect += ManagementMain_ItemSelected; UpgradesMenu.OnItemSelect += UpgradesMenu_ItemSelected; SaleConfirmationMenu.OnItemSelect += SaleConfirmationMenu_ItemSelected; LabSaleConfirmationMenu.OnItemSelect += LabSaleConfirmationMenu_ItemSelected; Tick += Script_Tick; Aborted += Script_Aborted; }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { // Create the menu. menu = new UIMenu("BigFam Crew", "Time Options", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Create all menu items. freezeTimeToggle = new UIMenuItem("Freeze/Unfreeze Time", "Enable or disable time freezing."); UIMenuItem earlymorning = new UIMenuItem("Early Morning", "Set the time to 06:00."); earlymorning.SetRightLabel("06:00"); UIMenuItem morning = new UIMenuItem("Morning", "Set the time to 09:00."); morning.SetRightLabel("09:00"); UIMenuItem noon = new UIMenuItem("Noon", "Set the time to 12:00."); noon.SetRightLabel("12:00"); UIMenuItem earlyafternoon = new UIMenuItem("Early Afternoon", "Set the time to 15:00."); earlyafternoon.SetRightLabel("15:00"); UIMenuItem afternoon = new UIMenuItem("Afternoon", "Set the time to 18:00."); afternoon.SetRightLabel("18:00"); UIMenuItem evening = new UIMenuItem("Evening", "Set the time to 21:00."); evening.SetRightLabel("21:00"); UIMenuItem midnight = new UIMenuItem("Midnight", "Set the time to 00:00."); midnight.SetRightLabel("00:00"); UIMenuItem night = new UIMenuItem("Night", "Set the time to 03:00."); night.SetRightLabel("03:00"); List <dynamic> hours = new List <dynamic>() { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09" }; List <dynamic> minutes = new List <dynamic>() { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09" }; for (var i = 10; i < 60; i++) { if (i < 24) { hours.Add(i.ToString()); } minutes.Add(i.ToString()); } UIMenuListItem manualHour = new UIMenuListItem("Set Custom Hour", hours, 0); UIMenuListItem manualMinute = new UIMenuListItem("Set Custom Minute", minutes, 0); // Add all menu items to the menu. if (cf.IsAllowed(Permission.TOFreezeTime)) { menu.AddItem(freezeTimeToggle); } if (cf.IsAllowed(Permission.TOSetTime)) { menu.AddItem(earlymorning); menu.AddItem(morning); menu.AddItem(noon); menu.AddItem(earlyafternoon); menu.AddItem(afternoon); menu.AddItem(evening); menu.AddItem(midnight); menu.AddItem(night); menu.AddItem(manualHour); menu.AddItem(manualMinute); } // Handle button presses. menu.OnItemSelect += (sender, item, index) => { // If it's the freeze time button. if (item == freezeTimeToggle) { Subtitle.Info($"Time will now {(EventManager.freezeTime ? "~y~continue" : "~o~freeze")}~s~.", prefix: "Info:"); cf.UpdateServerTime(EventManager.currentHours, EventManager.currentMinutes, !EventManager.freezeTime); } else { // Set the time using the index and some math :) // eg: index = 3 (12:00) ---> 3 * 3 (=9) + 3 [= 12] ---> 12:00 // eg: index = 8 (03:00) ---> 8 * 3 (=24) + 3 (=27, >23 so 27-24) [=3] ---> 03:00 var newHour = 0; if (cf.IsAllowed(Permission.TOFreezeTime)) { newHour = (((index * 3) + 3 < 23) ? (index * 3) + 3 : ((index * 3) + 3) - 24); } else { newHour = ((((index + 1) * 3) + 3 < 23) ? ((index + 1) * 3) + 3 : (((index + 1) * 3) + 3) - 24); } var newMinute = 0; Subtitle.Info($"Time set to ~y~{(newHour < 10 ? $"0{newHour.ToString()}" : newHour.ToString())}~s~:~y~" + $"{(newMinute < 10 ? $"0{newMinute.ToString()}" : newMinute.ToString())}~s~.", prefix: "Info:"); cf.UpdateServerTime(newHour, newMinute, EventManager.freezeTime); } }; menu.OnListSelect += (sender, item, index) => { int newHour = EventManager.currentHours; int newMinute = EventManager.currentMinutes; if (item == manualHour) { newHour = item.Index; } else if (item == manualMinute) { newMinute = item.Index; } Subtitle.Info($"Time set to ~y~{(newHour < 10 ? $"0{newHour.ToString()}" : newHour.ToString())}~s~:~y~" + $"{(newMinute < 10 ? $"0{newMinute.ToString()}" : newMinute.ToString())}~s~.", prefix: "Info:"); cf.UpdateServerTime(newHour, newMinute, EventManager.freezeTime); }; }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { #region create main weapon options menu and add items // Create the menu. menu = new UIMenu(GetPlayerName(PlayerId()), "Weapon Options", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenuItem getAllWeapons = new UIMenuItem("Get All Weapons", "Get all weapons."); UIMenuItem removeAllWeapons = new UIMenuItem("Remove All Weapons", "Removes all weapons in your inventory."); UIMenuCheckboxItem unlimitedAmmo = new UIMenuCheckboxItem("Unlimited Ammo", UnlimitedAmmo, "Unlimited ammonition supply."); UIMenuCheckboxItem noReload = new UIMenuCheckboxItem("No Reload", NoReload, "Never reload."); UIMenuItem setAmmo = new UIMenuItem("Set All Ammo Count", "Set the amount of ammo in all your weapons."); UIMenuItem refillMaxAmmo = new UIMenuItem("Refill All Ammo", "Give all your weapons max ammo."); ValidWeapons vw = new ValidWeapons(); UIMenuItem spawnByName = new UIMenuItem("Spawn Weapon By Name", "Enter a weapon mode name to spawn."); // Add items based on permissions if (cf.IsAllowed(Permission.WPGetAll)) { menu.AddItem(getAllWeapons); } if (cf.IsAllowed(Permission.WPRemoveAll)) { menu.AddItem(removeAllWeapons); } if (cf.IsAllowed(Permission.WPUnlimitedAmmo)) { menu.AddItem(unlimitedAmmo); } if (cf.IsAllowed(Permission.WPNoReload)) { menu.AddItem(noReload); } if (cf.IsAllowed(Permission.WPSetAllAmmo)) { menu.AddItem(setAmmo); menu.AddItem(refillMaxAmmo); } if (cf.IsAllowed(Permission.WPSpawn)) { menu.AddItem(spawnByName); } #endregion #region addonweapons submenu UIMenuItem addonWeaponsBtn = new UIMenuItem("Addon Weapons", "Equip / remove addon weapons available on this server."); UIMenu addonWeaponsMenu = new UIMenu("Addon Weapons", "Equip/Remove Addon Weapons", true) { MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false, ScaleWithSafezone = false }; menu.AddItem(addonWeaponsBtn); #region manage creating and accessing addon weapons menu if (cf.IsAllowed(Permission.WPSpawn) && AddonWeapons != null && AddonWeapons.Count > 0) { menu.BindMenuToItem(addonWeaponsMenu, addonWeaponsBtn); foreach (KeyValuePair <string, uint> weapon in AddonWeapons) { string name = weapon.Key.ToString(); uint model = weapon.Value; var item = new UIMenuItem(name, $"Click to add/remove this weapon ({name}) to/from your inventory."); addonWeaponsMenu.AddItem(item); if (!IsWeaponValid(model)) { item.Enabled = false; item.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); item.Description = "This model is not available. Please ask the server owner to verify it's being streamed correctly."; } } addonWeaponsMenu.OnItemSelect += (sender, item, index) => { var weapon = AddonWeapons.ElementAt(index); if (HasPedGotWeapon(PlayerPedId(), weapon.Value, false)) { RemoveWeaponFromPed(PlayerPedId(), weapon.Value); } else { var maxAmmo = 200; GetMaxAmmo(PlayerPedId(), weapon.Value, ref maxAmmo); GiveWeaponToPed(PlayerPedId(), weapon.Value, maxAmmo, false, true); } }; addonWeaponsBtn.SetRightLabel("→→→"); } else { addonWeaponsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.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."; } #endregion addonWeaponsMenu.RefreshIndex(); addonWeaponsMenu.UpdateScaleform(); #endregion #region parachute options menu #region parachute buttons and submenus UIMenuItem parachuteBtn = new UIMenuItem("Parachute Options", "All parachute related options can be changed here."); UIMenu parachuteMenu = new UIMenu("Parachute Options", "Parachute Options", true) { MouseEdgeEnabled = false, MouseControlsEnabled = false, ControlDisablingEnabled = false, ScaleWithSafezone = false }; UIMenu primaryChute = new UIMenu("Parachute Options", "Select A Primary Parachute", true) { MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false, ScaleWithSafezone = false }; UIMenu secondaryChute = new UIMenu("Parachute Options", "Select A Reserve Parachute", true) { MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false, ScaleWithSafezone = false }; UIMenuItem chute = new UIMenuItem("No Style", "Default parachute."); UIMenuItem chute0 = new UIMenuItem(GetLabelText("PM_TINT0"), GetLabelText("PD_TINT0")); // Rainbow Chute UIMenuItem chute1 = new UIMenuItem(GetLabelText("PM_TINT1"), GetLabelText("PD_TINT1")); // Red Chute UIMenuItem chute2 = new UIMenuItem(GetLabelText("PM_TINT2"), GetLabelText("PD_TINT2")); // Seaside Stripes Chute UIMenuItem chute3 = new UIMenuItem(GetLabelText("PM_TINT3"), GetLabelText("PD_TINT3")); // Window Maker Chute UIMenuItem chute4 = new UIMenuItem(GetLabelText("PM_TINT4"), GetLabelText("PD_TINT4")); // Patriot Chute UIMenuItem chute5 = new UIMenuItem(GetLabelText("PM_TINT5"), GetLabelText("PD_TINT5")); // Blue Chute UIMenuItem chute6 = new UIMenuItem(GetLabelText("PM_TINT6"), GetLabelText("PD_TINT6")); // Black Chute UIMenuItem chute7 = new UIMenuItem(GetLabelText("PM_TINT7"), GetLabelText("PD_TINT7")); // Hornet Chute UIMenuItem chute8 = new UIMenuItem(GetLabelText("PS_CAN_0"), "Air Force parachute."); // Air Force Chute UIMenuItem chute9 = new UIMenuItem(GetLabelText("PM_TINT0"), "Desert parachute."); // Desert Chute UIMenuItem chute10 = new UIMenuItem("Shadow Chute", "Shadow parachute."); // Shadow Chute UIMenuItem chute11 = new UIMenuItem(GetLabelText("UNLOCK_NAME_PSRWD"), "High altitude parachute."); // High Altitude Chute UIMenuItem chute12 = new UIMenuItem("Airborne Chute", "Airborne parachute."); // Airborne Chute UIMenuItem chute13 = new UIMenuItem("Sunrise Chute", "Sunrise parachute."); // Sunrise Chute UIMenuItem rchute = new UIMenuItem("No Style", "Default parachute."); UIMenuItem rchute0 = new UIMenuItem(GetLabelText("PM_TINT0"), GetLabelText("PD_TINT0")); // Rainbow Chute UIMenuItem rchute1 = new UIMenuItem(GetLabelText("PM_TINT1"), GetLabelText("PD_TINT1")); // Red Chute UIMenuItem rchute2 = new UIMenuItem(GetLabelText("PM_TINT2"), GetLabelText("PD_TINT2")); // Seaside Stripes Chute UIMenuItem rchute3 = new UIMenuItem(GetLabelText("PM_TINT3"), GetLabelText("PD_TINT3")); // Window Maker Chute UIMenuItem rchute4 = new UIMenuItem(GetLabelText("PM_TINT4"), GetLabelText("PD_TINT4")); // Patriot Chute UIMenuItem rchute5 = new UIMenuItem(GetLabelText("PM_TINT5"), GetLabelText("PD_TINT5")); // Blue Chute UIMenuItem rchute6 = new UIMenuItem(GetLabelText("PM_TINT6"), GetLabelText("PD_TINT6")); // Black Chute UIMenuItem rchute7 = new UIMenuItem(GetLabelText("PM_TINT7"), GetLabelText("PD_TINT7")); // Hornet Chute UIMenuItem rchute8 = new UIMenuItem(GetLabelText("PS_CAN_0"), "Air Force parachute."); // Air Force Chute UIMenuItem rchute9 = new UIMenuItem(GetLabelText("PM_TINT0"), "Desert parachute."); // Desert Chute UIMenuItem rchute10 = new UIMenuItem("Shadow Chute", "Shadow parachute."); // Shadow Chute UIMenuItem rchute11 = new UIMenuItem(GetLabelText("UNLOCK_NAME_PSRWD"), "High altitude parachute."); // High Altitude Chute UIMenuItem rchute12 = new UIMenuItem("Airborne Chute", "Airborne parachute."); // Airborne Chute UIMenuItem rchute13 = new UIMenuItem("Sunrise Chute", "Sunrise parachute."); // Sunrise Chute primaryChute.AddItem(chute); primaryChute.AddItem(chute0); primaryChute.AddItem(chute1); primaryChute.AddItem(chute2); primaryChute.AddItem(chute3); primaryChute.AddItem(chute4); primaryChute.AddItem(chute5); primaryChute.AddItem(chute6); primaryChute.AddItem(chute7); primaryChute.AddItem(chute8); primaryChute.AddItem(chute9); primaryChute.AddItem(chute10); primaryChute.AddItem(chute11); primaryChute.AddItem(chute12); primaryChute.AddItem(chute13); secondaryChute.AddItem(rchute); secondaryChute.AddItem(rchute0); secondaryChute.AddItem(rchute1); secondaryChute.AddItem(rchute2); secondaryChute.AddItem(rchute3); secondaryChute.AddItem(rchute4); secondaryChute.AddItem(rchute5); secondaryChute.AddItem(rchute6); secondaryChute.AddItem(rchute7); secondaryChute.AddItem(rchute8); secondaryChute.AddItem(rchute9); secondaryChute.AddItem(rchute10); secondaryChute.AddItem(rchute11); secondaryChute.AddItem(rchute12); secondaryChute.AddItem(rchute13); #endregion #region handle events primaryChute.OnItemSelect += (sender, item, index) => { SetPedParachuteTintIndex(PlayerPedId(), index - 1); Subtitle.Custom($"Primary parachute style selected: ~r~{item.Text}~s~."); }; secondaryChute.OnItemSelect += (sender, item, index) => { SetPlayerReserveParachuteTintIndex(PlayerId(), index - 1); Subtitle.Custom($"Reserve parachute style selected: ~r~{item.Text}~s~."); }; #endregion #region create more buttons UIMenuItem primaryChuteBtn = new UIMenuItem("Primary Parachute Style", "Select a primary parachute."); UIMenuItem secondaryChuteBtn = new UIMenuItem("Reserve Parachute Style", "Select a reserve parachute."); parachuteMenu.AddItem(primaryChuteBtn); primaryChuteBtn.SetRightLabel("→→→"); parachuteMenu.AddItem(secondaryChuteBtn); secondaryChuteBtn.SetRightLabel("→→→"); parachuteMenu.BindMenuToItem(primaryChute, primaryChuteBtn); parachuteMenu.BindMenuToItem(secondaryChute, secondaryChuteBtn); UIMenuCheckboxItem autoEquipParachute = new UIMenuCheckboxItem("Auto Equip Parachute", AutoEquipChute, "Automatically equip a parachute whenever you enter a plane/helicopter."); parachuteMenu.AddItem(autoEquipParachute); UIMenuItem togglePrimary = new UIMenuItem("Get / Remove Primary Parachute", "Equip a primary parachute."); UIMenuItem toggleSecondary = new UIMenuItem("Get Reserve Parachute", "Equip a reserve parachute, you need to get a primary parachute first before equipping a reserve parachute."); parachuteMenu.AddItem(togglePrimary); parachuteMenu.AddItem(toggleSecondary); #endregion #region handle parachute menu events parachuteMenu.OnItemSelect += (sender, item, index) => { if (item == togglePrimary) { if (HasPedGotWeapon(PlayerPedId(), (uint)WeaponHash.Parachute, false)) { RemoveWeaponFromPed(PlayerPedId(), (uint)WeaponHash.Parachute); Notify.Success("Primary parachute ~r~removed~s~.", true); } else { GiveWeaponToPed(PlayerPedId(), (uint)WeaponHash.Parachute, 1, false, false); Notify.Success("Primary parachute ~g~equippped~s~.", true); } } else if (item == toggleSecondary) { SetPlayerHasReserveParachute(PlayerId()); Notify.Success("Reserve parachute ~g~equippped~s~.", true); } }; parachuteMenu.OnCheckboxChange += (sender, item, _checked) => { if (item == autoEquipParachute) { AutoEquipChute = _checked; } }; #endregion #region parachute smoke trail colors List <dynamic> smokeColor = new List <dynamic>() { "White", "Yellow", "Red", "Green", "Blue", "Dark Gray", }; UIMenuListItem smokeColors = new UIMenuListItem("Smoke Trail Color", smokeColor, 0, "Select a parachute smoke trail color."); parachuteMenu.AddItem(smokeColors); parachuteMenu.OnListChange += (sender, item, index) => { if (item == smokeColors) { SetPlayerCanLeaveParachuteSmokeTrail(PlayerId(), false); if (index == 0) { SetPlayerParachuteSmokeTrailColor(PlayerId(), 255, 255, 255); } else if (index == 1) { SetPlayerParachuteSmokeTrailColor(PlayerId(), 255, 255, 0); } else if (index == 2) { SetPlayerParachuteSmokeTrailColor(PlayerId(), 255, 0, 0); } else if (index == 3) { SetPlayerParachuteSmokeTrailColor(PlayerId(), 0, 255, 0); } else if (index == 4) { SetPlayerParachuteSmokeTrailColor(PlayerId(), 0, 0, 255); } else if (index == 5) { SetPlayerParachuteSmokeTrailColor(PlayerId(), 1, 1, 1); } SetPlayerCanLeaveParachuteSmokeTrail(PlayerId(), true); } }; #endregion #region misc parachute menu setup menu.AddItem(parachuteBtn); parachuteBtn.SetRightLabel("→→→"); menu.BindMenuToItem(parachuteMenu, parachuteBtn); parachuteMenu.RefreshIndex(); parachuteMenu.UpdateScaleform(); primaryChute.RefreshIndex(); primaryChute.UpdateScaleform(); secondaryChute.RefreshIndex(); secondaryChute.UpdateScaleform(); MainMenu.Mp.Add(addonWeaponsMenu); MainMenu.Mp.Add(parachuteMenu); MainMenu.Mp.Add(primaryChute); MainMenu.Mp.Add(secondaryChute); #endregion #endregion #region Create Weapon Category Submenus UIMenuItem spacer = cf.GetSpacerMenuItem("↓ Weapon Categories ↓"); menu.AddItem(spacer); UIMenu handGuns = new UIMenu("Weapons", "Handguns", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; handGuns.SetMenuWidthOffset(50); UIMenuItem handGunsBtn = new UIMenuItem("Handguns"); UIMenu rifles = new UIMenu("Weapons", "Assault Rifles", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; rifles.SetMenuWidthOffset(50); UIMenuItem riflesBtn = new UIMenuItem("Assault Rifles"); UIMenu shotguns = new UIMenu("Weapons", "Shotguns", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; shotguns.SetMenuWidthOffset(50); UIMenuItem shotgunsBtn = new UIMenuItem("Shotguns"); UIMenu smgs = new UIMenu("Weapons", "Sub-/Light Machine Guns", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; smgs.SetMenuWidthOffset(50); UIMenuItem smgsBtn = new UIMenuItem("Sub-/Light Machine Guns"); UIMenu throwables = new UIMenu("Weapons", "Throwables", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; throwables.SetMenuWidthOffset(50); UIMenuItem throwablesBtn = new UIMenuItem("Throwables"); UIMenu melee = new UIMenu("Weapons", "Melee", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; melee.SetMenuWidthOffset(50); UIMenuItem meleeBtn = new UIMenuItem("Melee"); UIMenu heavy = new UIMenu("Weapons", "Heavy Weapons", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; heavy.SetMenuWidthOffset(50); UIMenuItem heavyBtn = new UIMenuItem("Heavy Weapons"); UIMenu snipers = new UIMenu("Weapons", "Sniper Rifles", true) { ScaleWithSafezone = false, ControlDisablingEnabled = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, }; snipers.SetMenuWidthOffset(50); UIMenuItem snipersBtn = new UIMenuItem("Sniper Rifles"); MainMenu.Mp.Add(handGuns); MainMenu.Mp.Add(rifles); MainMenu.Mp.Add(shotguns); MainMenu.Mp.Add(smgs); MainMenu.Mp.Add(throwables); MainMenu.Mp.Add(melee); MainMenu.Mp.Add(heavy); MainMenu.Mp.Add(snipers); #endregion #region Setup weapon category buttons and submenus. handGunsBtn.SetRightLabel("→→→"); menu.AddItem(handGunsBtn); menu.BindMenuToItem(handGuns, handGunsBtn); riflesBtn.SetRightLabel("→→→"); menu.AddItem(riflesBtn); menu.BindMenuToItem(rifles, riflesBtn); shotgunsBtn.SetRightLabel("→→→"); menu.AddItem(shotgunsBtn); menu.BindMenuToItem(shotguns, shotgunsBtn); smgsBtn.SetRightLabel("→→→"); menu.AddItem(smgsBtn); menu.BindMenuToItem(smgs, smgsBtn); throwablesBtn.SetRightLabel("→→→"); menu.AddItem(throwablesBtn); menu.BindMenuToItem(throwables, throwablesBtn); meleeBtn.SetRightLabel("→→→"); menu.AddItem(meleeBtn); menu.BindMenuToItem(melee, meleeBtn); heavyBtn.SetRightLabel("→→→"); menu.AddItem(heavyBtn); menu.BindMenuToItem(heavy, heavyBtn); snipersBtn.SetRightLabel("→→→"); menu.AddItem(snipersBtn); menu.BindMenuToItem(snipers, snipersBtn); #endregion #region Loop through all weapons, create menus for them and add all menu items and handle events. foreach (ValidWeapon weapon in vw.WeaponList) { uint cat = (uint)GetWeapontypeGroup(weapon.Hash); if (weapon.Name != null && (cf.IsAllowed(weapon.Perm) || cf.IsAllowed(Permission.WPGetAll))) { #region Create menu for this weapon and add buttons UIMenu weaponMenu = new UIMenu("Weapon Options", weapon.Name, true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenuItem weaponItem = new UIMenuItem(weapon.Name, $"Open the options for ~y~{weapon.Name.ToString()}~s~."); weaponItem.SetRightLabel("→→→"); weaponItem.SetLeftBadge(UIMenuItem.BadgeStyle.Gun); MainMenu.Mp.Add(weaponMenu); weaponInfo.Add(weaponMenu, weapon); UIMenuItem getOrRemoveWeapon = new UIMenuItem("Equip/Remove Weapon", "Add or remove this weapon to/form your inventory."); getOrRemoveWeapon.SetLeftBadge(UIMenuItem.BadgeStyle.Gun); weaponMenu.AddItem(getOrRemoveWeapon); if (!cf.IsAllowed(Permission.WPSpawn)) { getOrRemoveWeapon.Enabled = false; getOrRemoveWeapon.Description = "This option has been disabled by the server owner."; getOrRemoveWeapon.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); } UIMenuItem fillAmmo = new UIMenuItem("Re-fill Ammo", "Get max ammo for this weapon."); fillAmmo.SetLeftBadge(UIMenuItem.BadgeStyle.Ammo); weaponMenu.AddItem(fillAmmo); List <dynamic> tints = new List <dynamic>(); if (weapon.Name.Contains(" Mk II")) { foreach (var tint in ValidWeapons.WeaponTintsMkII) { tints.Add(tint.Key); } } else { foreach (var tint in ValidWeapons.WeaponTints) { tints.Add(tint.Key); } } UIMenuListItem weaponTints = new UIMenuListItem("Tints", tints, 0, "Select a tint for your weapon."); weaponMenu.AddItem(weaponTints); #endregion #region Handle weapon specific list changes weaponMenu.OnListChange += (sender, item, index) => { if (item == weaponTints) { if (HasPedGotWeapon(PlayerPedId(), weaponInfo[sender].Hash, false)) { SetPedWeaponTintIndex(PlayerPedId(), weaponInfo[sender].Hash, index); } else { Notify.Error("You need to get the weapon first!"); } } }; #endregion #region Handle weapon specific button presses weaponMenu.OnItemSelect += (sender, item, index) => { if (item == getOrRemoveWeapon) { var info = weaponInfo[sender]; uint hash = info.Hash; if (HasPedGotWeapon(PlayerPedId(), hash, false)) { RemoveWeaponFromPed(PlayerPedId(), hash); Subtitle.Custom("Weapon removed."); } else { var ammo = 255; GetMaxAmmo(PlayerPedId(), hash, ref ammo); GiveWeaponToPed(PlayerPedId(), hash, ammo, false, true); Subtitle.Custom("Weapon added."); } } else if (item == fillAmmo) { if (HasPedGotWeapon(PlayerPedId(), weaponInfo[sender].Hash, false)) { var ammo = 900; GetMaxAmmo(PlayerPedId(), weaponInfo[sender].Hash, ref ammo); SetAmmoInClip(PlayerPedId(), weaponInfo[sender].Hash, ammo); } else { Notify.Error("You need to get the weapon first before re-filling ammo!"); } } }; #endregion #region load components if (weapon.Components != null) { if (weapon.Components.Count > 0) { foreach (var comp in weapon.Components) { UIMenuItem compItem = new UIMenuItem(comp.Key, "Click to equip or remove this component."); weaponComponents.Add(compItem, comp.Key); weaponMenu.AddItem(compItem); #region Handle component button presses weaponMenu.OnItemSelect += (sender, item, index) => { if (item == compItem) { var Weapon = weaponInfo[sender]; var componentHash = Weapon.Components[weaponComponents[item]]; if (HasPedGotWeapon(PlayerPedId(), Weapon.Hash, false)) { if (HasPedGotWeaponComponent(PlayerPedId(), Weapon.Hash, componentHash)) { RemoveWeaponComponentFromPed(PlayerPedId(), Weapon.Hash, componentHash); Subtitle.Custom("Component removed."); } else { GiveWeaponComponentToPed(PlayerPedId(), Weapon.Hash, componentHash); Subtitle.Custom("Component equiped."); } } else { Notify.Error("You need to get the weapon first before you can modify it."); } } }; #endregion } } } #endregion // refresh and add to menu. weaponMenu.RefreshIndex(); weaponMenu.UpdateScaleform(); if (cat == 970310034) // 970310034 rifles { rifles.AddItem(weaponItem); rifles.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 416676503 || cat == 690389602) // 416676503 hand guns // 690389602 stun gun { handGuns.AddItem(weaponItem); handGuns.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 860033945) // 860033945 shotguns { shotguns.AddItem(weaponItem); shotguns.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 3337201093 || cat == 1159398588) // 3337201093 sub machine guns // 1159398588 light machine guns { smgs.AddItem(weaponItem); smgs.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 1548507267 || cat == 4257178988 || cat == 1595662460) // 1548507267 throwables // 4257178988 fire extinghuiser // jerry can { throwables.AddItem(weaponItem); throwables.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 3566412244 || cat == 2685387236) // 3566412244 melee weapons // 2685387236 knuckle duster { melee.AddItem(weaponItem); melee.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 2725924767) // 2725924767 heavy weapons { heavy.AddItem(weaponItem); heavy.BindMenuToItem(weaponMenu, weaponItem); } else if (cat == 3082541095) // 3082541095 sniper rifles { snipers.AddItem(weaponItem); snipers.BindMenuToItem(weaponMenu, weaponItem); } } } #endregion #region Disable submenus if no weapons in that category are allowed. if (handGuns.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(handGunsBtn); handGunsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); handGunsBtn.Description = "The server owner removed the permissions for all weapons in this category."; handGunsBtn.Enabled = false; } if (rifles.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(riflesBtn); riflesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); riflesBtn.Description = "The server owner removed the permissions for all weapons in this category."; riflesBtn.Enabled = false; } if (shotguns.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(shotgunsBtn); shotgunsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); shotgunsBtn.Description = "The server owner removed the permissions for all weapons in this category."; shotgunsBtn.Enabled = false; } if (smgs.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(smgsBtn); smgsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); smgsBtn.Description = "The server owner removed the permissions for all weapons in this category."; smgsBtn.Enabled = false; } if (throwables.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(throwablesBtn); throwablesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); throwablesBtn.Description = "The server owner removed the permissions for all weapons in this category."; throwablesBtn.Enabled = false; } if (melee.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(meleeBtn); meleeBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); meleeBtn.Description = "The server owner removed the permissions for all weapons in this category."; meleeBtn.Enabled = false; } if (heavy.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(heavyBtn); heavyBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); heavyBtn.Description = "The server owner removed the permissions for all weapons in this category."; heavyBtn.Enabled = false; } if (snipers.MenuItems.Count == 0) { menu.ReleaseMenuFromItem(snipersBtn); snipersBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); snipersBtn.Description = "The server owner removed the permissions for all weapons in this category."; snipersBtn.Enabled = false; } #endregion #region Handle button presses menu.OnItemSelect += (sender, item, index) => { Ped ped = new Ped(PlayerPedId()); if (item == getAllWeapons) { foreach (var weapon in ValidWeapons.Weapons) { var ammo = 255; GetMaxAmmo(PlayerPedId(), weapon.Value, ref ammo); ped.Weapons.Give((WeaponHash)weapon.Value, ammo, weapon.Key == "Unarmed", true); } ped.Weapons.Give(WeaponHash.Unarmed, 0, true, true); } else if (item == removeAllWeapons) { ped.Weapons.RemoveAll(); } else if (item == setAmmo) { cf.SetAllWeaponsAmmo(); } else if (item == refillMaxAmmo) { foreach (var wp in ValidWeapons.Weapons) { if (ped.Weapons.HasWeapon((WeaponHash)wp.Value)) { int maxammo = 200; GetMaxAmmo(ped.Handle, wp.Value, ref maxammo); SetPedAmmo(ped.Handle, wp.Value, maxammo); } } } else if (item == spawnByName) { cf.SpawnCustomWeapon(); } }; #endregion #region Handle checkbox changes menu.OnCheckboxChange += (sender, item, _checked) => { if (item == noReload) { NoReload = _checked; Subtitle.Custom($"No reload is now {(_checked ? "enabled" : "disabled")}."); } else if (item == unlimitedAmmo) { UnlimitedAmmo = _checked; Subtitle.Custom($"Unlimited ammo is now {(_checked ? "enabled" : "disabled")}."); } }; #endregion }
public PIMenu() { Tick += OnTick; KeyDown += OnKeyDown; Function.Call(Hash.REQUEST_CLIP_SET, "move_m@brave"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@confident"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@drunk"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@drunk@verydrunk"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@fat@a"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@shadyped@a"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@hurry@a"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@injured"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@intimidation@1h"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@quick"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@sad@a"); Function.Call(Hash.REQUEST_CLIP_SET, "move_m@tool_belt@a"); MenuColor = Color.Blue; MainMenu = new UIMenu(Game.Player.Name.ToString(), "INTERACTION MENU", new Point(0, 0)); MenuPool.Add(MainMenu); GlobalMenuBanner = new UIResRectangle(); GlobalMenuBanner.Color = MenuColor; MainMenu.SetBannerType(GlobalMenuBanner); MainMenu.Title.Font = GTA.Font.ChaletComprimeCologne; MainMenu.Title.Scale = 0.86f; MainMenu.Subtitle.Color = MenuColor; var QuickGPSList = new List <dynamic> { "None", "Ammu-Nation", "Convenience Store", "Mod Shop", "Clothes Store", }; MainMenu.AddItem(QuickGPSItem = new UIMenuListItem("Quick GPS", QuickGPSList, 0, "Select to place your waypoint at a set location.")); QuickGPSItem.Activated += (UIMenu sender, UIMenuItem selecteditem) => { var tmpList = (UIMenuListItem)selecteditem; switch (tmpList.Index) { case 0: Function.Call(Hash.SET_WAYPOINT_OFF); break; case 1: Vector3 NearestAmmunation = PointsOfInterest.GetClosestPoi(Game.Player.Character.Position, PointsOfInterest.Type.AmmuNation); Function.Call(Hash.SET_NEW_WAYPOINT, NearestAmmunation.X, NearestAmmunation.Y); break; } }; InventoryMenu = new UIMenu(Game.Player.Name.ToString(), "INVENTORY", new Point(0, 0)); MenuPool.Add(InventoryMenu); InventoryMenu.SetBannerType(GlobalMenuBanner); InventoryMenu.Title.Font = GTA.Font.ChaletComprimeCologne; InventoryMenu.Title.Scale = 0.86f; InventoryMenu.Subtitle.Color = MenuColor; var InventoryMenuItem = new UIMenuItem("Inventory", "Your inventory which contains clothing, ammo, and much more."); MainMenu.AddItem(InventoryMenuItem); MainMenu.BindMenuToItem(InventoryMenu, InventoryMenuItem); var PlayerMoodsList = new List <dynamic> { "None", "Normal", "Happy", "Angry", "Injured", "Stressed", }; MainMenu.AddItem(PlayerMoodItem = new UIMenuListItem("Player Mood", PlayerMoodsList, 0, "Sets your character's facial expression.")); var WalkStyleList = new List <dynamic> { "Normal", "Brave", "Confident", "Drunk", "Fat", "Gangster", "Hurry", "Injured", "Intimidated", "Quick ", "Sad", "Tough Guy" }; MainMenu.AddItem(WalkStyleItem = new UIMenuListItem("Walk Style", WalkStyleList, 0, "Sets your Character's walking style.")); var AimingStyleList = new List <dynamic> { "None", "Gangster", "Cowboy", }; MainMenu.AddItem(AimingStyleItem = new UIMenuListItem("Aiming Style", AimingStyleList, 0, "Sets your Character's pistol aiming style.")); PassiveModeItem = new UIMenuItem("Enable Passive Mode", "Passive Mode will prevent damage and wanted levels from police."); MainMenu.AddItem(PassiveModeItem); MenuOptionsMenu = new UIMenu(Game.Player.Name.ToString(), "MENU OPTIONS", new Point(0, 0)); MenuPool.Add(MenuOptionsMenu); MenuOptionsMenu.SetBannerType(GlobalMenuBanner); MenuOptionsMenu.Title.Font = GTA.Font.ChaletComprimeCologne; MenuOptionsMenu.Title.Scale = 0.86f; MenuOptionsMenu.Subtitle.Color = MenuColor; var MenuOptionsMenuItem = new UIMenuItem("Menu Options", ""); MainMenu.AddItem(MenuOptionsMenuItem); MainMenu.BindMenuToItem(MenuOptionsMenu, MenuOptionsMenuItem); AboutMenu = new UIMenu(Game.Player.Name.ToString(), "ABOUT", new Point(0, 0)); MenuPool.Add(AboutMenu); AboutMenu.SetBannerType(GlobalMenuBanner); AboutMenu.Title.Font = GTA.Font.ChaletComprimeCologne; AboutMenu.Title.Scale = 0.86f; AboutMenu.Subtitle.Color = MenuColor; var AboutOptionsMenuItem = new UIMenuItem("About", ""); MenuOptionsMenu.BindMenuToItem(AboutMenu, AboutOptionsMenuItem); var MenuColorList = new List <dynamic> { "Blue", "Red", "Green", "Orange", "Purple", "Yellow", }; MenuOptionsMenu.AddItem(MenuColorItem = new UIMenuListItem("Color", MenuColorList, 0, "Select interaction menu's color theme.")); MenuOptionsMenu.AddItem(AboutOptionsMenuItem); var VersionItem = new UIMenuItem("Version"); var AuthorItem = new UIMenuItem("Author"); AboutMenu.AddItem(VersionItem); AboutMenu.AddItem(AuthorItem); VersionItem.SetRightLabel("1.0"); AuthorItem.SetRightLabel("jedijosh920 & Guadmaz"); MainMenu.OnItemSelect += (UIMenu sender, UIMenuItem selectedItem, int index) => { switch (index) { case 5: if (!IsPassiveMode) { Game.Player.Character.IsInvincible = true; Game.Player.Character.Alpha = 200; Function.Call(Hash.SET_POLICE_IGNORE_PLAYER, Game.Player, true); Function.Call(Hash.SET_WANTED_LEVEL_MULTIPLIER, 0.0f); PassiveModeItem.Text = "Disable Passive Mode"; IsPassiveMode = true; } else if (IsPassiveMode) { Game.Player.Character.ResetAlpha(); Function.Call(Hash.SET_POLICE_IGNORE_PLAYER, Game.Player, false); Function.Call(Hash.SET_WANTED_LEVEL_MULTIPLIER, 1.0f); PassiveModeItem.Text = "Enable Passive Mode"; IsPassiveMode = false; } break; } }; MenuOptionsMenu.OnListChange += (UIMenu sender, UIMenuListItem listItem, int newIndex) => { if (listItem == MenuColorItem) { switch (newIndex) { case 0: MenuColor = Color.Blue; break; case 1: MenuColor = Color.Red; break; case 2: MenuColor = Color.Green; break; case 3: MenuColor = Color.Orange; break; case 4: MenuColor = Color.Purple; break; case 5: MenuColor = Color.Yellow; break; } } if (listItem == WalkStyleItem) { switch (newIndex) { case 0: Game.Player.Character.Task.ClearAll(); Function.Call(Hash.RESET_PED_MOVEMENT_CLIPSET, Game.Player.Character, 0x3E800000); break; case 1: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@brave", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 2: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@confident", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 3: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@drunk@verydrunk", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 4: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@fat@a", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 5: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@shadyped@a", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 6: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@hurry@a", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 7: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@injured", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 8: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@intimidation@1h", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 9: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@quick", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 10: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@sad@a", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; case 11: Function.Call(Hash.SET_PED_MOVEMENT_CLIPSET, Game.Player.Character, "move_m@tool_belt@a", 0x3E800000); Game.Player.Character.Task.ClearAll(); break; } } if (listItem == PlayerMoodItem) { switch (newIndex) { case 0: Function.Call(Hash.CLEAR_FACIAL_IDLE_ANIM_OVERRIDE, Game.Player.Character); break; case 1: Function.Call(Hash.SET_FACIAL_IDLE_ANIM_OVERRIDE, Game.Player.Character, "mood_normal_1", 0); break; case 2: Function.Call(Hash.SET_FACIAL_IDLE_ANIM_OVERRIDE, Game.Player.Character, "mood_happy_1", 0); break; case 3: Function.Call(Hash.SET_FACIAL_IDLE_ANIM_OVERRIDE, Game.Player.Character, "Mood_Angry_1", 0); break; case 4: Function.Call(Hash.SET_FACIAL_IDLE_ANIM_OVERRIDE, Game.Player.Character, "Mood_Injured_1", 0); break; case 5: Function.Call(Hash.SET_FACIAL_IDLE_ANIM_OVERRIDE, Game.Player.Character, "Mood_Stressed_1", 0); break; } } if (listItem == AimingStyleItem) { switch (newIndex) { case 0: Function.Call(Hash.SET_WEAPON_ANIMATION_OVERRIDE, Game.Player.Character, Function.Call <int>(Hash.GET_HASH_KEY, "default")); break; case 1: Function.Call(Hash.SET_WEAPON_ANIMATION_OVERRIDE, Game.Player.Character, Function.Call <int>(Hash.GET_HASH_KEY, "Gang1H")); break; case 2: Function.Call(Hash.SET_WEAPON_ANIMATION_OVERRIDE, Game.Player.Character, Function.Call <int>(Hash.GET_HASH_KEY, "Hillbilly")); break; } } }; var menu = new AmmoMenu(); var ammoItem = new UIMenuItem("Ammo"); InventoryMenu.AddItem(ammoItem); InventoryMenu.BindMenuToItem(menu, ammoItem); MenuPool.Add(menu); MainMenu.RefreshIndex(); InventoryMenu.RefreshIndex(); }
/// <summary> /// Refresh/create the ped customization menu. /// </summary> private void RefreshCustomizationMenu() { // Remove any old items. pedTextures.MenuItems.Clear(); #region Loop through all ped drawable variations and all ped props. for (var i = 0; i < 17; i++) { #region Ped Drawable Variations //if (i < 12) if (i < 12) { // Get the drawable information. var currentDrawable = GetPedDrawableVariation(PlayerPedId(), i); var variations = GetNumberOfPedDrawableVariations(PlayerPedId(), i); var textures = GetNumberOfPedTextureVariations(PlayerPedId(), i, currentDrawable); // If there are any variations. if (variations > 0) { // Loop through all of them and add them to the list. var textureList = new List <dynamic>(); for (var x = 0; x < variations; x++) { textureList.Add("Item #" + x.ToString()); } UIMenuListItem listItem = new UIMenuListItem($"{textureNames[i]}", textureList, currentDrawable, $"Use ← & → to select a ~o~{textureNames[i]} Variation~s~, press ~r~enter~s~ to cycle through the available textures."); pedTextures.AddItem(listItem); // Manage list changes. pedTextures.OnListChange += (sender2, item2, index2) => { if (item2 == listItem) { SetPedComponentVariation(PlayerPedId(), sender2.CurrentSelection, index2, 0, 0); } }; // Manage list selections. pedTextures.OnListSelect += (sender2, item2, index2) => { if (item2 == listItem) { var currentTexture = GetPedTextureVariation(PlayerPedId(), sender2.CurrentSelection); currentTexture = currentTexture == -1 ? 0 : currentTexture; var totalTextures = GetNumberOfPedTextureVariations(PlayerPedId(), sender2.CurrentSelection, index2) - 1; SetPedComponentVariation(PlayerPedId(), sender2.CurrentSelection, index2, (currentTexture < totalTextures ? currentTexture + 1 : 0), 0); } }; } else { UIMenuItem placeholder = new UIMenuItem($"{textureNames[i]}"); placeholder.SetRightLabel("None"); placeholder.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); placeholder.Enabled = false; pedTextures.AddItem(placeholder); } } #endregion #region Ped Props else { // Variables setup. var ii = i - 12;// 20; if (ii > 2) { ii += 3; } var currentProp = GetPedPropIndex(PlayerPedId(), ii); var props = GetNumberOfPedPropDrawableVariations(PlayerPedId(), ii); // If there are any props. if (props > 0) { // Loop through all of them and add them to lists. var propsList = new List <dynamic>(); for (var x = 0; x < props; x++) { propsList.Add("Item #" + x.ToString()); } // Add an "off" item to the list to allow the prop to be turned off. propsList.Add("Off"); // Create and add the list item to the menu. UIMenuListItem listItem = new UIMenuListItem($"{propNames[ii > 2 ? ii - 3 : ii]}", propsList, currentProp,
/// <summary> /// Updates the ban list menu. /// </summary> public void UpdateBans() { menu.Clear(); foreach (BanRecord ban in banlist) { UIMenu bannedPlayer = new UIMenu("Banned Player", "Ban Record: " + ban.playerName, true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; bannedPlayer.SetMenuWidthOffset(50); // info items. UIMenuItem name = new UIMenuItem("Name:", ban.playerName) { Enabled = false }; name.SetRightLabel(ban.playerName); UIMenuItem bannedBy = new UIMenuItem("Banned By:", ban.bannedBy) { Enabled = false }; bannedBy.SetRightLabel(ban.bannedBy); UIMenuItem bannedUntil = new UIMenuItem("Banned Until:", ban.bannedUntil.ToString()) { Enabled = false }; bannedUntil.SetRightLabel(ban.bannedUntil.ToString()); var identifierstring = ""; foreach (string id in ban.identifiers) { if (id.Contains("steam:")) { var id2 = id; if (id.Length > 40) { id2 = id.Substring(0, 40) + " " + id.Substring(40, id.Length - 40); } identifierstring += "~o~" + id2 + " "; } else if (id.Contains("license:")) { var id2 = id; if (id.Length > 40) { id2 = id.Substring(0, 40) + " " + id.Substring(40, id.Length - 40); } identifierstring += "~y~" + id2 + " "; } else if (id.Contains("ip:")) { var id2 = id; if (id.Length > 40) { id2 = id.Substring(0, 40) + " " + id.Substring(40, id.Length - 40); } identifierstring += "~g~" + id2 + " "; } } UIMenuItem identifiers = new UIMenuItem("Player Identifiers", identifierstring) { Enabled = false }; UIMenuItem banReason = new UIMenuItem("Ban Reason", ban.banReason) { Enabled = false }; UIMenuItem unbanPlayer = new UIMenuItem("~r~Unban Player", "Unbanning the player cannot be undone. " + "You will have to wait for the player to be online to ban them again."); // add items to menu. bannedPlayer.AddItem(name); bannedPlayer.AddItem(bannedBy); bannedPlayer.AddItem(bannedUntil); bannedPlayer.AddItem(identifiers); bannedPlayer.AddItem(banReason); bannedPlayer.AddItem(unbanPlayer); // refresh index and update scaleform. bannedPlayer.RefreshIndex(); bannedPlayer.UpdateScaleform(); // create button for this player and add it to the main banned players menu. UIMenuItem player = new UIMenuItem(ban.playerName, "View details of this player's ban record."); menu.AddItem(player); menu.BindMenuToItem(bannedPlayer, player); bannedPlayer.OnItemSelect += (sender, item, index) => { if (item == unbanPlayer) { if (item.Description == "Are you sure?") { Notify.Custom($"Player {banlist[menu.MenuItems.IndexOf(player)].playerName} has been unbanned."); UnbanPlayer(menu.MenuItems.IndexOf(player)); bannedPlayer.UpdateScaleform(); bannedPlayer.GoBack(); UpdateBans(); } else { item.Description = "Are you sure?"; bannedPlayer.UpdateScaleform(); bannedPlayer.RefreshIndex(); bannedPlayer.CurrentSelection = bannedPlayer.MenuItems.Count - 1; } } }; bannedPlayer.OnMenuClose += (a) => { if (bannedPlayer.MenuItems.Last().Description == "Are you sure?") { bannedPlayer.MenuItems.Last().Description = "Unbanning the player cannot be undone. " + "You will have to wait for the player to be online to ban them again."; bannedPlayer.UpdateScaleform(); bannedPlayer.RefreshIndex(); } }; // add menu to menu pool. MainMenu.Mp.Add(bannedPlayer); } // update index & scaleform. menu.RefreshIndex(); menu.UpdateScaleform(); }
private void CreateMenu() { //VehicleData vd = new VehicleData(); #region initial setup. // Create the menu. menu = new UIMenu("BigFam Crew", "Vehicle Spawner", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Create the buttons and checkboxes. UIMenuItem spawnByName = new UIMenuItem("Spawn Vehicle By Model Name", "Enter the name of a vehicle to spawn."); UIMenuCheckboxItem spawnInVeh = new UIMenuCheckboxItem("Spawn Inside Vehicle", SpawnInVehicle, "This will teleport you into the vehicle when you spawn it."); UIMenuCheckboxItem replacePrev = new UIMenuCheckboxItem("Replace Previous Vehicle", ReplaceVehicle, "This will automatically delete your previously spawned vehicle when you spawn a new vehicle."); // Add the items to the menu. if (cf.IsAllowed(Permission.VSSpawnByName)) { // menu.AddItem(spawnByName); } //menu.AddItem(spawnInVeh); //menu.AddItem(replacePrev); #endregion #region addon cars menu // Vehicle Addons List UIMenu addonCarsMenu = new UIMenu("Addon Vehicles", "Spawn An Addon Vehicle", true) { MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false, ScaleWithSafezone = false }; UIMenuItem addonCarsBtn = new UIMenuItem("Addon Vehicles", "A list of addon vehicles available on this server."); addonCarsBtn.SetRightLabel("→→→"); menu.AddItem(addonCarsBtn); if (cf.IsAllowed(Permission.VSAddon)) { if (AddonVehicles != null) { if (AddonVehicles.Count > 0) { menu.BindMenuToItem(addonCarsMenu, addonCarsBtn); MainMenu.Mp.Add(addonCarsMenu); foreach (KeyValuePair <string, uint> veh in AddonVehicles) { string localizedName = GetLabelText(GetDisplayNameFromVehicleModel(veh.Value)); string name = localizedName != "NULL" ? localizedName : GetDisplayNameFromVehicleModel(veh.Value); name = name != "CARNOTFOUND" ? name : veh.Key; UIMenuItem carBtn = new UIMenuItem(name, $"Click to spawn {name}."); carBtn.SetRightLabel($"({veh.Key.ToString()})"); if (!IsModelInCdimage(veh.Value)) { 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.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); } addonCarsMenu.AddItem(carBtn); } /* * //AddonVehicles.ToList(); * List<UIMenuItem> buttonsList = new List<UIMenuItem> { }; * menu.BindMenuToItem(addonCarsMenu, addonCarsBtn); * MainMenu.Mp.Add(addonCarsMenu); * foreach (KeyValuePair<string, uint> veh in AddonVehicles) * { * string localizedName = GetLabelText(GetDisplayNameFromVehicleModel(veh.Value)); * string name = localizedName != "NULL" ? localizedName : GetDisplayNameFromVehicleModel(veh.Value); * name = name != "CARNOTFOUND" ? name : veh.Key; * UIMenuItem carBtn = new UIMenuItem(name, $"Click to spawn {name}."); * carBtn.SetRightLabel($"({veh.Key.ToString()})"); * if (!IsModelInCdimage(veh.Value)) * { * 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.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); * } * * buttonsList.Add(carBtn); * } * * buttonsList.Sort((prev, next) => String.Compare(prev.Text, next.Text)); * * buttonsList.ForEach(carBtn => * { * addonCarsMenu.AddItem(carBtn); * }); */ addonCarsMenu.OnItemSelect += (sender, item, index) => { cf.SpawnVehicle(AddonVehicles.ElementAt(index).Key, SpawnInVehicle, ReplaceVehicle); }; addonCarsMenu.RefreshIndex(); addonCarsMenu.UpdateScaleform(); } else { addonCarsBtn.Enabled = false; addonCarsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); addonCarsBtn.Description = "There are no addon vehicles available on this server."; } } else { addonCarsBtn.Enabled = false; addonCarsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); addonCarsBtn.Description = "The list containing all addon cars could not be loaded, is it configured properly?"; } } else { addonCarsBtn.Enabled = false; addonCarsBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); addonCarsBtn.Description = "Access to this list has been restricted by the server owner."; } #endregion #region vehicle classes submenus // Create the submenus for each category. var vl = new Vehicles(); // Loop through all the vehicle classes. for (var vehClass = 0; vehClass < 22; vehClass++) { // Get the class name. string className = cf.GetLocalizedName($"VEH_CLASS_{vehClass.ToString()}"); // Create a button & a menu for it, add the menu to the menu pool and add & bind the button to the menu. UIMenuItem btn = new UIMenuItem(className, $"Spawn a vehicle from the ~o~{className} ~s~class."); btn.SetRightLabel("→→→"); UIMenu vehicleClassMenu = new UIMenu("Vehicle Spawner", className, true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; /* * MainMenu.Mp.Add(vehicleClassMenu); * menu.AddItem(btn); * * if (allowedCategories[vehClass]) * { * menu.BindMenuToItem(vehicleClassMenu, btn); * } * else * { * btn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); * btn.Description = "This category has been disabled by the server owner."; * btn.Enabled = false; * } */ // Create a dictionary for the duplicate vehicle names (in this vehicle class). var duplicateVehNames = new Dictionary <string, int>(); #region Add vehicles per class // Loop through all the vehicles in the vehicle class. foreach (var veh in vl.VehicleClasses[className]) { // Convert the model name to start with a Capital letter, converting the other characters to lowercase. var properCasedModelName = veh[0].ToString().ToUpper() + veh.ToLower().Substring(1); // Get the localized vehicle name, if it's "NULL" (no label found) then use the "properCasedModelName" created above. var vehName = cf.GetVehDisplayNameFromModel(veh) != "NULL" ? cf.GetVehDisplayNameFromModel(veh) : properCasedModelName; // Loop through all the menu items and check each item's title/text and see if it matches the current vehicle (display) name. var duplicate = false; for (var itemIndex = 0; itemIndex < vehicleClassMenu.MenuItems.Count; itemIndex++) { // If it matches... if (vehicleClassMenu.MenuItems[itemIndex].Text.ToString() == vehName) { // Check if the model was marked as duplicate before. if (duplicateVehNames.Keys.Contains(vehName)) { // If so, add 1 to the duplicate counter for this model name. duplicateVehNames[vehName]++; } // If this is the first duplicate, then set it to 2. else { duplicateVehNames[vehName] = 2; } // The model name is a duplicate, so get the modelname and add the duplicate amount for this model name to the end of the vehicle name. vehName += $" ({duplicateVehNames[vehName].ToString()})"; // Then create and add a new button for this vehicle. if (cf.DoesModelExist(veh)) { var vehBtn = new UIMenuItem(vehName) { Enabled = true }; vehicleClassMenu.AddItem(vehBtn); } else { var vehBtn = new UIMenuItem(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 }; vehicleClassMenu.AddItem(vehBtn); vehBtn.SetRightBadge(UIMenuItem.BadgeStyle.Lock); } // Mark duplicate as true and break from the loop because we already found the duplicate. duplicate = true; break; } } // If it's not a duplicate, add the model name. if (!duplicate) { if (cf.DoesModelExist(veh)) { var vehBtn = new UIMenuItem(vehName) { Enabled = true }; vehicleClassMenu.AddItem(vehBtn); } else { var vehBtn = new UIMenuItem(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 }; vehicleClassMenu.AddItem(vehBtn); vehBtn.SetRightBadge(UIMenuItem.BadgeStyle.Lock); } } } #endregion // Handle button presses vehicleClassMenu.OnItemSelect += (sender2, item2, index2) => { cf.SpawnVehicle(vl.VehicleClasses[className][index2], SpawnInVehicle, ReplaceVehicle); }; } #endregion #region handle events // Handle button presses. menu.OnItemSelect += (sender, item, index) => { if (item == spawnByName) { // Passing "custom" as the vehicle name, will ask the user for input. cf.SpawnVehicle("custom", SpawnInVehicle, ReplaceVehicle); } }; // Handle checkbox changes. menu.OnCheckboxChange += (sender, item, _checked) => { if (item == spawnInVeh) { SpawnInVehicle = _checked; } else if (item == replacePrev) { ReplaceVehicle = _checked; } }; #endregion }
/// <summary> /// Creates the menu(s). /// </summary> private void CreateMenu() { // Create the menu. menu = new UIMenu(GetPlayerName(PlayerId()), "Player Appearance", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; //Create the submenus. spawnSavedPedMenu = new UIMenu("Saved Peds", "Spawn a saved ped", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; deleteSavedPedMenu = new UIMenu("Saved Peds", "Delete a saved ped", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; pedTextures = new UIMenu("Ped Customization", "Customize your ped", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Add the (submenus) to the menu pool. MainMenu.Mp.Add(pedTextures); MainMenu.Mp.Add(spawnSavedPedMenu); MainMenu.Mp.Add(deleteSavedPedMenu); // Create the menu items. UIMenuItem pedCustomization = new UIMenuItem("Ped Customization", "Modify your ped's appearance."); pedCustomization.SetRightLabel("→→→"); UIMenuItem savePed = new UIMenuItem("Save Current Ped", "Save your current ped and clothes."); savePed.SetRightBadge(UIMenuItem.BadgeStyle.Tick); UIMenuItem spawnSavedPed = new UIMenuItem("Spawn Saved Ped", "Spawn one of your saved peds."); spawnSavedPed.SetRightLabel("→→→"); UIMenuItem deleteSavedPed = new UIMenuItem("Delete Saved Ped", "Delete one of your saved peds."); deleteSavedPed.SetRightLabel("→→→"); deleteSavedPed.SetLeftBadge(UIMenuItem.BadgeStyle.Alert); // Add items to the mneu. menu.AddItem(pedCustomization); menu.AddItem(savePed); menu.AddItem(spawnSavedPed); menu.AddItem(deleteSavedPed); // Bind items to the submenus. if (cf.IsAllowed(Permission.PACustomize)) { menu.BindMenuToItem(pedTextures, pedCustomization); } else { pedCustomization.Enabled = false; pedCustomization.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); pedCustomization.Description = "This option has been disabled by the server owner."; } if (cf.IsAllowed(Permission.PASpawnSaved)) { menu.BindMenuToItem(spawnSavedPedMenu, spawnSavedPed); } else { spawnSavedPed.Enabled = false; spawnSavedPed.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); spawnSavedPed.Description = "This option has been disabled by the server owner."; } menu.BindMenuToItem(deleteSavedPedMenu, deleteSavedPed); // Handle button presses. menu.OnItemSelect += (sender, item, index) => { if (item == pedCustomization) { RefreshCustomizationMenu(); } else if (item == spawnSavedPed) { RefreshSpawnSavedPedMenu(); } else if (item == deleteSavedPed) { RefreshDeleteSavedPedMenu(); } else if (item == savePed) { cf.SavePed(); } }; // Loop through all the modelNames and create lists of max 50 ped names each. for (int i = 0; i < (modelNames.Count / 50) + 1; i++) { List <dynamic> pedList = new List <dynamic>(); for (int ii = 0; ii < 50; ii++) { int index = ((i * 50) + ii); if (index >= modelNames.Count) { break; } int max = ((modelNames.Count / 50) != i) ? 50 : modelNames.Count % 50; pedList.Add(modelNames[index] + $" ({(ii + 1).ToString()}/{max.ToString()})"); } UIMenuListItem pedl = new UIMenuListItem("Peds #" + (i + 1).ToString(), pedList, 0); menu.AddItem(pedl); if (!cf.IsAllowed(Permission.PASpawnNew)) { pedl.Enabled = false; pedl.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); pedl.Description = "This option has been disabled by the server owner."; } } // Handle list selections. menu.OnListSelect += (sender, item, index) => { int i = ((sender.CurrentSelection - 4) * 50) + index; string modelName = modelNames[i]; if (cf.IsAllowed(Permission.PASpawnNew)) { cf.SetPlayerSkin(modelName); } }; }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { string menuTitle = "Saved Vehicles"; #region Create menus and submenus // Create the menu. menu = new UIMenu(menuTitle, "Manage Saved Vehicles", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Create submenus. UIMenu savedVehicles = new UIMenu(menuTitle, "Spawn Saved Vehicle", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenu deleteSavedVehicles = new UIMenu(menuTitle, "~r~Delete Saved Vehicle", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; #endregion #region Create, add and bind buttons to the menus. // Create menu buttons. UIMenuItem saveVeh = new UIMenuItem("Save Current Vehicle", "Save the vehicle you are currently in."); saveVeh.SetRightBadge(UIMenuItem.BadgeStyle.Tick); UIMenuItem savedVehiclesBtn = new UIMenuItem("Spawn Saved Vehicle", "Select a vehicle from your saved vehicles list."); savedVehiclesBtn.SetRightLabel("→→→"); UIMenuItem deleteSavedVehiclesBtn = new UIMenuItem("~r~Delete Saved Vehicle", "~r~Delete ~s~a saved vehicle."); deleteSavedVehiclesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Alert); deleteSavedVehiclesBtn.SetRightLabel("→→→"); // Add buttons to the menu. menu.AddItem(saveVeh); menu.AddItem(savedVehiclesBtn); menu.AddItem(deleteSavedVehiclesBtn); // Bind submenus to menu items. if (cf.IsAllowed(Permission.SVSpawn)) { menu.BindMenuToItem(savedVehicles, savedVehiclesBtn); } else { savedVehiclesBtn.Enabled = false; savedVehiclesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); savedVehiclesBtn.Description = "This option has been disabled by the server owner."; } menu.BindMenuToItem(deleteSavedVehicles, deleteSavedVehiclesBtn); #endregion #region Button pressed events // Handle button presses. menu.OnItemSelect += (sender, item, index) => { // Save the current vehicle. if (item == saveVeh) { cf.SaveVehicle(); } // Open and refresh the "spawn saved vehicle from list" submenu. else if (item == savedVehiclesBtn) { // Remove all old items. savedVehicles.MenuItems.Clear(); // Get all saved vehicles. SavedVehiclesDict = cf.GetSavedVehiclesDictionary(); // Loop through all saved vehicles and create a button for it, then add that button to the submenu. foreach (KeyValuePair <string, Dictionary <string, string> > savedVehicle in SavedVehiclesDict) { UIMenuItem vehBtn = new UIMenuItem(savedVehicle.Key.Substring(4), "Click to spawn this saved vehicle."); vehBtn.SetRightLabel($"({savedVehicle.Value["name"]})"); savedVehicles.AddItem(vehBtn); } // Sort the menu items (case IN-sensitive) by name. savedVehicles.MenuItems.Sort((pair1, pair2) => pair1.Text.ToString().ToLower().CompareTo(pair2.Text.ToString().ToLower())); // When a vehicle is selected... savedVehicles.OnItemSelect += (sender2, item2, index2) => { // Get the vehicle info. var vehInfo = SavedVehiclesDict["veh_" + item2.Text]; // Get the model hash. var model = vehInfo["model"]; // Spawn a vehicle using the hash, and pass on the vehicleInfo dictionary containing all saved vehicle mods. cf.SpawnVehicle((uint)Int64.Parse(model), MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, vehicleInfo: vehInfo); }; // Refresh the index of the page. savedVehicles.RefreshIndex(); // Update the scaleform. savedVehicles.UpdateScaleform(); } // Delete saved vehicle. else if (item == deleteSavedVehiclesBtn) { deleteSavedVehicles.MenuItems.Clear(); // Get the dictionary containing all saved vehicles. SavedVehiclesDict = cf.GetSavedVehiclesDictionary(); // Loop through the list and add all saved vehicles to the menu. foreach (KeyValuePair <string, Dictionary <string, string> > savedVehicle in SavedVehiclesDict) { UIMenuItem vehBtn = new UIMenuItem(savedVehicle.Key.Substring(4), "Are you sure you want to delete this saved vehicle? This action cannot be undone!"); vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Alert); vehBtn.SetRightLabel($"({savedVehicle.Value["name"]})"); deleteSavedVehicles.AddItem(vehBtn); } // Sort the menu items (case IN-sensitive) by name. deleteSavedVehicles.MenuItems.Sort((pair1, pair2) => pair1.Text.ToString().ToLower().CompareTo(pair2.Text.ToString().ToLower())); // Handle vehicle deletions deleteSavedVehicles.OnItemSelect += (sender2, item2, index2) => { var vehDictName = "veh_" + item2.Text; new StorageManager().DeleteSavedDictionary(vehDictName); deleteSavedVehicles.GoBack(); }; } }; #endregion // Add the submenus to the menu pool. MainMenu.Mp.Add(savedVehicles); MainMenu.Mp.Add(deleteSavedVehicles); }
/// <summary> /// Creates all the submenus depending on the permissions of the user. /// </summary> private void CreateSubmenus() { // Add the online players menu. if (Cf.IsAllowed(Permission.OPMenu)) { OnlinePlayersMenu = new OnlinePlayers(); UIMenu menu = OnlinePlayersMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Online Players", "All currently connected players."); button.SetRightLabel("→→→"); AddMenu(menu, button); Menu.OnItemSelect += (sender, item, index) => { if (item == button) { OnlinePlayersMenu.UpdatePlayerlist(); menu.RefreshIndex(); menu.UpdateScaleform(); } }; } // Add the player options menu. if (Cf.IsAllowed(Permission.POMenu)) { PlayerOptionsMenu = new PlayerOptions(); UIMenu menu = PlayerOptionsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Player Options", "Common player options can be accessed here."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add the vehicle options Menu. if (Cf.IsAllowed(Permission.VOMenu)) { VehicleOptionsMenu = new VehicleOptions(); UIMenu menu = VehicleOptionsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Vehicle Options", "Here you can change common vehicle options, as well as tune & style your vehicle."); button.SetRightLabel("→→→"); AddMenu(menu, button); } var vl = new Vehicles().VehicleClasses; // Add the vehicle spawner menu. if (Cf.IsAllowed(Permission.VSMenu)) { VehicleSpawnerMenu = new VehicleSpawner(); UIMenu menu = VehicleSpawnerMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Vehicle Spawner", "Spawn a vehicle by name or choose one from a specific category."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add Saved Vehicles menu. if (Cf.IsAllowed(Permission.SVMenu)) { SavedVehiclesMenu = new SavedVehicles(); UIMenu menu = SavedVehiclesMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Saved Vehicles", "Save new vehicles, or spawn or delete already saved vehicles."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add the player appearance menu. if (Cf.IsAllowed(Permission.PAMenu)) { PlayerAppearanceMenu = new PlayerAppearance(); UIMenu menu = PlayerAppearanceMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Player Appearance", "Choose a ped model, customize it and save & load your customized characters."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add the time options menu. // check for 'not true' to make sure that it _ONLY_ gets disabled if the owner _REALLY_ wants it disabled, not if they accidentally spelled "false" wrong or whatever. if (Cf.IsAllowed(Permission.TOMenu) && MenuOptions["disableSync"] != "true") { TimeOptionsMenu = new TimeOptions(); UIMenu menu = TimeOptionsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Time Options", "Change the time, and edit other time related options."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add the weather options menu. // check for 'not true' to make sure that it _ONLY_ gets disabled if the owner _REALLY_ wants it disabled, not if they accidentally spelled "false" wrong or whatever. if (Cf.IsAllowed(Permission.WOMenu) && MenuOptions["disableSync"] != "true") { WeatherOptionsMenu = new WeatherOptions(); UIMenu menu = WeatherOptionsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Weather Options", "Change all weather related options here."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add the weapons menu. if (Cf.IsAllowed(Permission.WPMenu)) { WeaponOptionsMenu = new WeaponOptions(); UIMenu menu = WeaponOptionsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Weapon Options", "Add/remove weapons, modify weapons and set ammo options."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add misc settings menu. if (Cf.IsAllowed(Permission.MSMenu)) { MiscSettingsMenu = new MiscSettings(); UIMenu menu = MiscSettingsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Misc Settings", "Change general settings."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add Voice Chat Menu. if (Cf.IsAllowed(Permission.VCMenu)) { VoiceChatSettingsMenu = new VoiceChat(); UIMenu menu = VoiceChatSettingsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Voice Chat Settings", "Change Voice Chat options here."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add About Menu. AboutMenu = new About(); UIMenu sub = AboutMenu.GetMenu(); UIMenuItem btn = new UIMenuItem("About vMenu", "Information about this menu and it's creators."); btn.SetRightLabel("→→→"); AddMenu(sub, btn); // Refresh everything. Mp.RefreshIndex(); Menu.UpdateScaleform(); // Globally disable the native ui controls disabling. Mp.ControlDisablingEnabled = false; // Globally disable the "mouse edge" feature. Mp.MouseEdgeEnabled = false; }
/// <summary> /// Updates the player items. /// </summary> public void UpdatePlayerlist() { // Remove leftover menu items if they exist. if (menu.MenuItems.Count > 0) { menu.MenuItems.Clear(); } // Create a new player list. PlayerList pl = new PlayerList(); // Loop through the playerlist. foreach (Player p in pl) { // Create a button for this player and add it to the menu. UIMenuItem playerItem = new UIMenuItem(p.Name, "[" + (p.Handle < 10 ? "0" : "") + p.Handle + "] " + p.Name + " (Server ID: " + p.ServerId + ")"); playerItem.SetRightLabel("→→→"); menu.AddItem(playerItem); // Handle button presses. menu.OnItemSelect += (sender, item, index) => { // If the player item is pressed. if (item == playerItem) { // Create the player object. Player player = new Player(int.Parse(item.Description.Substring(1, 2).ToString())); // Create the menu for the player & set the width offset. UIMenu PlayerMenu = new UIMenu(player.Name, "[" + (player.Handle < 10 ? "0" : "") + player.Handle + "] " + player.Name + " (Server ID: " + player.ServerId + ")", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; PlayerMenu.SetMenuWidthOffset(50); PlayerMenu.RefreshIndex(); PlayerMenu.UpdateScaleform(); // Create all player options buttons. UIMenuItem teleportBtn = new UIMenuItem("Teleport To Player", "Teleport to this player."); UIMenuItem teleportInVehBtn = new UIMenuItem("Teleport Into Vehicle", "Teleport into the player's vehicle."); UIMenuItem setWaypointBtn = new UIMenuItem("Set Waypoint", "Set a waypoint to this player."); UIMenuItem spectateBtn = new UIMenuItem("Spectate Player", "Spectate this player."); UIMenuItem summonBtn = new UIMenuItem("Summon Player", "Bring this player to your location."); summonBtn.SetRightBadge(UIMenuItem.BadgeStyle.Alert); UIMenuItem killBtn = new UIMenuItem("Kill Player", "Kill the selected player! Why are you so cruel :("); killBtn.SetRightBadge(UIMenuItem.BadgeStyle.Alert); UIMenuItem kickPlayerBtn = new UIMenuItem("~r~Kick Player", "~r~Kick~s~ this player from the server, you need to specify a reason " + "otherwise the kick will be cancelled."); kickPlayerBtn.SetRightBadge(UIMenuItem.BadgeStyle.Alert); UIMenuItem permBanBtn = new UIMenuItem("~r~Ban Player", "Ban the player from the server forever."); permBanBtn.SetRightBadge(UIMenuItem.BadgeStyle.Alert); UIMenuItem tempBanBtn = new UIMenuItem("~r~Tempban Player", "Ban the player from the server for the specified amount of hours. " + "The player will be able to rejoin after the ban expires."); tempBanBtn.SetRightBadge(UIMenuItem.BadgeStyle.Alert); // Add all buttons to the player options submenu. Keeping permissions in mind. if (cf.IsAllowed(Permission.OPTeleport)) { PlayerMenu.AddItem(teleportBtn); PlayerMenu.AddItem(teleportInVehBtn); } if (cf.IsAllowed(Permission.OPWaypoint)) { PlayerMenu.AddItem(setWaypointBtn); } if (cf.IsAllowed(Permission.OPSpectate)) { PlayerMenu.AddItem(spectateBtn); } if (cf.IsAllowed(Permission.OPSummon)) { PlayerMenu.AddItem(summonBtn); } if (cf.IsAllowed(Permission.OPKill)) { PlayerMenu.AddItem(killBtn); } if (cf.IsAllowed(Permission.OPKick)) { PlayerMenu.AddItem(kickPlayerBtn); } if (cf.IsAllowed(Permission.OPTempBan)) { PlayerMenu.AddItem(tempBanBtn); } if (cf.IsAllowed(Permission.OPPermBan)) { PlayerMenu.AddItem(permBanBtn); } // Add the player menu to the menu pool. MainMenu.Mp.Add(PlayerMenu); // Set the menu invisible. menu.Visible = false; // Set the player menu visible. PlayerMenu.Visible = true; // If a button is pressed in the player's options menu. PlayerMenu.OnItemSelect += (sender2, item2, index2) => { // Teleport button is pressed. if (item2 == teleportBtn) { cf.TeleportToPlayerAsync(player.Handle, false); } // Teleport in vehicle button is pressed. else if (item2 == teleportInVehBtn) { cf.TeleportToPlayerAsync(player.Handle, true); } // Set waypoint button is pressed. else if (item2 == setWaypointBtn) { World.WaypointPosition = GetEntityCoords(GetPlayerPed(player.Handle), true); //Subtitle.Info($"A new waypoint has been set to ~y~{player.Name}~z~.", prefix: "Info:"); } // Spectate player button is pressed. else if (item2 == spectateBtn) { if (player.Handle == PlayerId()) { //Subtitle.Error("You can ~h~not~h~ spectate yourself!", prefix: "Error:"); Notify.Error("Sorry, you can ~r~~h~not~h~ ~s~spectate yourself!"); } else { cf.SpectateAsync(player.Handle); } } // Summon player button is pressed. else if (item2 == summonBtn) { if (player.Handle == PlayerId()) { Notify.Error("Sorry, you can ~r~~h~not~h~ ~s~summon yourself!"); } else { cf.SummonPlayer(player); } } // Kill player button is pressed. else if (item2 == killBtn) { //Subtitle.Info($"~y~{player.Name} ~z~has been killed.", prefix: "Info:"); Notify.Success($"Player ~y~<C>{player.Name}</C> ~s~has been killed."); cf.KillPlayer(player); } // Kick player button is pressed. else if (item2 == kickPlayerBtn) { // Close the menu. PlayerMenu.GoBack(); // Kick the player. cf.KickPlayer(player, true); // Update the player list. UpdatePlayerlist(); // Refresh the index & update scaleform. menu.RefreshIndex(); menu.UpdateScaleform(); } else if (item2 == tempBanBtn) { cf.BanPlayer(player: player, forever: false); } else if (item2 == permBanBtn) { cf.BanPlayer(player: player, forever: true); } }; // Reopen the playerlist menu when a player specific menu is closed. PlayerMenu.OnMenuClose += (sender2) => { menu.Visible = true; }; } }; } ; }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { // Create the menu. menu = new UIMenu("BigFam Crew", "Misc Settings", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenu teleportMenu = new UIMenu("BigFam Crew", "Teleport Locations", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenuItem teleportMenuBtn = new UIMenuItem("Teleport Locations", "Teleport to pre-configured locations, added by the server owner."); menu.BindMenuToItem(teleportMenu, teleportMenuBtn); MainMenu.Mp.Add(teleportMenu); // Create the menu items. UIMenuItem tptowp = new UIMenuItem("Teleport To Waypoint", "Teleport to the waypoint on your map."); UIMenuCheckboxItem speedKmh = new UIMenuCheckboxItem("Show Speed KM/H", ShowSpeedoKmh, "Show a speedometer on your screen indicating your speed in KM/h."); UIMenuCheckboxItem speedMph = new UIMenuCheckboxItem("Show Speed MPH", ShowSpeedoMph, "Show a speedometer on your screen indicating your speed in MPH."); UIMenuCheckboxItem coords = new UIMenuCheckboxItem("Show Coordinates", ShowCoordinates, "Show your current coordinates at the top of your screen."); UIMenuCheckboxItem hideRadar = new UIMenuCheckboxItem("Hide Radar", HideRadar, "Hide the radar/minimap."); UIMenuCheckboxItem hideHud = new UIMenuCheckboxItem("Hide Hud", HideHud, "Hide all hud elements."); UIMenuCheckboxItem showLocation = new UIMenuCheckboxItem("Location Display", ShowLocation, "Shows your current location and heading, as well as the nearest cross road. Just like PLD."); UIMenuItem saveSettings = new UIMenuItem("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."); saveSettings.SetRightBadge(UIMenuItem.BadgeStyle.Tick); UIMenuCheckboxItem joinQuitNotifs = new UIMenuCheckboxItem("Join / Quit Notifications", JoinQuitNotifications, "Receive notifications when someone joins or leaves the server."); UIMenuCheckboxItem deathNotifs = new UIMenuCheckboxItem("Death Notifications", DeathNotifications, "Receive notifications when someone dies or gets killed."); UIMenuCheckboxItem nightVision = new UIMenuCheckboxItem("Toggle Night Vision", false, "Enable or disable night vision."); UIMenuCheckboxItem thermalVision = new UIMenuCheckboxItem("Toggle Thermal Vision", false, "Enable or disable thermal vision."); UIMenuItem clearArea = new UIMenuItem("Clear Area", "Clears the area around your player (100 meters) of everything! Damage, dirt, peds, props, vehicles, etc. Everything gets cleaned up and reset."); UIMenuCheckboxItem lockCamX = new UIMenuCheckboxItem("Lock Camera Horizontal Rotation", false, "Locks your camera horizontal rotation. Could be useful in helicopters I guess."); UIMenuCheckboxItem lockCamY = new UIMenuCheckboxItem("Lock Camera Vertical Rotation", false, "Locks your camera vertical rotation. Could be useful in helicopters I guess."); UIMenu connectionSubmenu = new UIMenu(GetPlayerName(PlayerId()), "Connection Options", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenuItem connectionSubmenuBtn = new UIMenuItem("Connection Options", "Server connection/game quit options."); UIMenuItem quitSession = new UIMenuItem("Quit Session", "Leaves you connected to the server, but quits the network session. " + "Use this if you need to have addons streamed but want to use the rockstar editor."); UIMenuItem quitGame = new UIMenuItem("Quit Game", "Exits the game after 5 seconds."); UIMenuItem disconnectFromServer = new UIMenuItem("Disconnect From Server", "Disconnects you from the server and returns you to the serverlist. " + "~r~This feature is not recommended, quit the game instead for a better experience."); connectionSubmenu.AddItem(quitSession); connectionSubmenu.AddItem(quitGame); connectionSubmenu.AddItem(disconnectFromServer); UIMenuCheckboxItem locationBlips = new UIMenuCheckboxItem("Location Blips", ShowLocationBlips, "Shows blips on the map for some common locations."); UIMenuCheckboxItem playerBlips = new UIMenuCheckboxItem("Show Player Blips", ShowPlayerBlips, "Shows blips on the map for all players."); MainMenu.Mp.Add(connectionSubmenu); connectionSubmenu.RefreshIndex(); connectionSubmenu.UpdateScaleform(); menu.BindMenuToItem(connectionSubmenu, connectionSubmenuBtn); connectionSubmenu.OnItemSelect += (sender, item, index) => { if (item == quitGame) { cf.QuitGame(); } else if (item == quitSession) { cf.QuitSession(); } else if (item == disconnectFromServer) { BaseScript.TriggerServerEvent("vMenu:DisconnectSelf"); } }; // Add menu items to the menu. if (cf.IsAllowed(Permission.MSTeleportToWp)) { menu.AddItem(tptowp); } // Always allowed // menu.AddItem(speedKmh); // menu.AddItem(speedMph); if (cf.IsAllowed(Permission.MSConnectionMenu)) { menu.AddItem(connectionSubmenuBtn); connectionSubmenuBtn.SetRightLabel("→→→"); } if (cf.IsAllowed(Permission.MSShowCoordinates)) { menu.AddItem(coords); } if (cf.IsAllowed(Permission.MSShowLocation)) { menu.AddItem(showLocation); } if (cf.IsAllowed(Permission.MSJoinQuitNotifs)) { menu.AddItem(deathNotifs); } if (cf.IsAllowed(Permission.MSDeathNotifs)) { menu.AddItem(joinQuitNotifs); } if (cf.IsAllowed(Permission.MSNightVision)) { menu.AddItem(nightVision); } if (cf.IsAllowed(Permission.MSThermalVision)) { menu.AddItem(thermalVision); } if (cf.IsAllowed(Permission.MSLocationBlips)) { menu.AddItem(locationBlips); ToggleBlips(ShowLocationBlips); } if (cf.IsAllowed(Permission.MSPlayerBlips)) { menu.AddItem(playerBlips); } if (cf.IsAllowed(Permission.MSTeleportLocations)) { menu.AddItem(teleportMenuBtn); teleportMenuBtn.SetRightLabel("→→→"); string json = LoadResourceFile(GetCurrentResourceName(), "config/locations.json"); if (string.IsNullOrEmpty(json)) { Notify.Error("An error occurred while loading the locations file."); } else { try { Newtonsoft.Json.Linq.JObject data = JsonConvert.DeserializeObject <Newtonsoft.Json.Linq.JObject>(json); foreach (Newtonsoft.Json.Linq.JToken teleport in data["teleports"]) { string name = teleport["name"].ToString(); float heading = (float)teleport["heading"]; Vector3 coordinates = new Vector3((float)teleport["coordinates"]["x"], (float)teleport["coordinates"]["y"], (float)teleport["coordinates"]["z"]); UIMenuItem tpBtn = new UIMenuItem(name, $"Teleport to X: {(int)coordinates.X} Y: {(int)coordinates.Y} Z: {(int)coordinates.Z} HEADING: {(int)heading}."); teleportMenu.AddItem(tpBtn); tpLocations.Add(coordinates); tpLocationsHeading.Add(heading); } teleportMenu.OnItemSelect += async(sender, item, index) => { await cf.TeleportToCoords(tpLocations[index], true); SetEntityHeading(PlayerPedId(), tpLocationsHeading[index]); }; } catch (JsonReaderException ex) { Debug.Write($"\n[vMenu] An error occurred whie loading the teleport locations!\nReport the following error details to the server owner:\n{ex.Message}.\n"); } } } if (cf.IsAllowed(Permission.MSClearArea)) { menu.AddItem(clearArea); } // Always allowed // menu.AddItem(hideRadar); menu.AddItem(hideHud); menu.AddItem(lockCamX); // menu.AddItem(lockCamY); menu.AddItem(saveSettings); // Handle checkbox changes. menu.OnCheckboxChange += (sender, item, _checked) => { if (item == speedKmh) { ShowSpeedoKmh = _checked; } else if (item == speedMph) { ShowSpeedoMph = _checked; } else if (item == coords) { ShowCoordinates = _checked; } else if (item == hideHud) { HideHud = _checked; } else if (item == hideRadar) { HideRadar = _checked; if (!_checked) { DisplayRadar(true); } } else if (item == showLocation) { ShowLocation = _checked; } else if (item == deathNotifs) { DeathNotifications = _checked; } else if (item == joinQuitNotifs) { JoinQuitNotifications = _checked; } else if (item == nightVision) { SetNightvision(_checked); } else if (item == thermalVision) { SetSeethrough(_checked); } else if (item == lockCamX) { LockCameraX = _checked; } else if (item == lockCamY) { LockCameraY = _checked; } else if (item == locationBlips) { ToggleBlips(_checked); ShowLocationBlips = _checked; } else if (item == playerBlips) { ShowPlayerBlips = _checked; } }; // Handle button presses. menu.OnItemSelect += (sender, item, index) => { // Teleport to waypoint. if (item == tptowp) { cf.TeleportToWp(); } // save settings else if (item == saveSettings) { UserDefaults.SaveSettings(); } // clear area else if (item == clearArea) { var pos = Game.PlayerPed.Position; ClearAreaOfEverything(pos.X, pos.Y, pos.Z, 100f, false, false, false, false); } }; }
/// <summary> /// Creates the menu. /// </summary> private void CreateMenu() { string menuTitle = "Saved Vehicles"; #region Create menus and submenus // Create the menu. menu = new UIMenu(menuTitle, "Manage Saved Vehicles", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Create submenus. UIMenu spawnSavedVehicles = new UIMenu(menuTitle, "Spawn Saved Vehicle", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; UIMenu deleteSavedVehicles = new UIMenu(menuTitle, "~r~Delete Saved Vehicle", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; #endregion #region Create, add and bind buttons to the menus. // Create menu buttons. UIMenuItem saveVeh = new UIMenuItem("Save Current Vehicle", "Save the vehicle you are currently in."); saveVeh.SetRightBadge(UIMenuItem.BadgeStyle.Tick); UIMenuItem savedVehiclesBtn = new UIMenuItem("Spawn Saved Vehicle", "Select a vehicle from your saved vehicles list."); savedVehiclesBtn.SetRightLabel("→→→"); UIMenuItem deleteSavedVehiclesBtn = new UIMenuItem("~r~Delete Saved Vehicle", "~r~Delete ~s~a saved vehicle."); deleteSavedVehiclesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Alert); deleteSavedVehiclesBtn.SetRightLabel("→→→"); // Add buttons to the menu. menu.AddItem(saveVeh); menu.AddItem(savedVehiclesBtn); menu.AddItem(deleteSavedVehiclesBtn); // Bind submenus to menu items. if (cf.IsAllowed(Permission.SVSpawn)) { menu.BindMenuToItem(spawnSavedVehicles, savedVehiclesBtn); } else { savedVehiclesBtn.Enabled = false; savedVehiclesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); savedVehiclesBtn.Description = "This option has been disabled by the server owner."; } menu.BindMenuToItem(deleteSavedVehicles, deleteSavedVehiclesBtn); #endregion #region Button pressed events // Handle button presses. menu.OnItemSelect += (sender, item, index) => { // Save the current vehicle. if (item == saveVeh) { cf.SaveVehicle(); } // Open and refresh the "spawn saved vehicle from list" submenu. else if (item == savedVehiclesBtn) { // Remove all old items. spawnSavedVehicles.MenuItems.Clear(); // Get all saved vehicles. SavedVehiclesDict = cf.GetSavedVehicles(); // Loop through all saved vehicles and create a button for it, then add that button to the submenu. foreach (KeyValuePair <string, CommonFunctions.VehicleInfo> savedVehicle in SavedVehiclesDict) { //MainMenu.Cf.Log(savedVehicle.ToString()); UIMenuItem vehBtn = new UIMenuItem(savedVehicle.Key.Substring(4), "Click to spawn this saved vehicle."); vehBtn.SetRightLabel($"({savedVehicle.Value.name})"); spawnSavedVehicles.AddItem(vehBtn); if (!IsModelInCdimage(savedVehicle.Value.model)) { vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); vehBtn.Enabled = false; vehBtn.Description = "This model is not available on this server, if this is an addon vehicle or DLC vehicle, please make sure " + "that it's being streamed on this server."; } else { if (!VehicleSpawner.allowedCategories[GetVehicleClassFromName(savedVehicle.Value.model)]) { vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock); vehBtn.Enabled = false; vehBtn.Description = "This vehicle is not available on this server because you do not have permissions for this vehicle class."; } } } // Sort the menu items (case IN-sensitive) by name. spawnSavedVehicles.MenuItems.Sort((pair1, pair2) => pair1.Text.ToString().ToLower().CompareTo(pair2.Text.ToString().ToLower())); // Refresh the index of the page. spawnSavedVehicles.RefreshIndex(); // Update the scaleform. spawnSavedVehicles.UpdateScaleform(); } // Delete saved vehicle. else if (item == deleteSavedVehiclesBtn) { deleteSavedVehicles.MenuItems.Clear(); // Get the dictionary containing all saved vehicles. SavedVehiclesDict = cf.GetSavedVehicles(); // Loop through the list and add all saved vehicles to the menu. foreach (KeyValuePair <string, CommonFunctions.VehicleInfo> savedVehicle in SavedVehiclesDict) { //MainMenu.Cf.Log(savedVehicle.ToString()); UIMenuItem vehBtn = new UIMenuItem(savedVehicle.Key.Substring(4), "Are you sure you want to delete this saved vehicle? This action cannot be undone!"); vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Alert); vehBtn.SetRightLabel($"({savedVehicle.Value.name})"); deleteSavedVehicles.AddItem(vehBtn); } // Sort the menu items (case IN-sensitive) by name. deleteSavedVehicles.MenuItems.Sort((pair1, pair2) => pair1.Text.ToString().ToLower().CompareTo(pair2.Text.ToString().ToLower())); deleteSavedVehicles.RefreshIndex(); deleteSavedVehicles.UpdateScaleform(); } }; #endregion #region Handle saved vehicles being pressed. (spawning) // When a vehicle is selected... spawnSavedVehicles.OnItemSelect += (sender2, item2, index2) => { CommonFunctions.VehicleInfo vehInfo = SavedVehiclesDict["veh_" + item2.Text]; // Spawn a vehicle using the hash, and pass on the vehicleInfo dictionary containing all saved vehicle mods. if (MainMenu.VehicleSpawnerMenu != null) { cf.SpawnVehicle(vehInfo.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: vehInfo, saveName: item2.Text); } else { cf.SpawnVehicle(vehInfo.model, true, true, false, vehicleInfo: vehInfo, saveName: item2.Text); } }; // Handle vehicle deletions deleteSavedVehicles.OnItemSelect += (sender2, item2, index2) => { var vehDictName = "veh_" + item2.Text; new StorageManager().DeleteSavedStorageItem(vehDictName); deleteSavedVehicles.GoBack(); }; #endregion // Add the submenus to the menu pool. MainMenu.Mp.Add(spawnSavedVehicles); MainMenu.Mp.Add(deleteSavedVehicles); }