363 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			363 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local framework = nil
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getLocales", function(_, cb)
 | |
|     cb(lib.getLocales())
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:hideUI", function(_, cb)
 | |
|     SetNuiFocus(false, false)
 | |
|     cb({})
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:phoneOption", function(_, cb)
 | |
|     cb(Config.LBPhone)
 | |
| end)
 | |
| 
 | |
| -- Banks
 | |
| RegisterNetEvent('ps-banking:client:open:bank')
 | |
| AddEventHandler('ps-banking:client:open:bank', function()
 | |
| 	Citizen.Wait(100)
 | |
|     SendNUIMessage({
 | |
|         action = "openBank",
 | |
|     })
 | |
|     SetNuiFocus(true, true)
 | |
| end)
 | |
| 
 | |
| Citizen.CreateThread(function()
 | |
|     local zoneId = 1
 | |
|     for _, location in pairs(Config.BankLocations.Coords) do
 | |
|         local zoneName = "bank_" .. zoneId
 | |
|         if Config.TargetSystem == "interact" then
 | |
|             exports.interact:AddInteraction({
 | |
|                 coords = vec3(location.x, location.y, location.z),
 | |
|                 distance = 2.5,
 | |
|                 interactDst = 2.5,
 | |
|                 id = locale("openBank").."interact",
 | |
|                 name = locale("openBank").."interact:name",
 | |
|                 options = {
 | |
|                      {
 | |
|                         label = 'Access Bank',
 | |
|                         action = function()
 | |
|                             SendNUIMessage({
 | |
|                                 action = "openBank",
 | |
|                             })
 | |
|                             SetNuiFocus(true, true)
 | |
|                         end,
 | |
|                     },
 | |
|                 }
 | |
|             })
 | |
|         elseif Config.TargetSystem == "ox_target" then
 | |
|             exports.ox_target:addBoxZone({
 | |
|                 name = zoneName,
 | |
|                 coords = vector3(location.x, location.y, location.z),
 | |
|                 size = vec3(2, 2, 2),
 | |
|                 options = {
 | |
|                     {
 | |
|                         event = "ps-banking:client:open:bank",
 | |
|                         icon = "fas fa-credit-card",
 | |
|                         label = locale("openBank"),
 | |
|                     },
 | |
|                 },
 | |
|             })
 | |
|         else
 | |
|         exports["qb-target"]:AddBoxZone(zoneName, vector3(location.x, location.y, location.z), 1.5, 1.6, {
 | |
|             name = zoneName,
 | |
|             heading = 0.0,
 | |
|             debugPoly = false,
 | |
|             minZ = location.z - 1,
 | |
|             maxZ = location.z + 1,
 | |
|         }, {
 | |
|             options = {
 | |
|                 {
 | |
|                     icon = "fas fa-credit-card",
 | |
|                     label = locale("openBank"),
 | |
|                     action = function()
 | |
|                         SendNUIMessage({
 | |
|                             action = "openBank",
 | |
|                         })
 | |
|                         SetNuiFocus(true, true)
 | |
|                     end,
 | |
|                 },
 | |
|             },
 | |
|             distance = 2.5,
 | |
|         })
 | |
|         zoneId = zoneId + 1
 | |
|     end
 | |
| 
 | |
|     for i = 1, #Config.BankLocations.Coords do
 | |
|         local blip = AddBlipForCoord(vector3(Config.BankLocations.Coords[i].x, Config.BankLocations.Coords[i].y,
 | |
|             Config.BankLocations.Coords[i].z))
 | |
|         SetBlipSprite(blip, Config.BankLocations.Blips.sprite)
 | |
|         SetBlipDisplay(blip, 4)
 | |
|         SetBlipScale(blip, Config.BankLocations.Blips.scale)
 | |
|         SetBlipColour(blip, Config.BankLocations.Blips.color)
 | |
|         SetBlipAsShortRange(blip, true)
 | |
|         BeginTextCommandSetBlipName("STRING")
 | |
|         AddTextComponentSubstringPlayerName(Config.BankLocations.Blips.name)
 | |
|         EndTextCommandSetBlipName(blip)
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| -- ATMs
 | |
| RegisterNetEvent('ps-banking:client:open:atm')
 | |
| AddEventHandler('ps-banking:client:open:atm', function()
 | |
| 	Citizen.Wait(100)
 | |
|     ATM_Animation()
 | |
|     SendNUIMessage({
 | |
|         action = "openATM",
 | |
|     })
 | |
|     SetNuiFocus(true, true)
 | |
| end)
 | |
| 
 | |
| function ATM_Animation()
 | |
| 	lib.playAnim(cache.ped, Config.ATM_Animation.dict, Config.ATM_Animation.name, 8.0, -8.0, -1, Config.ATM_Animation.flag, 0, false, 0, false)
 | |
|     Wait(GetAnimDuration(Config.ATM_Animation.dict,Config.ATM_Animation.name) * 1000)
 | |
|     ClearPedTasks(cache.ped)
 | |
| end
 | |
| 
 | |
| Citizen.CreateThread(function()
 | |
|     if Config.TargetSystem == "interact" then
 | |
|         for _, ATM_Models in ipairs(Config.ATM_Models) do
 | |
|             exports.interact:AddModelInteraction({
 | |
|                 model = ATM_Models,
 | |
|                 offset = vec3(0.0, 0.0, 1.0),
 | |
|                 name = locale("openATM") .. "interact:name",
 | |
|                 id = locale("openATM") .. "interact",
 | |
|                 distance = 2.5,
 | |
|                 interactDst = 2.5,
 | |
|                 options = {
 | |
|                     {
 | |
|                         label = locale("openATM"),
 | |
|                         event = "ps-banking:client:open:atm",
 | |
|                     },
 | |
|                 }
 | |
|             })
 | |
|         end
 | |
|     elseif Config.TargetSystem == "ox_target" then
 | |
|         for _, ATM_Models in ipairs(Config.ATM_Models) do
 | |
|             exports.ox_target:addModel(ATM_Models, {
 | |
|                 icon = "fas fa-solid fa-money-bills",
 | |
|                 label = locale("openATM"),
 | |
|                 event = "ps-banking:client:open:atm",
 | |
|                 canInteract = function(_, distance)
 | |
|                     return distance < 2.5
 | |
|                 end,
 | |
|             })
 | |
|         end
 | |
|     else
 | |
|         exports["qb-target"]:AddTargetModel(Config.ATM_Models, {
 | |
|             options = {
 | |
|                 {
 | |
|                     icon = "fas fa-solid fa-money-bills",
 | |
|                     label = locale("openATM"),
 | |
|                     action = function()
 | |
|                         ATM_Animation()
 | |
|                         SendNUIMessage({
 | |
|                             action = "openATM",
 | |
|                         })
 | |
|                         SetNuiFocus(true, true)
 | |
|                     end,
 | |
|                 },
 | |
|             },
 | |
|             distance = 2.5,
 | |
|         })
 | |
|     end
 | |
| end)
 | |
| 
 | |
| if GetResourceState("es_extended") == "started" then
 | |
|     framework = "ESX"
 | |
|     ESX = exports["es_extended"]:getSharedObject()
 | |
| elseif GetResourceState("qb-core") == "started" then
 | |
|     framework = "QBCore"
 | |
|     QBCore = exports["qb-core"]:GetCoreObject()
 | |
| else
 | |
|     return error(locale("no_framework_found"))
 | |
| end
 | |
| 
 | |
| local function getPlayerAccounts()
 | |
|     local accounts = {}
 | |
|     if framework == "ESX" then
 | |
|         accounts = ESX.GetPlayerData().accounts
 | |
|     elseif framework == "QBCore" then
 | |
|         accounts = QBCore.Functions.GetPlayerData().money
 | |
|     end
 | |
|     return accounts
 | |
| end
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getBills", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:getBills", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:payBill", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:payBill", false, data.id)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getHistory", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:getHistory", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:deleteHistory", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:deleteHistory", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:payAllBills", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:payAllBills", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getWeeklySummary", function(data, cb)
 | |
|     local summary = lib.callback.await("ps-banking:server:getWeeklySummary", false)
 | |
|     cb(summary)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:transferMoney", function(data, cb)
 | |
|     local success, message = lib.callback.await("ps-banking:server:transferMoney", false, data)
 | |
|     cb({
 | |
|         success = success,
 | |
|         message = message,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getTransactionStats", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:getTransactionStats", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| if framework == "ESX" then
 | |
|     RegisterNetEvent("esx:setAccountMoney", function(account)
 | |
|         local moneyData = {}
 | |
|         for k, v in pairs(getPlayerAccounts()) do
 | |
|             table.insert(moneyData, {
 | |
|                 amount = v.money,
 | |
|                 name = v.name == "money" and "cash" or v.name,
 | |
|             })
 | |
|         end
 | |
|         Wait(50)
 | |
|         TriggerServerEvent("ps-banking:server:logClient", account, moneyData)
 | |
|     end)
 | |
| elseif framework == "QBCore" then
 | |
|     RegisterNetEvent("QBCore:Client:OnMoneyChange", function(moneyType, amount)
 | |
|         local moneyData = {}
 | |
|         for k, v in pairs(getPlayerAccounts()) do
 | |
|             table.insert(moneyData, {
 | |
|                 name = k,
 | |
|                 amount = v,
 | |
|             })
 | |
|         end
 | |
|         Wait(50)
 | |
|         TriggerServerEvent("ps-banking:server:logClient", {
 | |
|             name = "bank",
 | |
|             moneyType = moneyType,
 | |
|             amount = amount,
 | |
|         }, moneyData)
 | |
|     end)
 | |
| end
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:createNewAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:createNewAccount", false, data.newAccount)
 | |
|     cb({
 | |
|         success = success,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getUser", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:getUser", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getAccounts", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:getAccounts", false)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:deleteAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:deleteAccount", false, data.accountId)
 | |
|     cb({
 | |
|         success = success,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:withdrawFromAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:withdrawFromAccount", false, data.accountId, data.amount)
 | |
|     cb({
 | |
|         success = success,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:depositToAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:depositToAccount", false, data.accountId, data.amount)
 | |
|     cb({
 | |
|         success = success,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:addUserToAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:addUserToAccount", false, data.accountId, data.userId)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:removeUserFromAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:removeUserFromAccount", false, data.accountId, data.user)
 | |
|     cb({
 | |
|         success = success,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:renameAccount", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:renameAccount", false, data.id, data.newName)
 | |
|     cb({
 | |
|         success = success,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:copyAccountNumber", function(data, cb)
 | |
|     lib.setClipboard(data.accountNumber)
 | |
|     cb(true)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:ATMwithdraw", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:ATMwithdraw", false, data.amount)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:ATMdeposit", function(data, cb)
 | |
|     local success = lib.callback.await("ps-banking:server:ATMdeposit", false, data.amount)
 | |
|     cb(success)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getMoneyTypes", function(data, cb)
 | |
|     local moneyData = {}
 | |
| 
 | |
|     if framework == "ESX" then
 | |
|         for k, v in pairs(getPlayerAccounts()) do
 | |
|             table.insert(moneyData, {
 | |
|                 amount = v.money,
 | |
|                 name = v.name == "money" and "cash" or v.name,
 | |
|             })
 | |
|         end
 | |
|     elseif framework == "QBCore" then
 | |
|         local PlayerData = QBCore.Functions.GetPlayerData()
 | |
|         for k, v in pairs(PlayerData.money) do
 | |
|             table.insert(moneyData, {
 | |
|                 amount = v,
 | |
|                 name = k,
 | |
|             })
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     --print(json.encode(moneyData))
 | |
|     cb(moneyData)
 | |
| end)
 | |
| 
 | |
| RegisterNUICallback("ps-banking:client:getAmountPresets", function(_, cb)
 | |
|     cb(json.encode({
 | |
|         withdrawAmounts = Config.PresetATM_Amounts.Amounts,
 | |
|         depositAmounts = Config.PresetATM_Amounts.Amounts,
 | |
|         grid = Config.PresetATM_Amounts.Grid,
 | |
|     }))
 | |
| end)
 | 
