1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-08-06 17:53:15 +02:00
parent f2b9b3fc29
commit 2de2cef0c9
2 changed files with 74 additions and 47 deletions

View file

@ -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)