-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'dev' of https://github.com/bitpredator/empiretown into dev
- Loading branch information
Showing
1 changed file
with
238 additions
and
0 deletions.
There are no files selected for viewing
238 changes: 238 additions & 0 deletions
238
server-data/resources/[bpt_addons]/bpt_banking/server/main.lua
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,238 @@ | ||
local spawnedPeds, netIdTable = {}, {} | ||
|
||
-- get keys utils | ||
local function get_key(t) | ||
local key | ||
for k, _ in pairs(t) do | ||
key = k | ||
end | ||
return key | ||
end | ||
|
||
-- Resource starting | ||
AddEventHandler('onResourceStart', function(resourceName) | ||
if (GetCurrentResourceName() ~= resourceName) then return end | ||
if Config.EnablePeds then BANK.CreatePeds() end | ||
local twoMonthMs = (os.time() - 5259487) * 1000 | ||
MySQL.Sync.fetchScalar('DELETE FROM banking WHERE time < ? ', { twoMonthMs }) | ||
end) | ||
|
||
AddEventHandler('onResourceStop', function(resourceName) | ||
if (GetCurrentResourceName() ~= resourceName) then return end | ||
if Config.EnablePeds then BANK.DeletePeds() end | ||
end) | ||
|
||
if Config.EnablePeds then | ||
AddEventHandler('esx:playerLoaded', function(playerId) | ||
TriggerClientEvent('bpt_banking:pedHandler', playerId, netIdTable) | ||
end) | ||
end | ||
|
||
-- event | ||
RegisterServerEvent('bpt_banking:doingType') | ||
AddEventHandler('bpt_banking:doingType', function(typeData) | ||
if source == nil then return end | ||
if (typeData == nil) then return end | ||
|
||
local source = source | ||
local xPlayer = ESX.GetPlayerFromId(source) | ||
local identifier = xPlayer.getIdentifier() | ||
local money = xPlayer.getAccount('money').money | ||
local bankMoney = xPlayer.getAccount('bank').money | ||
local amount | ||
|
||
local key = get_key(typeData) | ||
if typeData.deposit then | ||
amount = tonumber(typeData.deposit) | ||
elseif typeData.withdraw then | ||
amount = tonumber(typeData.withdraw) | ||
elseif typeData.transfer and typeData.transfer.moneyAmount then | ||
amount = tonumber(typeData.transfer.moneyAmount) | ||
elseif typeData.pincode then | ||
amount = tonumber(typeData.pincode) | ||
end | ||
|
||
if not tonumber(amount) then return end | ||
amount = ESX.Math.Round(amount) | ||
|
||
if amount == nil or (not typeData.pincode and amount <= 0) then | ||
TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_amount'), "error") | ||
else | ||
if typeData.deposit and amount <= money then | ||
-- deposit | ||
BANK.Deposit(amount, xPlayer) | ||
elseif typeData.withdraw and bankMoney ~= nil and amount <= bankMoney then | ||
-- withdraw | ||
BANK.Withdraw(amount, xPlayer) | ||
elseif typeData.pincode then | ||
-- pincode | ||
BANK.Pincode(amount, identifier) | ||
elseif typeData.transfer then | ||
-- transfer | ||
if tonumber(typeData.transfer.playerId) <= 0 then | ||
TriggerClientEvent("esx:showNotification", source, TranslateCap("cant_do_it"), "error") | ||
return | ||
end | ||
|
||
if bankMoney < amount then | ||
TriggerClientEvent("esx:showNotification", source, TranslateCap('not_enough_money', amount), "error") | ||
return | ||
end | ||
|
||
local xTarget = ESX.GetPlayerFromId(tonumber(typeData.transfer.playerId)) | ||
if not BANK.Transfer(xTarget, xPlayer, amount, key) then | ||
return | ||
end | ||
else | ||
TriggerClientEvent("esx:showNotification", source, TranslateCap('not_enough_money', amount), "error") | ||
return | ||
end | ||
|
||
money = xPlayer.getAccount('money').money | ||
bankMoney = xPlayer.getAccount('bank').money | ||
if typeData.transfer then | ||
TriggerClientEvent("esx:showNotification", source, | ||
TranslateCap(string.format('%s_money', key), amount, typeData.transfer.playerId), "success") | ||
else | ||
TriggerClientEvent("esx:showNotification", source, | ||
TranslateCap(string.format('%s_money', key), | ||
typeData.pincode and (string.format("%04d", amount)) or amount), "success") | ||
end | ||
if not typeData.pincode then | ||
BANK.LogTransaction(source, string.upper(key), string.upper(key), amount, bankMoney) | ||
end | ||
|
||
TriggerClientEvent("bpt_banking:updateMoneyInUI", source, key, bankMoney, money) | ||
end | ||
end) | ||
|
||
-- register callbacks | ||
ESX.RegisterServerCallback("bpt_banking:getPlayerData", function(source, cb) | ||
local xPlayer = ESX.GetPlayerFromId(source) | ||
local identifier = xPlayer.getIdentifier() | ||
local weekAgo = (os.time() - 604800) * 1000 | ||
local transactionHistory = MySQL.Sync.fetchAll( | ||
'SELECT * FROM banking WHERE identifier = ? AND time > ? ORDER BY time DESC LIMIT 10', { identifier, weekAgo }) | ||
local playerData = { | ||
playerName = xPlayer.getName(), | ||
money = xPlayer.getAccount('money').money, | ||
bankMoney = xPlayer.getAccount('bank').money, | ||
transactionHistory = transactionHistory | ||
} | ||
|
||
cb(playerData) | ||
end) | ||
|
||
ESX.RegisterServerCallback("bpt_banking:checkPincode", function(source, cb, inputPincode) | ||
local xPlayer = ESX.GetPlayerFromId(source) | ||
local identifier = xPlayer.getIdentifier() | ||
local pincode = MySQL.Sync.fetchScalar('SELECT COUNT(1) AS pincode FROM users WHERE identifier = ? AND pincode = ?', | ||
{ identifier, inputPincode }) | ||
cb(pincode > 0) | ||
end) | ||
|
||
function logTransaction(targetSource, label, key, amount) | ||
if targetSource == nil then | ||
print("ERROR: TargetSource nil!") | ||
return | ||
end | ||
|
||
if key == nil then | ||
print("ERROR: Do you need use these: WITHDRAW,DEPOSIT,TRANSFER_RECEIVE") | ||
return | ||
end | ||
|
||
if type(key) ~= "string" or key == '' then | ||
print("ERROR: Do you need use these: WITHDRAW,DEPOSIT,TRANSFER_RECEIVE and can only be string type!") | ||
return | ||
end | ||
|
||
if amount == nil then | ||
print("ERROR: Amount value is nil! Add some numeric value to the amount!") | ||
return | ||
end | ||
|
||
if label == nil then | ||
label = "UNKNOW LABEL" | ||
end | ||
|
||
local xPlayer = ESX.GetPlayerFromId(tonumber(targetSource)) | ||
|
||
if xPlayer ~= nil then | ||
local bankCurrentMoney = xPlayer.getAccount('bank').money | ||
BANK.LogTransaction(targetSource, label, string.upper(key), amount, bankCurrentMoney) | ||
else | ||
print("ERROR: xPlayer is nil!") | ||
end | ||
end | ||
|
||
exports("logTransaction", logTransaction) | ||
|
||
RegisterServerEvent('bpt_banking:logTransaction') | ||
AddEventHandler('bpt_banking:logTransaction', function(label, key, amount) | ||
logTransaction(source, label, key, amount) | ||
end) | ||
|
||
-- bank functions | ||
BANK = { | ||
CreatePeds = function() | ||
for i = 1, #Config.Peds do | ||
local model = Config.Peds[i].Model | ||
local coords = Config.Peds[i].Position | ||
spawnedPeds[i] = CreatePed(0, model, coords.x, coords.y, coords.z, coords.w, true, true) | ||
netIdTable[i] = NetworkGetNetworkIdFromEntity(spawnedPeds[i]) | ||
while not DoesEntityExist(spawnedPeds[i]) do Wait(50) end | ||
end | ||
|
||
Wait(100) | ||
TriggerClientEvent('bpt_banking:pedHandler', -1, netIdTable) | ||
end, | ||
DeletePeds = function() | ||
for i = 1, #spawnedPeds do | ||
DeleteEntity(spawnedPeds[i]) | ||
spawnedPeds[i] = nil | ||
end | ||
end, | ||
Withdraw = function(amount, xPlayer) | ||
xPlayer.addAccountMoney('money', amount) | ||
xPlayer.removeAccountMoney('bank', amount) | ||
end, | ||
Deposit = function(amount, xPlayer) | ||
xPlayer.removeAccountMoney('money', amount) | ||
xPlayer.addAccountMoney('bank', amount) | ||
end, | ||
Transfer = function(xTarget, xPlayer, amount, key) | ||
if xTarget == nil or xPlayer.source == xTarget.source then | ||
TriggerClientEvent("esx:showNotification", source, TranslateCap("cant_do_it"), "error") | ||
return false | ||
end | ||
|
||
xPlayer.removeAccountMoney('bank', amount) | ||
xTarget.addAccountMoney('bank', amount) | ||
local bankMoney = xTarget.getAccount('bank').money | ||
BANK.LogTransaction(xTarget.source, "TRANSFER_RECEIVE", amount, bankMoney) | ||
TriggerClientEvent("esx:showNotification", xTarget.source, | ||
TranslateCap('receive_transfer', amount, xPlayer.source), | ||
"success") | ||
|
||
return true | ||
end, | ||
Pincode = function(amount, identifier) | ||
MySQL.update('UPDATE users SET pincode = ? WHERE identifier = ? ', { amount, identifier }) | ||
end, | ||
LogTransaction = function(playerId, label, logType, amount, bankMoney) | ||
if playerId == nil then | ||
return | ||
end | ||
|
||
if label == nil then | ||
label = logType | ||
end | ||
|
||
local xPlayer = ESX.GetPlayerFromId(playerId) | ||
local identifier = xPlayer.getIdentifier() | ||
|
||
MySQL.insert('INSERT INTO banking (identifier, label, type, amount, time, balance) VALUES (?, ?, ?, ?, ?, ?)', | ||
{ identifier, label, logType, amount, os.time() * 1000, bankMoney }) | ||
end | ||
} |