1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-08-05 10:50:58 +02:00
parent 9e0a584816
commit 02dd8bf93c
26 changed files with 0 additions and 6730 deletions

Binary file not shown.

View file

@ -1,7 +0,0 @@
Hi, thank you for buying okokBanking! :)
If you need help contact me on discord: okok#3488
Discord server: https://discord.gg/okok
Docs: https://docs.okokscripts.io/
-> Installation Guide: https://docs.okokscripts.io/scripts/okokbanking

View file

@ -1,977 +0,0 @@
local QBCore = exports["qb-core"]:GetCoreObject()
local PlayerData = {}
local trans = {}
local societyTrans = {}
local societyIdent, societyDays
local didAction = false
local isBankOpened = false
local canAccessSociety = false
local society = ''
local societyInfo
local closestATM, atmPos
local playerName, playerBankMoney, playerIBAN, trsIdentifier, allDaysValues, walletMoney
local targetOptionsNames = { atm = 'okokBanking:ATM', bank = 'okokBanking:Bank'}
local BankZonesId, AtmModels = {}, {}
function GenerateIBAN()
math.randomseed(GetGameTimer())
local stringFormat = "%0"..Config.IBANNumbers.."d"
local number = math.random(0, 10^Config.IBANNumbers-1)
number = string.format(stringFormat, number)
local iban = Config.IBANPrefix..number:upper()
local isIBanUsed = true
local hasChecked = false
while true do
Wait(10)
if isIBanUsed and not hasChecked then
isIBanUsed = false
QBCore.Functions.TriggerCallback("okokBanking:IsIBanUsed", function(isUsed)
if isUsed ~= nil then
isIBanUsed = true
number = math.random(0, 10^Config.IBANNumbers-1)
number = string.format("%03d", number)
iban = Config.IBANPrefix..number:upper()
elseif isUsed == nil then
hasChecked = true
isIBanUsed = false
end
canLoop = true
end, iban)
elseif not isIBanUsed and hasChecked then
break
end
end
TriggerServerEvent('okokBanking:SetIBAN', iban)
end
function string.starts(string, start)
return string.sub(string, 1, string.len(start)) == start
end
function openBank()
local isCreatingSociety = false
local hasJob = false
local playeJob = QBCore.Functions.GetPlayerData().job
local playerGang = QBCore.Functions.GetPlayerData().gang
local playerJobName = ''
local playerGangName = ''
local jobLabel = ''
isBankOpened = true
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
canAccessSociety = false
if playeJob ~= nil or playerGang ~= nil then
hasJob = true
playerJobName = playeJob.name
jobLabel = playeJob.name
society = playerJobName
playerGangName = playerGang.name
end
QBCore.Functions.TriggerCallback("okokBanking:GetPlayerInfo", function(data)
QBCore.Functions.TriggerCallback("okokBanking:GetOverviewTransactions", function(cb, identifier, allDays)
for k,v in pairs(Config.Societies) do
if playerJobName == v then
-- Check if job has configuration in JobBossRanks
if Config.JobBossRanks and Config.JobBossRanks[playerJobName] then
-- Check for specific ranks first
if Config.JobBossRanks[playerJobName].specificRanks and #Config.JobBossRanks[playerJobName].specificRanks > 0 then
for _, rank in ipairs(Config.JobBossRanks[playerJobName].specificRanks) do
if playeJob.grade.level == rank then
canAccessSociety = true
print("Boss access granted for " .. playerJobName .. " with specific rank " .. rank)
break
end
end
end
-- If not already granted access and maxRank is enabled, check for highest rank
if not canAccessSociety and Config.JobBossRanks[playerJobName].maxRank then
-- Get all job grades for this job
if QBCore.Shared.Jobs[playerJobName] and QBCore.Shared.Jobs[playerJobName].grades then
local jobGrades = QBCore.Shared.Jobs[playerJobName].grades
local highestRank = -1
-- Find the highest rank number
for grade, _ in pairs(jobGrades) do
local gradeNum = tonumber(grade)
if gradeNum and gradeNum > highestRank then
highestRank = gradeNum
end
end
-- Check if player has the highest rank
if playeJob.grade.level == highestRank then
canAccessSociety = true
print("Boss access granted for " .. playerJobName .. " with highest rank " .. highestRank)
else
print("Not highest rank for " .. playerJobName .. ", current rank: " .. playeJob.grade.level .. ", highest: " .. highestRank)
end
end
end
else
-- Fallback to original highest rank check if no configuration exists
if QBCore.Shared.Jobs[playerJobName] and QBCore.Shared.Jobs[playerJobName].grades then
local jobGrades = QBCore.Shared.Jobs[playerJobName].grades
local highestRank = -1
-- Find the highest rank number
for grade, _ in pairs(jobGrades) do
local gradeNum = tonumber(grade)
if gradeNum and gradeNum > highestRank then
highestRank = gradeNum
end
end
-- Check if player has the highest rank
if playeJob.grade.level == highestRank then
canAccessSociety = true
print("Boss access granted for " .. playerJobName .. " with highest rank " .. highestRank)
else
print("Not highest rank for " .. playerJobName .. ", current rank: " .. playeJob.grade.level .. ", highest: " .. highestRank)
end
end
end
elseif playerGangName == v then
if data.isBossGang == true then
jobLabel = playerGangName
society = playerGangName
canAccessSociety = true
end
end
end
if canAccessSociety then
isCreatingSociety = true
local societyIban = Config.IBANPrefix..jobLabel
QBCore.Functions.TriggerCallback("okokBanking:SocietyInfo", function(cb)
if cb ~= nil then
societyInfo = cb
isCreatingSociety = false
else
TriggerServerEvent("okokBanking:CreateSocietyAccount", society, jobLabel, 0, societyIban)
Wait(200)
while isCreatingSociety do
QBCore.Functions.TriggerCallback("okokBanking:SocietyInfo", function(cb)
if cb ~= nil then
societyInfo = cb
isCreatingSociety = false
end
end, society)
Wait(200)
end
end
end, society, societyIban)
end
while isCreatingSociety do
Wait(100)
end
isBankOpened = true
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
trans = cb
playerName, playerBankMoney, playerIBAN, trsIdentifier, allDaysValues, walletMoney = data.playerName, data.playerBankMoney, data.playerIBAN, identifier, allDays, data.walletMoney
QBCore.Functions.TriggerCallback("okokBanking:GetSocietyTransactions", function(societyTranscb, societyID, societyAllDays)
societyIdent = societyID
societyDays = societyAllDays
societyTrans = societyTranscb
if data.playerIBAN ~= nil then
if string.starts(data.playerIBAN, Config.IBANPrefix) then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'bankmenu',
playerName = data.playerName,
playerSex = data.sex,
playerBankMoney = data.playerBankMoney,
walletMoney = walletMoney,
playerIBAN = data.playerIBAN,
db = trans,
identifier = trsIdentifier,
graphDays = allDaysValues,
isInSociety = canAccessSociety,
RequireCC = Config.RequireCreditCardForATM,
UseSound = Config.UseOkOkBankingSounds,
})
else
GenerateIBAN()
Wait(1000)
QBCore.Functions.TriggerCallback("okokBanking:GetPlayerInfo", function(data)
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'bankmenu',
playerName = data.playerName,
playerSex = data.sex,
playerBankMoney = data.playerBankMoney,
walletMoney = walletMoney,
playerIBAN = data.playerIBAN,
db = trans,
identifier = trsIdentifier,
graphDays = allDaysValues,
isInSociety = canAccessSociety,
RequireCC = Config.RequireCreditCardForATM,
})
end)
end
end
end, society)
end)
end)
end
CreateThread(function()
while QBCore.Functions.GetPlayerData().job == nil do
Wait(10)
end
PlayerData = QBCore.Functions.GetPlayerData()
end)
CreateThread(function()
if Config.ShowBankBlips then
Wait(2000)
for k,v in ipairs(Config.BankLocations)do
local blip = AddBlipForCoord(v.x, v.y, v.z)
SetBlipSprite(blip, v.blip)
SetBlipDisplay(blip, 4)
SetBlipScale(blip, v.blipScale)
SetBlipColour(blip, v.blipColor)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName("STRING")
AddTextComponentString(v.blipText)
EndTextCommandSetBlipName(blip)
end
end
end)
if Config.UseTargetOnBank then
RegisterNetEvent("okokBanking:OpenBank")
AddEventHandler("okokBanking:OpenBank", function()
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'loading_data'
})
Wait(500)
openBank()
end)
for k, v in ipairs(Config.BankLocations) do
local boxName = targetOptionsNames.bank .. k
if v.boxZone then
if Config.TargetSystem == 'qb-target' then
local zoneId = exports['qb-target']:AddBoxZone(boxName, v.boxZone.pos, v.boxZone.size.x, v.boxZone.size.y, {
name = boxName,
heading = v.boxZone.rotation,
debugPoly = Config.DebugTargetZones,
minZ = v.boxZone.pos.z ,
maxZ = v.boxZone.maxZ,
useZ = false,
}, {
options = {{
icon = 'fas fa-piggy-bank',
label = _L('open_banking_target').text,
canInteract = function(entity) return not isDead and not IsPedInAnyVehicle(PlayerPedId()) end,
action = function(entity) TriggerEvent('okokBanking:OpenBank') end
}},
distance = Config.TargetBankDistance,
})
elseif Config.TargetSystem == 'ox-target' then
local zoneId = exports.ox_target:addBoxZone({
coords = v.boxZone.pos,
size = vec3(v.boxZone.size.x, v.boxZone.size.y, v.boxZone.maxZ - v.boxZone.pos.z),
rotation = v.boxZone.rotation,
debug = Config.DebugTargetZones,
options = {
{
icon = 'fas fa-piggy-bank',
label = _L('open_banking_target').text,
canInteract = function(entity, distance, coords, name) return not isDead and not IsPedInAnyVehicle(PlayerPedId()) end,
onSelect = function(data) TriggerEvent('okokBanking:OpenBank') end
}
},
distance = Config.TargetBankDistance
})
end
table.insert(BankZonesId, zoneId)
end
end
else
local function NearBank()
local pos = GetEntityCoords(PlayerPedId())
for k, v in pairs(Config.BankLocations) do
local dist = #(vector3(v.x, v.y, v.z) - pos)
if dist <= v.BankDistance then
return true
elseif dist <= v.BankDistance + 5 then
return "update"
end
end
end
CreateThread(function()
local inRange = false
local shown = false
local notified = false
while true do
local playerped = PlayerPedId()
inRange = false
Wait(0)
if NearBank() and not isBankOpened and NearBank() ~= "update" then
inRange = true
if IsControlJustReleased(0, 38) then
if not isDead and not IsPedInAnyVehicle(playerped) then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'loading_data'
})
Wait(500)
openBank()
else
if not notified then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('not_use_bank').title, _L('not_use_bank').text, _L('not_use_bank').time, _L('not_use_bank').type)
else
QBCore.Functions.Notify(_L('not_use_bank').text, _L('not_use_bank').type, _L('not_use_bank').time)
end
notified = true
end
end
end
elseif NearBank() == "update" then
Wait(300)
else
Wait(1000)
end
if inRange and not shown then
shown = true
if Config.okokTextUI then
exports['okokTextUI']:Open(_L('open_banking').text, _L('open_banking').color, _L('open_banking').side)
else
exports['qb-core']:DrawText(_L('open_banking').text, _L('open_banking').side)
end
elseif not inRange and shown then
shown = false
if Config.okokTextUI then
exports['okokTextUI']:Close()
else
exports['qb-core']:HideText()
end
end
notified = false
end
end)
end
if Config.UseTargetOnAtm then
for k, v in ipairs(Config.ATM) do AtmModels[#AtmModels + 1] = v.model end
RegisterNetEvent('okokBanking:TargetATM')
AddEventHandler('okokBanking:TargetATM', function()
local ped = PlayerPedId()
local dict = 'anim@amb@prop_human_atm@interior@male@enter'
local anim = 'enter'
if Config.RequireCreditCardForATM then
QBCore.Functions.TriggerCallback("okokBanking:HasCreditCard", function(hasItem)
if not hasItem then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('no_creditcard').title, _L('no_creditcard').text, _L('no_creditcard').time, _L('no_creditcard').type)
else
QBCore.Functions.Notify(_L('no_creditcard').text, _L('no_creditcard').type, _L('no_creditcard').time)
end
return
else
QBCore.Functions.TriggerCallback("okokBanking:GetPIN", function(pin)
if pin then
if not isBankOpened then
isBankOpened = true
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Wait(7)
end
TaskPlayAnim(ped, dict, anim, 8.0, 8.0, -1, 0, 0, 0, 0, 0)
Wait(Config.AnimTime * 1000)
ClearPedTasks(ped)
TriggerEvent("okokBanking:OpenATM", pin)
Wait(3000)
RemoveAnimDict(dict)
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('no_pin').title, _L('no_pin').text, _L('no_pin').time, _L('no_pin').type)
else
QBCore.Functions.Notify(_L('no_pin').text, _L('no_pin').type, _L('no_pin').time)
end
end
end)
end
end)
else
QBCore.Functions.TriggerCallback("okokBanking:GetPIN", function(pin)
if pin then
if not isBankOpened then
isBankOpened = true
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Wait(7)
end
TaskPlayAnim(ped, dict, anim, 8.0, 8.0, -1, 0, 0, 0, 0, 0)
Wait(Config.AnimTime * 1000)
ClearPedTasks(ped)
TriggerEvent("okokBanking:OpenATM", pin)
Wait(3000)
RemoveAnimDict(dict)
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('no_pin').title, _L('no_pin').text, _L('no_pin').time, _L('no_pin').type)
else
QBCore.Functions.Notify(_L('no_pin').text, _L('no_pin').type, _L('no_pin').time)
end
end
end)
end
end)
local options= {{
name = targetOptionsNames.atm,
event = 'okokBanking:TargetATM',
icon = 'fas fa-piggy-bank',
label = _L('open_atm_target').text,
canInteract = function(entity)
return not isDead and not IsPedInAnyVehicle(PlayerPedId())
end
}}
if Config.TargetSystem == 'qb-target' then
exports['qb-target']:AddTargetModel(AtmModels, {
options = options,
distance = Config.ATMDistance
})
elseif Config.TargetSystem == 'ox-target' then
exports.ox_target:addModel(AtmModels, {
name = targetOptionsNames.atm,
event = 'okokBanking:TargetATM',
icon = 'fas fa-piggy-bank',
label = _L('open_atm_target').text,
distance = Config.ATMDistance,
canInteract = function(entity) return not isDead and not IsPedInAnyVehicle(PlayerPedId()) end
})
end
else
function NearATM()
local ped = PlayerPedId()
local pos = GetEntityCoords(ped)
for i = 1, #Config.ATM do
local atm = GetClosestObjectOfType(pos.x, pos.y, pos.z, Config.ATMDistance + 5, Config.ATM[i].model, false, false, false)
if DoesEntityExist(atm) then
if atm ~= closestATM then
closestATM = atm
atmPos = GetEntityCoords(atm)
end
local dist = #(pos - atmPos)
if dist <= Config.ATMDistance then
return true
elseif dist <= Config.ATMDistance + 5 then
return "update"
end
end
end
end
CreateThread(function()
local inRange = false
local shown = false
local notified = false
local dict = 'anim@amb@prop_human_atm@interior@male@enter'
local anim = 'enter'
while true do
local ped = PlayerPedId()
inRange = false
Wait(0)
if NearATM() and not isBankOpened and NearATM() ~= "update" then
inRange = true
if IsControlJustReleased(0, 38) then
if not isDead and not IsPedInAnyVehicle(ped) then
if Config.RequireCreditCardForATM then
QBCore.Functions.TriggerCallback("okokBanking:HasCreditCard", function(hasItem)
if not hasItem then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('no_creditcard').title, _L('no_creditcard').text, _L('no_creditcard').time, _L('no_creditcard').type)
else
QBCore.Functions.Notify(_L('no_creditcard').text, _L('no_creditcard').type, _L('no_creditcard').time)
end
return
else
QBCore.Functions.TriggerCallback("okokBanking:GetPIN", function(pin)
if pin then
if not isBankOpened then
isBankOpened = true
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Wait(7)
end
TaskPlayAnim(ped, dict, anim, 8.0, 8.0, -1, 0, 0, 0, 0, 0)
Wait(Config.AnimTime * 1000)
ClearPedTasks(ped)
TriggerEvent("okokBanking:OpenATM", pin)
Wait(3000)
RemoveAnimDict(dict)
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('no_pin').title, _L('no_pin').text, _L('no_pin').time, _L('no_pin').type)
else
QBCore.Functions.Notify(_L('no_pin').text, _L('no_pin').type, _L('no_pin').time)
end
end
end)
end
end)
else
QBCore.Functions.TriggerCallback("okokBanking:GetPIN", function(pin)
if pin then
if not isBankOpened then
isBankOpened = true
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do
Wait(7)
end
TaskPlayAnim(ped, dict, anim, 8.0, 8.0, -1, 0, 0, 0, 0, 0)
Wait(Config.AnimTime * 1000)
ClearPedTasks(ped)
TriggerEvent("okokBanking:OpenATM", pin)
Wait(3000)
RemoveAnimDict(dict)
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('no_pin').title, _L('no_pin').text, _L('no_pin').time, _L('no_pin').type)
else
QBCore.Functions.Notify(_L('no_pin').text, _L('no_pin').type, _L('no_pin').time)
end
end
end)
end
else
if not notified then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('not_use_bank').title, _L('not_use_bank').text, _L('not_use_bank').time, _L('not_use_bank').type)
else
QBCore.Functions.Notify(_L('not_use_bank').text, _L('not_use_bank').type, _L('not_use_bank').time)
end
notified = true
end
end
end
elseif NearATM() == "update" then
Wait(100)
else
Wait(1000)
end
if inRange and not shown then
shown = true
if Config.okokTextUI then
exports['okokTextUI']:Open(_L('open_atm').text, _L('open_atm').color, _L('open_atm').side)
else
exports['qb-core']:DrawText(_L('open_atm').text, _L('open_atm').side)
end
elseif not inRange and shown then
shown = false
if Config.okokTextUI then
exports['okokTextUI']:Close()
else
exports['qb-core']:HideText()
end
end
notified = false
end
end)
end
RegisterNetEvent("okokBanking:OpenATM")
AddEventHandler("okokBanking:OpenATM", function(pin)
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'atm',
pin = pin,
UseSound = Config.UseOkOkBankingSounds,
})
end)
RegisterNUICallback("action", function(data, cb)
if data.action == "close" then
isBankOpened = false
TriggerServerEvent('okokBanking:setMenuOpened', isBankOpened)
SetNuiFocus(false, false)
elseif data.action == "deposit" then
if tonumber(data.value) ~= nil then
if tonumber(data.value) > 0 then
if data.window == 'bankmenu' then
TriggerServerEvent('okokBanking:DepositMoney', tonumber(data.value))
elseif data.window == 'societies' then
TriggerServerEvent('okokBanking:DepositMoneyToSociety', tonumber(data.value), societyInfo.society, societyInfo.society_name)
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('invalid_amount').title, _L('invalid_amount').text, _L('invalid_amount').time, _L('invalid_amount').type)
else
QBCore.Functions.Notify(_L('invalid_amount').text, _L('invalid_amount').type, _L('invalid_amount').time)
end
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('invalid_amount').title, _L('invalid_amount').text, _L('invalid_amount').time, _L('invalid_amount').type)
else
QBCore.Functions.Notify(_L('invalid_amount').text, _L('invalid_amount').type, _L('invalid_amount').time)
end
end
elseif data.action == "withdraw" then
if tonumber(data.value) ~= nil then
if tonumber(data.value) > 0 then
if data.window == 'bankmenu' then
TriggerServerEvent('okokBanking:WithdrawMoney', tonumber(data.value))
elseif data.window == 'societies' then
TriggerServerEvent('okokBanking:WithdrawMoneyToSociety', tonumber(data.value), societyInfo.society, societyInfo.society_name, societyInfo.value)
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('invalid_amount').title, _L('invalid_amount').text, _L('invalid_amount').time, _L('invalid_amount').type)
else
QBCore.Functions.Notify(_L('invalid_amount').text, _L('invalid_amount').type, _L('invalid_amount').time)
end
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('invalid_input').title, _L('invalid_input').text, _L('invalid_input').time, _L('invalid_input').type)
else
QBCore.Functions.Notify(_L('invalid_input').text, _L('invalid_input').type, _L('invalid_input').time)
end
end
elseif data.action == "transfer" then
if tonumber(data.value) ~= nil then
if tonumber(data.value) > 0 then
QBCore.Functions.TriggerCallback("okokBanking:IsIBanUsed", function(isUsed, isPlayer)
if isUsed ~= nil then
if isUsed.charinfo ~= nil then
if type(isUsed.charinfo) ~= "table" then
isUsed.charinfo = json.decode(isUsed.charinfo)
end
end
if data.window == 'bankmenu' then
if isPlayer then
TriggerServerEvent('okokBanking:TransferMoney', tonumber(data.value), data.iban:upper(), isUsed.citizenid, isUsed.money, isUsed.charinfo.firstname..' '..isUsed.charinfo.lastname)
elseif not isPlayer then
TriggerServerEvent('okokBanking:TransferMoneyToSociety', tonumber(data.value), isUsed.iban:upper(), isUsed.society_name, isUsed.society)
end
elseif data.window == 'societies' then
local toMyself = false
if data.iban:upper() == playerIBAN then
toMyself = true
end
if isPlayer then
TriggerServerEvent('okokBanking:TransferMoneyToPlayerFromSociety', tonumber(data.value), data.iban:upper(), isUsed.citizenid, isUsed.money, isUsed.charinfo.firstname..' '..isUsed.charinfo.lastname, societyInfo.society, societyInfo.society_name, societyInfo.value, toMyself)
elseif not isPlayer then
TriggerServerEvent('okokBanking:TransferMoneyToSocietyFromSociety', tonumber(data.value), isUsed.iban:upper(), isUsed.society_name, isUsed.society, societyInfo.society, societyInfo.society_name, societyInfo.value)
end
end
elseif isUsed == nil then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('iban_not_exist').title, _L('iban_not_exist').text, _L('iban_not_exist').time, _L('iban_not_exist').type)
else
QBCore.Functions.Notify(_L('iban_not_exist').text, _L('iban_not_exist').type, _L('iban_not_exist').time)
end
end
end, data.iban:upper())
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('invalid_amount').title, _L('invalid_amount').text, _L('invalid_amount').time, _L('invalid_amount').type)
else
QBCore.Functions.Notify(_L('invalid_amount').text, _L('invalid_amount').type, _L('invalid_amount').time)
end
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('invalid_input').title, _L('invalid_input').text, _L('invalid_input').time, _L('invalid_input').type)
else
QBCore.Functions.Notify(_L('invalid_input').text, _L('invalid_input').type, _L('invalid_input').time)
end
end
elseif data.action == "overview_page" then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'overview_page',
playerBankMoney = playerBankMoney,
walletMoney = walletMoney,
playerIBAN = playerIBAN,
db = trans,
identifier = trsIdentifier,
graphDays = allDaysValues,
isInSociety = canAccessSociety,
RequireCC = Config.RequireCreditCardForATM,
})
elseif data.action == "transactions_page" then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'transactions_page',
db = trans,
identifier = trsIdentifier,
graph_values = allDaysValues,
isInSociety = canAccessSociety,
})
elseif data.action == "society_transactions" then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'society_transactions',
db = societyTrans,
identifier = societyIdent,
graph_values = societyDays,
isInSociety = canAccessSociety,
societyInfo = societyInfo,
})
elseif data.action == "society_page" then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'society_page',
playerBankMoney = playerBankMoney,
walletMoney = walletMoney,
playerIBAN = playerIBAN,
db = societyTrans,
identifier = societyIdent,
graphDays = societyDays,
isInSociety = canAccessSociety,
societyInfo = societyInfo,
})
elseif data.action == "settings_page" then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'settings_page',
isInSociety = canAccessSociety,
ibanCost = Config.IBANChangeCost,
ibanPrefix = Config.IBANPrefix,
ibanCharNum = Config.CustomIBANMaxChars,
pinCost = Config.PINChangeCost,
pinCharNum = 4,
})
elseif data.action == "atm" then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'loading_data',
})
Wait(500)
openBank()
elseif data.action == "change_iban" then
if Config.CustomIBANAllowLetters then
local iban = Config.IBANPrefix..data.iban:upper()
QBCore.Functions.TriggerCallback("okokBanking:IsIBanUsed", function(isUsed, isPlayer)
if isUsed == nil then
TriggerServerEvent('okokBanking:UpdateIbanDB', iban, Config.IBANChangeCost)
elseif isUsed ~= nil then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('iban_in_use').title, _L('iban_in_use').text, _L('iban_in_use').time, _L('iban_in_use').type)
else
QBCore.Functions.Notify(_L('iban_in_use').text, _L('iban_in_use').type, _L('iban_in_use').time)
end
end
end, iban)
elseif not Config.CustomIBANAllowLetters then
if tonumber(data.iban) ~= nil then
local iban = Config.IBANPrefix..data.iban:upper()
QBCore.Functions.TriggerCallback("okokBanking:IsIBanUsed", function(isUsed, isPlayer)
if isUsed == nil then
TriggerServerEvent('okokBanking:UpdateIbanDB', iban, Config.IBANChangeCost)
elseif isUsed ~= nil then
if Config.okokNotify then
exports['okokNotify']:Alert(_L('iban_in_use').title, _L('iban_in_use').text, _L('iban_in_use').time, _L('iban_in_use').type)
else
QBCore.Functions.Notify(_L('iban_in_use').text, _L('iban_in_use').type, _L('iban_in_use').time)
end
end
end, iban)
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('iban_only_numbers').title, _L('iban_only_numbers').text, _L('iban_only_numbers').time, _L('iban_only_numbers').type)
else
QBCore.Functions.Notify(_L('iban_only_numbers').text, _L('iban_only_numbers').type, _L('iban_only_numbers').time)
end
end
end
elseif data.action == "change_pin" then
if tonumber(data.pin) ~= nil then
if string.len(data.pin) == 4 then
QBCore.Functions.TriggerCallback("okokBanking:GetPIN", function(pin)
if pin then
TriggerServerEvent('okokBanking:UpdatePINDB', data.pin, Config.PINChangeCost)
else
TriggerServerEvent('okokBanking:UpdatePINDB', data.pin, 0)
end
end)
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('pin_digits').title, _L('pin_digits').text, _L('pin_digits').time, _L('pin_digits').type)
else
QBCore.Functions.Notify(_L('pin_digits').text, _L('pin_digits').type, _L('pin_digits').time)
end
end
else
if Config.okokNotify then
exports['okokNotify']:Alert(_L('pin_only_numbers').title, _L('pin_only_numbers').text, _L('pin_only_numbers').time, _L('pin_only_numbers').type)
else
QBCore.Functions.Notify(_L('pin_only_numbers').text, _L('pin_only_numbers').type, _L('pin_only_numbers').time)
end
end
elseif data.action == "buy_new_cc" then
TriggerServerEvent('okokBanking:GiveCC')
end
cb('ok')
end)
RegisterNetEvent("okokBanking:updateTransactions")
AddEventHandler("okokBanking:updateTransactions", function(money, wallet)
Wait(100)
if isBankOpened then
QBCore.Functions.TriggerCallback("okokBanking:GetOverviewTransactions", function(cb, id, allDays)
trans = cb
allDaysValues = allDays
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'overview_page',
playerBankMoney = playerBankMoney,
walletMoney = walletMoney,
playerIBAN = playerIBAN,
db = trans,
identifier = trsIdentifier,
graphDays = allDaysValues,
isInSociety = canAccessSociety,
isUpdate = true,
RequireCC = Config.RequireCreditCardForATM,
})
TriggerEvent('okokBanking:updateMoney', money, wallet)
end)
end
end)
RegisterNetEvent("okokBanking:updateMoney")
AddEventHandler("okokBanking:updateMoney", function(money, wallet)
if isBankOpened then
playerBankMoney = money
walletMoney = wallet
SendNUIMessage({
action = 'updatevalue',
playerBankMoney = money,
walletMoney = wallet,
})
end
end)
RegisterNetEvent("okokBanking:updateIban")
AddEventHandler("okokBanking:updateIban", function(iban)
playerIBAN = iban
SendNUIMessage({
action = 'updateiban',
iban = playerIBAN,
})
end)
RegisterNetEvent("okokBanking:updateIbanPinChange")
AddEventHandler("okokBanking:updateIbanPinChange", function()
Wait(100)
QBCore.Functions.TriggerCallback("okokBanking:GetOverviewTransactions", function(cbs, ids, allDays)
trans = cbs
end)
end)
RegisterNetEvent("okokBanking:updateTransactionsSociety")
AddEventHandler("okokBanking:updateTransactionsSociety", function(wallet)
Wait(100)
QBCore.Functions.TriggerCallback("okokBanking:SocietyInfo", function(cb)
QBCore.Functions.TriggerCallback("okokBanking:GetSocietyTransactions", function(societyTranscb, societyID, societyAllDays)
QBCore.Functions.TriggerCallback("okokBanking:GetOverviewTransactions", function(cbs, ids, allDays)
trans = cbs
walletMoney = wallet
societyDays = societyAllDays
societyIdent = societyID
societyTrans = societyTranscb
societyInfo = cb
if cb ~= nil then
if isBankOpened then
SetNuiFocus(true, true)
end
SendNUIMessage({
action = 'society_page',
walletMoney = wallet,
db = societyTrans,
graphDays = societyDays,
isInSociety = canAccessSociety,
societyInfo = societyInfo,
identifier = societyIdent,
isUpdate = true
})
end
end)
end, society)
end, society)
end)

View file

@ -1,163 +0,0 @@
Config, Locales = {}, {}
Config.Locale = 'de' -- en / pt / gr / fr / de
Config.okokNotify = true -- true = okokNotify | false = QBCore Notify
Config.okokTextUI = true -- true = okokTextUI | false = QBCore DrawText
Config.UseOkOkBankingSounds = false -- true = Uses Sounds | false = No sounds
Config.UseTargetOnAtm = false -- Using qb-target and not TextUI to access to the atms
Config.UseTargetOnBank = false -- Using qb-target and not TextUI to access to the bank
Config.TargetSystem = 'qb-target' -- qb-target | ox-target
Config.TargetBankDistance = 1.5 -- Distance to target a bank from qb-target ( To change the distance to ATM check line 61)
Config.DebugTargetZones = false -- Set to true only if you need to check the position of a zone
Config.UseCashAsItem = false -- Set to true if you have cash as item on qb-core
Config.IBANPrefix = "OK" -- IBAN prefix
Config.IBANNumbers = 6 -- How many characters the IBAN has by default
Config.CustomIBANMaxChars = 10 -- How many characters the IBAN can have when changing it to a custom one (on Settings tab)
Config.CustomIBANAllowLetters = true -- If the custom IBAN can have letters or only numbers (on Settings tab)
Config.IBANChangeCost = 5000 -- How much it costs to change the IBAN to a custom one (on Settings tab)
Config.PINChangeCost = 1000 -- How much it costs to change the PIN (on Settings tab)
Config.AnimTime = 2 -- Seconds (ATM animation)
Config.UseQBManagement = false -- If true it will use the management_funds table | If false the okokbanking_societies table
Config.UseQBBanking = true -- Useful for latest QBCore versions
Config.RequireCreditCardForATM = true -- Set to true if you would like players to access the ATM with a card item | If false there is no item requirement
Config.CreditCardItem = "creditcard" -- Required item to access the ATM
Config.CreditCardPrice = 100 -- How much it costs to purchase a credit card
Config.CharInfoUpdate = true -- If you have an error on server console saying 'bad argument #1 to decode ( string expected, got nil )' set this to true
Config.Societies = { -- Which societies have bank accounts
"police",
"ambulance",
"cinema",
"fussion",
"kayas",
"sud",
"taxi",
"ammu",
"marshal";
"cute"
}
-- Add this new section below the Societies section
Config.JobBossRanks = {
["police"] = {
maxRank = true, -- Automatically use the highest rank
specificRanks = {7, 8, 9} -- Or specify exact ranks that have boss access
},
["ambulance"] = {
maxRank = true,
specificRanks = {}
},
["cinema"] = {
maxRank = false, -- Will automatically detect the highest rank
specificRanks = {1} -- Or you can specify ranks like {3, 4} if needed
},
["kayas"] = {
maxRank = false,
specificRanks = {0}
},
["fussion"] = {
maxRank = false, -- Will automatically detect the highest rank
specificRanks = {4} -- Or you can specify ranks like {3, 4} if needed
},
["sud"] = {
maxRank = false, -- Will automatically detect the highest rank
specificRanks = {0} -- Or you can specify ranks like {3, 4} if needed
},
["taxi"] = {
maxRank = true, -- Will automatically detect the highest rank
specificRanks = {} -- Or you can specify ranks like {3, 4} if needed
},
["ammu"] = {
maxRank = false, -- Will automatically detect the highest rank
specificRanks = {0} -- Or you can specify ranks like {3, 4} if needed
},
["marshal"] = {
maxRank = true, -- Will automatically detect the highest rank
specificRanks = {0} -- Or you can specify ranks like {3, 4} if needed
},
["cute"] = {
maxRank = true, -- Will automatically detect the highest rank
specificRanks = {0} -- Or you can specify ranks like {3, 4} if needed
},
-- Add other jobs as needed
}
Config.ShowBankBlips = true -- True = show bank blips on the map | false = don't show blips
Config.BankLocations = { -- To get blips and colors check this: https://wiki.gtanet.work/index.php?title=Blips
{blip = 108, blipColor = 2, blipScale = 0.9, x = 150.266, y = -1040.203, z = 29.374, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(149.07, -1041.02, 29.55), size = vec3(2.85, 0.30, 1.30), rotation = 70, maxZ = 30.9}},
{blip = 108, blipColor = 2, blipScale = 0.9, x = -1212.980, y = -330.841, z = 37.787, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(-1212.98, -331.53, 38.0), size = vec3(2.85, 0.40, 1.30), rotation = 117, maxZ = 39.25}},
{blip = 108, blipColor = 2, blipScale = 0.9, x = -2962.582, y = 482.627, z = 15.703, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(-2962.00, 482.20, 15.92), size = vec3(2.85, 0.40, 1.30), rotation = 178, maxZ = 17.1}},
{blip = 108, blipColor = 2, blipScale = 0.9, x = -112.202, y = 6469.295, z = 31.626, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(-111.69, 6469.5, 31.83), size = vec3(4.2, 0.40, 1.25), rotation = 45, maxZ = 33.15}},
{blip = 108, blipColor = 2, blipScale = 0.9, x = 314.187, y = -278.621, z = 54.170, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(313.26, -279.38, 54.35), size = vec3(2.85, 0.40, 1.30), rotation = 250, maxZ = 55.7}},
{blip = 108, blipColor = 2, blipScale = 0.9, x = -351.534, y = -49.529, z = 49.042, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(-351.81, -50.2, 49.24), size = vec3(2.85, 0.30, 1.30), rotation = 250, maxZ = 50.5}},
{blip = 108, blipColor = 3, blipScale = 1.2, x = 253.38, y = 220.79, z = 106.29, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(252.8, 221.9, 106.20), size = vec3(3.6, 0.20, 1.70), rotation = 250, maxZ = 107.6}},
{blip = 108, blipColor = 2, blipScale = 0.9, x = 1175.064, y = 2706.643, z = 38.094, blipText = "Bank", BankDistance = 3, boxZone = {pos = vec3(1175.72, 2707.36, 38.30), size = vec3(2.85, 0.40, 1.30), rotation = 270, maxZ = 39.5}},
}
Config.ATMDistance = 1.5 -- How close you need to be in order to access the ATM
Config.ATM = { -- ATM models, do not remove any
{model = -870868698},
{model = -1126237515},
{model = -1364697528},
{model = 506770882}
}
-------------------------- DISCORD LOGS
-- To set your Discord Webhook URL go to server.lua, line 2
Config.BotName = 'ServerName' -- Write the desired bot name
Config.ServerName = 'ServerName' -- Write your server's name
Config.IconURL = '' -- Insert your desired image link
Config.DateFormat = '%d/%m/%Y [%X]' -- To change the date format check this website - https://www.lua.org/pil/22.1.html
-- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html
Config.TransferWebhookColor = '16127'
Config.WithdrawWebhookColor = '16127'
Config.DepositWebhookColor = '16127'
-------------------------- LOCALES (DON'T TOUCH)
function _L(id)
if Locales[Config.Locale][id] then
return Locales[Config.Locale][id]
else
print("Locale '"..id.."' doesn't exist")
end
end

View file

@ -1,44 +0,0 @@
fx_version 'cerulean'
game 'gta5'
author 'okok#3488'
description 'okokBanking'
version '1.1.2'
ui_page 'web/ui.html'
files {
'web/*.*',
'web/img/*.*'
}
shared_scripts {
'config.lua',
'locales/*.lua'
}
client_scripts {
'client.lua'
}
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server.lua'
}
lua54 'yes'
escrow_ignore {
'config.lua',
'server.lua',
'client.lua',
'locales/*.lua'
}
server_exports {
'AddMoney',
'RemoveMoney',
'GetAccount',
}
dependency '/assetpacks'

View file

@ -1,221 +0,0 @@
Locales['de'] = {
-- PIN BEZOGEN LOCALES
['no_pin'] = {
title = 'BANKING',
text = 'Gehen Sie zuerst zu einer Bank, um einen PIN-Code festzulegen',
time = 5000,
type = 'error'
},
['pin_changed'] = {
title = 'BANKING',
text = 'PIN erfolgreich geändert in ${s1}',
time = 5000,
type = 'success'
},
['pin_no_money'] = {
title = 'BANKING',
text = 'Sie benötigen ${s1}$, um Ihre PIN zu ändern',
time = 5000,
type = 'error'
},
['pin_digits'] = {
title = 'BANKING',
text = 'Ihre PIN muss 4 Ziffern lang sein',
time = 5000,
type = 'error'
},
['pin_only_numbers'] = {
title = 'BANKING',
text = 'Sie können nur Zahlen verwenden',
time = 5000,
type = 'error'
},
-- IBAN BEZOGEN LOCALES
['iban_not_exist'] = {
title = 'BANKING',
text = 'Diese IBAN existiert nicht',
time = 5000,
type = 'error'
},
['iban_in_use'] = {
title = 'BANKING',
text = 'Diese IBAN wird bereits verwendet',
time = 5000,
type = 'error'
},
['iban_only_numbers'] = {
title = 'BANKING',
text = 'Sie können in Ihrer IBAN nur Zahlen verwenden',
time = 5000,
type = 'error'
},
['iban_changed'] = {
title = 'BANKING',
text = 'IBAN erfolgreich in ${s1} geändert',
time = 5000,
type = 'success'
},
['iban_no_money'] = {
title = 'BANKING',
text = 'Sie benötigen ${s1}$, um Ihre IBAN zu ändern',
time = 5000,
type = 'error'
},
-- ZURÜCKGEZOGEN / EINGEZAHLT / ÜBERTRAGEN / ERHALTEN
['deposited'] = {
title = 'BANKING',
text = 'Sie haben eingezahlt ${s1}$',
time = 5000,
type = 'success'
},
['withdrawn'] = {
title = 'BANKING',
text = 'Sie haben sich zurückgezogen ${s1}$',
time = 5000,
type = 'success'
},
['received_from'] = {
title = 'BANKING',
text = 'Sie erhielten ${s1}$ aus ${s2}',
time = 5000,
type = 'success'
},
['transferred_to'] = {
title = 'BANKING',
text = 'Sie haben überwiesen ${s1}$ an ${s2}',
time = 5000,
type = 'success'
},
['deposited_to'] = {
title = 'BANKING',
text = 'Sie haben eingezahlt ${s1}$ an ${s2}',
time = 5000,
type = 'success'
},
['someone_withdrawing'] = {
title = 'BANKING',
text = 'Jemand zieht sich bereits zurück',
time = 5000,
type = 'error'
},
['you_have_withdrawn'] = {
title = 'BANKING',
text = 'Sie haben sich zurückgezogen ${s1}$ aus ${s2}',
time = 5000,
type = 'success'
},
-- ALLGEMEINES LOCALES
['no_creditcard'] = {
title = 'BANKING',
text = 'Ohne Kreditkarte ist der Zugang zum Geldautomaten nicht möglich',
time = 5000,
type = 'error'
},
['invalid_amount'] = {
title = 'BANKING',
text = 'Ungültige Menge',
time = 5000,
type = 'error'
},
['invalid_input'] = {
title = 'BANKING',
text = 'Ungültige Eingang',
time = 5000,
type = 'error'
},
['no_money_pocket'] = {
title = 'BANKING',
text = 'Du hast nicht so viel Geld bei dir',
time = 5000,
type = 'error'
},
['no_money_bank'] = {
title = 'BANKING',
text = 'Du hast nicht so viel Geld auf der Bank',
time = 5000,
type = 'error'
},
['not_send_yourself'] = {
title = 'BANKING',
text = 'Sie können kein Geld an sich selbst senden',
time = 5000,
type = 'error'
},
['society_no_money'] = {
title = 'BANKING',
text = 'Ihre Gesellschaft hat nicht so viel Geld auf der Bank',
time = 5000,
type = 'error'
},
['not_use_bank'] = {
title = 'BANKING',
text = 'Sie können die Bank derzeit nicht verwenden',
time = 5000,
type = 'error'
},
['bought_cc'] = {
title = 'BANKING',
text = 'Sie haben eine Kreditkarte für ${s1}$ gekauft',
time = 5000,
type = 'success'
},
-- TEXTUI LOCALES
['open_banking'] = {
text = '[E] Bank betreten',
color = 'darkblue',
side = 'left'
},
['open_atm'] = {
text = '[E] Geldautomaten nutzen',
color = 'darkblue',
side = 'left'
},
-- QB-TARGET LOCALES
['open_banking_target'] = {
text = 'Bank betreten',
},
['open_atm_target'] = {
text = 'Geldautomaten nutzen',
},
}

View file

@ -1,221 +0,0 @@
Locales['en'] = {
-- PIN RELATED LOCALES
['no_pin'] = {
title = 'BANKING',
text = 'Head up to a bank first to set a PIN code',
time = 5000,
type = 'error'
},
['pin_changed'] = {
title = 'BANKING',
text = 'PIN successfully changed to ${s1}',
time = 5000,
type = 'success'
},
['pin_no_money'] = {
title = 'BANKING',
text = 'You need to have ${s1}€ in order to change your PIN',
time = 5000,
type = 'error'
},
['pin_digits'] = {
title = 'BANKING',
text = 'Your PIN needs to be 4 digits long',
time = 5000,
type = 'error'
},
['pin_only_numbers'] = {
title = 'BANKING',
text = 'You can only use numbers',
time = 5000,
type = 'error'
},
-- IBAN RELATED LOCALES
['iban_not_exist'] = {
title = 'BANKING',
text = 'This IBAN does not exist',
time = 5000,
type = 'error'
},
['iban_in_use'] = {
title = 'BANKING',
text = 'This IBAN is already in use',
time = 5000,
type = 'error'
},
['iban_only_numbers'] = {
title = 'BANKING',
text = 'You can only use numbers in your IBAN',
time = 5000,
type = 'error'
},
['iban_changed'] = {
title = 'BANKING',
text = 'IBAN successfully changed to ${s1}',
time = 5000,
type = 'success'
},
['iban_no_money'] = {
title = 'BANKING',
text = 'You need to have ${s1}€ in order to change your IBAN',
time = 5000,
type = 'error'
},
-- WITHDRAWN / DEPOSITED / TRANSFERRED / RECEIVED
['deposited'] = {
title = 'BANKING',
text = 'You have deposited ${s1}€',
time = 5000,
type = 'success'
},
['withdrawn'] = {
title = 'BANKING',
text = 'You have withdrawn ${s1}€',
time = 5000,
type = 'success'
},
['received_from'] = {
title = 'BANKING',
text = 'You have received ${s1}€ from ${s2}',
time = 5000,
type = 'success'
},
['transferred_to'] = {
title = 'BANKING',
text = 'You have transferred ${s1}€ to ${s2}',
time = 5000,
type = 'success'
},
['deposited_to'] = {
title = 'BANKING',
text = 'You have deposited ${s1}€ to ${s2}',
time = 5000,
type = 'success'
},
['someone_withdrawing'] = {
title = 'BANKING',
text = 'Someone is already withdrawing',
time = 5000,
type = 'error'
},
['you_have_withdrawn'] = {
title = 'BANKING',
text = 'You have withdrawn ${s1}€ from ${s2}',
time = 5000,
type = 'success'
},
-- GENERAL LOCALES
['no_creditcard'] = {
title = 'BANKING',
text = 'You can not access the ATM without a credit card',
time = 5000,
type = 'error'
},
['invalid_amount'] = {
title = 'BANKING',
text = 'Invalid amount',
time = 5000,
type = 'error'
},
['invalid_input'] = {
title = 'BANKING',
text = 'Invalid input',
time = 5000,
type = 'error'
},
['no_money_pocket'] = {
title = 'BANKING',
text = 'You don\'t have that much money on you',
time = 5000,
type = 'error'
},
['no_money_bank'] = {
title = 'BANKING',
text = 'You don\'t have that much money in the bank',
time = 5000,
type = 'error'
},
['not_send_yourself'] = {
title = 'BANKING',
text = 'You can\'t send money to yourself',
time = 5000,
type = 'error'
},
['society_no_money'] = {
title = 'BANKING',
text = 'Your society doesn\'t have that much money in the bank',
time = 5000,
type = 'error'
},
['not_use_bank'] = {
title = 'BANKING',
text = 'You can\'t use the bank at this moment',
time = 5000,
type = 'error'
},
['bought_cc'] = {
title = 'BANKING',
text = 'You bought a credit card for ${s1}€',
time = 5000,
type = 'success'
},
-- TEXTUI LOCALES
['open_banking'] = {
text = '[E] Access Bank',
color = 'darkblue',
side = 'left'
},
['open_atm'] = {
text = '[E] Access ATM',
color = 'darkblue',
side = 'left'
},
-- QB-TARGET LOCALES
['open_banking_target'] = {
text = 'Access Bank',
},
['open_atm_target'] = {
text = 'Access ATM',
},
}

View file

@ -1,221 +0,0 @@
Locales['es'] = {
-- PIN RELATED LOCALES
['no_pin'] = {
title = 'BANKING',
text = 'Diríjase primero a un banco para establecer un código PIN',
time = 5000,
type = 'error'
},
['pin_changed'] = {
title = 'BANKING',
text = 'El PIN se ha cambiado con éxito a ${s1}',
time = 5000,
type = 'success'
},
['pin_no_money'] = {
title = 'BANKING',
text = 'Es necesario tener ${s1}€ para cambiar su PIN',
time = 5000,
type = 'error'
},
['pin_digits'] = {
title = 'BANKING',
text = 'Su PIN debe tener 4 dígitos',
time = 5000,
type = 'error'
},
['pin_only_numbers'] = {
title = 'BANKING',
text = 'Sólo se pueden utilizar números',
time = 5000,
type = 'error'
},
-- IBAN RELATED LOCALES
['iban_not_exist'] = {
title = 'BANKING',
text = 'Este IBAN no existe',
time = 5000,
type = 'error'
},
['iban_in_use'] = {
title = 'BANKING',
text = 'Este IBAN ya está en uso',
time = 5000,
type = 'error'
},
['iban_only_numbers'] = {
title = 'BANKING',
text = 'Sólo puede utilizar números en su IBAN',
time = 5000,
type = 'error'
},
['iban_changed'] = {
title = 'BANKING',
text = 'El IBAN ha sido cambiado con éxito a ${s1}',
time = 5000,
type = 'success'
},
['iban_no_money'] = {
title = 'BANKING',
text = 'Es necesario tener ${s1}€ para cambiar su IBAN',
time = 5000,
type = 'error'
},
-- WITHDRAWN / DEPOSITED / TRANSFERRED / RECEIVED
['deposited'] = {
title = 'BANKING',
text = 'Has depositado ${s1}€',
time = 5000,
type = 'success'
},
['withdrawn'] = {
title = 'BANKING',
text = 'Has retirado ${s1}€',
time = 5000,
type = 'success'
},
['received_from'] = {
title = 'BANKING',
text = 'Has recibido ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
['transferred_to'] = {
title = 'BANKING',
text = 'Has transferido ${s1}€ a ${s2}',
time = 5000,
type = 'success'
},
['deposited_to'] = {
title = 'BANKING',
text = 'Has depositado ${s1}€ a ${s2}',
time = 5000,
type = 'success'
},
['someone_withdrawing'] = {
title = 'BANKING',
text = 'Alguien ya se está retirando dinero',
time = 5000,
type = 'error'
},
['you_have_withdrawn'] = {
title = 'BANKING',
text = 'Has retirado ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
-- GENERAL LOCALES
['no_creditcard'] = {
title = 'BANKING',
text = 'No puedes acceder al cajero automático sin una tarjeta de crédito',
time = 5000,
type = 'error'
},
['invalid_amount'] = {
title = 'BANKING',
text = 'Cantidad no válida',
time = 5000,
type = 'error'
},
['invalid_input'] = {
title = 'BANKING',
text = 'Entrada no válida',
time = 5000,
type = 'error'
},
['no_money_pocket'] = {
title = 'BANKING',
text = 'No tienes tanto dinero encima',
time = 5000,
type = 'error'
},
['no_money_bank'] = {
title = 'BANKING',
text = 'No tienes tanto dinero en el banco',
time = 5000,
type = 'error'
},
['not_send_yourself'] = {
title = 'BANKING',
text = 'No puedes enviarte dinero a ti mismo',
time = 5000,
type = 'error'
},
['society_no_money'] = {
title = 'BANKING',
text = 'Su sociedad no tiene tanto dinero en el banco',
time = 5000,
type = 'error'
},
['not_use_bank'] = {
title = 'BANKING',
text = 'No puedes acceder al banco en este momento',
time = 5000,
type = 'error'
},
['bought_cc'] = {
title = 'BANKING',
text = 'Has comprado una tarjeta de crédito por ${s1}€',
time = 5000,
type = 'success'
},
-- TEXTUI LOCALES
['open_banking'] = {
text = '[E] Acceder al banco',
color = 'darkblue',
side = 'left'
},
['open_atm'] = {
text = '[E] Acceder al ATM',
color = 'darkblue',
side = 'left'
},
-- QB-TARGET LOCALES
['open_banking_target'] = {
text = 'Acceder al banco',
},
['open_atm_target'] = {
text = 'Acceder al ATM',
},
}

View file

@ -1,221 +0,0 @@
Locales['fr'] = {
-- LOCALES LIÉS AU PIN
['no_pin'] = {
title = 'BANKING',
text = 'Rendez-vous d\'abord dans une banque pour définir un code PIN',
time = 5000,
type = 'error'
},
['pin_changed'] = {
title = 'BANKING',
text = 'Le code PIN a été remplacé par ${s1}',
time = 5000,
type = 'success'
},
['pin_no_money'] = {
title = 'BANKING',
text = 'Vous devez disposer de ${s1}€ pour modifier votre code PIN',
time = 5000,
type = 'error'
},
['pin_digits'] = {
title = 'BANKING',
text = 'Votre code PIN doit comporter 4 chiffres',
time = 5000,
type = 'error'
},
['pin_only_numbers'] = {
title = 'BANKING',
text = 'Vous ne pouvez utiliser que des chiffres',
time = 5000,
type = 'error'
},
-- LOCALES LIÉES À L'IBAN
['iban_not_exist'] = {
title = 'BANKING',
text = 'Cet IBAN n\'existe pas',
time = 5000,
type = 'error'
},
['iban_in_use'] = {
title = 'BANKING',
text = 'Cet IBAN est déjà utilisé',
time = 5000,
type = 'error'
},
['iban_only_numbers'] = {
title = 'BANKING',
text = 'Vous ne pouvez utiliser que des chiffres dans votre IBAN',
time = 5000,
type = 'error'
},
['iban_changed'] = {
title = 'BANKING',
text = 'IBAN changé avec succès en ${s1}',
time = 5000,
type = 'success'
},
['iban_no_money'] = {
title = 'BANKING',
text = 'Vous devez avoir ${s1}€ pour changer votre IBAN',
time = 5000,
type = 'error'
},
-- RETIRÉ / DÉPOSÉ / TRANSFÉRÉ / REÇU
['deposited'] = {
title = 'BANKING',
text = 'Vous avez déposé ${s1}€',
time = 5000,
type = 'success'
},
['withdrawn'] = {
title = 'BANKING',
text = 'Vous avez retiré ${s1}€',
time = 5000,
type = 'success'
},
['received_from'] = {
title = 'BANKING',
text = 'Vous avez reçu ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
['transferred_to'] = {
title = 'BANKING',
text = 'Vous avez transféré ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
['deposited_to'] = {
title = 'BANKING',
text = 'Vous avez déposé ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
['someone_withdrawing'] = {
title = 'BANKING',
text = 'Quelqu\'un se retire déjà',
time = 5000,
type = 'error'
},
['you_have_withdrawn'] = {
title = 'BANKING',
text = 'Vous avez retiré ${s1}€ depuis ${s2}',
time = 5000,
type = 'success'
},
-- LOCALES GÉNÉRAUX
['no_creditcard'] = {
title = 'BANKING',
text = 'Vous ne pouvez pas accéder au guichet automatique sans carte de crédit',
time = 5000,
type = 'error'
},
['invalid_amount'] = {
title = 'BANKING',
text = 'Montant invalide',
time = 5000,
type = 'error'
},
['invalid_input'] = {
title = 'BANKING',
text = 'Entrée invalide',
time = 5000,
type = 'error'
},
['no_money_pocket'] = {
title = 'BANKING',
text = 'Vous n\'avez pas beaucoup d\'argent sur vous',
time = 5000,
type = 'error'
},
['no_money_bank'] = {
title = 'BANKING',
text = 'Vous n\'avez pas beaucoup d\'argent à la banque',
time = 5000,
type = 'error'
},
['not_send_yourself'] = {
title = 'BANKING',
text = 'Vous ne pouvez pas vous envoyer d\'argent',
time = 5000,
type = 'error'
},
['society_no_money'] = {
title = 'BANKING',
text = 'Votre société n\'a pas autant d\'argent à la banque',
time = 5000,
type = 'error'
},
['not_use_bank'] = {
title = 'BANKING',
text = 'Vous ne pouvez pas utiliser la banque pour le moment',
time = 5000,
type = 'error'
},
['bought_cc'] = {
title = 'BANKING',
text = 'Vous avez acheté une carte de crédit pour ${s1}€',
time = 5000,
type = 'success'
},
-- TEXTUI LOCALES
['open_banking'] = {
text = '[E] Accéder à la banque',
color = 'darkblue',
side = 'left'
},
['open_atm'] = {
text = '[E] Accéder au ATM',
color = 'darkblue',
side = 'left'
},
-- QB-TARGET LOCALES
['open_banking_target'] = {
text = 'Accéder à la banque',
},
['open_atm_target'] = {
text = 'Accéder au ATM',
},
}

View file

@ -1,221 +0,0 @@
Locales['gr'] = {
-- ΣΧΕΤΙΚΟ ΤΟ PIN ΜΕΤΑΦΡΑΣΕΙΣ
['no_pin'] = {
title = 'BANKING',
text = 'Απευθυνθείτε πρώτα σε μια τράπεζα για να ορίσετε έναν κωδικό PIN',
time = 5000,
type = 'error'
},
['pin_changed'] = {
title = 'BANKING',
text = 'Το PIN άλλαξε με επιτυχία σε ${s1}',
time = 5000,
type = 'success'
},
['pin_no_money'] = {
title = 'BANKING',
text = 'Πρέπει να έχετε ${s1}€ για να αλλάξετε το PIN σας',
time = 5000,
type = 'error'
},
['pin_digits'] = {
title = 'BANKING',
text = 'Το PIN σας πρέπει να αποτελείται από 4 ψηφία',
time = 5000,
type = 'error'
},
['pin_only_numbers'] = {
title = 'BANKING',
text = 'Μπορείτε να χρησιμοποιήσετε μόνο αριθμούς',
time = 5000,
type = 'error'
},
-- ΣΧΕΤΙΚΟ IBAN ΜΕΤΑΦΡΑΣΕΙΣ
['iban_not_exist'] = {
title = 'BANKING',
text = 'Αυτό το IBAN δεν υπάρχει',
time = 5000,
type = 'error'
},
['iban_in_use'] = {
title = 'BANKING',
text = 'Αυτό το IBAN χρησιμοποιείται ήδη',
time = 5000,
type = 'error'
},
['iban_only_numbers'] = {
title = 'BANKING',
text = 'Μπορείτε να χρησιμοποιήσετε μόνο αριθμούς στον IBAN σας',
time = 5000,
type = 'error'
},
['iban_changed'] = {
title = 'BANKING',
text = 'Το IBAN άλλαξε με επιτυχία σε ${s1}',
time = 5000,
type = 'success'
},
['iban_no_money'] = {
title = 'BANKING',
text = 'Πρέπει να έχετε ${s1}€ για να αλλάξετε τον IBAN σας',
time = 5000,
type = 'error'
},
-- ΑΝΑΛΗΨΗ / ΚΑΤΑΘΕΣΗ / ΜΕΤΑΒΙΒΑΣΗ / ΛΗΨΗ
['deposited'] = {
title = 'BANKING',
text = 'Έχετε καταθέσει ${s1}€',
time = 5000,
type = 'success'
},
['withdrawn'] = {
title = 'BANKING',
text = 'Έχετε αποσυρθεί ${s1}€',
time = 5000,
type = 'success'
},
['received_from'] = {
title = 'BANKING',
text = 'Έχετε λάβει ${s1}€ από ${s2}',
time = 5000,
type = 'success'
},
['transferred_to'] = {
title = 'BANKING',
text = 'Έχετε μεταφέρει ${s1}€ στο ${s2}',
time = 5000,
type = 'success'
},
['deposited_to'] = {
title = 'BANKING',
text = 'Έχετε καταθέσει ${s1}€ στο ${s2}',
time = 5000,
type = 'success'
},
['someone_withdrawing'] = {
title = 'BANKING',
text = 'Κάποιος ήδη αποσύρεται',
time = 5000,
type = 'error'
},
['you_have_withdrawn'] = {
title = 'BANKING',
text = 'Έχετε κάνει ανάληψη ${s1}€ από ${s2}',
time = 5000,
type = 'success'
},
-- ΓΕΝΙΚΕΣ ΜΕΤΑΦΡΑΣΕΙΣ
['no_creditcard'] = {
title = 'BANKING',
text = 'Δεν μπορείτε να έχετε πρόσβαση στο ΑΤΜ χωρίς πιστωτική κάρτα.',
time = 5000,
type = 'error'
},
['invalid_amount'] = {
title = 'BANKING',
text = 'Μη έγκυρο ποσό',
time = 5000,
type = 'error'
},
['invalid_input'] = {
title = 'BANKING',
text = 'Μη έγκυρη εισαγωγή',
time = 5000,
type = 'error'
},
['no_money_pocket'] = {
title = 'BANKING',
text = 'Δεν έχεις τόσα χρήματα πάνω σου',
time = 5000,
type = 'error'
},
['no_money_bank'] = {
title = 'BANKING',
text = 'Δεν έχεις τόσα χρήματα στην τράπεζα',
time = 5000,
type = 'error'
},
['not_send_yourself'] = {
title = 'BANKING',
text = 'Δεν μπορείτε να στείλετε χρήματα στον εαυτό σας',
time = 5000,
type = 'error'
},
['society_no_money'] = {
title = 'BANKING',
text = 'Η κοινωνία σας δεν έχει τόσα χρήματα στην τράπεζα',
time = 5000,
type = 'error'
},
['not_use_bank'] = {
title = 'BANKING',
text = 'Δεν μπορείτε να χρησιμοποιήσετε την τράπεζα αυτή τη στιγμή',
time = 5000,
type = 'error'
},
['bought_cc'] = {
title = 'BANKING',
text = 'Αγοράσατε μια πιστωτική κάρτα για ${s1}€',
time = 5000,
type = 'success'
},
-- TEXTUI ΜΕΤΑΦΡΑΣΕΙΣ
['open_banking'] = {
text = '[E] Να ανοίξω την τράπεζα',
color = 'darkblue',
side = 'left'
},
['open_atm'] = {
text = '[E] Aνοίξτε το ΑΤΜ',
color = 'darkblue',
side = 'left'
},
-- QB-TARGET ΜΕΤΑΦΡΑΣΕΙΣ
['open_banking_target'] = {
text = 'Να ανοίξω την τράπεζα',
},
['open_atm_target'] = {
text = 'Aνοίξτε το ΑΤΜ',
},
}

View file

@ -1,221 +0,0 @@
Locales['pt'] = {
-- PIN
['no_pin'] = {
title = 'BANCO',
text = 'Desloca-te a um banco para definires um código PIN',
time = 5000,
type = 'error'
},
['pin_changed'] = {
title = 'BANCO',
text = 'Código PIN alterado com sucesso para ${s1}',
time = 5000,
type = 'success'
},
['pin_no_money'] = {
title = 'BANCO',
text = 'Necessitas de ${s1}€ para alterar o teu código PIN',
time = 5000,
type = 'error'
},
['pin_digits'] = {
title = 'BANCO',
text = 'O código PIN deve ter 4 dígitos',
time = 5000,
type = 'error'
},
['pin_only_numbers'] = {
title = 'BANCO',
text = 'Apenas podes usar números',
time = 5000,
type = 'error'
},
-- IBAN
['iban_not_exist'] = {
title = 'BANCO',
text = 'Este IBAN não existe',
time = 5000,
type = 'error'
},
['iban_in_use'] = {
title = 'BANCO',
text = 'Este IBAN já se encontra em uso',
time = 5000,
type = 'error'
},
['iban_only_numbers'] = {
title = 'BANCO',
text = 'Apenas podes usar números no IBAN',
time = 5000,
type = 'error'
},
['iban_changed'] = {
title = 'BANCO',
text = 'IBAN alterado com sucesso para ${s1}',
time = 5000,
type = 'success'
},
['iban_no_money'] = {
title = 'BANCO',
text = 'Necessitas de ${s1}€ para alterar o teu IBAN',
time = 5000,
type = 'error'
},
-- LEVANTAMENTO / DEPÓSITO / TRANSFERÊNCIA / RECEBIDO
['deposited'] = {
title = 'BANCO',
text = 'Depositaste ${s1}€',
time = 5000,
type = 'success'
},
['withdrawn'] = {
title = 'BANCO',
text = 'Levantaste ${s1}€',
time = 5000,
type = 'success'
},
['received_from'] = {
title = 'BANCO',
text = 'Recebeste ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
['transferred_to'] = {
title = 'BANCO',
text = 'Transferiste ${s1}€ para ${s2}',
time = 5000,
type = 'success'
},
['deposited_to'] = {
title = 'BANCO',
text = 'Depositaste ${s1}€ para ${s2}',
time = 5000,
type = 'success'
},
['someone_withdrawing'] = {
title = 'BANCO',
text = 'Alguém já está a levantar dinheiro',
time = 5000,
type = 'error'
},
['you_have_withdrawn'] = {
title = 'BANCO',
text = 'Levantaste ${s1}€ de ${s2}',
time = 5000,
type = 'success'
},
-- GERAL
['no_creditcard'] = {
title = 'BANCO',
text = 'Não podes aceder ao multibanco sem um cartão de crédito',
time = 5000,
type = 'error'
},
['invalid_amount'] = {
title = 'BANCO',
text = 'Valor inválido',
time = 5000,
type = 'error'
},
['invalid_input'] = {
title = 'BANCO',
text = 'Input inválido',
time = 5000,
type = 'error'
},
['no_money_pocket'] = {
title = 'BANCO',
text = 'Não tens dinheiro suficiente na mão',
time = 5000,
type = 'error'
},
['no_money_bank'] = {
title = 'BANCO',
text = 'Não tens dinheiro suficiente no banco',
time = 5000,
type = 'error'
},
['not_send_yourself'] = {
title = 'BANCO',
text = 'Não podes transferir dinheiro para ti próprio',
time = 5000,
type = 'error'
},
['society_no_money'] = {
title = 'BANCO',
text = 'A tua organização não tem dinheiro suficiente no banco',
time = 5000,
type = 'error'
},
['not_use_bank'] = {
title = 'BANCO',
text = 'Não podes usar o banco neste momento',
time = 5000,
type = 'error'
},
['bought_cc'] = {
title = 'BANCO',
text = 'Compraste um cartão de crédito por ${s1}€',
time = 5000,
type = 'success'
},
-- TEXTUI
['open_banking'] = {
text = '[E] Aceder ao Banco',
color = 'darkblue',
side = 'left'
},
['open_atm'] = {
text = '[E] Aceder à ATM',
color = 'darkblue',
side = 'left'
},
-- QB-TARGET LOCALES
['open_banking_target'] = {
text = 'Aceder ao Banco',
},
['open_atm_target'] = {
text = 'Aceder à ATM',
},
}

View file

@ -1,22 +0,0 @@
CREATE TABLE `okokbanking_transactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`receiver_identifier` varchar(255) NOT NULL,
`receiver_name` varchar(255) NOT NULL,
`sender_identifier` varchar(255) NOT NULL,
`sender_name` varchar(255) NOT NULL,
`date` varchar(255) NOT NULL,
`value` int(50) NOT NULL,
`type` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `okokbanking_societies` (
`society` varchar(255) NULL DEFAULT NULL,
`society_name` varchar(255) NULL DEFAULT NULL,
`value` int(50) NULL DEFAULT NULL,
`iban` varchar(255) NOT NULL,
`is_withdrawing` int(1) NULL DEFAULT NULL
);
ALTER TABLE `players` ADD COLUMN `pincode` int(50) NULL DEFAULT NULL;
ALTER TABLE `management_funds` ADD COLUMN `iban` varchar(255) DEFAULT NULL;

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,14 +0,0 @@
<svg width="1001" height="324" viewBox="0 0 1001 324" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M433.352 318.984H352.342L403.011 5.67909H484.018L433.352 318.984Z" fill="white"/>
<path d="M727.023 13.3385C711.045 6.99923 685.701 -0.00012207 654.363 -0.00012207C574.362 -0.00012207 518.027 42.6604 517.681 103.652C517.017 148.652 558.016 173.646 588.68 188.65C620.022 203.982 630.676 213.989 630.676 227.656C630.357 248.645 605.35 258.32 582.026 258.32C549.683 258.32 532.353 253.332 506.017 241.654L495.35 236.649L484.013 306.979C503.013 315.635 538.019 323.316 574.362 323.653C659.365 323.653 714.704 281.653 715.359 216.656C715.683 180.99 694.033 153.662 647.359 131.331C619.025 116.995 601.673 107.329 601.673 92.6614C602.005 79.3272 616.35 65.6696 648.334 65.6696C674.67 65.0007 694.02 71.3311 708.679 77.666L716.006 80.9929L727.023 13.3385V13.3385Z" fill="white"/>
<path d="M834.694 207.991C841.365 189.992 867.037 120.331 867.037 120.331C866.7 121 873.695 102 877.695 90.3357L883.357 117.332C883.357 117.332 898.698 192.327 902.029 207.991C889.368 207.991 850.695 207.991 834.694 207.991ZM934.691 5.67909H872.029C852.706 5.67909 838.025 11.3406 829.688 31.6741L709.357 318.979H794.359C794.359 318.979 808.353 280.31 811.361 271.982C820.686 271.982 903.376 271.982 915.372 271.982C917.698 282.981 925.038 318.979 925.038 318.979H1000.05L934.691 5.67909V5.67909Z" fill="white"/>
<path d="M284.678 5.67909L205.342 219.323L196.673 175.993C182.005 125.997 136.004 71.6767 84.6699 44.6672L157.339 318.652H243.006L370.34 5.67909H284.678V5.67909Z" fill="white"/>
<path d="M131.672 5.67909H1.33341L0 12.0095C101.672 38.009 169.008 100.68 196.673 176.007L168.339 32.0152C163.674 12.0051 149.338 6.33916 131.672 5.67909Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="1000.05" height="323.653" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because it is too large Load diff

View file

@ -1,882 +0,0 @@
@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css");
@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@200;300;400;500;700;800;900&display=swap');
*,*:focus,*:hover{
outline:none;
}
html {
font-size: calc(16 / 19.2 * 1vw);
}
@media (min-aspect-ratio: 16 / 9) {
html {
font-size: calc(16 / 10.8 * 1vh);
}
}
body {
font-family: 'Tajawal', sans-serif;
background: none;
user-select: none;
}
.card {
border: none;
}
.card-body {
flex: none;
}
.main_card {
width: 62.5rem;
border-radius: 1.25rem;
background-color: #202128;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border: none;
display: none;
box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3);
}
.main_card-body {
background-color: transparent;
color: #d5d6da;
font-size: 0.9375rem;
font-weight: 500;
vertical-align: middle;
font-weight: 600;
height: 45rem;
}
.creditcard-classic_card {
border-radius: 0.9375rem;
width: 15.5rem;
height: 10.5625rem;
background: url('img/classic.png');
border: none;
margin: 0 auto;
margin-bottom: 1rem;
background-size: 100%;
}
.creditcard-classic_card-body {
background-color: transparent;
}
.logo {
max-width: 9.5rem;
max-height: 2.64rem;
}
hr {
color: #3e3f4b;
opacity: 1;
height: 0.00625rem;
}
hr:not([size]) {
height: 0.00625rem;
opacity: 1;
}
.dataTable-table > thead > tr > th {
border-bottom: none;
}
.dataTable-wrapper.no-footer .dataTable-container {
border-bottom: none;
}
.dataTable-top, .dataTable-bottom {
padding: 0 0;
}
thead {
display: none;
}
tr {
background-color: #2e2f36;
margin-bottom: 0.625rem;
font-size: 1.25rem;
transition: .25s;
}
tr:hover {
background-color: #292a31;
transition: .25s;
}
td:first-child {
border-top-left-radius: 0.625rem;
border-bottom-left-radius: 0.625rem;
}
td:last-child {
border-top-right-radius: 0.625rem;
border-bottom-right-radius: 0.625rem;
}
.dataTable-table {
border-collapse:separate;
border-spacing: 0rem 0.4375rem;
}
.sidebar-item {
color: #8f9094;
font-size: 1rem;
padding: 0.625rem;
border-radius: 0.625rem;
font-weight: 500;
transition: 0.4s;
width: 9.5rem;
margin-bottom: 0.75rem;
}
.sidebar-item:hover {
background-color: #1f5eff;
cursor: pointer;
transition: 0.25s;
color: #fff;
}
.sidebar-title {
color: #8d8d8d;
font-size: 0.875rem;
font-weight: 600;
}
.selected {
color: #fff;
background-color: #1f5eff;
font-weight: 600;
}
.bi-credit-card:hover {
fill: red;
}
.selected-page {
color: #fff;
font-size: 1.75rem;
margin-left: 0.9375rem;
}
.username {
color: #fff;
font-weight: 500;
font-size: 1.125rem;
}
.avatar {
border-radius: 50%;
width: 2.5rem;
margin-left: 0.625rem;
}
.fa-wifi {
transform: rotate(90deg);
color: #fff;
font-size: 0.875rem;
}
.btn {
font-weight: 500;
font-size: 1.125rem;
padding: 0.8125rem 1.0625rem;
border: none;
border-radius: 0.125rem;
transition: 0.25s;
letter-spacing: 0.0125rem;
}
.btn:focus {
box-shadow: none;
}
.btn-blue {
background-color: #1f5eff;
color: #e6e6e6;
}
.btn.btn-blue:hover {
background-color: #0a4df9;
color: #e6e6e6;
}
.modal-content {
background-color: transparent;
border: none;
}
.modal-body {
background-color: #292a31;
border-radius: 0.625rem;
color: #fff;
}
.form-control {
border: none;
background-color: #1d1e24;
height: 5rem;
font-size: 1.875rem;
border-radius: 0.625rem;
color: #fff;
}
.form-control:focus {
box-shadow: none;
border: none;
background-color: #1d1e24;
box-shadow: 0rem 0rem 0.3125rem 0.0625rem #1f5eff !important;
color: #fff;
}
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.viewall-badge {
background-color: #1f5eff !important;
transition: 0.25s;
}
.viewall-badge:hover {
background-color: #0a4df9 !important;
transition: 0.25s;
cursor: pointer;
}
.close-button {
color: #c7c7c9;
position: absolute;
right: 1.25rem;
top: 0.9rem;
transition: .25s;
font-size: 1.6rem;
line-height: 1;
}
.close-button:hover {
color: #fff;
transition: .25s;
cursor: pointer;
}
.dataTable-input {
background-color: #2e2f36;
border: none;
border-radius: 0.625rem;
color: #fff;
padding: 0.375rem 0.75rem;
font-size: 1.3rem;
}
.dataTable-pagination .active a, .dataTable-pagination .active a:focus, .dataTable-pagination .active a:hover {
background-color: #1f5eff;
cursor: pointer;
transition: .25s;
}
.dataTable-pagination a {
border-radius: 0.313rem;
color: #fff;
background-color: #2e2f36;
transition: .25s;
padding: 0.375rem 0.75rem;
margin-left: 0.125rem;
}
.dataTable-pagination a:hover {
background-color: #292a31;
transition: .25s;
}
.dataTable-pagination {
position: fixed;
right: 1rem;
bottom: 1rem;
}
.dataTable-bottom {
padding: 0rem 0rem;
font-size: 1.125rem;
}
.dataTable-top > nav:last-child, .dataTable-top > div:last-child, .dataTable-bottom > nav:last-child, .dataTable-bottom > div:last-child {
float: none;
}
.dataTable-top {
float: right;
}
#new_iban {
text-transform: uppercase;
}
::-webkit-input-placeholder {
text-transform: none;
}
.atm_card {
width: 20rem;
border-radius: 1.25rem;
background-color: #202128;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border: none;
display: none;
box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.3);
}
.atm_card-body {
background-color: transparent;
color: #8f9094;
font-size: 0.9375rem;
font-weight: 500;
vertical-align: middle;
font-weight: 600;
}
.dots {
width: 50%;
justify-content: space-around;
padding: 1em;
padding-top: 2em;
}
.dot {
position: relative;
background: rgba(143, 144, 148, 0.5);
border-radius: 50%;
width: 1.6em;
height: 1.6em;
transform: scale3d(0.6, 0.6, 0.6);
}
.dot.active {
-webkit-animation: growDot 0.5s ease;
animation: growDot 0.5s ease;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
.dot.wrong {
-webkit-animation: wrong 0.9s ease;
animation: wrong 0.9s ease;
}
.dot.correct {
-webkit-animation: correct 0.9s ease;
animation: correct 0.9s ease;
}
.dot.clear {
-webkit-animation: clear 0.9s ease;
animation: clear 0.9s ease;
}
.numbers {
display: flex;
flex-flow: row wrap;
align-items: center;
justify-content: space-around;
align-content: flex-end;
margin: 0em 0;
}
.number {
position: relative;
width: 2.5em;
height: 2.5em;
margin: 0.5em;
text-align: center;
line-height: 2.5em;
font-weight: 400;
font-size: 1.8em;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
transition: all 0.5s ease;
border-radius: 0.625rem;
border: 0.125rem solid #1f5eff;
}
.number:hover {
background-color: #1f5eff;
color: #fff;
border-radius: 0.625rem;
cursor: pointer;
}
.number:before {
content: "";
position: absolute;
left: -0.125rem;
width: 2.5em;
height: 2.5em;
transition: all 0.5s ease;
}
.number.grow {
-webkit-animation: grow 0.6s ease;
animation: grow 0.6s ease;
}
@keyframes growDot {
100% {
background: white;
transform: scale3d(0.85, 0.85, 0.85);
}
}
@keyframes grow {
50% {
transform: scale3d(1.1, 1.1, 1.1);
}
100% {
transform: scale3d(1, 1, 1);
}
}
@keyframes wrong {
20% {
background: #ff0000;
transform: scale3d(0.85, 0.85, 0.85);
left: 0;
}
40% {
left: -0.3125rem;
}
60% {
left: 0.625rem;
}
80% {
left: -0.3125rem;
}
}
@keyframes correct {
20% {
background: #1ebc62;
transform: scale3d(0.85, 0.85, 0.85);
top: 0;
}
40% {
top: -0.3125rem;
}
60% {
top: 0.625rem;
}
80% {
top: -0.3125rem;
}
}
@keyframes clear {
20% {
background: #1f5eff;
transform: scale3d(0.85, 0.85, 0.85);
left: 0;
}
}
.load {
position: relative;
width: 9.375rem;
height: 9.375rem;
border-radius: 50%;
border: 0.625rem solid transparent;
border-top: 0.625rem solid #1f5eff;
border-bottom: 0.625rem solid #1f5eff;
animation: rotateAntiCW 1.8s linear infinite;
}
.load::after {
content: '';
position: absolute;
width: 8.125rem;
height: 8.125rem;
border-radius: 50%;
border: 0.625rem solid transparent;
border-left: 0.625rem solid #fff;
border-right: 0.625rem solid #fff;
animation: rotate 1s linear infinite;
}
@keyframes rotate {
0%{transform: rotate(0deg);}
100%{transform: rotate(-360deg);}
}
@keyframes rotateAntiCW {
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
input[type=password]:not(:placeholder-shown) {
font-family: Verdana, sans-serif;
font-size: 2.5rem;
}
.dataTable-table > tbody > tr > td, .dataTable-table > tbody > tr > th, .dataTable-table > tfoot > tr > td, .dataTable-table > tfoot > tr > th, .dataTable-table > thead > tr > td, .dataTable-table > thead > tr > th {
vertical-align: top;
padding: 0.5rem 0.625rem;
}
.card-header:first-child {
border-radius: calc(0.25rem - 0.0625rem) calc(0.25rem - 0.0625rem) 0 0;
}
.card-header {
border-bottom: none;
}
#myChart {
margin-top: 0!important;
margin-top: 0.3125rem;
width: 100%;
}
.dataTable-info {
display: none;
}
#last-t-body .dataTable-bottom .dataTable-pagination {
margin-top: 0;
}
.sidebar-s {
border-right: 0.0625rem solid rgba(62, 63, 75);
width: 11.0625rem;
}
.tab-s {
width: 82%;
display: flex;
flex-direction: column;
padding-right: calc(var(--bs-gutter-x) * .45);
}
.wallet-div {
font-size: 0.875rem;
margin-top: -0.75rem;
font-weight: 500;
position: absolute;
right: 7.1%;
}
.chart-main {
border-right: 0.0625rem solid rgba(62, 63, 75);
}
.chart-card, .settings-card {
background-color: transparent;
border-radius: 0.625rem;
box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.50);
}
.card-o-header {
background-color: #292a31;
border-top-right-radius: 0.625rem !important;
border-top-left-radius: 0.625rem !important;
}
.card-o-title {
color: #fff;
font-size: 1.125rem;
}
.chart-card-body {
background-color: #1d1e24;
border-bottom-left-radius: 0.625rem;
border-bottom-right-radius: 0.625rem;
padding: 0.6rem 1rem 0.5rem 1rem;
}
.chart-div {
height: 13.107rem;
min-height: 13.107rem;
}
.last-t-card, .actions-card, .settings2-card {
background-color: transparent;
border-radius: 0.625rem;
box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.50);
margin-top: 0.75rem;
}
#view_all_transactions, #view_all_transactions_society, .buy_new_card {
position: absolute;
font-size: 0.875rem;
right: 0.5625rem;
top: 0.625rem;
}
#last-t-body {
background-color: #1d1e24;
border-bottom-left-radius: 0.625rem;
border-bottom-right-radius: 0.625rem;
padding: 0.6rem 1rem;
padding: 0.51rem 1rem 0.6rem 1rem;
height: 18.05rem;
}
#text_atm {
font-size: 1.125rem;
}
#depositMoney, #withdrawMoney, #transferMoney, .buyccbtn {
border-radius: 0.625rem;
flex-basis: 100%;
margin-top: 1.125rem;
}
#transfer_iban {
margin-top: 1.125rem;
text-transform: uppercase;
}
.w25 {
width: 25rem;
}
.w20p {
width: 20%;
}
.modal-t {
font-weight: 600;
font-size: 1.875rem;
}
.ccard-card {
background-color: transparent;
border-radius: 0.625rem;
box-shadow: 0rem 0rem 0.313rem 0rem rgba(10, 10, 10, 0.50);
}
.ccard-body {
background-color: #1d1e24;
border-bottom-left-radius: 0.625rem;
border-bottom-right-radius: 0.625rem;
font-size: 1rem;
height: 19.4375rem;
}
.ccard-name {
color: #fff;
font-size: 0.75rem;
margin-left: 0.3125rem;
font-weight: 500;
}
.mt38p {
margin-top: 38%;
}
.ccard-status {
font-weight: 500;
color: #fff;
line-height: 1;
}
.ccard-active {
color: #fff;
font-size: 1.5rem;
color: #fff;
line-height: 1;
text-shadow: 0rem 0rem 0.125rem rgba(255, 255, 255, 0.5);
}
.ccard-valid {
width: 1.5625rem;
line-height: 1;
margin-right: 2.125rem;
}
.ccard-thru {
color: #fff;
font-size: 0.5rem;
font-weight: 500;
margin-right: 0.1875rem;
}
.ccard-exp {
color: #fff;
font-weight: 500;
font-size: 1rem;
}
.ccard-fs {
font-size: 1.28rem;
}
.fff {
color: #fff;
}
.actions-card_body, .settings-card_body {
background-color: #1d1e24;
border-bottom-left-radius: 0.625rem;
border-bottom-right-radius: 0.625rem;
}
#depositMoneyModal, #withdrawMoneyModal, #transferMoneyModal {
border-radius: 0.625rem;
flex-basis: 100%;
}
.mt4375 {
margin-top: 0.4375rem;
}
.lastT-action, .transactions-action {
background-color: #1d1e24;
padding: 0.3125rem 0.625rem 0.3125rem 0.625rem;
border-radius: 0.625rem;
}
.lastT-name-div {
font-weight: 500;
font-size: 1rem;
}
.lastT-name, .transactions-name {
color: #1f5eff;
text-transform: capitalize;
font-weight: 600;
}
.mtm3125 {
margin-top: -0.3125rem;
}
.fw500 {
font-weight: 500;
}
.lastT-received, .transactions-received {
color: #2ecc71;
}
.fs1125 {
font-size: 1.125rem;
}
.fs1875 {
font-size: 1.875rem;
}
.settings-col {
flex: 1 1 50%;
}
.changeiban-card, .changepin-card {
background-color: #292a31;
border-radius: 0.625rem;
color: #fff;
}
.fs15 {
font-size: 1.5rem;
}
#new_iban {
margin-top: 0.75rem;
width: 100%;
}
#change_iban {
border-radius: 0.625rem;
flex-basis: 100%;
margin-top: 0.75rem;
width: 100%;
font-size: 1.17rem;
}
.settings_info-card {
background-color: #1f5eff;
border-radius: 0.625rem;
color: #fff;
}
#new_pin {
margin-top: 0.75rem;
width: 100%;
}
#change_pin {
border-radius: 0.625rem;
flex-basis: 100%;
margin-top: 0.75rem;
width: 100%;
font-size: 1.17rem;
}
.pr05 {
padding-right: 0.5rem;
}
.pl05 {
padding-left: 0.5rem;
}
.stats-title {
background-color: #1f5eff;
border-radius: 0.625rem;
color: #fff;
}
.card-title {
font-weight: 600;
font-size: 1.25rem;
}
.fw125 {
font-size: 1.25rem;
}
.transactions-name-div {
font-weight: 500;
}
.ldata-txt {
font-size: 2.5rem;
color: #fff;
}
.floatr {
float: right;
}
.btn-dark {
background-color: #1d1e24;
}
.btn-dark:hover {
background-color: #1b1c22;
}
.modal-buycc {
width: 35rem;
}
#transactionsTable {
max-width: 100.1%;
width: 100.1%;
border-spacing: 0rem 0.5rem;
}
#transactionsData tr {
height: 4.55rem;
}

View file

@ -1,129 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/simple-datatables@5.0/dist/style.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link href="styles.css" rel="stylesheet">
</head>
<body>
<div class="card main_card">
<div class="card-body main_card-body">
<div class="row h-100" id="menu"></div>
</div>
</div>
<div class="card atm_card">
<div class="card-body atm_card-body d-flex justify-content-center align-items-center flex-column">
<span class="close-button close-atm"><i class="fas fa-times"></i></span>
<div class="text-center">
<img src="img/logo.png" class="logo">
</div>
<div class="dots d-flex">
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
</div>
<span id="text_atm">Enter your account's PIN code</span>
<div class="numbers">
<div class="row">
<div class="number">1</div>
<div class="number">2</div>
<div class="number">3</div>
</div>
<div class="row">
<div class="number">4</div>
<div class="number">5</div>
<div class="number">6</div>
</div>
<div class="row">
<div class="number">7</div>
<div class="number">8</div>
<div class="number">9</div>
</div>
<div class="row">
<div class="number">C</div>
<div class="number">0</div>
<div class="number">OK</div>
</div>
</div>
</div>
</div>
<!-- Deposit Modal -->
<div class="modal fade" id="depositModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered w25">
<div class="modal-content myinvoices_modal-content">
<div class="modal-body p-4 text-center">
<span class="modal-t">Deposit Money</span>
<span class="close-button" data-bs-dismiss="modal"><i class="fas fa-times"></i></span>
<div class="d-flex justify-content-center flex-column mt-3">
<input type="number" id="deposit_value" class="form-control flex-grow-1 text-center" placeholder="Amount" onkeyup="checkIfEmpty()">
<button type="button" id="depositMoney" class="btn btn-blue flex-grow-1 fs1875" data-bs-toggle="modal" data-bs-target="#depositModal" disabled><i class="bi bi-upload"></i> DEPOSIT</button>
</div>
</div>
</div>
</div>
</div>
<!-- Withdraw Modal -->
<div class="modal fade" id="withdrawModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered w25">
<div class="modal-content myinvoices_modal-content">
<div class="modal-body p-4 text-center">
<span class="modal-t">Withdraw Money</span>
<span class="close-button" data-bs-dismiss="modal"><i class="fas fa-times"></i></span>
<div class="d-flex justify-content-center flex-column mt-3">
<input type="number" id="withdraw_value" class="form-control flex-grow-1 text-center" placeholder="Amount" onkeyup="checkIfEmpty()">
<button type="button" id="withdrawMoney" class="btn btn-blue flex-grow-1 fs1875" data-bs-toggle="modal" data-bs-target="#withdrawModal" disabled><i class="bi bi-download"></i> WITHDRAW</button>
</div>
</div>
</div>
</div>
</div>
<!-- Transfer Modal -->
<div class="modal fade" id="transferModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered w25">
<div class="modal-content myinvoices_modal-content">
<div class="modal-body p-4 text-center">
<span class="modal-t">Transfer Money</span>
<span class="close-button" data-bs-dismiss="modal"><i class="fas fa-times"></i></span>
<div class="d-flex justify-content-center flex-column mt-3">
<input type="number" id="transfer_value" class="form-control flex-grow-1 text-center" placeholder="Amount" onkeyup="checkIfEmpty()">
<input type="text" id="transfer_iban" class="form-control flex-grow-1 text-center" placeholder="IBAN" onkeyup="checkIfEmpty()">
<button type="button" id="transferMoney" class="btn btn-blue flex-grow-1 fs1875" data-bs-toggle="modal" data-bs-target="#transferModal" disabled><i class="fas fa-exchange-alt"></i> TRANSFER</button>
</div>
</div>
</div>
</div>
</div>
<!-- Buy CC -->
<div class="modal fade" id="buycc_modal" tabindex="-1">
<div class="modal-dialog modal-lg modal-dialog-centered modal-buycc">
<div class="modal-content myinvoices_modal-content">
<div class="modal-body p-4 text-center">
<span class="modal-t">Are you sure?</span>
<hr>
<span class="close-button" data-bs-dismiss="modal"><i class="fas fa-times"></i></span>
<div class="text-center modal-t fw500">Do you want to buy a new Credit Card?</div>
<div class="d-flex justify-content-center align-items-center mt-2">
<button type="button" class="btn btn-dark w-50 me-2 buyccbtn fs1875" data-bs-dismiss="modal"><i class="fas fa-times"></i> CANCEL</button>
<button type="button" id="buy_new_cc" class="btn btn-blue w-50 ms-2 buyccbtn fs1875" data-bs-dismiss="modal"><i class="fas fa-shopping-cart"></i> BUY</button>
</div>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/simple-datatables@5.0" crossorigin="anonymous"></script>
<script src="scripts.js" type="text/javascript"></script>
</body>
</html>