diff --git a/SharedClasses/PermissionsManager.cs b/SharedClasses/PermissionsManager.cs index 8cbd2b10..d613ce38 100644 --- a/SharedClasses/PermissionsManager.cs +++ b/SharedClasses/PermissionsManager.cs @@ -101,6 +101,7 @@ public enum Permission VOUnderglow, VOFlashHighbeamsOnHonk, VODisableTurbulence, + VOAnchorBoat, VOInfiniteFuel, VOFlares, VOPlaneBombs, diff --git a/vMenu/FunctionsController.cs b/vMenu/FunctionsController.cs index c160a8db..c29430d3 100644 --- a/vMenu/FunctionsController.cs +++ b/vMenu/FunctionsController.cs @@ -498,6 +498,22 @@ private async Task VehicleOptions() SetHeliTurbulenceScalar(veh.Handle, 1.0f); } } + + if (veh.Model.IsBoat) + { + if (MainMenu.VehicleOptionsMenu.AnchorBoat && IsAllowed(Permission.VOAnchorBoat) && CanAnchorBoatHere(veh.Handle)) + { + SetBoatAnchor(veh.Handle, true); + SetBoatFrozenWhenAnchored(veh.Handle, true); + SetForcedBoatLocationWhenAnchored(veh.Handle, true); + } + else + { + SetBoatAnchor(veh.Handle, false); + SetBoatFrozenWhenAnchored(veh.Handle, false); + SetForcedBoatLocationWhenAnchored(veh.Handle, false); + } + } } // Manage "no helmet" diff --git a/vMenu/UserDefaults.cs b/vMenu/UserDefaults.cs index 839d3a37..c62778a1 100644 --- a/vMenu/UserDefaults.cs +++ b/vMenu/UserDefaults.cs @@ -156,6 +156,12 @@ public static bool VehicleDisableHelicopterTurbulence set { SetSavedSettingsBool("vehicleDisableHelicopterTurbulence", value); } } + public static bool VehicleAnchorBoat + { + get { return GetSettingsBool("vehicleAnchorBoat"); } + set { SetSavedSettingsBool("vehicleAnchorBoat", value); } + } + public static bool VehicleBikeSeatbelt { get { return GetSettingsBool("vehicleBikeSeatbelt"); } @@ -636,6 +642,9 @@ public static void SaveSettings() VehicleDisableHelicopterTurbulence = MainMenu.VehicleOptionsMenu.DisableHelicopterTurbulence; prefs.Add("vehicleDisableHelicopterTurbulence", VehicleDisableHelicopterTurbulence); + VehicleAnchorBoat = MainMenu.VehicleOptionsMenu.AnchorBoat; + prefs.Add("vehicleAnchorBoat", VehicleAnchorBoat); + VehicleBikeSeatbelt = MainMenu.VehicleOptionsMenu.VehicleBikeSeatbelt; prefs.Add("vehicleBikeSeatbelt", VehicleBikeSeatbelt); } diff --git a/vMenu/menus/VehicleOptions.cs b/vMenu/menus/VehicleOptions.cs index 8c537b1d..f453ea67 100644 --- a/vMenu/menus/VehicleOptions.cs +++ b/vMenu/menus/VehicleOptions.cs @@ -47,6 +47,7 @@ public class VehicleOptions public bool FlashHighbeamsOnHonk { get; private set; } = UserDefaults.VehicleHighbeamsOnHonk; public bool DisablePlaneTurbulence { get; private set; } = UserDefaults.VehicleDisablePlaneTurbulence; public bool DisableHelicopterTurbulence { get; private set; } = UserDefaults.VehicleDisableHelicopterTurbulence; + public bool AnchorBoat { get; private set; } = UserDefaults.VehicleAnchorBoat; public bool VehicleBikeSeatbelt { get; private set; } = UserDefaults.VehicleBikeSeatbelt; public bool VehicleInfiniteFuel { get; private set; } = false; public bool VehicleShowHealth { get; private set; } = false; @@ -81,6 +82,7 @@ private void CreateMenu() var vehicleEngineAO = new MenuCheckboxItem("Engine Always On", "Keeps your vehicle engine on when you exit your vehicle.", VehicleEngineAlwaysOn); var vehicleNoTurbulence = new MenuCheckboxItem("Disable Plane Turbulence", "Disables the turbulence for all planes.", DisablePlaneTurbulence); var vehicleNoTurbulenceHeli = new MenuCheckboxItem("Disable Helicopter Turbulence", "Disables the turbulence for all helicopters.", DisableHelicopterTurbulence); + var vehicleSetAnchor = new MenuCheckboxItem("Anchor Boat", "Only works if the current vehicle is a boat and its position is valid for anchoring", AnchorBoat); var vehicleNoSiren = new MenuCheckboxItem("Disable Siren", "Disables your vehicle's siren. Only works if your vehicle actually has a siren.", VehicleNoSiren); var vehicleNoBikeHelmet = new MenuCheckboxItem("No Bike Helmet", "No longer auto-equip a helmet when getting on a bike or quad.", VehicleNoBikeHelemet); var vehicleFreeze = new MenuCheckboxItem("Freeze Vehicle", "Freeze your vehicle's position.", VehicleFrozen); @@ -354,6 +356,10 @@ private void CreateMenu() menu.AddMenuItem(vehicleNoTurbulence); menu.AddMenuItem(vehicleNoTurbulenceHeli); } + if (IsAllowed(Permission.VOAnchorBoat)) + { + menu.AddMenuItem(vehicleSetAnchor); + } if (IsAllowed(Permission.VOFlip)) // FLIP VEHICLE { menu.AddMenuItem(flipVehicle); @@ -658,6 +664,25 @@ private void CreateMenu() } } } + else if (item == vehicleSetAnchor) + { + AnchorBoat = _checked; + if (vehicle != null && vehicle.Exists() && vehicle.Model.IsBoat && CanAnchorBoatHere(vehicle.Handle)) + { + if (MainMenu.VehicleOptionsMenu.AnchorBoat) + { + SetBoatAnchor(vehicle.Handle, true); + SetBoatFrozenWhenAnchored(vehicle.Handle, true); + SetForcedBoatLocationWhenAnchored(vehicle.Handle, true); + } + else + { + SetBoatAnchor(vehicle.Handle, false); + SetBoatFrozenWhenAnchored(vehicle.Handle, false); + SetForcedBoatLocationWhenAnchored(vehicle.Handle, false); + } + } + } else if (item == vehicleNeverDirty) { VehicleNeverDirty = _checked; diff --git a/vMenuServer/config/permissions.cfg b/vMenuServer/config/permissions.cfg index 72018349..6cb752de 100644 --- a/vMenuServer/config/permissions.cfg +++ b/vMenuServer/config/permissions.cfg @@ -277,6 +277,7 @@ add_ace builtin.everyone "vMenu.VehicleOptions.All" allow #add_ace builtin.everyone "vMenu.VehicleOptions.Underglow" allow #add_ace builtin.everyone "vMenu.VehicleOptions.FlashHighbeamsOnHonk" allow #add_ace builtin.everyone "vMenu.VehicleOptions.DisableTurbulence" allow +#add_ace builtin.everyone "vMenu.VehicleOptions.AnchorBoat" allow #add_ace builtin.everyone "vMenu.VehicleOptions.InfiniteFuel" allow #add_ace builtin.everyone "vMenu.VehicleOptions.VOFlares" allow #add_ace builtin.everyone "vMenu.VehicleOptions.VOPlaneBombs" allow