From 25c04168b5852c1fce051a0c1367c6ef28d9ab7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20N=27gadi?= Date: Tue, 1 Aug 2017 11:55:48 +0200 Subject: [PATCH] Add files --- __resource.lua | 9 +++ server/classes/addonaccount.lua | 61 ++++++++++++++++ server/main.lua | 119 ++++++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+) create mode 100644 __resource.lua create mode 100644 server/classes/addonaccount.lua create mode 100644 server/main.lua diff --git a/__resource.lua b/__resource.lua new file mode 100644 index 00000000..4bb086e3 --- /dev/null +++ b/__resource.lua @@ -0,0 +1,9 @@ +resource_manifest_version '44febabe-d386-4d18-afbe-5e627f4af937' + +description 'ESX AddonAccount' + +server_scripts { + '@mysql-async/lib/MySQL.lua', + 'server/classes/addonaccount.lua', + 'server/main.lua' +} diff --git a/server/classes/addonaccount.lua b/server/classes/addonaccount.lua new file mode 100644 index 00000000..333fe7db --- /dev/null +++ b/server/classes/addonaccount.lua @@ -0,0 +1,61 @@ +function CreateAddonAccount(name, owner, money) + + local self = {} + + self.name = name + self.owner = owner + self.money = money + + self.addMoney = function(m) + + self.money = self.money + m + + self.save() + + TriggerClientEvent('esx_addonAccount:setMoney', -1, self.name, self.money) + end + + self.removeMoney = function(m) + + self.money = self.money - m + + self.save() + + TriggerClientEvent('esx_addonAccount:setMoney', -1, self.name, self.money) + end + + self.setMoney = function(m) + + self.money = m + + self.save() + + TriggerClientEvent('esx_addonAccount:setMoney', -1, self.name, self.money) + end + + self.save = function() + + if self.owner == nil then + MySQL.Async.execute( + 'UPDATE addon_account_data SET money = @money WHERE account_name = @account_name', + { + ['@account_name'] = self.name, + ['@money'] = self.money + } + ) + else + MySQL.Async.execute( + 'UPDATE addon_account_data SET money = @money WHERE account_name = @account_name AND owner = @owner', + { + ['@account_name'] = self.name, + ['@money'] = self.money, + ['@owner'] = self.owner + } + ) + end + + end + + return self + +end \ No newline at end of file diff --git a/server/main.lua b/server/main.lua new file mode 100644 index 00000000..1f93a25c --- /dev/null +++ b/server/main.lua @@ -0,0 +1,119 @@ +ESX = nil +local AccountsIndex = {} +local Accounts = {} +local SharedAccounts = {} + +TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) + +AddEventHandler('onMySQLReady', function () + + local result = MySQL.Sync.fetchAll('SELECT * FROM addon_account') + + for i=1, #result, 1 do + + local name = result[i].name + local label = result[i].label + local shared = result[i].shared + + local result2 = MySQL.Sync.fetchAll( + 'SELECT * FROM addon_account_data WHERE account_name = @account_name', + { + ['@account_name'] = name + } + ) + + if shared == 0 then + + table.insert(AccountsIndex, name) + + Accounts[name] = {} + + for j=1, #result2, 1 do + + local addonAccount = CreateAddonAccount(name, result2[j].owner, result2[j].money) + + table.insert(Accounts[name], addonAccount) + + end + + else + + local money = nil + + if #result2 == 0 then + + MySQL.Sync.execute( + 'INSERT INTO addon_account_data (account_name, money, owner) VALUES (@account_name, @money, NULL)', + { + ['@account_name'] = name, + ['@money'] = 0 + } + ) + + money = 0 + + else + money = result2[1].money + end + + local addonAccount = CreateAddonAccount(name, nil, money) + SharedAccounts[name] = addonAccount + + 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 + +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(source) + + local xPlayer = ESX.GetPlayerFromId(source) + local addonAccounts = {} + + for i=1, #AccountsIndex, 1 do + + local name = AccountsIndex[i] + local account = GetAccount(name, xPlayer.identifier) + + if account == nil then + + MySQL.Async.execute( + 'INSERT INTO addon_account_data (account_name, money, owner) VALUES (@account_name, @money, @owner)', + { + ['@account_name'] = name, + ['@money'] = 0, + ['@owner'] = xPlayer.identifier + } + ) + + account = CreateAddonAccount(name, xPlayer.identifier, 0) + table.insert(Accounts[name], account) + end + + table.insert(addonAccounts, account) + + end + + xPlayer.set('addonAccounts', addonAccounts) + +end)