0.0.1
This commit is contained in:
50
resources/[esx_addons]/esx_status/client/classes/status.lua
Normal file
50
resources/[esx_addons]/esx_status/client/classes/status.lua
Normal file
@@ -0,0 +1,50 @@
|
||||
function CreateStatus(name, default, color, visible, tickCallback)
|
||||
|
||||
local self = {}
|
||||
|
||||
self.val = default
|
||||
self.name = name
|
||||
self.default = default
|
||||
self.color = color
|
||||
self.visible = visible
|
||||
self.tickCallback = tickCallback
|
||||
|
||||
function self._set(k, v)
|
||||
self[k] = v
|
||||
end
|
||||
|
||||
function self._get(k)
|
||||
return self[k]
|
||||
end
|
||||
|
||||
function self.onTick()
|
||||
self.tickCallback(self)
|
||||
end
|
||||
|
||||
function self.set(val)
|
||||
self.val = val
|
||||
end
|
||||
|
||||
function self.add(val)
|
||||
if self.val + val > Config.StatusMax then
|
||||
self.val = Config.StatusMax
|
||||
else
|
||||
self.val = self.val + val
|
||||
end
|
||||
end
|
||||
|
||||
function self.remove(val)
|
||||
if self.val - val < 0 then
|
||||
self.val = 0
|
||||
else
|
||||
self.val = self.val - val
|
||||
end
|
||||
end
|
||||
|
||||
function self.getPercent()
|
||||
return (self.val / Config.StatusMax) * 100
|
||||
end
|
||||
|
||||
return self
|
||||
|
||||
end
|
||||
188
resources/[esx_addons]/esx_status/client/main.lua
Normal file
188
resources/[esx_addons]/esx_status/client/main.lua
Normal file
@@ -0,0 +1,188 @@
|
||||
local OriginalStatus, Status, isPaused = {}, {}, false
|
||||
|
||||
function GetStatusData(minimal)
|
||||
local status = {}
|
||||
|
||||
for i=1, #Status, 1 do
|
||||
if minimal then
|
||||
table.insert(status, {
|
||||
name = Status[i].name,
|
||||
val = Status[i].val,
|
||||
percent = (Status[i].val / Config.StatusMax) * 100
|
||||
})
|
||||
else
|
||||
table.insert(status, {
|
||||
name = Status[i].name,
|
||||
val = Status[i].val,
|
||||
color = Status[i].color,
|
||||
visible = Status[i].visible(Status[i]),
|
||||
percent = (Status[i].val / Config.StatusMax) * 100
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
return status
|
||||
end
|
||||
|
||||
AddEventHandler('esx_status:registerStatus', function(name, default, color, visible, tickCallback)
|
||||
local status = CreateStatus(name, default, color, visible, tickCallback)
|
||||
|
||||
for i=1, #OriginalStatus, 1 do
|
||||
if status.name == OriginalStatus[i].name then
|
||||
status.set(OriginalStatus[i].val)
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(Status, status)
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_status:unregisterStatus', function(name)
|
||||
for k,v in ipairs(Status) do
|
||||
if v.name == name then
|
||||
table.remove(Status, k)
|
||||
break
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx:onPlayerLogout', function()
|
||||
Status = {}
|
||||
if Config.Display then
|
||||
SendNUIMessage({
|
||||
update = true,
|
||||
status = Status
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_status:load', function(status)
|
||||
while not ESX.PlayerLoaded do Wait(0) end
|
||||
|
||||
OriginalStatus = status
|
||||
TriggerEvent('esx_status:loaded')
|
||||
|
||||
if Config.Display then TriggerEvent('esx_status:setDisplay', 0.5) end
|
||||
|
||||
CreateThread(function()
|
||||
local data = {}
|
||||
while ESX.PlayerLoaded do
|
||||
for i=1, #Status do
|
||||
Status[i].onTick()
|
||||
table.insert(data, {
|
||||
name = Status[i].name,
|
||||
val = Status[i].val,
|
||||
percent = (Status[i].val / Config.StatusMax) * 100
|
||||
})
|
||||
end
|
||||
|
||||
if Config.Display then
|
||||
local fullData = data
|
||||
for i=1, #data, 1 do
|
||||
fullData[i].color = Status[i].color
|
||||
fullData[i].visible = Status[i].visible(Status[i])
|
||||
end
|
||||
SendNUIMessage({
|
||||
update = true,
|
||||
status = fullData
|
||||
})
|
||||
end
|
||||
|
||||
TriggerEvent('esx_status:onTick', data)
|
||||
table.wipe(data)
|
||||
Wait(Config.TickTime)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_status:set', function(name, val)
|
||||
for i=1, #Status, 1 do
|
||||
if Status[i].name == name then
|
||||
Status[i].set(val)
|
||||
break
|
||||
end
|
||||
end
|
||||
if Config.Display then
|
||||
SendNUIMessage({
|
||||
update = true,
|
||||
status = GetStatusData()
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_status:add', function(name, val)
|
||||
for i=1, #Status, 1 do
|
||||
if Status[i].name == name then
|
||||
Status[i].add(val)
|
||||
break
|
||||
end
|
||||
end
|
||||
if Config.Display then
|
||||
SendNUIMessage({
|
||||
update = true,
|
||||
status = GetStatusData()
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNetEvent('esx_status:remove', function(name, val)
|
||||
for i=1, #Status, 1 do
|
||||
if Status[i].name == name then
|
||||
Status[i].remove(val)
|
||||
break
|
||||
end
|
||||
end
|
||||
if Config.Display then
|
||||
SendNUIMessage({
|
||||
update = true,
|
||||
status = GetStatusData()
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_status:getStatus', function(name, cb)
|
||||
for i=1, #Status, 1 do
|
||||
if Status[i].name == name then
|
||||
cb(Status[i])
|
||||
return
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_status:getAllStatus', function(cb)
|
||||
cb(Status)
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_status:setDisplay', function(val)
|
||||
SendNUIMessage({
|
||||
setDisplay = true,
|
||||
display = val
|
||||
})
|
||||
end)
|
||||
|
||||
-- Pause menu disable hud display
|
||||
if Config.Display then
|
||||
AddEventHandler('esx:pauseMenuActive', function(state)
|
||||
if state then
|
||||
isPaused = true
|
||||
TriggerEvent('esx_status:setDisplay', 0.0)
|
||||
return
|
||||
end
|
||||
isPaused = false
|
||||
TriggerEvent('esx_status:setDisplay', 0.5)
|
||||
end)
|
||||
|
||||
-- Loading screen off event
|
||||
AddEventHandler('esx:loadingScreenOff', function()
|
||||
if not isPaused then
|
||||
TriggerEvent('esx_status:setDisplay', 0.3)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Update server
|
||||
CreateThread(function()
|
||||
while true do
|
||||
Wait(Config.UpdateInterval)
|
||||
if ESX.PlayerLoaded then TriggerServerEvent('esx_status:update', GetStatusData(true)) end
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user