Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(esx_status) #16

Merged
merged 6 commits into from
Nov 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 0 additions & 56 deletions server/classes/status.lua

This file was deleted.

78 changes: 30 additions & 48 deletions server/main.lua
Original file line number Diff line number Diff line change
@@ -1,67 +1,49 @@
local function setPlayerStatus(xPlayer, data)
data = data and json.decode(data) or {}
---@param src number
---@param xPlayer table
AddEventHandler('esx:playerLoaded', function(src, xPlayer)
local status = MySQL.scalar.await('SELECT `status` FROM `users` WHERE `identifier` = ? LIMIT 1', { xPlayer.getIdentifier() })

xPlayer.set('status', data)
ESX.Players[xPlayer.source] = data
TriggerClientEvent('esx_status:load', xPlayer.source, data)
end
status = status and json.decode(status) or {}
xPlayer.set('status', status)

AddEventHandler('onResourceStart', function(resourceName)
if (GetCurrentResourceName() ~= resourceName) then
return
end
TriggerClientEvent('esx_status:load', xPlayer.source, status)
end)

for _, xPlayer in pairs(ESX.Players) do
MySQL.scalar('SELECT status FROM users WHERE identifier = ?', { xPlayer.identifier }, function(result)
setPlayerStatus(xPlayer, result)
end)
---@param src number
---@param reason string
AddEventHandler('esx:playerDropped', function(src, reason)
local xPlayer = ESX.GetPlayerFromId(src)
if not xPlayer then
return
end
end)

AddEventHandler('esx:playerLoaded', function(playerId, xPlayer)
MySQL.scalar('SELECT status FROM users WHERE identifier = ?', { xPlayer.identifier }, function(result)
setPlayerStatus(xPlayer, result)
end)
local status = xPlayer.get('status') or {}
MySQL.update('UPDATE users SET status = ? WHERE identifier = ?', { json.encode(status), xPlayer.getIdentifier() })
end)

AddEventHandler('esx:playerDropped', function(playerId, reason)
local xPlayer = ESX.GetPlayerFromId(playerId)
local status = ESX.Players[xPlayer.source]

MySQL.update('UPDATE users SET status = ? WHERE identifier = ?', { json.encode(status), xPlayer.identifier })
ESX.Players[xPlayer.source] = nil
end)
---@param src number
---@param statusName string
---@param cb function|table
AddEventHandler('esx_status:getStatus', function(src, statusName, cb)
local xPlayer = ESX.GetPlayerFromId(src)
if not xPlayer then
return
end

AddEventHandler('esx_status:getStatus', function(playerId, statusName, cb)
local status = ESX.Players[playerId]
local status = xPlayer.get('status') or {}
for i = 1, #status do
if status[i].name == statusName then
return cb(status[i])
end
end
end)

RegisterServerEvent('esx_status:update')
AddEventHandler('esx_status:update', function(status)
---@param status table
RegisterNetEvent('esx_status:update', function(status)
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer then
xPlayer.set('status', status) -- save to xPlayer for compatibility
ESX.Players[xPlayer.source] = status -- save locally for performance
if not xPlayer then
return
end
end)

CreateThread(function()
while true do
Wait(10 * 60 * 1000)
local parameters = {}
for _, xPlayer in pairs(ESX.GetExtendedPlayers()) do
local status = ESX.Players[xPlayer.source]
if status and next(status) then
parameters[#parameters+1] = {json.encode(status), xPlayer.identifier}
end
end
if #parameters > 0 then
MySQL.prepare('UPDATE users SET status = ? WHERE identifier = ?', parameters)
end
end
xPlayer.set('status', status)
end)
Loading