Minor cleanup, use RegisterKeyMapping() native, fixed not working on latest esx, closes #34

This commit is contained in:
ElPumpo
2020-02-05 11:10:51 +01:00
parent e03bd990a1
commit 19a54ee750
10 changed files with 138 additions and 189 deletions
+117 -166
View File
@@ -4,205 +4,156 @@ TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
RegisterServerEvent('esx_billing:sendBill')
AddEventHandler('esx_billing:sendBill', function(playerId, sharedAccountName, label, amount)
local _source = source
local xPlayer = ESX.GetPlayerFromId(_source)
local xPlayer = ESX.GetPlayerFromId(source)
local xTarget = ESX.GetPlayerFromId(playerId)
amount = ESX.Math.Round(amount)
amount = ESX.Math.Round(amount)
TriggerEvent('esx_addonaccount:getSharedAccount', sharedAccountName, function(account)
if amount < 0 then
print(('esx_billing: %s attempted to send a negative bill!'):format(xPlayer.identifier))
elseif account == nil then
if xTarget ~= nil then
MySQL.Async.execute('INSERT INTO billing (identifier, sender, target_type, target, label, amount) VALUES (@identifier, @sender, @target_type, @target, @label, @amount)',
{
['@identifier'] = xTarget.identifier,
['@sender'] = xPlayer.identifier,
['@target_type'] = 'player',
['@target'] = xPlayer.identifier,
['@label'] = label,
['@amount'] = amount
}, function(rowsChanged)
TriggerClientEvent('esx:showNotification', xTarget.source, _U('received_invoice'))
end)
end
else
if xTarget ~= nil then
MySQL.Async.execute('INSERT INTO billing (identifier, sender, target_type, target, label, amount) VALUES (@identifier, @sender, @target_type, @target, @label, @amount)',
{
['@identifier'] = xTarget.identifier,
['@sender'] = xPlayer.identifier,
if amount > 0 and xTarget then
TriggerEvent('esx_addonaccount:getSharedAccount', sharedAccountName, function(account)
if account then
MySQL.Async.execute('INSERT INTO billing (identifier, sender, target_type, target, label, amount) VALUES (@identifier, @sender, @target_type, @target, @label, @amount)', {
['@identifier'] = xTarget.identifier,
['@sender'] = xPlayer.identifier,
['@target_type'] = 'society',
['@target'] = sharedAccountName,
['@label'] = label,
['@amount'] = amount
['@target'] = sharedAccountName,
['@label'] = label,
['@amount'] = amount
}, function(rowsChanged)
TriggerClientEvent('esx:showNotification', xTarget.source, _U('received_invoice'))
xTarget.showNotification(_U('received_invoice'))
end)
else
MySQL.Async.execute('INSERT INTO billing (identifier, sender, target_type, target, label, amount) VALUES (@identifier, @sender, @target_type, @target, @label, @amount)', {
['@identifier'] = xTarget.identifier,
['@sender'] = xPlayer.identifier,
['@target_type'] = 'player',
['@target'] = xPlayer.identifier,
['@label'] = label,
['@amount'] = amount
}, function(rowsChanged)
xTarget.showNotification(_U('received_invoice'))
end)
end
end
end)
end)
end
end)
ESX.RegisterServerCallback('esx_billing:getBills', function(source, cb)
local xPlayer = ESX.GetPlayerFromId(source)
MySQL.Async.fetchAll('SELECT * FROM billing WHERE identifier = @identifier', {
MySQL.Async.fetchAll('SELECT amount, id, label FROM billing WHERE identifier = @identifier', {
['@identifier'] = xPlayer.identifier
}, function(result)
local bills = {}
for i=1, #result, 1 do
table.insert(bills, {
id = result[i].id,
identifier = result[i].identifier,
sender = result[i].sender,
targetType = result[i].target_type,
target = result[i].target,
label = result[i].label,
amount = result[i].amount
})
end
cb(bills)
cb(result)
end)
end)
ESX.RegisterServerCallback('esx_billing:getTargetBills', function(source, cb, target)
local xPlayer = ESX.GetPlayerFromId(target)
MySQL.Async.fetchAll('SELECT * FROM billing WHERE identifier = @identifier', {
['@identifier'] = xPlayer.identifier
}, function(result)
local bills = {}
for i=1, #result, 1 do
table.insert(bills, {
id = result[i].id,
identifier = result[i].identifier,
sender = result[i].sender,
targetType = result[i].target_type,
target = result[i].target,
label = result[i].label,
amount = result[i].amount
})
end
cb(bills)
end)
if xPlayer then
MySQL.Async.fetchAll('SELECT amount, id, label FROM billing WHERE identifier = @identifier', {
['@identifier'] = xPlayer.identifier
}, function(result)
cb(result)
end)
else
cb({})
end
end)
ESX.RegisterServerCallback('esx_billing:payBill', function(source, cb, id)
ESX.RegisterServerCallback('esx_billing:payBill', function(source, cb, billId)
local xPlayer = ESX.GetPlayerFromId(source)
MySQL.Async.fetchAll('SELECT * FROM billing WHERE id = @id', {
['@id'] = id
MySQL.Async.fetchAll('SELECT sender, target_type, target, amount FROM billing WHERE id = @id', {
['@id'] = billId
}, function(result)
if result[1] then
local amount = result[1].amount
local xTarget = ESX.GetPlayerFromIdentifier(result[1].sender)
local sender = result[1].sender
local targetType = result[1].target_type
local target = result[1].target
local amount = result[1].amount
if result[1].target_type == 'player' then
if xTarget then
if xPlayer.getMoney() >= amount then
MySQL.Async.execute('DELETE FROM billing WHERE id = @id', {
['@id'] = billId
}, function(rowsChanged)
if rowsChanged == 1 then
xPlayer.removeMoney(amount)
xTarget.addMoney(amount)
local xTarget = ESX.GetPlayerFromIdentifier(sender)
xPlayer.showNotification(_U('paid_invoice', ESX.Math.GroupDigits(amount)))
xTarget.showNotification(_U('received_payment', ESX.Math.GroupDigits(amount)))
end
if targetType == 'player' then
cb()
end)
elseif xPlayer.getAccount('bank').money >= amount then
MySQL.Async.execute('DELETE FROM billing WHERE id = @id', {
['@id'] = billId
}, function(rowsChanged)
if rowsChanged == 1 then
xPlayer.removeAccountMoney('bank', amount)
xTarget.addAccountMoney('bank', amount)
if xTarget ~= nil then
if xPlayer.getMoney() >= amount then
MySQL.Async.execute('DELETE from billing WHERE id = @id', {
['@id'] = id
}, function(rowsChanged)
xPlayer.removeMoney(amount)
xTarget.addMoney(amount)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('paid_invoice', ESX.Math.GroupDigits(amount)))
TriggerClientEvent('esx:showNotification', xTarget.source, _U('received_payment', ESX.Math.GroupDigits(amount)))
xPlayer.showNotification(_U('paid_invoice', ESX.Math.GroupDigits(amount)))
xTarget.showNotification(_U('received_payment', ESX.Math.GroupDigits(amount)))
end
cb()
end)
else
xTarget.showNotification(_U('target_no_money'))
xPlayer.showNotification(_U('no_money'))
cb()
end)
elseif xPlayer.getBank() >= amount then
MySQL.Async.execute('DELETE from billing WHERE id = @id', {
['@id'] = id
}, function(rowsChanged)
xPlayer.removeAccountMoney('bank', amount)
xTarget.addAccountMoney('bank', amount)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('paid_invoice', ESX.Math.GroupDigits(amount)))
TriggerClientEvent('esx:showNotification', xTarget.source, _U('received_payment', ESX.Math.GroupDigits(amount)))
cb()
end)
else
TriggerClientEvent('esx:showNotification', xTarget.source, _U('target_no_money'))
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('no_money'))
cb()
end
else
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('player_not_online'))
cb()
end
else
TriggerEvent('esx_addonaccount:getSharedAccount', target, function(account)
if xPlayer.getMoney() >= amount then
MySQL.Async.execute('DELETE from billing WHERE id = @id', {
['@id'] = id
}, function(rowsChanged)
xPlayer.removeMoney(amount)
account.addMoney(amount)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('paid_invoice', ESX.Math.GroupDigits(amount)))
if xTarget ~= nil then
TriggerClientEvent('esx:showNotification', xTarget.source, _U('received_payment', ESX.Math.GroupDigits(amount)))
end
cb()
end)
elseif xPlayer.getBank() >= amount then
MySQL.Async.execute('DELETE from billing WHERE id = @id', {
['@id'] = id
}, function(rowsChanged)
xPlayer.removeAccountMoney('bank', amount)
account.addMoney(amount)
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('paid_invoice', ESX.Math.GroupDigits(amount)))
if xTarget ~= nil then
TriggerClientEvent('esx:showNotification', xTarget.source, _U('received_payment', ESX.Math.GroupDigits(amount)))
end
cb()
end)
else
TriggerClientEvent('esx:showNotification', xPlayer.source, _U('no_money'))
if xTarget ~= nil then
TriggerClientEvent('esx:showNotification', xTarget.source, _U('target_no_money'))
end
else
xPlayer.showNotification(_U('player_not_online'))
cb()
end
end)
else
TriggerEvent('esx_addonaccount:getSharedAccount', result[1].target, function(account)
if xPlayer.getMoney() >= amount then
MySQL.Async.execute('DELETE FROM billing WHERE id = @id', {
['@id'] = billId
}, function(rowsChanged)
if rowsChanged == 1 then
xPlayer.removeMoney(amount)
account.addMoney(amount)
xPlayer.showNotification(_U('paid_invoice', ESX.Math.GroupDigits(amount)))
if xTarget then
xTarget.showNotification(_U('received_payment', ESX.Math.GroupDigits(amount)))
end
end
cb()
end)
elseif xPlayer.getAccount('bank').money >= amount then
MySQL.Async.execute('DELETE FROM billing WHERE id = @id', {
['@id'] = billId
}, function(rowsChanged)
if rowsChanged == 1 then
xPlayer.removeAccountMoney('bank', amount)
account.addMoney(amount)
xPlayer.showNotification(_U('paid_invoice', ESX.Math.GroupDigits(amount)))
if xTarget then
xTarget.showNotification(_U('received_payment', ESX.Math.GroupDigits(amount)))
end
end
cb()
end)
else
if xTarget then
xTarget.showNotification(_U('target_no_money'))
end
xPlayer.showNotification(_U('no_money'))
cb()
end
end)
end
end
end)
end)
end)