Advertisement
Guest User

Untitled

a guest
Sep 8th, 2019
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. ESX = nil
  2. local DataStoresIndex = {}
  3. local DataStores = {}
  4. local SharedDataStores = {}
  5.  
  6. TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
  7.  
  8. MySQL.ready(function()
  9. local result = MySQL.Sync.fetchAll('SELECT * FROM datastore')
  10.  
  11. for i=1, #result, 1 do
  12. local name = result[i].name
  13. local label = result[i].label
  14. local shared = result[i].shared
  15.  
  16. local result2 = MySQL.Sync.fetchAll('SELECT * FROM datastore_data WHERE name = @name', {
  17. ['@name'] = name
  18. })
  19.  
  20. if shared == 0 then
  21.  
  22. table.insert(DataStoresIndex, name)
  23. DataStores[name] = {}
  24.  
  25. for j=1, #result2, 1 do
  26. local storeName = result2[j].name
  27. local storeOwner = result2[j].owner
  28. local storeData = (result2[j].data == nil and {} or json.decode(result2[j].data))
  29. local dataStore = CreateDataStore(storeName, storeOwner, storeData)
  30.  
  31. table.insert(DataStores[name], dataStore)
  32. end
  33.  
  34. else
  35.  
  36. local data = nil
  37.  
  38. if #result2 == 0 then
  39. MySQL.Sync.execute('INSERT INTO datastore_data (name, owner, data) VALUES (@name, NULL, \'{}\')', {
  40. ['@name'] = name
  41. })
  42.  
  43. data = {}
  44. else
  45. data = json.decode(result2[1].data)
  46. end
  47.  
  48. local dataStore = CreateDataStore(name, nil, data)
  49. SharedDataStores[name] = dataStore
  50.  
  51. end
  52. end
  53. end)
  54.  
  55. function GetDataStore(name, owner)
  56. for i=1, #DataStores[name], 1 do
  57. if DataStores[name][i].owner == owner then
  58. return DataStores[name][i]
  59. end
  60. end
  61. end
  62.  
  63. function GetDataStoreOwners(name)
  64. local identifiers = {}
  65.  
  66. for i=1, #DataStores[name], 1 do
  67. table.insert(identifiers, DataStores[name][i].owner)
  68. end
  69.  
  70. return identifiers
  71. end
  72.  
  73. function GetSharedDataStore(name)
  74. return SharedDataStores[name]
  75. end
  76.  
  77. AddEventHandler('esx_datastore:getDataStore', function(name, owner, cb)
  78. cb(GetDataStore(name, owner))
  79. end)
  80.  
  81. AddEventHandler('esx_datastore:getDataStoreOwners', function(name, cb)
  82. cb(GetDataStoreOwners(name))
  83. end)
  84.  
  85. AddEventHandler('esx_datastore:getSharedDataStore', function(name, cb)
  86. cb(GetSharedDataStore(name))
  87. end)
  88.  
  89.  
  90. -- Fix for kashacters duplication entry --
  91. -- Fix was taken from this link --
  92. -- https://forum.fivem.net/t/release-esx-kashacters-multi-character/251613/448?u=xxfri3ndlyxx --
  93. AddEventHandler('esx:playerLoaded', function(source)
  94.  
  95. local result = MySQL.Sync.fetchAll('SELECT * FROM datastore')
  96.  
  97. for i=1, #result, 1 do
  98. local name = result[i].name
  99. local label = result[i].label
  100. local shared = result[i].shared
  101.  
  102. local result2 = MySQL.Sync.fetchAll('SELECT * FROM datastore_data WHERE name = @name', {
  103. ['@name'] = name
  104. })
  105.  
  106. if shared == 0 then
  107.  
  108. table.insert(DataStoresIndex, name)
  109. DataStores[name] = {}
  110.  
  111. for j=1, #result2, 1 do
  112. local storeName = result2[j].name
  113. local storeOwner = result2[j].owner
  114. local storeData = (result2[j].data == nil and {} or json.decode(result2[j].data))
  115. local dataStore = CreateDataStore(storeName, storeOwner, storeData)
  116.  
  117. table.insert(DataStores[name], dataStore)
  118. end
  119. end
  120. end
  121.  
  122. local _source = source
  123. local xPlayer = ESX.GetPlayerFromId(_source)
  124. local dataStores = {}
  125.  
  126. for i=1, #DataStoresIndex, 1 do
  127. local name = DataStoresIndex[i]
  128. local dataStore = GetDataStore(name, xPlayer.identifier)
  129.  
  130. if dataStore == nil then
  131. MySQL.Async.execute('INSERT INTO datastore_data (name, owner, data) VALUES (@name, @owner, @data)',
  132. {
  133. ['@name'] = name,
  134. ['@owner'] = xPlayer.identifier,
  135. ['@data'] = '{}'
  136. })
  137.  
  138. dataStore = CreateDataStore(name, xPlayer.identifier, {})
  139. table.insert(DataStores[name], dataStore)
  140. end
  141.  
  142. table.insert(dataStores, dataStore)
  143. end
  144.  
  145. xPlayer.set('dataStores', dataStores)
  146. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement