forked from Simnation/Main
116 lines
4 KiB
Lua
116 lines
4 KiB
Lua
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)
|