forked from Simnation/Main
ed
This commit is contained in:
parent
f2b9b3fc29
commit
2de2cef0c9
2 changed files with 74 additions and 47 deletions
|
@ -1,6 +1,7 @@
|
|||
local QBCore = exports['qb-core']:GetCoreObject()
|
||||
local trackedVehicles = {}
|
||||
local spawnedVehicles = {}
|
||||
local playerEnteredVehicles = {} -- Fahrzeuge in die sich der Spieler gesetzt hat
|
||||
|
||||
-- Funktion um zu prüfen ob Fahrzeugklasse erlaubt ist
|
||||
local function IsVehicleClassAllowed(vehicle)
|
||||
|
@ -111,7 +112,33 @@ local function PreventVehicleDespawn(vehicle)
|
|||
end
|
||||
end
|
||||
|
||||
-- Hauptloop für Fahrzeugtracking
|
||||
-- Event Handler für Fahrzeug betreten
|
||||
CreateThread(function()
|
||||
local lastVehicle = 0
|
||||
|
||||
while true do
|
||||
Wait(1000)
|
||||
|
||||
local playerPed = PlayerPedId()
|
||||
local currentVehicle = GetVehiclePedIsIn(playerPed, false)
|
||||
|
||||
-- Spieler ist in ein Fahrzeug eingestiegen
|
||||
if currentVehicle ~= 0 and currentVehicle ~= lastVehicle then
|
||||
if IsVehicleClassAllowed(currentVehicle) then
|
||||
local plate = QBCore.Functions.GetPlate(currentVehicle)
|
||||
playerEnteredVehicles[plate] = currentVehicle
|
||||
|
||||
if Config.Debug then
|
||||
print(string.format("Player entered vehicle: %s", plate))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
lastVehicle = currentVehicle
|
||||
end
|
||||
end)
|
||||
|
||||
-- Hauptloop für Fahrzeugtracking (nur für Fahrzeuge in die sich Spieler gesetzt haben)
|
||||
CreateThread(function()
|
||||
while true do
|
||||
Wait(Config.SaveInterval)
|
||||
|
@ -119,55 +146,45 @@ CreateThread(function()
|
|||
local playerPed = PlayerPedId()
|
||||
local playerCoords = GetEntityCoords(playerPed)
|
||||
|
||||
-- Finde alle Fahrzeuge
|
||||
local vehicles = GetGamePool('CVehicle')
|
||||
|
||||
for _, vehicle in pairs(vehicles) do
|
||||
if DoesEntityExist(vehicle) and IsVehicleClassAllowed(vehicle) then
|
||||
local plate = QBCore.Functions.GetPlate(vehicle)
|
||||
-- Tracke nur Fahrzeuge in die sich der Spieler gesetzt hat
|
||||
for plate, vehicle in pairs(playerEnteredVehicles) do
|
||||
if DoesEntityExist(vehicle) then
|
||||
local vehicleCoords = GetEntityCoords(vehicle)
|
||||
|
||||
-- Prüfe ob es ein Spielerfahrzeug ist (nicht NPC)
|
||||
local isPlayerVehicle = false
|
||||
local driver = GetPedInVehicleSeat(vehicle, -1)
|
||||
-- Verhindere Despawn
|
||||
PreventVehicleDespawn(vehicle)
|
||||
|
||||
if driver == 0 or IsPedAPlayer(driver) then
|
||||
isPlayerVehicle = true
|
||||
elseif trackedVehicles[plate] or spawnedVehicles[plate] then
|
||||
-- Bereits getrackt = Spielerfahrzeug
|
||||
isPlayerVehicle = true
|
||||
-- Speichere Fahrzeugdaten
|
||||
local vehicleData = {
|
||||
plate = plate,
|
||||
model = GetEntityModel(vehicle),
|
||||
position = {x = vehicleCoords.x, y = vehicleCoords.y, z = vehicleCoords.z},
|
||||
rotation = {x = 0.0, y = 0.0, z = GetEntityHeading(vehicle)},
|
||||
engineHealth = GetVehicleEngineHealth(vehicle),
|
||||
bodyHealth = GetVehicleBodyHealth(vehicle),
|
||||
fuel = 100, -- Standardwert, anpassen je nach Fuel System
|
||||
mods = GetVehicleMods(vehicle)
|
||||
}
|
||||
|
||||
-- Versuche Fuel zu bekommen
|
||||
if GetResourceState('LegacyFuel') == 'started' then
|
||||
vehicleData.fuel = exports['LegacyFuel']:GetFuel(vehicle) or 100
|
||||
elseif GetResourceState('ps-fuel') == 'started' then
|
||||
vehicleData.fuel = exports['ps-fuel']:GetFuel(vehicle) or 100
|
||||
end
|
||||
|
||||
if isPlayerVehicle then
|
||||
-- Verhindere Despawn
|
||||
PreventVehicleDespawn(vehicle)
|
||||
|
||||
-- Speichere Fahrzeugdaten
|
||||
local vehicleData = {
|
||||
plate = plate,
|
||||
model = GetEntityModel(vehicle),
|
||||
position = {x = vehicleCoords.x, y = vehicleCoords.y, z = vehicleCoords.z},
|
||||
rotation = {x = 0.0, y = 0.0, z = GetEntityHeading(vehicle)},
|
||||
engineHealth = GetVehicleEngineHealth(vehicle),
|
||||
bodyHealth = GetVehicleBodyHealth(vehicle),
|
||||
fuel = 100, -- Standardwert, anpassen je nach Fuel System
|
||||
mods = GetVehicleMods(vehicle)
|
||||
}
|
||||
|
||||
-- Versuche Fuel zu bekommen
|
||||
if GetResourceState('LegacyFuel') == 'started' then
|
||||
vehicleData.fuel = exports['LegacyFuel']:GetFuel(vehicle) or 100
|
||||
elseif GetResourceState('ps-fuel') == 'started' then
|
||||
vehicleData.fuel = exports['ps-fuel']:GetFuel(vehicle) or 100
|
||||
end
|
||||
|
||||
TriggerServerEvent('vehicle-persistence:server:saveVehiclePosition', vehicleData)
|
||||
trackedVehicles[plate] = vehicle
|
||||
|
||||
if Config.Debug then
|
||||
local distance = #(playerCoords - vehicleCoords)
|
||||
print(string.format("Tracking vehicle: %s (Model: %s) at distance: %.2f", plate, GetDisplayNameFromVehicleModel(GetEntityModel(vehicle)), distance))
|
||||
end
|
||||
TriggerServerEvent('vehicle-persistence:server:saveVehiclePosition', vehicleData)
|
||||
trackedVehicles[plate] = vehicle
|
||||
|
||||
if Config.Debug then
|
||||
local distance = #(playerCoords - vehicleCoords)
|
||||
print(string.format("Tracking player vehicle: %s at distance: %.2f", plate, distance))
|
||||
end
|
||||
else
|
||||
-- Fahrzeug existiert nicht mehr, entferne aus Liste
|
||||
playerEnteredVehicles[plate] = nil
|
||||
if Config.Debug then
|
||||
print(string.format("Player vehicle no longer exists: %s", plate))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -177,7 +194,7 @@ CreateThread(function()
|
|||
if not DoesEntityExist(vehicle) then
|
||||
trackedVehicles[plate] = nil
|
||||
if Config.Debug then
|
||||
print(string.format("Vehicle no longer exists, removed from tracking: %s", plate))
|
||||
print(string.format("Tracked vehicle no longer exists: %s", plate))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -240,6 +257,7 @@ RegisterNetEvent('vehicle-persistence:client:spawnSavedVehicles', function(vehic
|
|||
|
||||
spawnedVehicles[vehicleData.plate] = vehicle
|
||||
trackedVehicles[vehicleData.plate] = vehicle
|
||||
playerEnteredVehicles[vehicleData.plate] = vehicle -- Markiere als Spielerfahrzeug
|
||||
|
||||
if Config.Debug then
|
||||
print(string.format("Successfully spawned saved vehicle: %s", vehicleData.plate))
|
||||
|
@ -260,6 +278,7 @@ RegisterNetEvent('vehicle-persistence:client:spawnSavedVehicles', function(vehic
|
|||
else
|
||||
-- Fahrzeug existiert bereits, füge zu Tracking hinzu
|
||||
trackedVehicles[vehicleData.plate] = existingVehicle
|
||||
playerEnteredVehicles[vehicleData.plate] = existingVehicle
|
||||
PreventVehicleDespawn(existingVehicle)
|
||||
if Config.Debug then
|
||||
print(string.format("Vehicle already exists, added to tracking: %s", vehicleData.plate))
|
||||
|
@ -302,6 +321,9 @@ RegisterNetEvent('jg-advancedgarages:client:vehicle-stored', function(data)
|
|||
if spawnedVehicles[data.plate] then
|
||||
spawnedVehicles[data.plate] = nil
|
||||
end
|
||||
if playerEnteredVehicles[data.plate] then
|
||||
playerEnteredVehicles[data.plate] = nil
|
||||
end
|
||||
if Config.Debug then
|
||||
print(string.format("Vehicle stored in garage, removed from tracking: %s", data.plate))
|
||||
end
|
||||
|
@ -316,6 +338,9 @@ RegisterNetEvent('jg-advancedgarages:client:vehicle-spawned', function(data)
|
|||
if spawnedVehicles[data.plate] then
|
||||
spawnedVehicles[data.plate] = nil
|
||||
end
|
||||
if playerEnteredVehicles[data.plate] then
|
||||
playerEnteredVehicles[data.plate] = nil
|
||||
end
|
||||
if Config.Debug then
|
||||
print(string.format("Vehicle spawned from garage, removed from tracking: %s", data.plate))
|
||||
end
|
||||
|
@ -333,6 +358,7 @@ CreateThread(function()
|
|||
else
|
||||
trackedVehicles[plate] = nil
|
||||
spawnedVehicles[plate] = nil
|
||||
playerEnteredVehicles[plate] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -343,5 +369,6 @@ AddEventHandler('onResourceStop', function(resourceName)
|
|||
if resourceName == GetCurrentResourceName() then
|
||||
trackedVehicles = {}
|
||||
spawnedVehicles = {}
|
||||
playerEnteredVehicles = {}
|
||||
end
|
||||
end)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Config = {}
|
||||
|
||||
-- Speicherintervall in Millisekunden (5000 = 5 Sekunden)
|
||||
Config.SaveInterval = 2000
|
||||
Config.SaveInterval = 5000
|
||||
|
||||
-- Maximale Distanz zum Fahrzeug bevor es als "verlassen" gilt
|
||||
Config.MaxDistance = 1.0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue