/// <summary> /// Set the permissions for this client. /// </summary> /// <param name="dict"></param> public static void SetPermissions(dynamic dict) { // Loop through the dynamic object and get the keys and values. foreach (dynamic permission in dict) { // Add the new permission to the dictionary. PermissionsManager.SetPermission(permission.Key.ToString(), permission.Value); } Cf.Log(JsonConvert.SerializeObject(PermissionsManager.Permissions).ToString()); //permissionsSetupDone = true; VehicleSpawner.allowedCategories = new List <bool>() { Cf.IsAllowed(Permission.VSCompacts), Cf.IsAllowed(Permission.VSSedans), Cf.IsAllowed(Permission.VSSUVs), Cf.IsAllowed(Permission.VSCoupes), Cf.IsAllowed(Permission.VSMuscle), Cf.IsAllowed(Permission.VSSportsClassic), Cf.IsAllowed(Permission.VSSports), Cf.IsAllowed(Permission.VSSuper), Cf.IsAllowed(Permission.VSMotorcycles), Cf.IsAllowed(Permission.VSOffRoad), Cf.IsAllowed(Permission.VSIndustrial), Cf.IsAllowed(Permission.VSUtility), Cf.IsAllowed(Permission.VSVans), Cf.IsAllowed(Permission.VSCycles), Cf.IsAllowed(Permission.VSBoats), Cf.IsAllowed(Permission.VSHelicopters), Cf.IsAllowed(Permission.VSPlanes), Cf.IsAllowed(Permission.VSService), Cf.IsAllowed(Permission.VSEmergency), Cf.IsAllowed(Permission.VSMilitary), Cf.IsAllowed(Permission.VSCommercial), Cf.IsAllowed(Permission.VSTrains), }; }
/// <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> /// Main OnTick task runs every game tick and handles all the menu stuff. /// </summary> /// <returns></returns> private async Task OnTick() { #region FirstTick // Only run this the first tick. if (firstTick) { firstTick = false; // Clear all previous pause menu info/brief messages on resource start. ClearBrief(); // Request the permissions data from the server. TriggerServerEvent("vMenu:RequestPermissions", PlayerId()); TriggerServerEvent("vMenu:RequestBanList", PlayerId()); // Wait until the data is received and the player's name is loaded correctly. while (!permissionsSetupDone || !optionsSetupDone || GetPlayerName(PlayerId()) == "**Invalid**" || GetPlayerName(PlayerId()) == "** Invalid **" || !addonCarsLoaded || !addonPedsLoaded || !addonWeaponsLoaded) { await Delay(0); } // Create the main menu. Menu = new UIMenu(GetPlayerName(PlayerId()), "Main Menu", true) { ScaleWithSafezone = false, MouseControlsEnabled = false, MouseEdgeEnabled = false, ControlDisablingEnabled = false }; // Add the main menu to the menu pool. Mp.Add(Menu); Menu.RefreshIndex(); Menu.UpdateScaleform(); // Create all (sub)menus. CreateSubmenus(); } #endregion // If the setup (permissions) is done, and it's not the first tick, then do this: if (permissionsSetupDone && optionsSetupDone && !firstTick) { #region Handle Opening/Closing of the menu. // If menus can be opened. if (!DontOpenMenus && !IsPauseMenuActive()) { // If the player is using Keyboard & Mouse and they pressed the M key (interaction menu button) then... if (Game.CurrentInputMode == InputMode.MouseAndKeyboard && (Game.IsControlJustPressed(0, (Control)MenuToggleKey) || Game.IsDisabledControlJustPressed(0, (Control)MenuToggleKey))) { // If any menu is already open: close all menus. if (Mp.IsAnyMenuOpen()) { Mp.CloseAllMenus(); } // Otherwise: toggle the main menu (to be safe, only open it if no other menus are open.) else { Menu.Visible = !Mp.IsAnyMenuOpen(); } } // If the player is using a controller, and no menus are currently open. else if (!Mp.IsAnyMenuOpen() && Game.CurrentInputMode == InputMode.GamePad) { // Create a timer and set it to the current game timer value. int timer = GetGameTimer(); // While (and only if) the player keeps using only the controller, and keeps holding down the interactionmenu button (select on controller). while (Game.CurrentInputMode == InputMode.GamePad && Game.IsControlPressed(0, Control.InteractionMenu)) { // If debugging is enabled, show the progress using a timerbar. if (DebugMode) { bt.Draw(0); float percent = ((GetGameTimer() - timer) / 350f); bt.Percentage = percent; } // If 900ms in real time have passed. if (GetGameTimer() - timer > 350) { Menu.Visible = !Mp.IsAnyMenuOpen(); // Break the loop (resetting the timer). break; } // Wait for the next game tick. await Delay(0); } } if (Game.CurrentInputMode == InputMode.MouseAndKeyboard) { if (Game.IsControlJustPressed(0, (Control)NoClipKey) && Cf.IsAllowed(Permission.NoClip)) { if (IsPedInAnyVehicle(PlayerPedId(), false)) { if (GetPedInVehicleSeat(Cf.GetVehicle(), -1) == PlayerPedId()) { NoClipEnabled = !Mp.IsAnyMenuOpen(); } else { NoClipEnabled = false; Notify.Error("You need to be the driver of this vehicle to enable noclip!"); } } else { NoClipEnabled = !Mp.IsAnyMenuOpen(); } } } } // If the pause menu is active or all menus should be closed, close all menus. else { await Delay(1); Mp.CloseAllMenus(); } #endregion // Menu toggle button. Game.DisableControlThisFrame(0, (Control)MenuToggleKey); #region Disable Inputs when any menu is open. if (Mp.IsAnyMenuOpen()) { // Close all menus when the player dies. if (Game.PlayerPed.IsDead) { Mp.CloseAllMenus(); } // Disable Gamepad/Controller Specific controls: if (Game.CurrentInputMode == InputMode.GamePad) { Game.DisableControlThisFrame(0, Control.MultiplayerInfo); // when in a vehicle. if (IsPedInAnyVehicle(PlayerPedId(), false)) { Game.DisableControlThisFrame(0, Control.VehicleHeadlight); Game.DisableControlThisFrame(0, Control.VehicleDuck); } } // Disable Shared Controls // Radio Inputs Game.DisableControlThisFrame(0, Control.RadioWheelLeftRight); Game.DisableControlThisFrame(0, Control.RadioWheelUpDown); Game.DisableControlThisFrame(0, Control.VehicleNextRadio); Game.DisableControlThisFrame(0, Control.VehicleRadioWheel); Game.DisableControlThisFrame(0, Control.VehiclePrevRadio); // Phone / Arrows Inputs Game.DisableControlThisFrame(0, Control.Phone); Game.DisableControlThisFrame(0, Control.PhoneCancel); Game.DisableControlThisFrame(0, Control.PhoneDown); Game.DisableControlThisFrame(0, Control.PhoneLeft); Game.DisableControlThisFrame(0, Control.PhoneRight); // Attack Controls Game.DisableControlThisFrame(0, Control.Attack); Game.DisableControlThisFrame(0, Control.Attack2); Game.DisableControlThisFrame(0, Control.MeleeAttack1); Game.DisableControlThisFrame(0, Control.MeleeAttack2); Game.DisableControlThisFrame(0, Control.MeleeAttackAlternate); Game.DisableControlThisFrame(0, Control.MeleeAttackHeavy); Game.DisableControlThisFrame(0, Control.MeleeAttackLight); Game.DisableControlThisFrame(0, Control.VehicleAttack); Game.DisableControlThisFrame(0, Control.VehicleAttack2); Game.DisableControlThisFrame(0, Control.VehicleFlyAttack); Game.DisableControlThisFrame(0, Control.VehiclePassengerAttack); Game.DisableControlThisFrame(0, Control.Aim); // When in a vehicle if (IsPedInAnyVehicle(PlayerPedId(), false)) { Game.DisableControlThisFrame(0, Control.VehicleSelectNextWeapon); Game.DisableControlThisFrame(0, Control.VehicleSelectPrevWeapon); Game.DisableControlThisFrame(0, Control.VehicleCinCam); } } #endregion // Process the menu. Draw it and reset the menu width offset to make sure any newly generated menus always have the right width offset. Mp.WidthOffset = 50; if (Mp.IsAnyMenuOpen()) { Mp.Draw(); } } }
/// <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(); } }; } if (Cf.IsAllowed(Permission.OPUnban)) { //TriggerServerEvent("vMenu:RequestBanList", PlayerId()); BannedPlayersMenu = new BannedPlayers(); UIMenu menu = BannedPlayersMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Banned Players", "View and manage all banned players in this menu."); button.SetRightLabel("→→→"); AddMenu(menu, button); Menu.OnItemSelect += (sender, item, index) => { if (item == button) { TriggerServerEvent("vMenu:RequestBanList", PlayerId()); 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) && GetSettingsBool(Setting.vmenu_enable_time_sync)) { 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) && GetSettingsBool(Setting.vmenu_enable_weather_sync)) { 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 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); } { RecordingMenu = new Recording(); UIMenu menu = RecordingMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Recording Options", "In-game recording options."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add misc settings menu. //if (Cf.IsAllowed(Permission.MSMenu)) // removed the permissions check, because the misc menu should've never been restricted in the first place. // not sure why I even added this before... saving of preferences and similar functions should always be allowed. // no matter what. { MiscSettingsMenu = new MiscSettings(); UIMenu menu = MiscSettingsMenu.GetMenu(); UIMenuItem button = new UIMenuItem("Misc Settings", "Miscellaneous vMenu options/settings can be configured here. You can also save your settings in this menu."); button.SetRightLabel("→→→"); AddMenu(menu, button); } // Add About Menu. AboutMenu = new About(); UIMenu sub = AboutMenu.GetMenu(); UIMenuItem btn = new UIMenuItem("About vMenu", "Information about vMenu."); 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; if (!GetSettingsBool(Setting.vmenu_use_permissions)) { Notify.Info("vMenu is set up to ignore permissions."); } }