Files
esx_core/server/main.lua
T
Jérémie N'gadi 09d76deef3 Add files
2017-08-12 11:35:52 +02:00

198 lines
3.7 KiB
Lua

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()