diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 50e1edf8..d46184d6 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -176,10 +176,21 @@ function ESX.TriggerServerCallback(name, requestId, source,Invoke, cb, ...) end function Core.SavePlayer(xPlayer, cb) + local parameters = { + json.encode(xPlayer.getAccounts(true)), + xPlayer.job.name, + xPlayer.job.grade, + xPlayer.group, + json.encode(xPlayer.getCoords()), + json.encode(xPlayer.getInventory(true)), + json.encode(xPlayer.getLoadout(true)), + xPlayer.identifier + } + MySQL.prepare( 'UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ? WHERE `identifier` = ?', - {json.encode(xPlayer.getAccounts(true)), xPlayer.job.name, xPlayer.job.grade, xPlayer.group, json.encode(xPlayer.getCoords()), - json.encode(xPlayer.getInventory(true)), json.encode(xPlayer.getLoadout(true)), xPlayer.identifier}, function(affectedRows) + parameters, + function(affectedRows) if affectedRows == 1 then print(('[^2INFO^7] Saved player ^5"%s^7"'):format(xPlayer.name)) TriggerEvent('esx:playerSaved', xPlayer.playerId, xPlayer) @@ -187,33 +198,47 @@ function Core.SavePlayer(xPlayer, cb) if cb then cb() end - end) + end + ) end function Core.SavePlayers(cb) - local xPlayers = ESX.GetExtendedPlayers() - local count = #xPlayers - if count > 0 then - local parameters = {} - local time = os.time() - for i = 1, count do - local xPlayer = xPlayers[i] - parameters[#parameters + 1] = {json.encode(xPlayer.getAccounts(true)), xPlayer.job.name, xPlayer.job.grade, xPlayer.group, - json.encode(xPlayer.getCoords()), json.encode(xPlayer.getInventory(true)), json.encode(xPlayer.getLoadout(true)), - xPlayer.identifier} - end - MySQL.prepare( - "UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ? WHERE `identifier` = ?", - parameters, function(results) - if results then - if type(cb) == 'function' then - cb() - else - print(('[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms'):format(count, count > 1 and 'players' or 'player', ESX.Math.Round((os.time() - time) / 1000000, 2))) - end - end - end) + local xPlayers = ESX.Players + if not next(xPlayers) then + return end + + local startTime = os.time() + local parameters = {} + + for _, xPlayer in pairs(ESX.Players) do + parameters[#parameters + 1] = { + json.encode(xPlayer.getAccounts(true)), + xPlayer.job.name, + xPlayer.job.grade, + xPlayer.group, + json.encode(xPlayer.getCoords()), + json.encode(xPlayer.getInventory(true)), + json.encode(xPlayer.getLoadout(true)), + xPlayer.identifier + } + end + + MySQL.prepare( + "UPDATE `users` SET `accounts` = ?, `job` = ?, `job_grade` = ?, `group` = ?, `position` = ?, `inventory` = ?, `loadout` = ? WHERE `identifier` = ?", + parameters, + function(results) + if not results then + return + end + + if type(cb) == 'function' then + return cb() + end + + print(('[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms'):format(#parameters, #parameters > 1 and 'players' or 'player', ESX.Math.Round((os.time() - startTime) / 1000000, 2))) + end + ) end ESX.GetPlayers = GetPlayers