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 QBCore = exports['qb-core']:GetCoreObject()
local trackedVehicles = {} local trackedVehicles = {}
local spawnedVehicles = {} local spawnedVehicles = {}
local playerEnteredVehicles = {} -- Fahrzeuge in die sich der Spieler gesetzt hat
-- Funktion um zu prüfen ob Fahrzeugklasse erlaubt ist -- Funktion um zu prüfen ob Fahrzeugklasse erlaubt ist
local function IsVehicleClassAllowed(vehicle) local function IsVehicleClassAllowed(vehicle)
@ -111,7 +112,33 @@ local function PreventVehicleDespawn(vehicle)
end end
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() CreateThread(function()
while true do while true do
Wait(Config.SaveInterval) Wait(Config.SaveInterval)
@ -119,55 +146,45 @@ CreateThread(function()
local playerPed = PlayerPedId() local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed) local playerCoords = GetEntityCoords(playerPed)
-- Finde alle Fahrzeuge -- Tracke nur Fahrzeuge in die sich der Spieler gesetzt hat
local vehicles = GetGamePool('CVehicle') for plate, vehicle in pairs(playerEnteredVehicles) do
if DoesEntityExist(vehicle) then
for _, vehicle in pairs(vehicles) do
if DoesEntityExist(vehicle) and IsVehicleClassAllowed(vehicle) then
local plate = QBCore.Functions.GetPlate(vehicle)
local vehicleCoords = GetEntityCoords(vehicle) local vehicleCoords = GetEntityCoords(vehicle)
-- Prüfe ob es ein Spielerfahrzeug ist (nicht NPC) -- Verhindere Despawn
local isPlayerVehicle = false PreventVehicleDespawn(vehicle)
local driver = GetPedInVehicleSeat(vehicle, -1)
if driver == 0 or IsPedAPlayer(driver) then -- Speichere Fahrzeugdaten
isPlayerVehicle = true local vehicleData = {
elseif trackedVehicles[plate] or spawnedVehicles[plate] then plate = plate,
-- Bereits getrackt = Spielerfahrzeug model = GetEntityModel(vehicle),
isPlayerVehicle = true 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 end
if isPlayerVehicle then TriggerServerEvent('vehicle-persistence:server:saveVehiclePosition', vehicleData)
-- Verhindere Despawn trackedVehicles[plate] = vehicle
PreventVehicleDespawn(vehicle)
if Config.Debug then
-- Speichere Fahrzeugdaten local distance = #(playerCoords - vehicleCoords)
local vehicleData = { print(string.format("Tracking player vehicle: %s at distance: %.2f", plate, distance))
plate = plate, end
model = GetEntityModel(vehicle), else
position = {x = vehicleCoords.x, y = vehicleCoords.y, z = vehicleCoords.z}, -- Fahrzeug existiert nicht mehr, entferne aus Liste
rotation = {x = 0.0, y = 0.0, z = GetEntityHeading(vehicle)}, playerEnteredVehicles[plate] = nil
engineHealth = GetVehicleEngineHealth(vehicle), if Config.Debug then
bodyHealth = GetVehicleBodyHealth(vehicle), print(string.format("Player vehicle no longer exists: %s", plate))
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
end end
end end
end end
@ -177,7 +194,7 @@ CreateThread(function()
if not DoesEntityExist(vehicle) then if not DoesEntityExist(vehicle) then
trackedVehicles[plate] = nil trackedVehicles[plate] = nil
if Config.Debug then 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 end
end end
@ -240,6 +257,7 @@ RegisterNetEvent('vehicle-persistence:client:spawnSavedVehicles', function(vehic
spawnedVehicles[vehicleData.plate] = vehicle spawnedVehicles[vehicleData.plate] = vehicle
trackedVehicles[vehicleData.plate] = vehicle trackedVehicles[vehicleData.plate] = vehicle
playerEnteredVehicles[vehicleData.plate] = vehicle -- Markiere als Spielerfahrzeug
if Config.Debug then if Config.Debug then
print(string.format("Successfully spawned saved vehicle: %s", vehicleData.plate)) print(string.format("Successfully spawned saved vehicle: %s", vehicleData.plate))
@ -260,6 +278,7 @@ RegisterNetEvent('vehicle-persistence:client:spawnSavedVehicles', function(vehic
else else
-- Fahrzeug existiert bereits, füge zu Tracking hinzu -- Fahrzeug existiert bereits, füge zu Tracking hinzu
trackedVehicles[vehicleData.plate] = existingVehicle trackedVehicles[vehicleData.plate] = existingVehicle
playerEnteredVehicles[vehicleData.plate] = existingVehicle
PreventVehicleDespawn(existingVehicle) PreventVehicleDespawn(existingVehicle)
if Config.Debug then if Config.Debug then
print(string.format("Vehicle already exists, added to tracking: %s", vehicleData.plate)) 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 if spawnedVehicles[data.plate] then
spawnedVehicles[data.plate] = nil spawnedVehicles[data.plate] = nil
end end
if playerEnteredVehicles[data.plate] then
playerEnteredVehicles[data.plate] = nil
end
if Config.Debug then if Config.Debug then
print(string.format("Vehicle stored in garage, removed from tracking: %s", data.plate)) print(string.format("Vehicle stored in garage, removed from tracking: %s", data.plate))
end end
@ -316,6 +338,9 @@ RegisterNetEvent('jg-advancedgarages:client:vehicle-spawned', function(data)
if spawnedVehicles[data.plate] then if spawnedVehicles[data.plate] then
spawnedVehicles[data.plate] = nil spawnedVehicles[data.plate] = nil
end end
if playerEnteredVehicles[data.plate] then
playerEnteredVehicles[data.plate] = nil
end
if Config.Debug then if Config.Debug then
print(string.format("Vehicle spawned from garage, removed from tracking: %s", data.plate)) print(string.format("Vehicle spawned from garage, removed from tracking: %s", data.plate))
end end
@ -333,6 +358,7 @@ CreateThread(function()
else else
trackedVehicles[plate] = nil trackedVehicles[plate] = nil
spawnedVehicles[plate] = nil spawnedVehicles[plate] = nil
playerEnteredVehicles[plate] = nil
end end
end end
end end
@ -343,5 +369,6 @@ AddEventHandler('onResourceStop', function(resourceName)
if resourceName == GetCurrentResourceName() then if resourceName == GetCurrentResourceName() then
trackedVehicles = {} trackedVehicles = {}
spawnedVehicles = {} spawnedVehicles = {}
playerEnteredVehicles = {}
end end
end) end)

View file

@ -1,7 +1,7 @@
Config = {} Config = {}
-- Speicherintervall in Millisekunden (5000 = 5 Sekunden) -- Speicherintervall in Millisekunden (5000 = 5 Sekunden)
Config.SaveInterval = 2000 Config.SaveInterval = 5000
-- Maximale Distanz zum Fahrzeug bevor es als "verlassen" gilt -- Maximale Distanz zum Fahrzeug bevor es als "verlassen" gilt
Config.MaxDistance = 1.0 Config.MaxDistance = 1.0