124 lines
3.6 KiB
Lua
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
|