1
0
Fork 0
forked from Simnation/Main
Main/resources/[phone]/roadphone/server/serverAPI/bank.lua
2025-08-09 11:32:44 +02:00

185 lines
5.7 KiB
Lua

RegisterServerEvent('roadphone:bank:transfer')
AddEventHandler('roadphone:bank:transfer', function(number, amount)
local src = tonumber(source)
local xPlayer = QBCore.Functions.GetPlayer(src)
local targetplayer = nil
if Config.okokBanking then
targetplayer = getPlayerFromIban(number)
else
targetplayer = GetPlayerFromPhone(number)
end
if Config.okokBanking and targetplayer == nil then
targetplayer = GetPlayerFromPhone(number)
end
local balance = tonumber(xPlayer.Functions.GetMoney('bank'))
amount = tonumber(amount)
if not xPlayer then
return;
end
if not targetplayer then
TriggerClientEvent("roadphone:sendNotification", src, {
apptitle = 'APP_BANK_NAME',
title = 'APP_BANK_NUMBER_NOT_FOUND_TITLE',
message = 'APP_BANK_NUMBER_NOT_FOUND_MESSAGE',
img = "/public/img/Apps/light_mode/bank.webp"
})
return;
end
local numberfromsource = getNumberFromIdentifier(xPlayer.PlayerData.citizenid)
local targetbalance = tonumber(targetplayer.Functions.GetMoney('bank'))
if numberfromsource == number then
TriggerClientEvent("roadphone:sendNotification", src, {
apptitle = 'APP_BANK_NAME',
title = 'APP_BANK_SEND_MONEY_TO_YOURSELF_TITLE',
img = "/public/img/Apps/light_mode/bank.webp"
})
return;
end
if targetbalance < 0 or balance < 0 then
TriggerClientEvent("roadphone:sendNotification", src, {
apptitle = "APP_BANK_NAME",
title = 'APP_BANK_INVALID_INPUT',
img = "/public/img/App/bank.png"
})
return;
end
if not amount or amount < 0 then
TriggerClientEvent("roadphone:sendNotification", src, {
apptitle = 'APP_BANK_NAME',
title = 'APP_BANK_INVALID_INPUT',
img = "/public/img/Apps/light_mode/bank.webp"
})
return;
end
if amount > balance then
TriggerClientEvent("roadphone:sendNotification", src, {
apptitle = 'APP_BANK_NAME',
title = 'APP_BANK_NOT_ENOUGH_MONEY',
message = 'APP_BANK_NOT_ENOUGH_MONEY_MESSAGE',
img = "/public/img/Apps/light_mode/bank.webp"
})
return;
end
local selfname, targetname = getNameFromIdentifier(xPlayer.PlayerData.citizenid), getNameFromIdentifier(targetplayer.PlayerData.citizenid)
if not selfname or not targetname then
return;
end
local percent = amount * Cfg.BankPayTax
local endamount = amount - percent
xPlayer.Functions.RemoveMoney('bank', amount)
targetplayer.Functions.AddMoney('bank', endamount)
TriggerEvent("roadphone:addBankTransfer", numberfromsource, number, Lang:t('info.bank_money_transaction', { value = targetname }), amount)
TriggerClientEvent("roadphone:sendNotification", src, {
apptitle = 'APP_BANK_NAME',
title = 'APP_BANK_MONEY_SENT',
message = Lang:t('info.bank_app_sent_money_text', { value = amount}),
img = "/public/img/Apps/light_mode/bank.webp"
})
TriggerClientEvent("roadphone:sendNotification", targetplayer.PlayerData.source, {
apptitle = 'APP_BANK_NAME',
title = 'APP_BANK_MONEY_RECEIVED',
message = Lang:t('info.bank_app_received_money_text', { value = QBCore.Shared.Round(endamount, 2)}),
img = "/public/img/Apps/light_mode/bank.webp"
})
if amount >= Cfg.MinimumBankTransfer then
bankWebhook(src, targetplayer.source, selfname, targetname, amount)
end
end)
RegisterServerEvent("roadphone:addBankTransfer")
AddEventHandler("roadphone:addBankTransfer", function(sender, receiver, reason, amount)
if sender and receiver then
MySQL.Async.insert(
"INSERT INTO roadshop_banktransfer (sender,receiver,reason,amount) VALUES (@sender, @receiver, @reason, @amount)",
{
["@sender"] = sender,
["@receiver"] = receiver,
["@reason"] = reason,
["@amount"] = amount
}, function(id)
local transaction = {
id = id,
sender = sender,
receiver = receiver,
reason = reason,
amount = amount
}
local selfplayer = GetPlayerFromPhone(sender)
local target = GetPlayerFromPhone(receiver)
if selfplayer then
TriggerClientEvent('roadphone:bank:addTransaction', selfplayer.PlayerData.source, transaction)
end
if target then
TriggerClientEvent('roadphone:bank:addTransaction', target.PlayerData.source, transaction)
end
end)
end
end)
QBCore.Functions.CreateCallback("roadphone:getBankBalance", function(source, cb)
local xPlayer = QBCore.Functions.GetPlayer(source)
if not xPlayer then
return;
end
cb(xPlayer.Functions.GetMoney('bank'))
end)
exports("addBankTransaction", function(sender, receiver, reason, amount)
TriggerEvent("roadphone:addBankTransaction", sender, receiver, reason, amount)
end)
function getBankTransactions(number)
local result = MySQL.Sync.fetchAll('SELECT * FROM roadshop_banktransfer WHERE sender = @sender OR receiver = @receiver', {
['@sender'] = number,
['@receiver'] = number
})
return result
end
local cooldownspambank = 0
QBCore.Functions.CreateCallback('roadphone:bank:checkSpam', function(source, cb)
if cooldownspambank == 0 then
cb(0)
cooldownspambank = cooldownspambank + 1
Wait(1000)
cooldownspambank = 0
else
cb(1)
end
end)