Optimize SQL queries + minor changes

This commit is contained in:
Jérémie N'gadi
2017-07-31 15:25:53 +02:00
parent 669f6c76c1
commit f285833ae3
4 changed files with 73 additions and 35 deletions
@@ -45,4 +45,5 @@ TriggerEvent('es:addGroupCommand', 'car', 'admin', function(source, args, user)
TriggerClientEvent('esx:spawnVehicle', source, args[2])
end, function(source, args, user)
TriggerClientEvent('chatMessage', source, "SYSTEM", {255, 0, 0}, "Insufficient Permissions.")
end, {help = 'Spawn un véhicule'})
end, {help = 'Spawn un véhicule'})
@@ -3,6 +3,7 @@ ESX.Players = {}
ESX.UsableItemsCallbacks = {}
ESX.Items = {}
ESX.ServerCallbacks = {}
ESX.LastPlayerData = {}
AddEventHandler('esx:getSharedObject', function(cb)
cb(ESX)
@@ -25,4 +26,27 @@ AddEventHandler('onMySQLReady', function ()
end
)
end)
end)
AddEventHandler('esx:playerLoaded', function(source)
local xPlayer = ESX.GetPlayerFromId(source)
local accounts = {}
local items = {}
local xPlayerAccounts = xPlayer.getAccounts()
local xPlayerItems = xPlayer.getInventory()
for i=1, #xPlayerAccounts, 1 do
accounts[xPlayerAccounts[i].name] = xPlayerAccounts[i].money
end
for i=1, #xPlayerItems, 1 do
items[xPlayerItems[i].name] = xPlayerItems[i].count
end
ESX.LastPlayerData[source] = {
accounts = accounts,
items = items
}
end)
@@ -1,15 +1,15 @@
local charset = {}
local Charset = {}
for i = 48, 57 do table.insert(charset, string.char(i)) end
for i = 65, 90 do table.insert(charset, string.char(i)) end
for i = 97, 122 do table.insert(charset, string.char(i)) end
for i = 48, 57 do table.insert(Charset, string.char(i)) end
for i = 65, 90 do table.insert(Charset, string.char(i)) end
for i = 97, 122 do table.insert(Charset, string.char(i)) end
ESX.GetRandomString = function(length)
math.randomseed(os.time())
if length > 0 then
return ESX.GetRandomString(length - 1) .. charset[math.random(1, #charset)]
return ESX.GetRandomString(length - 1) .. Charset[math.random(1, #Charset)]
else
return ''
end
@@ -32,42 +32,54 @@ ESX.SavePlayer = function(xPlayer, cb)
-- User accounts
for i=1, #xPlayer.accounts, 1 do
table.insert(asyncTasks, function(cb)
if ESX.LastPlayerData[xPlayer.source].accounts[xPlayer.accounts[i].name] ~= xPlayer.accounts[i].money then
MySQL.Async.execute(
'UPDATE user_accounts SET `money` = @money WHERE identifier = @identifier AND name = @name',
{
['@money'] = xPlayer.accounts[i].money,
['@identifier'] = xPlayer.identifier,
['@name'] = xPlayer.accounts[i].name
},
function(rowsChanged)
cb()
end
)
table.insert(asyncTasks, function(cb)
end)
MySQL.Async.execute(
'UPDATE user_accounts SET `money` = @money WHERE identifier = @identifier AND name = @name',
{
['@money'] = xPlayer.accounts[i].money,
['@identifier'] = xPlayer.identifier,
['@name'] = xPlayer.accounts[i].name
},
function(rowsChanged)
cb()
end
)
end)
ESX.LastPlayerData[xPlayer.source].accounts[xPlayer.accounts[i].name] = xPlayer.accounts[i].money
end
end
-- Inventory items
for i=1, #xPlayer.inventory, 1 do
table.insert(asyncTasks, function(cb)
if ESX.LastPlayerData[xPlayer.source].items[xPlayer.inventory[i].name] ~= xPlayer.inventory[i].count then
MySQL.Async.execute(
'UPDATE user_inventory SET `count` = @count WHERE identifier = @identifier AND item = @item',
{
['@count'] = xPlayer.inventory[i].count,
['@identifier'] = xPlayer.identifier,
['@item'] = xPlayer.inventory[i].name
},
function(rowsChanged)
cb()
end
)
table.insert(asyncTasks, function(cb)
end)
MySQL.Async.execute(
'UPDATE user_inventory SET `count` = @count WHERE identifier = @identifier AND item = @item',
{
['@count'] = xPlayer.inventory[i].count,
['@identifier'] = xPlayer.identifier,
['@item'] = xPlayer.inventory[i].name
},
function(rowsChanged)
cb()
end
)
end)
ESX.LastPlayerData[xPlayer.source].items[xPlayer.inventory[i].name] = xPlayer.inventory[i].count
end
end
@@ -164,7 +176,7 @@ end
RegisterServerEvent('esx:clientLog')
AddEventHandler('esx:clientLog', function(msg)
RconPrint(msg)
RconPrint(msg .. "\n")
end)
RegisterServerEvent('esx:triggerServerCallback')
@@ -265,7 +265,8 @@ AddEventHandler('playerDropped', function()
TriggerEvent('esx:playerDropped', _source)
ESX.SavePlayer(xPlayer, function()
ESX.Players[_source] = nil
ESX.Players[_source] = nil
ESX.LastPlayerData[_source] = nil
end)
end