108 lines
		
	
	
		
			No EOL
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			No EOL
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local QBCore = exports['qb-core']:GetCoreObject()
 | 
						|
 | 
						|
local anchoredBoats = {}
 | 
						|
local radial = Config.RadialMenu
 | 
						|
local command = Config.Command
 | 
						|
local progress = Config.Progressbar
 | 
						|
local notify = Config.Notify
 | 
						|
local xsound = false
 | 
						|
local radialMenu = false
 | 
						|
local anchorMenu = {
 | 
						|
  id = 'toggle_anchor',
 | 
						|
  title = radial.dropAnchorText,
 | 
						|
  icon = radial.dropAnchorIcon,
 | 
						|
  type = 'client',
 | 
						|
  event = 'sg-boatanchor:client:ToggleAnchor',
 | 
						|
  shouldClose = true,
 | 
						|
}
 | 
						|
 | 
						|
local function rebuildMenu(anchored)
 | 
						|
  exports['qb-radialmenu']:RemoveOption(23)
 | 
						|
  anchorMenu.icon = anchored and radial.raiseAnchorIcon or radial.dropAnchorIcon
 | 
						|
  anchorMenu.title = anchored and radial.raiseAnchorText or radial.dropAnchorText
 | 
						|
  Wait(500)
 | 
						|
  exports['qb-radialmenu']:AddOption(anchorMenu, 23)
 | 
						|
end
 | 
						|
 | 
						|
-- Register Key
 | 
						|
RegisterKeyMapping(command.name, command.label, 'keyboard', command.key)
 | 
						|
RegisterCommand(command.name, function()
 | 
						|
    if IsPedInAnyBoat(PlayerPedId(), false) then
 | 
						|
        TriggerEvent("sg-boatanchor:client:ToggleAnchor")
 | 
						|
    end
 | 
						|
end, false)
 | 
						|
 | 
						|
-- Events
 | 
						|
RegisterNetEvent('sg-boatanchor:client:setAnchoredBoats', function(serverAnchoredBoats)
 | 
						|
  anchoredBoats = serverAnchoredBoats
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent('sg-boatanchor:client:ToggleAnchor', function()
 | 
						|
  local ped = PlayerPedId()
 | 
						|
  local boat = GetVehiclePedIsIn(ped)
 | 
						|
  if boat then
 | 
						|
    local boatNetId = VehToNet(boat)
 | 
						|
    -- Get current anchored status
 | 
						|
    local boatAnchored = anchoredBoats[boatNetId]
 | 
						|
    local currentAnchored = boatAnchored and boatAnchored.anchored
 | 
						|
    -- Toggle to get new status
 | 
						|
    local newAnchored = not currentAnchored
 | 
						|
    -- Messages based on new status
 | 
						|
    local pMessage = newAnchored and progress.dropLabel or progress.raiseLabel
 | 
						|
    local nMessage = newAnchored and notify.droppedAnchor or notify.raisedAnchor
 | 
						|
    local sound = newAnchored and "anchordown" or "anchorup"
 | 
						|
    -- Anchor toggle logic
 | 
						|
    if xsound then
 | 
						|
      TriggerServerEvent("InteractSound_SV:PlayWithinDistance", 10, sound, 0.6)
 | 
						|
    end
 | 
						|
    QBCore.Functions.Progressbar("toggleanchor", pMessage, progress.time, false, true, {
 | 
						|
      disableMovement = false,
 | 
						|
      disableCarMovement = true,
 | 
						|
      disableMouse = false,  
 | 
						|
      disableCombat = true
 | 
						|
    }, {}, {}, {}, function() -- Done
 | 
						|
      QBCore.Functions.Notify(nMessage, "success")
 | 
						|
      if radial.enable then
 | 
						|
        rebuildMenu(newAnchored)
 | 
						|
      end
 | 
						|
      SetBoatAnchor(boat, newAnchored)
 | 
						|
      SetBoatFrozenWhenAnchored(boat, newAnchored)
 | 
						|
      TriggerServerEvent('sg-boatanchor:server:setAnchor', boatNetId, newAnchored)
 | 
						|
    end, function() -- Cancel
 | 
						|
      QBCore.Functions.Notify(notify.cancel, "error", 5000)
 | 
						|
    end)
 | 
						|
  end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent('QBCore:Client:EnteredVehicle', function()
 | 
						|
  local ped = PlayerPedId()
 | 
						|
  local boat = GetVehiclePedIsIn(ped)
 | 
						|
  if IsPedInAnyBoat(ped) then
 | 
						|
    local boatNetId = VehToNet(boat)
 | 
						|
    if anchoredBoats[boatNetId] and anchoredBoats[boatNetId].anchored then
 | 
						|
      local anchored = anchoredBoats[boatNetId].anchored
 | 
						|
      if radial.enable then
 | 
						|
        rebuildMenu(anchored)
 | 
						|
      end
 | 
						|
      SetBoatAnchor(boat, anchored)
 | 
						|
      SetBoatFrozenWhenAnchored(boat, anchored)
 | 
						|
    end
 | 
						|
    exports['qb-radialmenu']:AddOption(anchorMenu, 23)
 | 
						|
    radialMenu = true
 | 
						|
  end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent('QBCore:Client:LeftVehicle', function()
 | 
						|
  if radial.enable then
 | 
						|
    if radialMenu then
 | 
						|
      exports['qb-radialmenu']:RemoveOption(23)
 | 
						|
      radialMenu = false
 | 
						|
    end
 | 
						|
  end
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
 | 
						|
  if GetResourceState('xsound') == 'started' then
 | 
						|
    xsound = true
 | 
						|
  end
 | 
						|
end) |