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 if data.isBoss == true then canAccessSociety = true 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)