diff --git a/server/classes/datastore.lua b/server/classes/datastore.lua index 482c493c..cfab64d6 100644 --- a/server/classes/datastore.lua +++ b/server/classes/datastore.lua @@ -6,6 +6,8 @@ function CreateDataStore(name, owner, data) self.owner = owner self.data = data + local timeoutCallbacks = {} + self.set = function(key, val) data[key] = val self.save() @@ -17,25 +19,36 @@ function CreateDataStore(name, owner, data) self.save = function() - if self.owner == nil then - MySQL.Async.execute( - 'UPDATE datastore_data SET data = @data WHERE name = @name', - { - ['@data'] = json.encode(self.data), - ['@name'] = self.name, - } - ) - else - MySQL.Async.execute( - 'UPDATE datastore_data SET data = @data WHERE name = @name and owner = @owner', - { - ['@data'] = json.encode(self.data), - ['@name'] = self.name, - ['@owner'] = self.owner, - } - ) + for i=1, #timeoutCallbacks, 1 do + ESX.ClearTimeout(timeoutCallbacks[i]) + timeoutCallbacks[i] = nil end + local timeoutCallback = ESX.SetTimeout(10000, function() + + if self.owner == nil then + MySQL.Async.execute( + 'UPDATE datastore_data SET data = @data WHERE name = @name', + { + ['@data'] = json.encode(self.data), + ['@name'] = self.name, + } + ) + else + MySQL.Async.execute( + 'UPDATE datastore_data SET data = @data WHERE name = @name and owner = @owner', + { + ['@data'] = json.encode(self.data), + ['@name'] = self.name, + ['@owner'] = self.owner, + } + ) + end + + end) + + table.insert(timeoutCallbacks, timeoutCallback) + end return self