local AccountsIndex, Accounts, SharedAccounts = {}, {}, {} AddEventHandler('onResourceStart', function(resourceName) if resourceName == GetCurrentResourceName() then local accounts = MySQL.query.await( 'SELECT * FROM addon_account LEFT JOIN addon_account_data ON addon_account.name = addon_account_data.account_name UNION SELECT * FROM addon_account RIGHT JOIN addon_account_data ON addon_account.name = addon_account_data.account_name') local newAccounts = {} for i = 1, #accounts do local account = accounts[i] if account.shared == 0 then if not Accounts[account.name] then AccountsIndex[#AccountsIndex + 1] = account.name Accounts[account.name] = {} end Accounts[account.name][#Accounts[account.name] + 1] = CreateAddonAccount(account.name, account.owner, account.money) else if account.money then SharedAccounts[account.name] = CreateAddonAccount(account.name, nil, account.money) else newAccounts[#newAccounts + 1] = { account.name, 0 } end end end GlobalState.SharedAccounts = SharedAccounts if next(newAccounts) then MySQL.prepare('INSERT INTO addon_account_data (account_name, money) VALUES (?, ?)', newAccounts) for i = 1, #newAccounts do local newAccount = newAccounts[i] SharedAccounts[newAccount[1]] = CreateAddonAccount(newAccount[1], nil, 0) end GlobalState.SharedAccounts = SharedAccounts end end end) function GetAccount(name, owner) for i = 1, #Accounts[name], 1 do if Accounts[name][i].owner == owner then return Accounts[name][i] end end end function GetSharedAccount(name) return SharedAccounts[name] end function AddSharedAccount(society, amount) -- society.name = job_name/society_name -- society.label = label for the job/account -- amount = if the shared account should start with x amount if type(society) ~= 'table' or not society?.name or not society?.label then return end -- check if account already exist? if SharedAccounts[society.name] ~= nil then return SharedAccounts[society.name] end -- addon account: local account = MySQL.insert.await('INSERT INTO `addon_account` (name, label, shared) VALUES (?, ?, ?)', { society.name, society.label, 1 }) if not account then return end -- if addon account inserted, insert addon account data: local account_data = MySQL.insert.await('INSERT INTO `addon_account_data` (account_name, money) VALUES (?, ?)', { society.name, (amount or 0) }) if not account_data then return end -- if all data inserted successfully to sql: SharedAccounts[society.name] = CreateAddonAccount(society.name, nil, (amount or 0)) return SharedAccounts[society.name] end AddEventHandler('esx_addonaccount:getAccount', function(name, owner, cb) cb(GetAccount(name, owner)) end) AddEventHandler('esx_addonaccount:getSharedAccount', function(name, cb) cb(GetSharedAccount(name)) end) AddEventHandler('esx:playerLoaded', function(playerId, xPlayer) local addonAccounts = {} for i = 1, #AccountsIndex, 1 do local name = AccountsIndex[i] local account = GetAccount(name, xPlayer.identifier) if account == nil then MySQL.insert('INSERT INTO addon_account_data (account_name, money, owner) VALUES (?, ?, ?)', { name, 0, xPlayer.identifier }) account = CreateAddonAccount(name, xPlayer.identifier, 0) Accounts[name][#Accounts[name] + 1] = account end addonAccounts[#addonAccounts + 1] = account end xPlayer.set('addonAccounts', addonAccounts) end) RegisterNetEvent('esx_addonaccount:refreshAccounts') AddEventHandler('esx_addonaccount:refreshAccounts', function() local addonAccounts = MySQL.query.await('SELECT * FROM addon_account') for i = 1, #addonAccounts, 1 do local name = addonAccounts[i].name local shared = addonAccounts[i].shared local addonAccountData = MySQL.query.await('SELECT * FROM addon_account_data WHERE account_name = ?', { name }) if shared == 0 then table.insert(AccountsIndex, name) Accounts[name] = {} for j = 1, #addonAccountData, 1 do local addonAccount = CreateAddonAccount(name, addonAccountData[j].owner, addonAccountData[j].money) table.insert(Accounts[name], addonAccount) end else local money = nil if #addonAccountData == 0 then MySQL.insert('INSERT INTO addon_account_data (account_name, money, owner) VALUES (?, ?, ?)', { name, 0, nil }) money = 0 else money = addonAccountData[1].money end local addonAccount = CreateAddonAccount(name, nil, money) SharedAccounts[name] = addonAccount end end end)