mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-31 18:28:52 +00:00
Add files
This commit is contained in:
+198
@@ -0,0 +1,198 @@
|
||||
ESX = nil
|
||||
local RegisteredStatus = {}
|
||||
|
||||
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
|
||||
|
||||
AddEventHandler('esx_status:registerStatus', function(name, default, color, visible, tickCallback, clientAction)
|
||||
|
||||
table.insert(RegisteredStatus, {
|
||||
name = name,
|
||||
default = default,
|
||||
color = color,
|
||||
visible = visible,
|
||||
tickCallback = tickCallback,
|
||||
clientAction = clientAction
|
||||
})
|
||||
|
||||
end)
|
||||
|
||||
AddEventHandler('esx:playerLoaded', function(source)
|
||||
|
||||
local _source = source
|
||||
local xPlayer = ESX.GetPlayerFromId(_source)
|
||||
|
||||
MySQL.Async.fetchAll(
|
||||
'SELECT * FROM users WHERE identifier = @identifier',
|
||||
{
|
||||
['@identifier'] = xPlayer.identifier
|
||||
},
|
||||
function(result)
|
||||
|
||||
local data = {}
|
||||
local savedStatus = {}
|
||||
|
||||
if result[1].status ~= nil then
|
||||
data = json.decode(result[1].status)
|
||||
end
|
||||
|
||||
for i=1, #data, 1 do
|
||||
savedStatus[data[i].name] = data[i]
|
||||
end
|
||||
|
||||
local status = {}
|
||||
|
||||
for i=1, #RegisteredStatus, 1 do
|
||||
|
||||
local s = RegisteredStatus[i]
|
||||
local default = nil
|
||||
|
||||
if savedStatus[s.name] ~= nil then
|
||||
default = savedStatus[s.name].val
|
||||
else
|
||||
default = s.default
|
||||
end
|
||||
|
||||
table.insert(status, CreateStatus(xPlayer, s.name, default, s.color, s.visible, s.tickCallback, s.clientAction))
|
||||
end
|
||||
|
||||
xPlayer.set('status', status)
|
||||
|
||||
TriggerEvent('esx_status:updateClient', _source)
|
||||
|
||||
end
|
||||
)
|
||||
|
||||
end)
|
||||
|
||||
AddEventHandler('esx:playerDropped', function(source)
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromId(source)
|
||||
|
||||
local data = {}
|
||||
local status = xPlayer.get('status')
|
||||
|
||||
for i=1, #status, 1 do
|
||||
|
||||
local s = status[i]
|
||||
|
||||
table.insert(data, {
|
||||
name = s._get('name'),
|
||||
val = s._get('val')
|
||||
})
|
||||
end
|
||||
|
||||
MySQL.Async.execute(
|
||||
'UPDATE users SET status = @status WHERE identifier = @identifier',
|
||||
{
|
||||
['@status'] = json.encode(data),
|
||||
['@identifier'] = xPlayer.identifier
|
||||
}
|
||||
)
|
||||
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_status:getStatus', function(playerId, statusName, cb)
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
local status = xPlayer.get('status')
|
||||
|
||||
for i=1, #status, 1 do
|
||||
if status[i]._get('name') == statusName then
|
||||
cb(status[i])
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
AddEventHandler('esx_status:updateClient', function(playerId)
|
||||
|
||||
local xPlayer = ESX.GetPlayerFromId(playerId)
|
||||
local data = {}
|
||||
local status = xPlayer.get('status')
|
||||
|
||||
for i=1, #status, 1 do
|
||||
table.insert(data, {
|
||||
name = status[i]._get('name'),
|
||||
val = status[i]._get('val'),
|
||||
color = status[i]._get('color'),
|
||||
visible = status[i]._get('visible')(status[i]),
|
||||
clientAction = status[i]._get('clientAction'),
|
||||
max = Config.StatusMax
|
||||
})
|
||||
end
|
||||
|
||||
TriggerClientEvent('esx_status:update', playerId, data)
|
||||
|
||||
end)
|
||||
|
||||
function TickStatus()
|
||||
|
||||
local xPlayers = ESX.GetPlayers()
|
||||
|
||||
for k,v in pairs(xPlayers) do
|
||||
|
||||
local status = v.get('status')
|
||||
|
||||
if status ~= nil then
|
||||
|
||||
for i=1, #status, 1 do
|
||||
status[i]._get('onTick')()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
SetTimeout(Config.TickTime, TickStatus)
|
||||
|
||||
end
|
||||
|
||||
function UpdateClients()
|
||||
|
||||
local xPlayers = ESX.GetPlayers()
|
||||
|
||||
for k,v in pairs(xPlayers) do
|
||||
TriggerEvent('esx_status:updateClient', v.source)
|
||||
end
|
||||
|
||||
SetTimeout(Config.UpdateClientTime, UpdateClients)
|
||||
|
||||
end
|
||||
|
||||
function SaveData()
|
||||
|
||||
local xPlayers = ESX.GetPlayers()
|
||||
|
||||
for k,v in pairs(xPlayers) do
|
||||
|
||||
local data = {}
|
||||
local status = v.get('status')
|
||||
|
||||
for i=1, #status, 1 do
|
||||
|
||||
local s = status[i]
|
||||
|
||||
table.insert(data, {
|
||||
name = s._get('name'),
|
||||
val = s._get('val')
|
||||
})
|
||||
end
|
||||
|
||||
MySQL.Async.execute(
|
||||
'UPDATE users SET status = @status WHERE identifier = @identifier',
|
||||
{
|
||||
['@status'] = json.encode(data),
|
||||
['@identifier'] = v.identifier
|
||||
}
|
||||
)
|
||||
|
||||
end
|
||||
|
||||
SetTimeout(60000, SaveData)
|
||||
|
||||
end
|
||||
|
||||
TickStatus()
|
||||
UpdateClients()
|
||||
SaveData()
|
||||
Reference in New Issue
Block a user