local QBCore = exports['qb-core']:GetCoreObject() -- Erstelle Tabelle bei Serverstart CreateThread(function() MySQL.query([[ CREATE TABLE IF NOT EXISTS `vehicle_positions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plate` varchar(50) NOT NULL, `citizenid` varchar(50) NOT NULL, `model` varchar(50) NOT NULL, `position` longtext NOT NULL, `rotation` longtext NOT NULL, `engine_health` float DEFAULT 1000.0, `body_health` float DEFAULT 1000.0, `fuel` int(11) DEFAULT 100, `mods` longtext DEFAULT NULL, `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `plate` (`plate`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ]]) end) -- Speichere Fahrzeugposition RegisterNetEvent('vehicle-persistence:server:saveVehiclePosition', function(vehicleData) local src = source local Player = QBCore.Functions.GetPlayer(src) if not Player then return end local query = [[ INSERT INTO vehicle_positions (plate, citizenid, model, position, rotation, engine_health, body_health, fuel, mods) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE position = VALUES(position), rotation = VALUES(rotation), engine_health = VALUES(engine_health), body_health = VALUES(body_health), fuel = VALUES(fuel), mods = VALUES(mods), last_updated = CURRENT_TIMESTAMP ]] MySQL.insert(query, { vehicleData.plate, Player.PlayerData.citizenid, vehicleData.model, json.encode(vehicleData.position), json.encode(vehicleData.rotation), vehicleData.engineHealth, vehicleData.bodyHealth, vehicleData.fuel, json.encode(vehicleData.mods) }) if Config.Debug then print(string.format("Saved vehicle position for plate: %s", vehicleData.plate)) end end) -- Lade gespeicherte Fahrzeuge beim Serverstart RegisterNetEvent('vehicle-persistence:server:loadVehicles', function() local src = source local Player = QBCore.Functions.GetPlayer(src) if not Player then return end MySQL.query('SELECT * FROM vehicle_positions WHERE citizenid = ?', { Player.PlayerData.citizenid }, function(result) if result and #result > 0 then TriggerClientEvent('vehicle-persistence:client:spawnSavedVehicles', src, result) end end) end) -- Entferne Fahrzeug aus Datenbank RegisterNetEvent('vehicle-persistence:server:removeVehicle', function(plate) MySQL.execute('DELETE FROM vehicle_positions WHERE plate = ?', {plate}) if Config.Debug then print(string.format("Removed vehicle from persistence: %s", plate)) end end) -- Cleanup alte Einträge (älter als 24 Stunden) CreateThread(function() while true do Wait(3600000) -- 1 Stunde MySQL.execute('DELETE FROM vehicle_positions WHERE last_updated < DATE_SUB(NOW(), INTERVAL 24 HOUR)') if Config.Debug then print("Cleaned up old vehicle positions") end end end) -- jg-advanced-garage Events RegisterNetEvent('jg-advancedgarages:server:vehicle-stored', function(data) -- Entferne Fahrzeug aus Persistence wenn es in Garage gespeichert wird if data and data.plate then TriggerEvent('vehicle-persistence:server:removeVehicle', data.plate) if Config.Debug then print(string.format("Vehicle stored in garage, removed from persistence: %s", data.plate)) end end end) RegisterNetEvent('jg-advancedgarages:server:vehicle-spawned', function(data) -- Entferne aus Persistence da Fahrzeug jetzt über Garage gespawnt wurde if data and data.plate then TriggerEvent('vehicle-persistence:server:removeVehicle', data.plate) if Config.Debug then print(string.format("Vehicle spawned from garage, removed from persistence: %s", data.plate)) end end end)