forked from Simnation/Main
ed
This commit is contained in:
parent
cd17b66985
commit
2ecbbdc6c4
3 changed files with 69 additions and 71 deletions
|
@ -158,7 +158,7 @@ function spawnRentalVehicle(model, spawnPoint, plate)
|
||||||
local rot = GetEntityRotation(vehicle)
|
local rot = GetEntityRotation(vehicle)
|
||||||
TriggerServerEvent('vehiclerental:server:updatePosition', plate, pos, rot)
|
TriggerServerEvent('vehiclerental:server:updatePosition', plate, pos, rot)
|
||||||
|
|
||||||
print("Neues Mietfahrzeug erstellt: " .. plate)
|
print("[VehicleRental] Neues Mietfahrzeug erstellt: " .. plate)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Fahrzeug zurückgeben
|
-- Fahrzeug zurückgeben
|
||||||
|
@ -195,6 +195,32 @@ RegisterNetEvent('vehiclerental:client:returnVehicle', function(data)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- Fahrzeug löschen (wie DV-Befehl)
|
||||||
|
function DeleteRentalVehicle(vehicle)
|
||||||
|
if DoesEntityExist(vehicle) then
|
||||||
|
-- Standard FiveM-Methode zum Löschen von Fahrzeugen (wie DV-Befehl)
|
||||||
|
SetEntityAsMissionEntity(vehicle, true, true)
|
||||||
|
DeleteEntity(vehicle)
|
||||||
|
|
||||||
|
if DoesEntityExist(vehicle) then
|
||||||
|
-- Zweiter Versuch mit DeleteVehicle
|
||||||
|
DeleteVehicle(vehicle)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Prüfe, ob das Fahrzeug wirklich gelöscht wurde
|
||||||
|
if not DoesEntityExist(vehicle) then
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
-- Letzter Versuch mit NetworkFadeOutEntity
|
||||||
|
NetworkFadeOutEntity(vehicle, true, true)
|
||||||
|
Wait(500)
|
||||||
|
DeleteEntity(vehicle)
|
||||||
|
return not DoesEntityExist(vehicle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true -- Fahrzeug existiert nicht, also gilt es als gelöscht
|
||||||
|
end
|
||||||
|
|
||||||
-- Spezifisches Fahrzeug zurückgeben
|
-- Spezifisches Fahrzeug zurückgeben
|
||||||
function returnSpecificVehicle(plate, locationId)
|
function returnSpecificVehicle(plate, locationId)
|
||||||
-- Finde die Location-Daten
|
-- Finde die Location-Daten
|
||||||
|
@ -249,23 +275,15 @@ function returnSpecificVehicle(plate, locationId)
|
||||||
-- Fahrzeug zurückgeben
|
-- Fahrzeug zurückgeben
|
||||||
QBCore.Functions.TriggerCallback('vehiclerental:server:returnVehicle', function(success)
|
QBCore.Functions.TriggerCallback('vehiclerental:server:returnVehicle', function(success)
|
||||||
if success then
|
if success then
|
||||||
-- Make sure the vehicle is properly deleted
|
-- Fahrzeug mit DV-ähnlicher Methode löschen
|
||||||
if DoesEntityExist(vehicle) then
|
if DeleteRentalVehicle(vehicle) then
|
||||||
-- First try native deletion
|
QBCore.Functions.Notify('Fahrzeug erfolgreich zurückgegeben!', 'success')
|
||||||
SetEntityAsMissionEntity(vehicle, true, true)
|
else
|
||||||
DeleteEntity(vehicle)
|
QBCore.Functions.Notify('Fahrzeug zurückgegeben, aber konnte nicht vollständig gelöscht werden.', 'warning')
|
||||||
DeleteVehicle(vehicle)
|
|
||||||
|
|
||||||
-- If AdvancedParking is available, also use its deletion method
|
|
||||||
if GetResourceState('AdvancedParking') == 'started' then
|
|
||||||
exports["AdvancedParking"]:DeleteVehicle(vehicle, false)
|
|
||||||
print("[VehicleRental] Using AdvancedParking to delete vehicle with plate: " .. plate)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Remove from local tracking
|
-- Aus lokaler Tracking-Liste entfernen
|
||||||
activeRentalVehicles[plate] = nil
|
activeRentalVehicles[plate] = nil
|
||||||
QBCore.Functions.Notify('Fahrzeug erfolgreich zurückgegeben!', 'success')
|
|
||||||
end
|
end
|
||||||
end, plate)
|
end, plate)
|
||||||
end
|
end
|
||||||
|
@ -276,7 +294,7 @@ AddEventHandler('vehiclerental:client:loadRentals', function(rentals)
|
||||||
-- Lösche alle vorhandenen Mietfahrzeuge
|
-- Lösche alle vorhandenen Mietfahrzeuge
|
||||||
for plate, vehicle in pairs(activeRentalVehicles) do
|
for plate, vehicle in pairs(activeRentalVehicles) do
|
||||||
if DoesEntityExist(vehicle) then
|
if DoesEntityExist(vehicle) then
|
||||||
DeleteVehicle(vehicle)
|
DeleteRentalVehicle(vehicle)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -323,7 +341,7 @@ AddEventHandler('vehiclerental:client:loadRentals', function(rentals)
|
||||||
-- Speichere das Fahrzeug lokal
|
-- Speichere das Fahrzeug lokal
|
||||||
activeRentalVehicles[plate] = vehicle
|
activeRentalVehicles[plate] = vehicle
|
||||||
|
|
||||||
print("Mietfahrzeug geladen: " .. plate)
|
print("[VehicleRental] Mietfahrzeug geladen: " .. plate)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -336,31 +354,16 @@ AddEventHandler('vehiclerental:client:vehicleReturned', function(plate)
|
||||||
-- Lösche das Fahrzeug, wenn es existiert
|
-- Lösche das Fahrzeug, wenn es existiert
|
||||||
if activeRentalVehicles[plate] then
|
if activeRentalVehicles[plate] then
|
||||||
local vehicle = activeRentalVehicles[plate]
|
local vehicle = activeRentalVehicles[plate]
|
||||||
|
DeleteRentalVehicle(vehicle)
|
||||||
if DoesEntityExist(vehicle) then
|
|
||||||
-- Versuche verschiedene Methoden zum Löschen
|
|
||||||
SetEntityAsMissionEntity(vehicle, true, true)
|
|
||||||
DeleteVehicle(vehicle)
|
|
||||||
|
|
||||||
-- Wenn AdvancedParking verfügbar ist, nutze auch dessen Löschmethode
|
|
||||||
if GetResourceState('AdvancedParking') == 'started' then
|
|
||||||
exports["AdvancedParking"]:DeleteVehicle(vehicle, false)
|
|
||||||
end
|
|
||||||
|
|
||||||
print("[VehicleRental] Mietfahrzeug gelöscht: " .. plate)
|
|
||||||
else
|
|
||||||
print("[VehicleRental] Mietfahrzeug nicht gefunden für Löschung: " .. plate)
|
|
||||||
end
|
|
||||||
|
|
||||||
activeRentalVehicles[plate] = nil
|
activeRentalVehicles[plate] = nil
|
||||||
|
print("[VehicleRental] Mietfahrzeug gelöscht: " .. plate)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Suche nach dem Fahrzeug in der Welt anhand des Kennzeichens
|
-- Suche nach dem Fahrzeug in der Welt anhand des Kennzeichens
|
||||||
for veh in EnumerateVehicles() do
|
for veh in EnumerateVehicles() do
|
||||||
local vehPlate = GetVehicleNumberPlateText(veh)
|
local vehPlate = GetVehicleNumberPlateText(veh)
|
||||||
if string.gsub(vehPlate, "%s+", "") == string.gsub(plate, "%s+", "") then
|
if string.gsub(vehPlate, "%s+", "") == string.gsub(plate, "%s+", "") then
|
||||||
SetEntityAsMissionEntity(veh, true, true)
|
DeleteRentalVehicle(veh)
|
||||||
DeleteVehicle(veh)
|
|
||||||
print("[VehicleRental] Zusätzliches Mietfahrzeug mit Kennzeichen gelöscht: " .. plate)
|
print("[VehicleRental] Zusätzliches Mietfahrzeug mit Kennzeichen gelöscht: " .. plate)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -442,12 +445,7 @@ Citizen.CreateThread(function()
|
||||||
-- Wenn es nicht gemietet ist, aber ein RENT-Kennzeichen hat, lösche es
|
-- Wenn es nicht gemietet ist, aber ein RENT-Kennzeichen hat, lösche es
|
||||||
if not isRented and #(playerPos - vehPos) > 100.0 then
|
if not isRented and #(playerPos - vehPos) > 100.0 then
|
||||||
print("[VehicleRental] Lösche Ghost-Mietfahrzeug: " .. vehPlate)
|
print("[VehicleRental] Lösche Ghost-Mietfahrzeug: " .. vehPlate)
|
||||||
SetEntityAsMissionEntity(veh, true, true)
|
DeleteRentalVehicle(veh)
|
||||||
DeleteVehicle(veh)
|
|
||||||
|
|
||||||
if GetResourceState('AdvancedParking') == 'started' then
|
|
||||||
exports["AdvancedParking"]:DeleteVehicle(veh, false)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -493,7 +491,7 @@ AddEventHandler('onResourceStop', function(resourceName)
|
||||||
|
|
||||||
for plate, vehicle in pairs(activeRentalVehicles) do
|
for plate, vehicle in pairs(activeRentalVehicles) do
|
||||||
if DoesEntityExist(vehicle) then
|
if DoesEntityExist(vehicle) then
|
||||||
DeleteVehicle(vehicle)
|
DeleteRentalVehicle(vehicle)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -9,19 +9,21 @@ function AddRentalKey(citizenid, plate, model)
|
||||||
1
|
1
|
||||||
}, function(rowsChanged)
|
}, function(rowsChanged)
|
||||||
if rowsChanged > 0 then
|
if rowsChanged > 0 then
|
||||||
print("Schlüssel für Mietfahrzeug hinzugefügt: " .. plate .. " für Spieler " .. citizenid)
|
print("[VehicleRental] Schlüssel für Mietfahrzeug hinzugefügt: " .. plate .. " für Spieler " .. citizenid)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Entferne einen Schlüssel für ein Mietfahrzeug
|
-- Entferne einen Schlüssel für ein Mietfahrzeug (gleiche Struktur wie AddRentalKey)
|
||||||
function RemoveRentalKey(citizenid, plate)
|
function RemoveRentalKey(citizenid, plate, model)
|
||||||
MySQL.Async.execute('DELETE FROM vehicle_keys WHERE owner = ? AND plate = ?', {
|
MySQL.Async.execute('DELETE FROM vehicle_keys WHERE owner = ? AND plate = ?', {
|
||||||
citizenid,
|
citizenid,
|
||||||
plate
|
plate
|
||||||
}, function(rowsChanged)
|
}, function(rowsChanged)
|
||||||
if rowsChanged > 0 then
|
if rowsChanged > 0 then
|
||||||
print("Schlüssel für Mietfahrzeug entfernt: " .. plate .. " für Spieler " .. citizenid)
|
print("[VehicleRental] Schlüssel für Mietfahrzeug entfernt: " .. plate .. " für Spieler " .. citizenid)
|
||||||
|
else
|
||||||
|
print("[VehicleRental] Kein Schlüssel zum Entfernen gefunden: " .. plate .. " für Spieler " .. citizenid)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
@ -32,7 +34,7 @@ Citizen.CreateThread(function()
|
||||||
|
|
||||||
MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE returned = FALSE', {}, function(results)
|
MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE returned = FALSE', {}, function(results)
|
||||||
if results and #results > 0 then
|
if results and #results > 0 then
|
||||||
print("Lade " .. #results .. " aktive Mietfahrzeuge...")
|
print("[VehicleRental] Lade " .. #results .. " aktive Mietfahrzeuge...")
|
||||||
|
|
||||||
for _, rental in ipairs(results) do
|
for _, rental in ipairs(results) do
|
||||||
activeRentals[rental.vehicle_plate] = rental
|
activeRentals[rental.vehicle_plate] = rental
|
||||||
|
@ -193,16 +195,8 @@ QBCore.Functions.CreateCallback('vehiclerental:server:returnVehicle', function(s
|
||||||
-- Aus dem aktiven Cache entfernen
|
-- Aus dem aktiven Cache entfernen
|
||||||
activeRentals[plate] = nil
|
activeRentals[plate] = nil
|
||||||
|
|
||||||
-- Entferne den Schlüssel für das Mietfahrzeug
|
-- Entferne den Schlüssel für das Mietfahrzeug (mit gleicher Struktur wie beim Hinzufügen)
|
||||||
RemoveRentalKey(Player.PlayerData.citizenid, plate)
|
RemoveRentalKey(Player.PlayerData.citizenid, plate, rental.vehicle_model)
|
||||||
|
|
||||||
-- Check if AdvancedParking is available and delete the vehicle from its system
|
|
||||||
local advancedParkingSuccess = false
|
|
||||||
if GetResourceState('AdvancedParking') == 'started' then
|
|
||||||
-- Try to delete using AdvancedParking exports
|
|
||||||
advancedParkingSuccess = exports["AdvancedParking"]:DeleteVehicleUsingData(nil, nil, plate, false)
|
|
||||||
print("[VehicleRental] AdvancedParking vehicle deletion: " .. (advancedParkingSuccess and "successful" or "failed") .. " for plate " .. plate)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Benachrichtige alle Clients, dass das Fahrzeug zurückgegeben wurde
|
-- Benachrichtige alle Clients, dass das Fahrzeug zurückgegeben wurde
|
||||||
TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate)
|
TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate)
|
||||||
|
@ -241,7 +235,7 @@ QBCore.Functions.CreateCallback('vehiclerental:server:getPlayerRentals', functio
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
cb(result)
|
cb(result)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -295,16 +289,10 @@ Citizen.CreateThread(function()
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Entferne den Schlüssel für das Mietfahrzeug
|
-- Entferne den Schlüssel für das Mietfahrzeug
|
||||||
RemoveRentalKey(rental.citizenid, plate)
|
RemoveRentalKey(rental.citizenid, plate, rental.vehicle_model)
|
||||||
|
|
||||||
-- Füge es zur Liste der zu entfernenden Fahrzeuge hinzu
|
-- Füge es zur Liste der zu entfernenden Fahrzeuge hinzu
|
||||||
table.insert(overdueVehicles, plate)
|
table.insert(overdueVehicles, plate)
|
||||||
|
|
||||||
-- Versuche, das Fahrzeug mit AdvancedParking zu löschen
|
|
||||||
if GetResourceState('AdvancedParking') == 'started' then
|
|
||||||
exports["AdvancedParking"]:DeleteVehicleUsingData(nil, nil, plate, false)
|
|
||||||
print("[VehicleRental] Auto-deleted overdue vehicle with AdvancedParking: " .. plate)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -403,16 +391,11 @@ exports('DeleteAllPlayerRentals', function(citizenid)
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Entferne den Schlüssel
|
-- Entferne den Schlüssel
|
||||||
RemoveRentalKey(citizenid, rental.vehicle_plate)
|
RemoveRentalKey(citizenid, rental.vehicle_plate, rental.vehicle_model)
|
||||||
|
|
||||||
-- Entferne aus dem Cache
|
-- Entferne aus dem Cache
|
||||||
activeRentals[rental.vehicle_plate] = nil
|
activeRentals[rental.vehicle_plate] = nil
|
||||||
|
|
||||||
-- Versuche, das Fahrzeug mit AdvancedParking zu löschen
|
|
||||||
if GetResourceState('AdvancedParking') == 'started' then
|
|
||||||
exports["AdvancedParking"]:DeleteVehicleUsingData(nil, nil, rental.vehicle_plate, false)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Benachrichtige alle Clients
|
-- Benachrichtige alle Clients
|
||||||
TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, rental.vehicle_plate)
|
TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, rental.vehicle_plate)
|
||||||
end
|
end
|
||||||
|
|
|
@ -163,10 +163,27 @@ config.stashes = {
|
||||||
coords = vector3(1930.88, 3723.82, 32.57),
|
coords = vector3(1930.88, 3723.82, 32.57),
|
||||||
textUiLabel = 'öffnen',
|
textUiLabel = 'öffnen',
|
||||||
name = 'spahlager1', -- uniq name
|
name = 'spahlager1', -- uniq name
|
||||||
|
label = 'Kühlschrank',
|
||||||
|
slots = 40,
|
||||||
|
weight = 40000,
|
||||||
|
},
|
||||||
|
---- JM Sinister ----
|
||||||
|
{
|
||||||
|
coords = vector3(-210.68, -1574.17, 35.05),
|
||||||
|
textUiLabel = 'öffnen',
|
||||||
|
name = 'jmlager1', -- uniq name
|
||||||
label = 'Lager',
|
label = 'Lager',
|
||||||
slots = 60,
|
slots = 60,
|
||||||
weight = 60000,
|
weight = 60000,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
coords = vvector3(-201.71, -1601.38, 35.05),
|
||||||
|
textUiLabel = 'öffnen',
|
||||||
|
name = 'jmfridge', -- uniq name
|
||||||
|
label = 'Kühlschrank',
|
||||||
|
slots = 40,
|
||||||
|
weight = 40000,
|
||||||
|
},
|
||||||
|
|
||||||
---- SHERIFF ----
|
---- SHERIFF ----
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue