642 lines
23 KiB
Lua
642 lines
23 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local isVisible = false
|
|
|
|
local FullyLoaded = LocalPlayer.state.isLoggedIn
|
|
|
|
AddStateBagChangeHandler('isLoggedIn', nil, function(_, _, value)
|
|
FullyLoaded = value
|
|
end)
|
|
|
|
local function nuiHandler(val)
|
|
isVisible = val
|
|
SetNuiFocus(val, val)
|
|
end
|
|
|
|
local function openBankUI(isAtm)
|
|
SendNUIMessage({action = "setLoading", status = true})
|
|
nuiHandler(true)
|
|
QBCore.Functions.TriggerCallback('renewed-banking:server:initalizeBanking', function(result)
|
|
if not result then
|
|
nuiHandler(false)
|
|
QBCore.Functions.Notify(Lang:t("notify.loading_failed"), 'error', 7500)
|
|
return
|
|
end
|
|
SetTimeout(1000, function()
|
|
SendNUIMessage({
|
|
action = "setVisible",
|
|
status = isVisible,
|
|
accounts = result,
|
|
loading = false,
|
|
atm = isAtm
|
|
})
|
|
end)
|
|
end)
|
|
end
|
|
|
|
RegisterNetEvent("Renewed-Banking:client:openBankUI", function(data)
|
|
local txt = data.atm and 'Åbner ATM' or 'Åbner bank'
|
|
TaskStartScenarioInPlace(PlayerPedId(), "PROP_HUMAN_ATM", 0, 1)
|
|
QBCore.Functions.Progressbar('Renewed-Banking', txt, math.random(1000,3000), false, true, {
|
|
disableMovement = true,
|
|
disableCarMovement = true,
|
|
disableMouse = false,
|
|
disableCombat = true,
|
|
}, {}, {}, {}, function()
|
|
openBankUI(data.atm)
|
|
Wait(500)
|
|
ClearPedTasksImmediately(PlayerPedId())
|
|
end, function()
|
|
ClearPedTasksImmediately(PlayerPedId())
|
|
QBCore.Functions.Notify('Cancelled...', 'error', 7500)
|
|
end)
|
|
end)
|
|
|
|
RegisterNUICallback("closeInterface", function(_, cb)
|
|
nuiHandler(false)
|
|
cb("ok")
|
|
end)
|
|
|
|
RegisterCommand("closeBankUI", function() nuiHandler(false) end)
|
|
|
|
local bankActions = {"deposit", "withdraw", "transfer"}
|
|
CreateThread(function ()
|
|
for k=1, #bankActions do
|
|
RegisterNUICallback(bankActions[k], function(data, cb)
|
|
local pushingP = promise.new()
|
|
QBCore.Functions.TriggerCallback("Renewed-Banking:server:"..bankActions[k], function(result)
|
|
pushingP:resolve(result)
|
|
end, data)
|
|
local newTransaction = Citizen.Await(pushingP)
|
|
cb(newTransaction)
|
|
end)
|
|
end
|
|
if lib then
|
|
exports.ox_target:addModel(config.atms, {{
|
|
name = 'renewed_banking_openui',
|
|
event = 'Renewed-Banking:client:openBankUI',
|
|
icon = 'fas fa-money-check',
|
|
label = Lang:t("menu.view_bank"),
|
|
atm = true,
|
|
canInteract = function(_, distance)
|
|
return distance < 2.5
|
|
end
|
|
}})
|
|
return
|
|
end
|
|
exports['qb-target']:AddTargetModel(config.atms,{
|
|
options = {{
|
|
type = "client",
|
|
event = "Renewed-Banking:client:openBankUI",
|
|
icon = "fas fa-money-check",
|
|
label = Lang:t("menu.view_bank"),
|
|
atm = true
|
|
}},
|
|
distance = 2.5
|
|
})
|
|
|
|
end)
|
|
|
|
local function createBlip(blip, label, number)
|
|
exports['blip_info']:SetBlipInfoTitle(blip, label, 0)
|
|
exports['blip_info']:SetBlipInfoImage(blip, "banks", "bank"..number)
|
|
exports['blip_info']:AddBlipInfoName(blip, "Ejet af", "Staten")
|
|
exports['blip_info']:AddBlipInfoName(blip, "Type", "Pengehåndtering")
|
|
exports['blip_info']:AddBlipInfoHeader(blip, "")
|
|
exports['blip_info']:AddBlipInfoHeader(blip, "")
|
|
exports['blip_info']:AddBlipInfoText(blip, "Hvis du er bange for at miste dine penge, kan du altid oprette en bankkonto.")
|
|
end
|
|
|
|
local pedSpawned = false
|
|
local peds = {basic = {}, adv ={}}
|
|
local blips = {}
|
|
local function createPeds()
|
|
if pedSpawned then return end
|
|
for k=1, #config.peds do
|
|
local model = joaat(config.peds[k].model)
|
|
|
|
RequestModel(model)
|
|
while not HasModelLoaded(model) do Wait(0) end
|
|
|
|
local coords = config.peds[k].coords
|
|
local bankPed = CreatePed(0, model, coords.x, coords.y, coords.z-1, coords.w, false, false)
|
|
|
|
TaskStartScenarioInPlace(bankPed, 'PROP_HUMAN_STAND_IMPATIENT', 0, true)
|
|
FreezeEntityPosition(bankPed, true)
|
|
SetEntityInvincible(bankPed, true)
|
|
SetBlockingOfNonTemporaryEvents(bankPed, true)
|
|
table.insert(config.peds[k].createAccounts and peds.adv or peds.basic, bankPed)
|
|
|
|
blips[k] = AddBlipForCoord(coords.x, coords.y, coords.z-1)
|
|
SetBlipSprite(blips[k], 108)
|
|
SetBlipDisplay(blips[k], 4)
|
|
SetBlipScale (blips[k], 0.80)
|
|
SetBlipColour (blips[k], 2)
|
|
SetBlipAsShortRange(blips[k], true)
|
|
BeginTextCommandSetBlipName("STRING")
|
|
AddTextComponentString("Bank")
|
|
EndTextCommandSetBlipName(blips[k])
|
|
createBlip(blips[k], config.peds[k].label, k)
|
|
end
|
|
if lib then
|
|
local targetOpts ={{
|
|
name = 'renewed_banking_openui',
|
|
event = 'Renewed-Banking:client:openBankUI',
|
|
icon = 'fas fa-money-check',
|
|
label = Lang:t("menu.view_bank"),
|
|
atm = false,
|
|
canInteract = function(_, distance)
|
|
return distance < 4.5
|
|
end
|
|
}}
|
|
exports.ox_target:addLocalEntity(peds.basic, targetOpts)
|
|
targetOpts[#targetOpts+1]={
|
|
name = 'renewed_banking_accountmng',
|
|
event = 'Renewed-Banking:client:accountManagmentMenu',
|
|
icon = 'fas fa-money-check',
|
|
label = Lang:t("menu.manage_bank"),
|
|
atm = false,
|
|
canInteract = function(_, distance)
|
|
return distance < 4.5
|
|
end
|
|
}
|
|
exports.ox_target:addLocalEntity(peds.adv, targetOpts)
|
|
else
|
|
exports['qb-target']:AddTargetEntity(peds.basic, {
|
|
options = {
|
|
{
|
|
type = "client",
|
|
event = "Renewed-Banking:client:openBankUI",
|
|
icon = "fas fa-money-check",
|
|
label = Lang:t("menu.view_bank"),
|
|
atm = false
|
|
}
|
|
},
|
|
distance = 4.0
|
|
})
|
|
exports['qb-target']:AddTargetEntity(peds.adv, {
|
|
options = {
|
|
{
|
|
type = "client",
|
|
event = "Renewed-Banking:client:openBankUI",
|
|
icon = "fas fa-money-check",
|
|
label = Lang:t("menu.view_bank"),
|
|
atm = false
|
|
},
|
|
{
|
|
type = "client",
|
|
event = "Renewed-Banking:client:accountManagmentMenu",
|
|
icon = "fas fa-money-check",
|
|
label = Lang:t("menu.manage_bank")
|
|
}
|
|
},
|
|
distance = 4.0
|
|
})
|
|
end
|
|
pedSpawned = true
|
|
end
|
|
|
|
local function deletePeds()
|
|
if not pedSpawned then return end
|
|
local k=1
|
|
for x,v in pairs(peds)do
|
|
for i=1, #v do
|
|
DeletePed(v[i])
|
|
RemoveBlip(blips[k])
|
|
k += 1
|
|
end
|
|
peds[x] = {}
|
|
end
|
|
end
|
|
|
|
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
|
|
Wait(100)
|
|
createPeds()
|
|
SendNUIMessage({
|
|
action = "updateLocale",
|
|
translations = Translations.ui,
|
|
})
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Client:OnPlayerUnload', function()
|
|
deletePeds()
|
|
end)
|
|
|
|
AddEventHandler('onResourceStop', function(resource)
|
|
if resource ~= GetCurrentResourceName() then return end
|
|
if lib then
|
|
exports.ox_target:removeModel(config.atms, {'renewed_banking_openui'})
|
|
exports.ox_target:removeEntity(peds.basic, {'renewed_banking_openui'})
|
|
exports.ox_target:removeEntity(peds.adv, {'renewed_banking_openui','renewed_banking_accountmng'})
|
|
else
|
|
exports['qb-target']:RemoveTargetModel(config.atms, Lang:t("menu.view_bank"))
|
|
exports['qb-target']:RemoveTargetEntity(peds.basic, Lang:t("menu.view_bank"))
|
|
exports['qb-target']:RemoveTargetEntity(peds.adv, {Lang:t("menu.view_bank"), Lang:t("menu.manage_bank")})
|
|
end
|
|
deletePeds()
|
|
end)
|
|
|
|
AddEventHandler('onResourceStart', function(resource)
|
|
if resource ~= GetCurrentResourceName() then return end
|
|
if not FullyLoaded then return end
|
|
Wait(100)
|
|
createPeds()
|
|
SendNUIMessage({
|
|
action = "updateLocale",
|
|
translations = Translations.ui,
|
|
})
|
|
|
|
end)
|
|
|
|
RegisterNetEvent("Renewed-Banking:client:sendNotification", function(msg)
|
|
if not msg then return end
|
|
SendNUIMessage({
|
|
action = "notify",
|
|
status = msg,
|
|
})
|
|
end)
|
|
|
|
RegisterNetEvent('Renewed-Banking:client:viewAccountsMenu', function()
|
|
TriggerServerEvent("Renewed-Banking:server:getPlayerAccounts")
|
|
end)
|
|
|
|
local bankingMenus = {
|
|
[1] = {
|
|
event = "Renewed-Banking:client:accountManagmentMenu",
|
|
menu = function()
|
|
local table = {
|
|
{
|
|
isMenuHeader = true,
|
|
header = Lang:t("menu.bank_name")
|
|
},
|
|
{
|
|
header = Lang:t("menu.create_account"),
|
|
icon = 'file-invoice-dollar',
|
|
txt = Lang:t("menu.create_account_txt"),
|
|
params = {
|
|
event = 'Renewed-Banking:client:createAccountMenu'
|
|
}
|
|
},
|
|
{
|
|
header = Lang:t("menu.manage_account"),
|
|
icon = 'users-gear',
|
|
txt = Lang:t("menu.manage_account_txt"),
|
|
params = {
|
|
event = 'Renewed-Banking:client:viewAccountsMenu'
|
|
}
|
|
}
|
|
}
|
|
exports["qb-menu"]:openMenu(table)
|
|
end,
|
|
lib = function()
|
|
lib.registerContext({
|
|
id = 'renewed_banking_account_management',
|
|
title = Lang:t("menu.bank_name"),
|
|
position = 'top-right',
|
|
options = {
|
|
{
|
|
title = Lang:t("menu.create_account"),
|
|
icon = 'file-invoice-dollar',
|
|
metadata = {Lang:t("menu.create_account_txt")},
|
|
event = "Renewed-Banking:client:createAccountMenu"
|
|
},
|
|
{
|
|
title = Lang:t("menu.manage_account"),
|
|
icon = 'users-gear',
|
|
metadata = {Lang:t("menu.manage_account_txt")},
|
|
event = 'Renewed-Banking:client:viewAccountsMenu'
|
|
}
|
|
}
|
|
})
|
|
lib.showContext("renewed_banking_account_management")
|
|
end
|
|
},
|
|
[2] = {
|
|
event = "Renewed-Banking:client:createAccountMenu",
|
|
menu = function()
|
|
local dialog = exports["qb-input"]:ShowInput({
|
|
header = Lang:t("menu.bank_name"),
|
|
submitText = Lang:t("menu.create_account"),
|
|
inputs = {
|
|
{
|
|
text = Lang:t("menu.account_id"),
|
|
name = "accountid",
|
|
type = "text",
|
|
isRequired = true
|
|
}
|
|
}
|
|
})
|
|
if dialog and dialog.accountid then
|
|
dialog.accountid = dialog.accountid:lower():gsub("%s+", "")
|
|
TriggerServerEvent("Renewed-Banking:server:createNewAccount", dialog.accountid)
|
|
end
|
|
end,
|
|
lib = function()
|
|
local input = lib.inputDialog(Lang:t("menu.bank_name"), {{
|
|
type = "input",
|
|
label = Lang:t("menu.account_id"),
|
|
placeholder = "a_test_account"
|
|
}})
|
|
if input and input[1] then
|
|
input[1] = input[1]:lower():gsub("%s+", "")
|
|
TriggerServerEvent("Renewed-Banking:server:createNewAccount", input[1])
|
|
end
|
|
end
|
|
},
|
|
[3] = {
|
|
event = "Renewed-Banking:client:accountsMenu",
|
|
menu = function(data)
|
|
local table = {{
|
|
isMenuHeader = true,
|
|
header = Lang:t("menu.bank_name")
|
|
}}
|
|
if #data >= 1 then
|
|
for k=1, #data do
|
|
table[#table+1] = {
|
|
header = data[k],
|
|
icon = 'users-gear',
|
|
txt = Lang:t("menu.view_members"),
|
|
params = {
|
|
event = 'Renewed-Banking:client:accountsMenuView',
|
|
args = {
|
|
account = data[k],
|
|
}
|
|
}
|
|
}
|
|
end
|
|
else
|
|
table[#table+1] = {
|
|
header = Lang:t("menu.no_account"),
|
|
icon = 'users-gear',
|
|
txt = Lang:t("menu.no_account_txt"),
|
|
isMenuHeader = true
|
|
}
|
|
end
|
|
exports["qb-menu"]:openMenu(table)
|
|
end,
|
|
lib = function(data)
|
|
local menuOpts = {}
|
|
if #data >= 1 then
|
|
for k=1, #data do
|
|
menuOpts[#menuOpts+1] = {
|
|
title = data[k],
|
|
icon = 'users-gear',
|
|
metadata = {Lang:t("menu.view_members")},
|
|
event = "Renewed-Banking:client:accountsMenuView",
|
|
args = {
|
|
account = data[k],
|
|
}
|
|
}
|
|
end
|
|
else
|
|
menuOpts[#menuOpts+1] = {
|
|
title = Lang:t("menu.no_account"),
|
|
icon = 'users-gear',
|
|
metadata = {Lang:t("menu.no_account_txt")},
|
|
}
|
|
end
|
|
lib.registerContext({
|
|
id = 'renewed_banking_account_list',
|
|
title = Lang:t("menu.bank_name"),
|
|
position = 'top-right',
|
|
menu = "renewed_banking_account_management",
|
|
options = menuOpts
|
|
})
|
|
lib.showContext("renewed_banking_account_list")
|
|
end
|
|
},
|
|
[4] = {
|
|
event = "Renewed-Banking:client:accountsMenuView",
|
|
menu = function(data)
|
|
local table = {
|
|
{
|
|
isMenuHeader = true,
|
|
header = Lang:t("menu.bank_name")
|
|
},
|
|
{
|
|
header = Lang:t("menu.manage_members"),
|
|
icon = 'users-gear',
|
|
txt = Lang:t("menu.manage_members_txt"),
|
|
params = {
|
|
isServer =true,
|
|
event = 'Renewed-Banking:server:viewMemberManagement',
|
|
args = data
|
|
}
|
|
},
|
|
{
|
|
header = Lang:t("menu.edit_acc_name"),
|
|
icon = 'users-gear',
|
|
txt = Lang:t("menu.edit_acc_name_txt"),
|
|
params = {
|
|
event = 'Renewed-Banking:client:changeAccountName',
|
|
args = data
|
|
}
|
|
}
|
|
}
|
|
exports["qb-menu"]:openMenu(table)
|
|
end,
|
|
lib = function(data)
|
|
lib.registerContext({
|
|
id = 'renewed_banking_account_view',
|
|
title = Lang:t("menu.bank_name"),
|
|
position = 'top-right',
|
|
menu = "renewed_banking_account_list",
|
|
options = {
|
|
{
|
|
title = Lang:t("menu.manage_members"),
|
|
icon = 'users-gear',
|
|
metadata = {Lang:t("menu.manage_members_txt")},
|
|
serverEvent = "Renewed-Banking:server:viewMemberManagement",
|
|
args = data
|
|
},
|
|
{
|
|
title = Lang:t("menu.edit_acc_name"),
|
|
icon = 'users-gear',
|
|
metadata = {Lang:t("menu.edit_acc_name_txt")},
|
|
event = "Renewed-Banking:client:changeAccountName",
|
|
args = data
|
|
}
|
|
}
|
|
})
|
|
lib.showContext("renewed_banking_account_view")
|
|
end
|
|
},
|
|
[5] = {
|
|
event = "Renewed-Banking:client:viewMemberManagement",
|
|
menu = function(data)
|
|
local table = {{
|
|
isMenuHeader = true,
|
|
header = Lang:t("menu.bank_name")
|
|
}}
|
|
local account = data.account
|
|
for k,v in pairs(data.members) do
|
|
table[#table+1] = {
|
|
header = v,
|
|
txt = Lang:t("menu.remove_member_txt"),
|
|
params = {
|
|
event = 'Renewed-Banking:client:removeMemberConfirmation',
|
|
args = {
|
|
account = account,
|
|
cid = k,
|
|
}
|
|
}
|
|
}
|
|
end
|
|
table[#table+1] = {
|
|
header = Lang:t("menu.add_member"),
|
|
txt = Lang:t("menu.add_member_txt"),
|
|
params = {
|
|
event = 'Renewed-Banking:client:addAccountMember',
|
|
args = {
|
|
account = account
|
|
}
|
|
}
|
|
}
|
|
exports["qb-menu"]:openMenu(table)
|
|
end,
|
|
lib = function(data)
|
|
local menuOpts = {}
|
|
local account = data.account
|
|
for k,v in pairs(data.members) do
|
|
menuOpts[#menuOpts+1] = {
|
|
title = v,
|
|
metadata = {Lang:t("menu.remove_member_txt")},
|
|
event = 'Renewed-Banking:client:removeMemberConfirmation',
|
|
args = {
|
|
account = account,
|
|
cid = k,
|
|
}
|
|
}
|
|
end
|
|
menuOpts[#menuOpts+1] = {
|
|
title = Lang:t("menu.add_member"),
|
|
metadata = {Lang:t("menu.add_member_txt")},
|
|
event = 'Renewed-Banking:client:addAccountMember',
|
|
args = {
|
|
account = account
|
|
}
|
|
}
|
|
lib.registerContext({
|
|
id = 'renewed_banking_member_manage',
|
|
title = Lang:t("menu.bank_name"),
|
|
position = 'top-right',
|
|
menu = 'renewed_banking_account_view',
|
|
options = menuOpts
|
|
})
|
|
lib.showContext("renewed_banking_member_manage")
|
|
end
|
|
},
|
|
[6] = {
|
|
event = "Renewed-Banking:client:removeMemberConfirmation",
|
|
menu = function(data)
|
|
local table = {
|
|
{
|
|
isMenuHeader = true,
|
|
header = Lang:t("menu.bank_name")
|
|
},
|
|
{
|
|
header = Lang:t("menu.back"),
|
|
icon = "fa-solid fa-angle-left",
|
|
params = {
|
|
isServer =true,
|
|
event = "Renewed-Banking:client:accountsMenuView",
|
|
args = data
|
|
}
|
|
},
|
|
{
|
|
header = Lang:t("menu.remove_member"),
|
|
txt = Lang:t("menu.remove_member_txt2", {id=data.cid}),
|
|
params = {
|
|
isServer = true,
|
|
event = 'Renewed-Banking:server:removeAccountMember',
|
|
args = data
|
|
}
|
|
}
|
|
}
|
|
exports["qb-menu"]:openMenu(table)
|
|
end,
|
|
lib = function(data)
|
|
lib.registerContext({
|
|
id = 'renewed_banking_member_remove',
|
|
title = Lang:t("menu.bank_name"),
|
|
position = 'top-right',
|
|
menu = "renewed_banking_account_view",
|
|
options = {
|
|
{
|
|
title = Lang:t("menu.remove_member"),
|
|
metadata = {Lang:t("menu.remove_member_txt2", {id=data.cid})},
|
|
serverEvent = 'Renewed-Banking:server:removeAccountMember',
|
|
args = data
|
|
}
|
|
}
|
|
})
|
|
lib.showContext("renewed_banking_member_remove")
|
|
end
|
|
},
|
|
[7] = {
|
|
event = "Renewed-Banking:client:addAccountMember",
|
|
menu = function(data)
|
|
local dialog = exports["qb-input"]:ShowInput({
|
|
header = Lang:t("menu.bank_name"),
|
|
submitText = Lang:t("menu.add_account_member"),
|
|
inputs = {
|
|
{
|
|
text = Lang:t("menu.citizen_id"),
|
|
name = "accountid",
|
|
type = "text",
|
|
isRequired = true
|
|
}
|
|
}
|
|
})
|
|
if dialog and dialog.accountid then
|
|
dialog.accountid = dialog.accountid:upper():gsub("%s+", "")
|
|
TriggerServerEvent("Renewed-Banking:server:addAccountMember", data.account, dialog.accountid)
|
|
end
|
|
end,
|
|
lib = function(data)
|
|
local input = lib.inputDialog(Lang:t("menu.add_account_member"), {{
|
|
type = "input",
|
|
label = Lang:t("menu.citizen_id"),
|
|
placeholder = "1001"
|
|
}})
|
|
if input and input[1] then
|
|
input[1] = input[1]:upper():gsub("%s+", "")
|
|
TriggerServerEvent("Renewed-Banking:server:addAccountMember", data.account, input[1])
|
|
end
|
|
end
|
|
},
|
|
[8] = {
|
|
event = "Renewed-Banking:client:changeAccountName",
|
|
menu = function(data)
|
|
local dialog = exports["qb-input"]:ShowInput({
|
|
header = Lang:t("menu.bank_name"),
|
|
submitText = Lang:t("menu.change_account_name"),
|
|
inputs = {
|
|
{
|
|
text = Lang:t("menu.account_id"),
|
|
name = "accountid",
|
|
type = "text",
|
|
isRequired = true
|
|
}
|
|
}
|
|
})
|
|
if dialog and dialog.accountid then
|
|
dialog.accountid = dialog.accountid:lower():gsub("%s+", "")
|
|
TriggerServerEvent("Renewed-Banking:server:changeAccountName", data.account, dialog.accountid)
|
|
end
|
|
end,
|
|
lib = function(data)
|
|
local input = lib.inputDialog(Lang:t("menu.change_account_name"), {{
|
|
type = "input",
|
|
label = Lang:t("menu.account_id"),
|
|
placeholder = "savings-1001"
|
|
}})
|
|
if input and input[1] then
|
|
input[1] = input[1]:lower():gsub("%s+", "")
|
|
TriggerServerEvent("Renewed-Banking:server:changeAccountName", data.account, input[1])
|
|
end
|
|
end
|
|
}
|
|
}
|
|
for k=1, #bankingMenus do
|
|
RegisterNetEvent(bankingMenus[k].event, lib and bankingMenus[k].lib or bankingMenus[k].menu)
|
|
end |