The file i did download.. as i said i am new to scripting.. so i could not make something like that on my own.. But im gonna post both bank_systems.. I hope this helped atleast a little bit.
mysql = exports.mysql
function setElementDataEx(theElement, theParameter, theValue, syncToClient, noSyncAtall)
if syncToClient == nil then
syncToClient = false
end
if noSyncAtall == nil then
noSyncAtall = false
end
if tonumber(theValue) then
theValue = tonumber(theValue)
end
exports.anticheat:changeProtectedElementDataEx(theElement, theParameter, theValue, syncToClient, noSyncAtall)
return true
end
addEventHandler( "onResourceStart", getResourceRootElement(),
function()
-- delete all old wiretransfers
mysql:query_free("DELETE FROM wiretransfers WHERE time < NOW() - INTERVAL 4 WEEK" )
end
)
function showGeneralServiceGUI(atm)
local faction_id = tonumber( getElementData(client, "faction") )
local faction_leader = tonumber( getElementData(client, "factionleader") )
local isInFaction = false
local isFactionLeader = false
local factionType = -1
if faction_id and faction_id > 0 then
theTeam = getPlayerTeam(client)
factionType = tonumber(getElementData(theTeam, "type"))
isInFaction = true
if faction_leader == 1 then
isFactionLeader = true
end
end
local faction = getPlayerTeam(client)
local money = exports.global:getMoney(faction)
local deposit = true
local withdraw = true
local limit = 0
--outputDebugString(money)
--outputDebugString(exports.global:getMoney(client))
triggerClientEvent(client, "showBankUI", getRootElement(), isInFaction, isFactionLeader, money, deposit, limit, withdraw, factionType) -- last parameter is withdraw
end
addEvent( "bank:showGeneralServiceGUI", true )
addEventHandler( "bank:showGeneralServiceGUI", getRootElement(), showGeneralServiceGUI )
function withdrawMoneyPersonal(amount)
local state = tonumber(getElementData(client, "loggedin")) or 0
if (state == 0) then
return
end
local money = getElementData(client, "bankmoney") - amount
if money >= 0 then
exports.global:giveMoney(client, amount)
setElementDataEx(client, "bankmoney", money, true)
saveBank(client)
mysql:query_free("INSERT INTO wiretransfers (`from`, `to`, `amount`, `reason`, `type`) VALUES (" .. mysql:escape_string(getElementData(client, "dbid")) .. ", 0, " .. mysql:escape_string(amount) .. ", '', 0)" )
outputChatBox("You withdrew $" .. exports.global:formatMoney(amount) .. " from your personal account.", client, 255, 194, 14)
exports.logs:dbLog(client, 25, client, "WITHDRAW " .. amount)
else
outputChatBox( "No.", client, 255, 0, 0 )
end
end
addEvent("withdrawMoneyPersonal", true)
addEventHandler("withdrawMoneyPersonal", getRootElement(), withdrawMoneyPersonal)
function depositMoneyPersonal(amount)
local state = tonumber(getElementData(client, "loggedin")) or 0
if (state == 0) then
return
end
if exports.global:takeMoney(client, amount) then
local money = getElementData(client, "bankmoney")
setElementDataEx(client, "bankmoney", money+amount, true)
saveBank(client)
mysql:query_free("INSERT INTO wiretransfers (`from`, `to`, `amount`, `reason`, `type`) VALUES (0, " .. mysql:escape_string(getElementData(client, "dbid")) .. ", " .. mysql:escape_string(amount) .. ", '', 1)" )
outputChatBox("You deposited $" .. exports.global:formatMoney(amount) .. " into your personal account.", client, 255, 194, 14)
exports.logs:dbLog(client, 25, client, "DEPOSIT " .. amount)
else
outputChatBox("You don't have that amount in one sorted money item.", client, 255, 194, 14)
end
end
addEvent("depositMoneyPersonal", true)
addEventHandler("depositMoneyPersonal", getRootElement(), depositMoneyPersonal)
function withdrawMoneyBusiness(amount)
local state = tonumber(getElementData(client, "loggedin")) or 0
if (state == 0) then
return
end
local theTeam = getPlayerTeam(client)
if exports.global:takeMoney(theTeam, amount) then
if exports.global:giveMoney(client, amount) then
mysql:query_free("INSERT INTO wiretransfers (`from`, `to`, `amount`, `reason`, `type`) VALUES (" .. mysql:escape_string(-getElementData(theTeam, "id")) .. ", " .. mysql:escape_string(getElementData(client, "dbid")) .. ", " .. mysql:escape_string(amount) .. ", '', 4)" )
outputChatBox("You withdrew $" .. exports.global:formatMoney(amount) .. " from your business account.", client, 255, 194, 14)
exports.logs:dbLog(client, 25, theTeam, "WITHDRAW FROM BUSINESS " .. amount)
end
end
end
addEvent("withdrawMoneyBusiness", true)
addEventHandler("withdrawMoneyBusiness", getRootElement(), withdrawMoneyBusiness)
function depositMoneyBusiness(amount)
local state = tonumber(getElementData(client, "loggedin")) or 0
if (state == 0) then
return
end
if exports.global:takeMoney(client, amount) then
local theTeam = getPlayerTeam(client)
if exports.global:giveMoney(theTeam, amount) then
mysql:query_free("INSERT INTO wiretransfers (`from`, `to`, `amount`, `reason`, `type`) VALUES (" .. mysql:escape_string(getElementData(client, "dbid")) .. ", " .. mysql:escape_string(-getElementData(theTeam, "id")) .. ", " .. mysql:escape_string(amount) .. ", '', 5)" )
outputChatBox("You deposited $" .. exports.global:formatMoney(amount) .. " into your business account.", client, 255, 194, 14)
exports.logs:dbLog(client, 25, theTeam, "DEPOSIT TO BUSINESS " .. amount)
end
else
outputChatBox("You don't have that amount in one sorted money item.", client, 255, 194, 14)
end
end
addEvent("depositMoneyBusiness", true)
addEventHandler("depositMoneyBusiness", getRootElement(), depositMoneyBusiness)
function transferMoneyToPersonal(business, name, amount, reason)
local state = tonumber(getElementData(client, "loggedin")) or 0
if (state == 0) then
return
end
reason = mysql:escape_string(reason)
local reciever = getTeamFromName(name) or getPlayerFromName(string.gsub(name," ","_"))
local dbid = nil
if not reciever then
local result = mysql:query("SELECT id FROM characters WHERE charactername='" .. mysql:escape_string(string.gsub(name," ","_")) .. "' LIMIT 1")
if result then
if mysql:num_rows(result) > 0 then
local row = mysql:fetch_assoc(result)
dbid = tonumber(row["id"])
found = true
end
mysql:free_result(result)
else
outputDebugString("s_bank_system.lua: mysql:query failed", 1, 255, 0, 0)
end
else
dbid = getElementData(reciever, "id") and -getElementData(reciever, "id") or getElementData(reciever, "dbid")
end
if not dbid and not reciever then
outputChatBox("Player not found. Please enter the full character name.", client, 255, 0, 0)
else
if business then
local theTeam = getPlayerTeam(client)
if -getElementData(theTeam, "id") == dbid then
outputChatBox("You can't wiretransfer money to yourself.", client, 255, 0, 0)
return
end
if exports.global:takeMoney(theTeam, amount) then
mysql:query_free("INSERT INTO wiretransfers (`from`, `to`, `amount`, `reason`, `type`) VALUES (" .. mysql:escape_string(( -getElementData( theTeam, "id" ) )) .. ", " .. mysql:escape_string(dbid) .. ", " .. mysql:escape_string(amount) .. ", '" .. mysql:escape_string(reason) .. "', 3)" )
end
else
if reciever == client then
outputChatBox("You can't wiretransfer money to yourself.", client, 255, 0, 0)
return
end
if getElementData(client, "bankmoney") - amount >= 0 then
setElementDataEx(client, "bankmoney", getElementData(client, "bankmoney") - amount, true)
mysql:query_free("INSERT INTO wiretransfers (`from`, `to`, `amount`, `reason`, `type`) VALUES (" .. mysql:escape_string(getElementData(client, "dbid")) .. ", " .. mysql:escape_string(dbid) .. ", " .. mysql:escape_string(amount) .. ", '" .. mysql:escape_string(reason) .. "', 2)" )
else
outputChatBox( "No.", client, 255, 0, 0 )
return
end
end
if reciever then
if dbid < 0 then
exports.global:giveMoney(reciever, amount)
else
setElementDataEx(reciever, "bankmoney", getElementData(reciever, "bankmoney") + amount, true)
saveBank(reciever)
end
else
mysql:query_free("UPDATE characters SET bankmoney=bankmoney+" .. mysql:escape_string(amount) .. " WHERE id=" .. mysql:escape_string(dbid))
end
triggerClientEvent(client, "hideBankUI", client)
outputChatBox("You transfered $" .. exports.global:formatMoney(amount) .. " from your "..(business and "business" or "personal").." account to "..name..(string.sub(name,-1) == "s" and "'" or "'s").." account.", client, 255, 194, 14)
if business then
exports.logs:dbLog(client, 25, { getPlayerTeam(client), "ch" .. dbid }, "TRANSFER FROM BUSINESS " .. amount .. " TO " .. name)
else
exports.logs:dbLog(client, 25, { client, "ch" .. dbid }, "TRANSFER " .. amount .. " TO " .. name)
end
saveBank(client)
end
end
addEvent("transferMoneyToPersonal", true)
addEventHandler("transferMoneyToPersonal", getRootElement(), transferMoneyToPersonal)
-- TRANSACTION HISTORY STUFF
--[[
Transaction Types:
0: Withdraw Personal
1: Deposit Personal
2: Transfer from Personal to Personal
3: Transfer from Business to Personal
4: Withdraw Business
5: Deposit Business
6: Wage/State Benefits
7: everything in payday except Wage/State Benefits
8: faction budget
9: fuel
10: repair
]]
function tellTransfersPersonal(cardInfo)
local dbid = getElementData(client, "dbid")
if cardInfo then
dbid = cardInfo
end
tellTransfers(client, dbid, "recievePersonalTransfer")
end
function tellTransfersBusiness()
local dbid = tonumber(getElementData(getPlayerTeam(client), "id")) or 0
if dbid > 0 then
tellTransfers(client, -dbid, "recieveBusinessTransfer")
end
end
function tellTransfers(source, dbid, event)
local where = ""
if type(dbid) == "table" then
where = "( ( `from` = (SELECT `card_owner` FROM `atm_cards` WHERE `card_number` = '" .. dbid[2] .. "' LIMIT 1) ) OR (`to` = (SELECT `card_owner` FROM `atm_cards` WHERE `card_number` = '" .. dbid[2] .. "' LIMIT 1) ) )"
else
where = "( `from` = " .. dbid .. " OR `to` = " .. dbid .. " )"
end
if tonumber(dbid) and dbid < 0 then
where = where .. " AND type != 6" -- skip paydays for factions
else
where = where .. " AND type != 4 AND type != 5" -- skip stuff that's not paid from bank money
end
-- `w.time` - INTERVAL 1 hour as 'newtime'
-- hour correction
local query = mysql:query("SELECT w.*, c.charactername as characterfrom, c2.charactername as characterto,w.`time` - INTERVAL 1 hour as 'newtime' FROM wiretransfers w LEFT JOIN characters c ON c.id = `from` LEFT JOIN characters c2 ON c2.id = `to` WHERE "..where.." ORDER BY id DESC LIMIT 40;")
if query then
local continue = true
while continue do
row = mysql:fetch_assoc(query)
if not row then break end
local id = tonumber(row["id"])
local amount = tonumber(row["amount"])
local time = row["newtime"]
local type = tonumber(row["type"])
local reason = row["reason"]
if reason == mysql_null() then
reason = ""
end
local from, to = "-", "-"
if row["characterfrom"] ~= mysql_null() then
from = row["characterfrom"]:gsub("_", " ")
if row["from_card"] ~= mysql_null() then
from = from.." ("..row["from_card"]..")"
end
elseif tonumber(row["from"]) then
num = tonumber(row["from"])
if num < 0 then
local theTeam = exports.pool:getElement("team", -num)
from = theTeam and getTeamName(exports.pool:getElement("team", -num)) or "-"
elseif num == 0 and ( type == 6 or type == 7 ) then
from = "Government"
end
end
if row["characterto"] ~= mysql_null() then
to = row["characterto"]:gsub("_", " ")
if row["to_card"] ~= mysql_null() then
to = to.." ("..row["to_card"]..")"
end
elseif tonumber(row["to"]) and tonumber(row["to"]) < 0 then
local theTeam = exports.pool:getElement("team", -tonumber(row["to"]))
if theTeam then
to = getTeamName(theTeam)
end
end
if amount > 0 then
if tonumber(dbid) then -- Not ATM
if tostring(row["from"]) == tostring(dbid) then
amount = -amount
end
elseif tostring(row["from_card"]) == tostring(dbid[2]) or tostring(row["from"]) == tostring(dbid[4]) then
amount = -amount
end
end
--if type >= 2 and type <= 5 and tonumber(row['from']) == dbid then
-- amount = -amount
--end
--[[if amount < 0 then
amount = "-$" .. -amount
else
amount = "$" .. amount
end]]
local details = "-"
if row["details"] ~= mysql_null() then
details = row["details"]
end
triggerClientEvent(source, event, source, id, amount, time, type, from, to, reason, details)
end
mysql:free_result(query)
else
outputDebugString("Mysql error @ s_bank_system.lua\tellTransfers", 2)
end
end
addEvent("tellTransfersPersonal", true)
addEventHandler("tellTransfersPersonal", getRootElement(), tellTransfersPersonal)
addEvent("tellTransfersBusiness", true)
addEventHandler("tellTransfersBusiness", getRootElement(), tellTransfersBusiness)
function addBankTransactionLog(fromAccount, toAccount, amount, type, reason, details, fromCard, toCard)
if not amount or not tonumber(amount) or not type or not tonumber(type) or fromAccount == toAccount then
return false
end
local sql = "INSERT INTO wiretransfers SET `amount` = '"..amount.."', type = '"..type.."' "
if fromAccount then
sql = sql..", `from` = '"..exports.global:toSQL(fromAccount).."' "
end
if fromCard then
sql = sql..", `from_card` = '"..exports.global:toSQL(fromCard).."' "
end
if toCard then
sql = sql..", `to_card` = '"..exports.global:toSQL(toCard).."' "
end
if toAccount then
sql = sql..", `to` = '"..exports.global:toSQL(toAccount).."' "
end
if reason then
sql = sql..", `reason` = '"..exports.global:toSQL(reason).."' "
end
if details then
sql = sql..", `details` = '"..exports.global:toSQL(details).."' "
end
return mysql:query_free(sql)
end
addEvent("addBankTransactionLog", true)
addEventHandler("addBankTransactionLog", getRootElement(), addBankTransactionLog)
--MAXIME
function hasBankMoney(thePlayer, amount)
amount = tonumber(amount)
amount = math.floor(math.abs(amount))
if getElementType(thePlayer) == "player" then
return getElementData(thePlayer, "bankmoney") >= amount
elseif getElementType(thePlayer) == "team" then
return getElementData(thePlayer, "money") >= amount
end
end
function takeBankMoney(thePlayer, amount)
amount = tonumber(amount)
amount = math.floor(math.abs(amount))
if not hasBankMoney(thePlayer, amount) then
return false, "Lack of money in bank"
end
if getElementType(thePlayer) == "player" then
return setElementDataEx(thePlayer, "bankmoney", getElementData(thePlayer, "bankmoney")-amount, true) and mysql:query_free("UPDATE `characters` SET `bankmoney`=bankmoney-"..amount.." WHERE `id`='"..getElementData(thePlayer, "dbid").."' ")
elseif getElementType(thePlayer) == "team" then
return setElementDataEx(thePlayer, "money", getElementData(thePlayer, "money")-amount, true) and mysql:query_free("UPDATE `factions` SET `bankbalance`=bankbalance-"..amount.." WHERE `id`='"..getElementData(thePlayer, "id").."' ")
end
end
function giveBankMoney(thePlayer, amount)
amount = tonumber(amount)
amount = math.floor(math.abs(amount))
if getElementType(thePlayer) == "player" then
return setElementDataEx(thePlayer, "bankmoney", getElementData(thePlayer, "bankmoney")+amount, true) and mysql:query_free("UPDATE `characters` SET `bankmoney`=bankmoney+"..amount.." WHERE `id`='"..getElementData(thePlayer, "dbid").."' ")
elseif getElementType(thePlayer) == "team" then
return setElementDataEx(thePlayer, "money", getElementData(thePlayer, "money")+amount, true) and mysql:query_free("UPDATE `factions` SET `bankbalance`=bankbalance+"..amount.." WHERE `id`='"..getElementData(thePlayer, "id").."' ")
end
end
function setBankMoney(thePlayer, amount)
amount = tonumber(amount)
amount = math.floor(math.abs(amount))
if getElementType(thePlayer) == "player" then
return setElementDataEx(thePlayer, "bankmoney", amount, true) and mysql:query_free("UPDATE `characters` SET `bankmoney`="..amount.." WHERE `id`='"..getElementData(thePlayer, "dbid").."' ")
elseif getElementType(thePlayer) == "team" then
return setElementDataEx(thePlayer, "money", amount, true) and mysql:query_free("UPDATE `factions` SET `bankbalance`="..amount.." WHERE `id`='"..getElementData(thePlayer, "id").."' ")
end
end
version = "Bank System v3.0 [06.09.2014]"
wBank, bClose, lBalance, tabPanel, tabPersonal, tabPersonalTransactions, tabBusiness, tabBusinessTransactions, lWithdrawP, tWithdrawP, bWithdrawP, lDepositP, tDepositP, bDepositP = nil
lWithdrawB, tWithdrawB, bWithdrawB, lDepositB, tDepositB, bDepositB, lBalanceB, gPersonalTransactions, gBusinessTransactions = nil
gfactionBalance = nil
cooldown = nil
lastUsedATM = nil
_depositable = nil
_withdrawable = nil
limitedwithdraw = 0
local localPlayer = getLocalPlayer()
function tonumber2( num )
if type(num) == "number" then
return num
else
num = num:gsub(",",""):gsub("%$","")
return tonumber(num)
end
end
local bankPed = createPed(150, 2358.710205, 2361.2133789, 2022.919189)
setPedRotation(bankPed, 90.4609375)
setElementInterior(bankPed, 3)
function updateTabStuff()
if guiGetSelectedTab(tabPanel) == tabPersonalTransactions then
guiGridListClear(gPersonalTransactions)
triggerServerEvent("tellTransfersPersonal", localPlayer, cardInfoSaved)
elseif guiGetSelectedTab(tabPanel) == tabBusinessTransactions then
guiGridListClear(gBusinessTransactions)
triggerServerEvent("tellTransfersBusiness", localPlayer)
end
end
function showBankUI(isInFaction, isFactionLeader, factionBalance, depositable, limit, withdrawable, factionType)
if not (wBank) then
if getElementData(getLocalPlayer(), "exclusiveGUI") or not isCameraOnPlayer() then
return false
end
cardInfoSaved = nil
_depositable = depositable
_withdrawable = withdrawable
lastUsedATM = source
limitedwithdraw = limit
setElementData(getLocalPlayer(), "exclusiveGUI", true, false)
local width, height = 600, 400
local scrWidth, scrHeight = guiGetScreenSize()
local x = scrWidth/2 - (width/2)
local y = scrHeight/2 - (height/2)
local transactionColumns = {
{ "ID", 0.09 },
{ "From", 0.2 },
{ "To", 0.2 },
{ "Amount", 0.1 },
{ "Date", 0.2 },
{ "Reason", 0.5 }
}
local bannedTypes = {
[0] = true,
[1] = true,
}
wBank = guiCreateWindow(x, y, width, height, "Bank of Los Santos | "..version.." by Maxime © OwlGaming", false)
guiWindowSetSizable(wBank, false)
tabPanel = guiCreateTabPanel(0.05, 0.05, 0.9, 0.85, true, wBank)
addEventHandler( "onClientGUITabSwitched", tabPanel, updateTabStuff )
tabPersonal = guiCreateTab("Personal Banking", tabPanel)
tabPersonalTransactions = guiCreateTab("Personal Transactions", tabPanel)
local hoursplayed = getElementData(localPlayer, "hoursplayed") or 0
if (isInFaction) and (isFactionLeader) and not (bannedTypes[factionType]) then
tabBusiness = guiCreateTab("Business Banking", tabPanel)
gfactionBalance = factionBalance
lBalanceB = guiCreateLabel(0.1, 0.05, 0.9, 0.05, "Balance: $" .. exports.global:formatMoney(factionBalance), true, tabBusiness)
guiSetFont(lBalanceB, "default-bold-small")
if (withdrawable) then
-- WITHDRAWAL BUSINESS
lWithdrawB = guiCreateLabel(0.1, 0.15, 0.2, 0.05, "Withdraw:", true, tabBusiness)
guiSetFont(lWithdrawB, "default-bold-small")
tWithdrawB = guiCreateEdit(0.22, 0.13, 0.2, 0.075, "0", true, tabBusiness)
guiSetFont(tWithdrawB, "default-bold-small")
addEventHandler("onClientGUIClick", tWithdrawB, function()
if guiGetText(tWithdrawB) == "0" then
guiSetText(tWithdrawB, "")
end
end, false)
bWithdrawB = guiCreateButton(0.44, 0.13, 0.2, 0.075, "Withdraw", true, tabBusiness)
addEventHandler("onClientGUIClick", bWithdrawB, withdrawMoneyBusiness, false)
else
lWithdrawB = guiCreateLabel(0.1, 0.15, 0.5, 0.05, "This ATM does not support the withdraw function.", true, tabBusiness)
guiSetFont(lWithdrawB, "default-bold-small")
end
if (depositable) then
-- DEPOSIT BUSINESS
lDepositB = guiCreateLabel(0.1, 0.25, 0.2, 0.05, "Deposit:", true, tabBusiness)
guiSetFont(lDepositB, "default-bold-small")
tDepositB = guiCreateEdit(0.22, 0.23, 0.2, 0.075, "0", true, tabBusiness)
guiSetFont(tDepositB, "default-bold-small")
addEventHandler("onClientGUIClick", tDepositB, function()
if guiGetText(tDepositB) == "0" then
guiSetText(tDepositB, "")
end
end, false)
bDepositB = guiCreateButton(0.44, 0.23, 0.2, 0.075, "Deposit", true, tabBusiness)
addEventHandler("onClientGUIClick", bDepositB, depositMoneyBusiness, false)
else
lDepositB = guiCreateLabel(0.1, 0.25, 0.5, 0.05, "This ATM does not support the deposit function.", true, tabBusiness)
guiSetFont(lDepositB, "default-bold-small")
if limitedwithdraw > 0 and withdrawable then
tDepositB = guiCreateLabel(0.67, 0.15, 0.2, 0.05, "Max: $" .. exports.global:formatMoney( limitedwithdraw - ( getElementData( source, "withdrawn" ) or 0 ) ) .. ".", true, tabBusiness)
guiSetFont(tDepositB, "default-bold-small")
end
end
if hoursplayed >= 12 then
-- TRANSFER BUSINESS
lTransferB = guiCreateLabel(0.1, 0.45, 0.2, 0.05, "Transfer:", true, tabBusiness)
guiSetFont(lTransferB, "default-bold-small")
tTransferB = guiCreateEdit(0.22, 0.43, 0.2, 0.075, "0", true, tabBusiness)
guiSetFont(tTransferB, "default-bold-small")
addEventHandler("onClientGUIClick", tTransferB, function()
if guiGetText(tTransferB) == "0" then
guiSetText(tTransferB, "")
end
end, false)
bTransferB = guiCreateButton(0.44, 0.43, 0.2, 0.075, "Transfer to", true, tabBusiness)
addEventHandler("onClientGUIClick", bTransferB, transferMoneyBusiness, false)
eTransferB = guiCreateEdit(0.66, 0.43, 0.3, 0.075, "<Bank Account Number>", true, tabBusiness)
addEventHandler("onClientGUIClick", eTransferB, function()
if guiGetText(eTransferB) == "<Bank Account Number>" then
guiSetText(eTransferB, "")
end
end, false)
lTransferBReason = guiCreateLabel(0.1, 0.55, 0.2, 0.05, "Reason:", true, tabBusiness)
guiSetFont(lTransferBReason, "default-bold-small")
tTransferBReason = guiCreateEdit(0.22, 0.54, 0.74, 0.075, "<What is this transaction for?>", true, tabBusiness)
addEventHandler("onClientGUIClick", tTransferBReason, function()
if guiGetText(tTransferBReason) == "<What is this transaction for?>" then
guiSetText(tTransferBReason, "")
end
end, false)
end
-- TRANSACTION HISTORY
tabBusinessTransactions = guiCreateTab("Business Transactions", tabPanel)
gBusinessTransactions = guiCreateGridList(0.02, 0.02, 0.96, 0.96, true, tabBusinessTransactions)
for key, value in ipairs( transactionColumns ) do
guiGridListAddColumn( gBusinessTransactions, value[1], value[2] or 0.1 )
end
end
bClose = guiCreateButton(0.75, 0.91, 0.2, 0.1, "Close", true, wBank)
addEventHandler("onClientGUIClick", bClose, hideBankUI, false)
local balance = getElementData(localPlayer, "bankmoney")
--outputDebugString(balance)
--outputDebugString(exports.global:formatMoney(balance))
--:~
lBalance = guiCreateLabel(0.1, 0.05, 0.9, 0.05, "Balance: $" .. exports.global:formatMoney(balance), true, tabPersonal)
guiSetFont(lBalance, "default-bold-small")
if withdrawable then
-- WITHDRAWAL PERSONAL
lWithdrawP = guiCreateLabel(0.1, 0.15, 0.2, 0.05, "Withdraw:", true, tabPersonal)
guiSetFont(lWithdrawP, "default-bold-small")
tWithdrawP = guiCreateEdit(0.22, 0.13, 0.2, 0.075, "0", true, tabPersonal)
guiSetFont(tWithdrawP, "default-bold-small")
addEventHandler("onClientGUIClick", tWithdrawP, function()
if guiGetText(tWithdrawP) == "0" then
guiSetText(tWithdrawP, "")
end
end, false)
bWithdrawP = guiCreateButton(0.44, 0.13, 0.2, 0.075, "Withdraw", true, tabPersonal)
addEventHandler("onClientGUIClick", bWithdrawP, withdrawMoneyPersonal, false)
else
lWithdrawP = guiCreateLabel(0.1, 0.15, 0.5, 0.05, "This ATM does not support the withdraw function.", true, tabPersonal)
guiSetFont(lWithdrawP, "default-bold-small")
end
if (depositable) then
-- DEPOSIT PERSONAL
lDepositP = guiCreateLabel(0.1, 0.25, 0.2, 0.05, "Deposit:", true, tabPersonal)
guiSetFont(lDepositP, "default-bold-small")
tDepositP = guiCreateEdit(0.22, 0.23, 0.2, 0.075, "0", true, tabPersonal)
guiSetFont(tDepositP, "default-bold-small")
addEventHandler("onClientGUIClick", tDepositP, function()
if guiGetText(tDepositP) == "0" then
guiSetText(tDepositP, "")
end
end, false)
bDepositP = guiCreateButton(0.44, 0.23, 0.2, 0.075, "Deposit", true, tabPersonal)
addEventHandler("onClientGUIClick", bDepositP, depositMoneyPersonal, false)
else
lDepositP = guiCreateLabel(0.1, 0.25, 0.5, 0.05, "This ATM does not support the deposit function.", true, tabPersonal)
guiSetFont(lDepositP, "default-bold-small")
if limitedwithdraw > 0 and withdrawable then
tDepositP = guiCreateLabel(0.67, 0.15, 0.2, 0.05, "Max: $" .. ( limitedwithdraw - ( getElementData( source, "withdrawn" ) or 0 ) ) .. ".", true, tabPersonal)
guiSetFont(tDepositP, "default-bold-small")
end
end
if hoursplayed >= 12 then
-- TRANSFER PERSONAL
lTransferP = guiCreateLabel(0.1, 0.45, 0.2, 0.05, "Transfer:", true, tabPersonal)
guiSetFont(lTransferP, "default-bold-small")
tTransferP = guiCreateEdit(0.22, 0.43, 0.2, 0.075, "0", true, tabPersonal)
guiSetFont(tTransferP, "default-bold-small")
addEventHandler("onClientGUIClick", tTransferP, function()
if guiGetText(tTransferP) == "0" then
guiSetText(tTransferP, "")
end
end, false)
bTransferP = guiCreateButton(0.44, 0.43, 0.2, 0.075, "Transfer to", true, tabPersonal)
addEventHandler("onClientGUIClick", bTransferP, transferMoneyPersonal, false)
eTransferP = guiCreateEdit(0.66, 0.43, 0.3, 0.075, "<Player/Faction Name>", true, tabPersonal)
addEventHandler("onClientGUIClick", eTransferP, function()
if guiGetText(eTransferP) == "<Player/Faction Name>" then
guiSetText(eTransferP, "")
end
end, false)
lTransferPReason = guiCreateLabel(0.1, 0.55, 0.2, 0.05, "Reason:", true, tabPersonal)
guiSetFont(lTransferPReason, "default-bold-small")
tTransferPReason = guiCreateEdit(0.22, 0.54, 0.74, 0.075, "<What is this transaction for?>", true, tabPersonal)
addEventHandler("onClientGUIClick", tTransferPReason, function()
if guiGetText(tTransferPReason) == "<What is this transaction for?>" then
guiSetText(tTransferPReason, "")
end
end, false)
end
-- TRANSACTION HISTORY
gPersonalTransactions = guiCreateGridList(0.02, 0.02, 0.96, 0.96, true, tabPersonalTransactions)
for key, value in ipairs( transactionColumns ) do
guiGridListAddColumn( gPersonalTransactions, value[1], value[2] or 0.1 )
end
guiSetInputEnabled(true)
--outputChatBox("Welcome to the Bank of Los Santos")
end
end
addEvent("showBankUI", true)
addEventHandler("showBankUI", getRootElement(), showBankUI)
function hideBankUI()
if isElement(wBank) then
destroyElement(wBank)
wBank = nil
guiSetInputEnabled(false)
cooldown = setTimer(function() cooldown = nil end, 1000, 1)
setElementData(getLocalPlayer(), "exclusiveGUI", false, false)
end
end
addEvent("hideBankUI", true)
addEventHandler("hideBankUI", getRootElement(), hideBankUI)
addEventHandler ( "onSapphireXMBShow", getRootElement(), hideBankUI )
addEventHandler("onClientChangeChar", getRootElement(), hideBankUI)
function withdrawMoneyPersonal(button)
if (button=="left") then
local amount = tonumber2(guiGetText(tWithdrawP))
local money = getElementData(localPlayer, "bankmoney")
local oldamount = getElementData( lastUsedATM, "withdrawn" ) or 0
if not amount or amount <= 0 or math.ceil( amount ) ~= amount then
outputChatBox("Please enter a positive amount!", 255, 0, 0)
elseif (amount>money) then
outputChatBox("You do not have enough funds.", 255, 0, 0)
elseif not _depositable and limitedwithdraw ~= 0 and oldamount + amount > limitedwithdraw then
outputChatBox("This ATM only allows you to withdraw $" .. exports.global:formatMoney( limitedwithdraw - oldamount ) .. ".")
else
setElementData( lastUsedATM, "withdrawn", oldamount + amount, false )
setTimer(
function( atm, amount )
setElementData( atm, "withdrawn", getElementData( atm, "withdrawn" ) - amount )
end,
120000, 1, lastUsedATM, amount
)
hideBankUI()
triggerServerEvent("withdrawMoneyPersonal", localPlayer, amount)
end
end
end
function depositMoneyPersonal(button)
if (button=="left") then
local amount = tonumber2(guiGetText(tDepositP))
if not amount or amount <= 0 or math.ceil( amount ) ~= amount then
outputChatBox("Please enter a positive amount!", 255, 0, 0)
elseif not exports.global:hasMoney(localPlayer, amount) then
outputChatBox("You do not have enough funds.", 255, 0, 0)
else
hideBankUI()
triggerServerEvent("depositMoneyPersonal", localPlayer, amount)
end
end
end
function transferMoneyPersonal(button)
if (button=="left") then
local amount = tonumber2(guiGetText(tTransferP))
local money = getElementData(localPlayer, "bankmoney")
local reason = guiGetText(tTransferPReason)
local playername = guiGetText(eTransferP)
if not amount or amount <= 0 or math.ceil( amount ) ~= amount then
outputChatBox("Please enter a positive amount!", 255, 0, 0)
elseif (amount>money) then
outputChatBox("You do not have enough funds.", 255, 0, 0)
elseif reason == "" then
outputChatBox("Please enter a reason for the Transfer!", 255, 0, 0)
elseif playername == "" then
outputChatBox("Please enter the full character name of the reciever!", 255, 0, 0)
else
triggerServerEvent("transferMoneyToPersonal", localPlayer, false, playername, amount, reason)
guiSetText(tTransferP, "0")
guiSetText(tTransferPReason, "")
guiSetText(eTransferP, "")
end
end
end
function withdrawMoneyBusiness(button)
if (button=="left") then
local amount = tonumber2(guiGetText(tWithdrawB))
local oldamount = getElementData( lastUsedATM, "withdrawn" ) or 0
if not amount or amount <= 0 or math.ceil( amount ) ~= amount then
outputChatBox("Please enter a positive amount!", 255, 0, 0)
elseif (amount>gfactionBalance) then
outputChatBox("You do not have enough funds.", 255, 0, 0)
elseif not _depositable and limitedwithdraw ~= 0 and oldamount + amount > limitedwithdraw then
outputChatBox("This ATM only allows you to withdraw $" .. exports.global:formatMoney( limitedwithdraw - oldamount ) .. ".")
else
setElementData( lastUsedATM, "withdrawn", oldamount + amount, false )
setTimer(
function( atm, amount )
setElementData( atm, "withdrawn", getElementData( atm, "withdrawn" ) - amount, false )
end,
120000, 1, lastUsedATM, amount
)
hideBankUI()
triggerServerEvent("withdrawMoneyBusiness", localPlayer, amount)
end
end
end
function depositMoneyBusiness(button)
if (button=="left") then
local amount = tonumber2(guiGetText(tDepositB))
if not amount or amount <= 0 or math.ceil( amount ) ~= amount then
outputChatBox("Please enter a positive amount!", 255, 0, 0)
elseif not exports.global:hasMoney(localPlayer, amount) then
outputChatBox("You do not have enough funds.", 255, 0, 0)
else
hideBankUI()
triggerServerEvent("depositMoneyBusiness", localPlayer, amount)
end
end
end
function transferMoneyBusiness(button)
if (button=="left") then
local amount = tonumber2(guiGetText(tTransferB))
local playername = guiGetText(eTransferB)
local reason = guiGetText(tTransferBReason)
if not amount or amount <= 0 or math.ceil( amount ) ~= amount then
outputChatBox("Please enter a positive amount!", 255, 0, 0)
elseif (amount>gfactionBalance) then
outputChatBox("You do not have enough funds.", 255, 0, 0)
elseif reason == "" then
outputChatBox("Please enter a reason for the Transfer!", 255, 0, 0)
elseif playername == "" then
outputChatBox("Please enter the full character name of the reciever!", 255, 0, 0)
else
triggerServerEvent("transferMoneyToPersonal", localPlayer, true, playername, amount, reason)
guiSetText(tTransferB, "0")
guiSetText(tTransferBReason, "")
guiSetText(eTransferB, "")
end
end
end
function getTransactionReason(type, reason, from)
if type == 0 or type == 4 then
return "Withdraw"
elseif type == 1 or type == 5 then
return "Deposit"
elseif type == 6 then
return tostring(reason or "")
elseif type == 7 then
return "Payday (Biz+Interest+Donator)"
elseif type == 8 then
return "Budget"
elseif type == 9 then
return tostring("Fuel: "..math.ceil(reason).."L")
elseif type == 10 then
return "Repair"
elseif type == 11 then
return "Wage"
else
return "Transfer: " .. tostring(reason or "")
end
end
function recieveTransfer(grid, id, amount, time, type, from, to, reason, details)
local row = guiGridListAddRow(grid)
guiGridListSetItemText(grid, row, 1, tostring(id), false, true)
guiGridListSetItemText(grid, row, 2, from, false, false)
guiGridListSetItemText(grid, row, 3, to, false, false)
if amount < 0 then
guiGridListSetItemText(grid, row, 4, "-$"..exports.global:formatMoney(math.abs(amount)), false, true)
guiGridListSetItemColor(grid, row, 4, 255, 127, 127)
else
guiGridListSetItemText(grid, row, 4, "$"..exports.global:formatMoney(amount), false, true)
guiGridListSetItemColor(grid, row, 4, 127, 255, 127)
end
guiGridListSetItemText(grid, row, 5, time, false, false)
guiGridListSetItemText(grid, row, 6, " " .. getTransactionReason(type, reason, from), false, false)
guiGridListSetItemText(grid, row, 7, " " .. details, false, false)
end
function recievePersonalTransfer(...)
recieveTransfer(gPersonalTransactions, ...)
end
addEvent("recievePersonalTransfer", true)
addEventHandler("recievePersonalTransfer", localPlayer, recievePersonalTransfer)
function recieveBusinessTransfer(...)
recieveTransfer(gBusinessTransactions, ...)
end
addEvent("recieveBusinessTransfer", true)
addEventHandler("recieveBusinessTransfer", localPlayer, recieveBusinessTransfer)
function checkDataChange(dn)
if wBank then
if dn == "bankmoney" and source == localPlayer then
guiSetText(lBalance, "Balance: $" .. exports.global:formatMoney(getElementData(source, "bankmoney")))
elseif dn == "money" and source == getPlayerTeam(localPlayer) then
gfactionBalance = getElementData(source, "money")
guiSetText(lBalanceB, "Balance: $" .. exports.global:formatMoney(gfactionBalance))
end
end
end
addEventHandler("onClientElementDataChange", getRootElement(), checkDataChange)
local thisResourceElement = getResourceRootElement(getThisResource())
function cleanUp()
setElementData(getLocalPlayer(), "exclusiveGUI", false, false)
end
addEventHandler("onClientResourceStart", thisResourceElement, cleanUp)
function fadeOut()
fadeCamera ( true, 1, 0, 0, 0 )
end
addEvent("bank:fadeOut", true)
addEventHandler("bank:fadeOut", localPlayer, fadeOut)
function isCameraOnPlayer()
local vehicle = getPedOccupiedVehicle(getLocalPlayer())
if vehicle then
return getCameraTarget( ) == vehicle
else
return getCameraTarget( ) == getLocalPlayer()
end
end
function hasBankMoney(thePlayer, amount)
amount = tonumber(amount)
amount = math.floor(math.abs(amount))
return getElementData(thePlayer, "bankmoney") >= amount
end