1
0
Fork 0
forked from Simnation/Main
Main/resources/[carscripts]/sg-boatanchor/client/client.lua
2025-07-13 21:34:52 +02:00

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)