diff --git a/client/main.lua b/client/main.lua index 56be6d33..c168ba6e 100644 --- a/client/main.lua +++ b/client/main.lua @@ -343,7 +343,6 @@ end function OpenVehicleSpawnerMenu(station, partNum) - local vehicles = Config.PoliceStations[station].Vehicles ESX.UI.Menu.CloseAll() if Config.EnableSocietyOwnedVehicles then @@ -353,7 +352,10 @@ function OpenVehicleSpawnerMenu(station, partNum) ESX.TriggerServerCallback('esx_society:getVehiclesInGarage', function(garageVehicles) for i=1, #garageVehicles, 1 do - table.insert(elements, {label = GetDisplayNameFromVehicleModel(garageVehicles[i].model) .. ' [' .. garageVehicles[i].plate .. ']', value = garageVehicles[i]}) + table.insert(elements, { + label = GetDisplayNameFromVehicleModel(garageVehicles[i].model) .. ' [' .. garageVehicles[i].plate .. ']', + value = garageVehicles[i] + }) end ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'vehicle_spawner', @@ -365,14 +367,16 @@ function OpenVehicleSpawnerMenu(station, partNum) menu.close() local vehicleProps = data.current.value + local foundSpawnPoint, spawnPoint = GetAvailableVehicleSpawnPoint(station, partNum) - ESX.Game.SpawnVehicle(vehicleProps.model, vehicles[partNum].SpawnPoint, vehicles[partNum].Heading, function(vehicle) - ESX.Game.SetVehicleProperties(vehicle, vehicleProps) - local playerPed = PlayerPedId() - TaskWarpPedIntoVehicle(playerPed, vehicle, -1) - end) + if foundSpawnPoint then + ESX.Game.SpawnVehicle(vehicleProps.model, spawnPoint, spawnPoint.heading, function(vehicle) + ESX.Game.SetVehicleProperties(vehicle, vehicleProps) + TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, -1) + end) - TriggerServerEvent('esx_society:removeVehicleFromGarage', 'police', vehicleProps) + TriggerServerEvent('esx_society:removeVehicleFromGarage', 'police', vehicleProps) + end end, function(data, menu) menu.close() @@ -405,36 +409,29 @@ function OpenVehicleSpawnerMenu(station, partNum) }, function(data, menu) menu.close() - local model = data.current.model - local vehicle = GetClosestVehicle(vehicles[partNum].SpawnPoint.x, vehicles[partNum].SpawnPoint.y, vehicles[partNum].SpawnPoint.z, 3.0, 0, 71) - - if not DoesEntityExist(vehicle) then - - local playerPed = PlayerPedId() + local foundSpawnPoint, spawnPoint = GetAvailableVehicleSpawnPoint(station, partNum) + if foundSpawnPoint then if Config.MaxInService == -1 then - - ESX.Game.SpawnVehicle(model, vehicles[partNum].SpawnPoint, vehicles[partNum].Heading, function(vehicle) - TaskWarpPedIntoVehicle(playerPed, vehicle, -1) + ESX.Game.SpawnVehicle(data.current.model, spawnPoint, spawnPoint.heading, function(vehicle) + TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, -1) SetVehicleMaxMods(vehicle) end) else ESX.TriggerServerCallback('esx_service:isInService', function(isInService) - if isInService then - ESX.Game.SpawnVehicle(model, vehicles[partNum].SpawnPoint, vehicles[partNum].Heading, function(vehicle) - TaskWarpPedIntoVehicle(playerPed, vehicle, -1) + if isInService then + ESX.Game.SpawnVehicle(data.current.model, spawnPoint, spawnPoint.heading, function(vehicle) + TaskWarpPedIntoVehicle(PlayerPedId(), vehicle, -1) SetVehicleMaxMods(vehicle) end) else ESX.ShowNotification(_U('service_not')) end + end, 'police') end - - else - ESX.ShowNotification(_U('vehicle_out')) end end, function(data, menu) @@ -448,11 +445,29 @@ function OpenVehicleSpawnerMenu(station, partNum) end end +function GetAvailableVehicleSpawnPoint(station, partNum) + local spawnPoints = Config.PoliceStations[station].Vehicles[partNum].SpawnPoints + local found, foundSpawnPoint = false, nil + + for i=1, #spawnPoints, 1 do + if ESX.Game.IsSpawnPointClear(spawnPoints[i], spawnPoints[i].radius) then + found, foundSpawnPoint = true, spawnPoints[i] + break + end + end + + if found then + return true, foundSpawnPoint + else + ESX.ShowNotification(_U('vehicle_blocked')) + return false + end +end + function OpenPoliceActionsMenu() ESX.UI.Menu.CloseAll() - ESX.UI.Menu.Open( - 'default', GetCurrentResourceName(), 'police_actions', + ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'police_actions', { title = 'Police', align = 'top-left', @@ -599,8 +614,7 @@ function OpenPoliceActionsMenu() end, function(data2, menu2) menu2.close() - end - ) + end) elseif data.current.value == 'object_spawner' then ESX.UI.Menu.Open( @@ -776,10 +790,10 @@ function OpenBodySearchMenu(player) for i=1, #data.inventory, 1 do if data.inventory[i].count > 0 then table.insert(elements, { - label = _U('confiscate_inv', data.inventory[i].count, data.inventory[i].label), - value = data.inventory[i].name, - itemType = 'item_standard', - amount = data.inventory[i].count + label = _U('confiscate_inv', data.inventory[i].count, data.inventory[i].label), + value = data.inventory[i].name, + itemType = 'item_standard', + amount = data.inventory[i].count }) end end @@ -916,14 +930,12 @@ function ShowPlayerLicense(player) targetName = data.name end - ESX.UI.Menu.Open( - 'default', GetCurrentResourceName(), 'manage_license', + ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'manage_license', { title = _U('license_revoke'), align = 'top-left', elements = elements, - }, - function(data, menu) + }, function(data, menu) ESX.ShowNotification(_U('licence_you_revoked', data.current.label, targetName)) TriggerServerEvent('esx_policejob:message', GetPlayerServerId(player), _U('license_revoked', data.current.label)) @@ -932,17 +944,14 @@ function ShowPlayerLicense(player) ESX.SetTimeout(300, function() ShowPlayerLicense(player) end) - end, - function(data, menu) + end, function(data, menu) menu.close() - end - ) + end) end, GetPlayerServerId(player)) end function OpenUnpaidBillsMenu(player) - local elements = {} ESX.TriggerServerCallback('esx_billing:getTargetBills', function(bills) @@ -1649,13 +1658,6 @@ Citizen.CreateThread(function() currentPart = 'VehicleSpawner' currentPartNum = i end - - if GetDistanceBetweenCoords(coords, v.Vehicles[i].SpawnPoint.x, v.Vehicles[i].SpawnPoint.y, v.Vehicles[i].SpawnPoint.z, true) < Config.MarkerSize.x then - isInMarker = true - currentStation = k - currentPart = 'VehicleSpawnPoint' - currentPartNum = i - end end for i=1, #v.Helicopters, 1 do @@ -1665,13 +1667,6 @@ Citizen.CreateThread(function() currentPart = 'HelicopterSpawner' currentPartNum = i end - - if GetDistanceBetweenCoords(coords, v.Helicopters[i].SpawnPoint.x, v.Helicopters[i].SpawnPoint.y, v.Helicopters[i].SpawnPoint.z, true) < Config.MarkerSize.x then - isInMarker = true - currentStation = k - currentPart = 'HelicopterSpawnPoint' - currentPartNum = i - end end for i=1, #v.VehicleDeleters, 1 do diff --git a/config.lua b/config.lua index 65bd9f69..3a6c0340 100644 --- a/config.lua +++ b/config.lua @@ -57,15 +57,21 @@ Config.PoliceStations = { Vehicles = { { - Spawner = { x = 454.69, y = -1017.4, z = 27.430 }, - SpawnPoint = { x = 438.42, y = -1018.3, z = 27.757 }, - Heading = 90.0 + Spawner = { x = 454.69, y = -1017.40, z = 27.43 }, + SpawnPoints = { + { x = 438.42, y = -1018.30, z = 27.75, heading = 90.0, radius = 6.0 }, + { x = 441.08, y = -1024.23, z = 28.30, heading = 90.0, radius = 6.0 }, + { x = 453.53, y = -1022.20, z = 28.02, heading = 90.0, radius = 6.0 }, + { x = 450.97, y = -1016.55, z = 28.10, heading = 90.0, radius = 6.0 } + } }, { Spawner = { x = 473.38, y = -1018.43, z = 27.00 }, - SpawnPoint = { x = 475.98, y = -1021.65, z = 28.06 }, - Heading = 276.11 + SpawnPoints = { + { x = 475.98, y = -1021.65, z = 28.06, heading = 276.11, radius = 6.0 }, + { x = 484.10, y = -1023.19, z = 27.57, heading = 302.54, radius = 6.0 } + } } }, diff --git a/locales/br.lua b/locales/br.lua index fe29aeb0..ad5bd3b6 100644 --- a/locales/br.lua +++ b/locales/br.lua @@ -17,7 +17,7 @@ Locales['br'] = { ['open_armory'] = 'Pressione ~INPUT_CONTEXT~ para acessar o arsenal', -- Vehicles ['vehicle_menu'] = 'Veículo', - ['vehicle_out'] = 'Já existe um carro fora da garagem', + ['vehicle_blocked'] = 'Já existe um carro fora da garagem', ['vehicle_spawner'] = 'Pressione ~INPUT_CONTEXT~ para escolher um veículo', ['store_vehicle'] = 'Pressione ~INPUT_CONTEXT~ para guardar o veículo', -- Service diff --git a/locales/de.lua b/locales/de.lua index 7aac4c49..ff73fbef 100644 --- a/locales/de.lua +++ b/locales/de.lua @@ -17,7 +17,7 @@ Locales['de'] = { ['open_armory'] = 'Drücke ~INPUT_CONTEXT~ um die Waffenkammer zu öffnen', -- Vehicles ['vehicle_menu'] = 'Fahrzeug', - ['vehicle_out'] = 'es ist bereits ein Fahrzeug draussen', + ['vehicle_blocked'] = 'es ist bereits ein Fahrzeug draussen', ['vehicle_spawner'] = 'Drücke ~INPUT_CONTEXT~ um ein Fahrzeug zu holen', ['store_vehicle'] = 'Drücke ~INPUT_CONTEXT~ um das Fahrzeug zu parken', -- Service diff --git a/locales/en.lua b/locales/en.lua index 33011c7f..e125d5dc 100644 --- a/locales/en.lua +++ b/locales/en.lua @@ -17,7 +17,7 @@ Locales['en'] = { ['open_armory'] = 'press ~INPUT_CONTEXT~ to access the armory', -- Vehicles ['vehicle_menu'] = 'vehicle', - ['vehicle_out'] = 'there is already a car out of the garage', + ['vehicle_blocked'] = 'all available spawn points are currently blocked!', ['vehicle_spawner'] = 'press ~INPUT_CONTEXT~ to take out a vehicle', ['store_vehicle'] = 'press ~INPUT_CONTEXT~ to store the vehicle', -- Service diff --git a/locales/es.lua b/locales/es.lua index fefabc68..edae9fec 100644 --- a/locales/es.lua +++ b/locales/es.lua @@ -17,7 +17,7 @@ Locales['es'] = { ['open_armory'] = 'Presionarr ~INPUT_CONTEXT~ para acceder a la armeria', -- Vehicles ['vehicle_menu'] = 'Vehículo', - ['vehicle_out'] = 'Ya tienes un vehículo fuera', + ['vehicle_blocked'] = 'Ya tienes un vehículo fuera', ['vehicle_spawner'] = 'Presionar ~INPUT_CONTEXT~ para sacar un vehículo', ['store_vehicle'] = 'Presionar ~INPUT_CONTEXT~ para guardar un vehículo', -- Service diff --git a/locales/fi.lua b/locales/fi.lua index 46d30bb1..f7575835 100644 --- a/locales/fi.lua +++ b/locales/fi.lua @@ -17,7 +17,7 @@ Locales['fi'] = { ['open_armory'] = 'paina ~INPUT_CONTEXT~ avataksesi asevarasto', -- Vehicles ['vehicle_menu'] = 'ajoneuvo', - ['vehicle_out'] = 'ajoneuvo on jo ulkona tallista', + ['vehicle_blocked'] = 'ajoneuvo on jo ulkona tallista', ['vehicle_spawner'] = 'paina ~INPUT_CONTEXT~ ottaaksesi auton ulos', ['store_vehicle'] = 'paina ~INPUT_CONTEXT~ laittaaksesi auto talliin', -- Service diff --git a/locales/fr.lua b/locales/fr.lua index d0aca5d9..47ff1b5e 100644 --- a/locales/fr.lua +++ b/locales/fr.lua @@ -17,7 +17,7 @@ Locales['fr'] = { ['open_armory'] = 'appuyez sur ~INPUT_CONTEXT~ pour accéder à l\'armurerie', -- Vehicles ['vehicle_menu'] = 'véhicule', - ['vehicle_out'] = 'il y a déja un véhicule de sorti', + ['vehicle_blocked'] = 'il y a déja un véhicule de sorti', ['vehicle_spawner'] = 'appuyez sur ~INPUT_CONTEXT~ pour sortir un véhicule', ['store_vehicle'] = 'appuyez sur ~INPUT_CONTEXT~ pour ranger le véhicule', -- Service diff --git a/locales/pl.lua b/locales/pl.lua index 5c71a150..3f3b2a69 100644 --- a/locales/pl.lua +++ b/locales/pl.lua @@ -17,7 +17,7 @@ Locales['pl'] = { ['open_armory'] = 'naciśnij ~INPUT_CONTEXT~ żeby uzyskać dostęp do zbrojowni', -- Vehicles ['vehicle_menu'] = 'pojazdy', - ['vehicle_out'] = 'masz już pojazd poza garażem', + ['vehicle_blocked'] = 'masz już pojazd poza garażem', ['vehicle_spawner'] = 'naciśnij ~INPUT_CONTEXT~ żeby wziąć pojazd', ['store_vehicle'] = 'naciśnij ~INPUT_CONTEXT~ żeby przechować pojazd', -- Service diff --git a/locales/sv.lua b/locales/sv.lua index d553918c..f57c25d2 100644 --- a/locales/sv.lua +++ b/locales/sv.lua @@ -17,7 +17,7 @@ Locales['sv'] = { ['open_armory'] = 'tryck ~INPUT_CONTEXT~ för att komma åt förrådet', -- Vehicles ['vehicle_menu'] = 'bilar', - ['vehicle_out'] = 'det finns redan en bil ute!', + ['vehicle_blocked'] = 'alla tillgänliga spawn points är blockerade!', ['vehicle_spawner'] = 'tryck ~INPUT_CONTEXT~ för att ta ut en bil', ['store_vehicle'] = 'tryck ~INPUT_CONTEXT~ för att parkera bilen', -- Service