forked from Simnation/Main
185 lines
No EOL
6.6 KiB
Lua
185 lines
No EOL
6.6 KiB
Lua
local trackedVehicles = {}
|
|
|
|
lib.locale()
|
|
|
|
-- Functions
|
|
local function uiNotify(description, nType)
|
|
lib.notify({description = description, type = nType, position = 'center-right', iconAnimation = 'bounce', duration = 7000})
|
|
end
|
|
|
|
local function uiProgressBar(duration, label, anim, prop)
|
|
return lib.progressBar({
|
|
duration = duration,
|
|
label = label,
|
|
useWhileDead = false,
|
|
canCancel = true,
|
|
disable = { car = true, move = true, combat = true },
|
|
anim = anim,
|
|
prop = prop
|
|
})
|
|
end
|
|
|
|
local function playSound(audioName, audioDict)
|
|
local soundId = GetSoundId()
|
|
PlaySoundFrontend(soundId, audioName, audioDict, false)
|
|
SetTimeout(3000, function()
|
|
StopSound(soundId)
|
|
ReleaseSoundId(soundId)
|
|
end)
|
|
end
|
|
|
|
-- Events
|
|
RegisterNetEvent('qb_vehicle_tracker:client:manageTracker', function(serialNumber)
|
|
lib.registerContext({
|
|
id = 'vt_menu',
|
|
title = locale('vt_menu_header'),
|
|
options = {
|
|
{
|
|
title = locale('vt_menu_check_location'),
|
|
event = 'qb_vehicle_tracker:client:locateTracker',
|
|
icon = 'eye',
|
|
args = serialNumber
|
|
}
|
|
}
|
|
})
|
|
|
|
if uiProgressBar(2000, locale('vt_pb_connecting'), {
|
|
dict = 'amb@code_human_in_bus_passenger_idles@female@tablet@base',
|
|
clip = 'base'
|
|
}, {
|
|
model = `prop_cs_tablet`,
|
|
pos = vec3(0.03, 0.002, -0.0),
|
|
rot = vec3(10.0, 160.0, 0.0)
|
|
}) then lib.showContext('vt_menu') else uiNotify(locale('vt_pb_cancelled'), 'error') end
|
|
end)
|
|
|
|
RegisterNetEvent('qb_vehicle_tracker:client:scanTracker', function(slot)
|
|
local vehicle = lib.getClosestVehicle(GetEntityCoords(cache.ped), 3.0, true)
|
|
if vehicle == nil or not DoesEntityExist(vehicle) then uiNotify(locale('vt_no_vehicle_nearby'), 'error') return end
|
|
|
|
if uiProgressBar(6000, locale('vt_pb_scanning'), {
|
|
dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
|
|
clip = 'machinic_loop_mechandplayer',
|
|
flag = 1
|
|
}, {
|
|
model = `w_am_digiscanner`,
|
|
pos = vec3(0.06, 0.03, -0.1),
|
|
rot = vec3(10.0, 190.0, 0.0)
|
|
}) then
|
|
lib.callback('qb_vehicle_tracker:isVehicleTracked', false, function(veh)
|
|
if veh == nil then uiNotify(locale('vt_no_tracker'), 'info') return end
|
|
|
|
playSound('TIMER_STOP', 'HUD_MINI_GAME_SOUNDSET')
|
|
|
|
local alert = lib.alertDialog({
|
|
header = locale('vt_alert_title'),
|
|
content = locale('vt_alert_description'),
|
|
centered = true,
|
|
cancel = true
|
|
})
|
|
|
|
if alert == 'confirm' then
|
|
TriggerEvent('qb_vehicle_tracker:client:removeTracker', slot)
|
|
end
|
|
end, GetVehicleNumberPlateText(vehicle))
|
|
else
|
|
uiNotify(locale('vt_pb_cancelled'), 'error')
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb_vehicle_tracker:client:placeTracker', function(slot, serialNumber)
|
|
local vehicle = lib.getClosestVehicle(GetEntityCoords(cache.ped), 2.5, true)
|
|
if vehicle == nil or not DoesEntityExist(vehicle) then uiNotify(locale('vt_no_vehicle_nearby'), 'error') return end
|
|
|
|
if uiProgressBar(6000, locale('vt_pb_placing'), {
|
|
dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
|
|
clip = 'machinic_loop_mechandplayer',
|
|
flag = 1
|
|
}, {
|
|
model = `prop_prototype_minibomb`,
|
|
pos = vec3(0.1, 0.03, -0.0),
|
|
rot = vec3(10.0, 160.0, 0.0)
|
|
}) then
|
|
lib.callback('qb_vehicle_tracker:placeTracker', false, function(success)
|
|
if not success then return end
|
|
playSound('Hack_Success', 'DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS')
|
|
uiNotify(locale('vt_placed_success'), 'success')
|
|
end, GetVehicleNumberPlateText(vehicle), slot, serialNumber)
|
|
else
|
|
uiNotify(locale('vt_pb_cancelled'), 'error')
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('qb_vehicle_tracker:client:removeTracker', function(slot)
|
|
local vehicle = lib.getClosestVehicle(GetEntityCoords(cache.ped), 3.0, true)
|
|
if vehicle == nil or not DoesEntityExist(vehicle) then uiNotify(locale('vt_no_vehicle_nearby'), 'error') return end
|
|
|
|
local vehPlate = GetVehicleNumberPlateText(vehicle)
|
|
|
|
lib.callback('qb_vehicle_tracker:isVehicleTracked', false, function(veh)
|
|
if veh == nil then return uiNotify(locale('vt_no_tracker'), 'info') end
|
|
if uiProgressBar(6000, locale('vt_pb_removing'), {
|
|
dict = 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@',
|
|
clip = 'machinic_loop_mechandplayer',
|
|
flag = 1
|
|
}, {}) then
|
|
lib.callback('qb_vehicle_tracker:removeTracker', false, function(success)
|
|
if not success then return end
|
|
|
|
if trackedVehicles[veh.serialNumber] then
|
|
RemoveBlip(trackedVehicles[veh.serialNumber])
|
|
|
|
trackedVehicles[veh.serialNumber] = nil
|
|
end
|
|
|
|
playSound('Hack_Success', 'DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS')
|
|
uiNotify(locale('vt_remove_success'), 'success')
|
|
end, vehPlate, slot)
|
|
else
|
|
uiNotify(locale('vt_pb_cancelled'), 'error')
|
|
end
|
|
end, vehPlate)
|
|
|
|
end)
|
|
|
|
RegisterNetEvent('qb_vehicle_tracker:client:locateTracker', function(serialNumber)
|
|
if serialNumber == nil then uiNotify(locale('vt_not_placed'), 'error') return end
|
|
|
|
lib.callback('qb_vehicle_tracker:getTrackedVehicleBySerial', false, function(veh, vehCoords)
|
|
if veh == nil then uiNotify(locale('vt_unable_connect'), 'error') return end
|
|
|
|
local blip = AddBlipForCoord(vehCoords.x , vehCoords.y, 0.0)
|
|
|
|
SetBlipSprite(blip, 161)
|
|
SetBlipColour(blip, 1)
|
|
SetBlipAlpha(blip, 250)
|
|
SetBlipDisplay(blip, 2)
|
|
SetBlipScale(blip, 2.5)
|
|
PulseBlip(blip)
|
|
SetBlipAsShortRange(blip, false)
|
|
BeginTextCommandSetBlipName('STRING')
|
|
AddTextComponentSubstringPlayerName('Tracker ' .. veh)
|
|
EndTextCommandSetBlipName(blip)
|
|
SetNewWaypoint(vehCoords.x , vehCoords.y)
|
|
|
|
trackedVehicles[serialNumber] = blip
|
|
|
|
playSound('10_SEC_WARNING', 'HUD_MINI_GAME_SOUNDSET')
|
|
uiNotify(locale('vt_connection_success'), 'success')
|
|
end, serialNumber)
|
|
end)
|
|
|
|
CreateThread(function()
|
|
while true do
|
|
Wait(3000)
|
|
for serialNumber, blip in pairs(trackedVehicles) do
|
|
local blipAlpha = GetBlipAlpha(blip)
|
|
if blipAlpha > 0 then
|
|
SetBlipAlpha(blip, blipAlpha - 10)
|
|
else
|
|
trackedVehicles[serialNumber] = nil
|
|
RemoveBlip(blip)
|
|
end
|
|
end
|
|
end
|
|
end) |