0.0.1
This commit is contained in:
95
resources/[esx_addons]/esx_hud/server/main.lua
Normal file
95
resources/[esx_addons]/esx_hud/server/main.lua
Normal file
@@ -0,0 +1,95 @@
|
||||
HUD = HUD or {}
|
||||
|
||||
HUD.VersionCheckBaseURL = "https://raw.githubusercontent.com/esx-framework/ESX-Legacy-Addons/main/%5Besx_addons%5D/"
|
||||
|
||||
function HUD:ErrorHandle(msg)
|
||||
local resourceName = GetCurrentResourceName()
|
||||
print(("[^1ERROR^7] ^3%s^7: %s"):format(resourceName, msg))
|
||||
end
|
||||
|
||||
function HUD:InfoHandle(msg, color)
|
||||
local resourceName = GetCurrentResourceName()
|
||||
local c = ({green=2, red=1, blue=4})[color] or 3
|
||||
print(("[^9INFO^7] ^3%s^7: ^" .. c .. "%s^7"):format(resourceName, msg))
|
||||
end
|
||||
|
||||
local function normalizeSemver(v)
|
||||
if type(v) ~= "string" then return nil end
|
||||
local three = v:match("%d+%.%d+%.%d+")
|
||||
if three then return three end
|
||||
local two = v:match("^%d+%.%d+$")
|
||||
if two then return (two .. ".0") end
|
||||
local one = v:match("^%d+$")
|
||||
if one then return (one .. ".0.0") end
|
||||
return nil
|
||||
end
|
||||
|
||||
VERSION = {
|
||||
Check = function(err, response, headers)
|
||||
local resourceName = GetCurrentResourceName()
|
||||
local currentVersion = GetResourceMetadata(resourceName, "version", 0)
|
||||
if not currentVersion then return end
|
||||
|
||||
local manifestURL = HUD.VersionCheckBaseURL .. resourceName .. "/fxmanifest.lua"
|
||||
HUD:InfoHandle(("Checking manifest from %s"):format(manifestURL), "blue")
|
||||
|
||||
if err ~= 200 or not response then
|
||||
HUD:ErrorHandle(Translate("errorGetCurrentVersion"))
|
||||
return
|
||||
end
|
||||
|
||||
local remoteVersion = response:match("version%s+'([%d%.]+)'")
|
||||
if not remoteVersion then
|
||||
HUD:ErrorHandle(Translate("errorGetRemoteVersion"))
|
||||
return
|
||||
end
|
||||
|
||||
local latestVersion = normalizeSemver(remoteVersion)
|
||||
currentVersion = normalizeSemver(currentVersion)
|
||||
|
||||
if not latestVersion or not currentVersion then
|
||||
HUD:ErrorHandle(Translate("invalidVersion"))
|
||||
return
|
||||
end
|
||||
|
||||
if currentVersion == latestVersion then
|
||||
HUD:InfoHandle(Translate("latestVersion"), "green")
|
||||
HUD:InfoHandle(("Up to date version (%s)"):format(currentVersion), "green")
|
||||
return
|
||||
end
|
||||
|
||||
local currentVersionSplitted = { string.strsplit(".", currentVersion) }
|
||||
local latestVersionSplitted = { string.strsplit(".", latestVersion) }
|
||||
|
||||
HUD:InfoHandle(Translate("currentVersion") .. latestVersion, "green")
|
||||
HUD:InfoHandle(Translate("yourVersion") .. currentVersion, "blue")
|
||||
HUD:InfoHandle(("Update available: remote %s > local %s"):format(latestVersion, currentVersion), "red")
|
||||
|
||||
for i = 1, #currentVersionSplitted do
|
||||
local current, latest = tonumber(currentVersionSplitted[i]), tonumber(latestVersionSplitted[i])
|
||||
if current ~= latest then
|
||||
if not current or not latest then return end
|
||||
if current < latest then
|
||||
HUD:InfoHandle(Translate("needUpdateResource"), "red")
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
RunVersionChecker = function()
|
||||
CreateThread(function()
|
||||
local resourceName = GetCurrentResourceName()
|
||||
local manifestURL = HUD.VersionCheckBaseURL .. resourceName .. "/fxmanifest.lua"
|
||||
PerformHttpRequest(manifestURL, VERSION.Check, "GET")
|
||||
end)
|
||||
end,
|
||||
}
|
||||
|
||||
AddEventHandler("onResourceStart", function(resourceName)
|
||||
local currentName = GetCurrentResourceName()
|
||||
if resourceName ~= currentName then return end
|
||||
|
||||
Wait(100)
|
||||
VERSION:RunVersionChecker()
|
||||
end)
|
||||
123
resources/[esx_addons]/esx_hud/server/mileage.lua
Normal file
123
resources/[esx_addons]/esx_hud/server/mileage.lua
Normal file
@@ -0,0 +1,123 @@
|
||||
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
|
||||
Reference in New Issue
Block a user