Files
CasperV1FiveM/resources/[esx_addons]/esx_hud/server/mileage.lua
2026-07-07 21:08:52 +02:00

124 lines
3.6 KiB
Lua

if not Config.Disable.Vehicle then
HUD.Mileage = {
Data = {},
}
local Mileage = HUD.Mileage
-- Create column in sql if not exist
-- CREDIT: Overextended (https://github.com/overextended)
CreateThread(function()
local success, result = pcall(MySQL.query.await, "SELECT mileage FROM owned_vehicles")
if not success then
MySQL.query("ALTER TABLE owned_vehicles ADD COLUMN `mileage` FLOAT(10) DEFAULT 0; ")
end
end)
function Mileage:Load(plate, playerId, kmh)
MySQL.single("SELECT mileage FROM owned_vehicles WHERE plate = ?", { plate }, function(data)
local mileage, owned
if data then
mileage, owned = data.mileage, true
if kmh then
mileage = mileage * 1.61
end
else
mileage, owned = math.random(100, 10000), false
end
self:Create(plate, mileage, owned, playerId)
end)
end
function Mileage:Save()
if next(Mileage.Data) then
local parameters = {}
for plate, data in pairs(Mileage.Data) do
if data.owned then
parameters[#parameters + 1] = { data.mileage, plate }
end
end
if next(parameters) then
MySQL.prepare("UPDATE `owned_vehicles` SET `mileage` = ? WHERE `plate` = ?", parameters)
end
end
end
function Mileage:Create(plate, mileage, owned, playerId)
self.Data[plate] = { mileage = mileage, owned = owned }
self:UpdateClient(mileage, playerId)
end
function Mileage:Update(plate, mileage, playerId, kmh)
if not self.Data[plate] then
return
end
if kmh then
mileage = mileage / 1.61
end
self.Data[plate].mileage = mileage
if playerId then
self:UpdateClient(mileage, playerId)
end
end
function Mileage:Exist(plate, playerId, kmh)
if self.Data[plate] then
local milage = self.Data[plate].mileage
if kmh then
milage = self.Data[plate].mileage * 1.61
end
self:UpdateClient(milage, playerId)
return
end
self:Load(plate, playerId, kmh)
end
-- Send date to client
function Mileage:UpdateClient(mileage, playerId)
TriggerClientEvent("esx_hud:UpdateMileage", playerId, mileage)
end
RegisterNetEvent("esx_hud:EnteredVehicle", function(plate, kmh)
local playerId = source
Mileage:Exist(plate, playerId, kmh)
end)
RegisterNetEvent("esx_hud:ExitedVehicle", function(plate, mileage, kmh)
Mileage:Update(plate, mileage, source, kmh)
end)
-- Auto save every 5 min
CreateThread(function()
while true do
Wait(1000 * 60 * 5)
Mileage:Save()
end
end)
-- Auto save on resource stop
AddEventHandler("onResourceStop", function(resourceName)
if GetCurrentResourceName() ~= resourceName then
return
end
Mileage:Save()
end)
-- Auto save 10 sec before scheduled restart
AddEventHandler("txAdmin:events:scheduledRestart", function(eventData)
if eventData.secondsRemaining == 60 then
CreateThread(function()
Wait(50000)
Mileage:Save()
end)
end
end)
-- Auto save on txAdmin server stop
AddEventHandler("txAdmin:events:serverShuttingDown", function()
Mileage:Save()
end)
end