This commit is contained in:
2026-07-07 21:08:52 +02:00
commit 4c20cfc716
2613 changed files with 318021 additions and 0 deletions

View File

@@ -0,0 +1,261 @@
local BANK = {
Data = {}
}
local activeBlips, bankPoints, atmPoints, markerPoints = {}, {}, {}, {}
local playerLoaded, uiActive, inMenu = false, false, false
--Functions
-- General data collecting thread
function BANK:Thread()
self:CreateBlips()
local data = self.Data
data.ped = PlayerPedId()
data.coord = GetEntityCoords(data.Ped)
playerLoaded = true
CreateThread(function ()
while playerLoaded do
data.coord = GetEntityCoords(data.ped)
data.ped = PlayerPedId()
bankPoints, atmPoints, markerPoints = {}, {}, {}
if (IsPedOnFoot(data.ped) and not ESX.PlayerData.dead) and not inMenu then
for i = 1, #Config.AtmModels do
local atm = GetClosestObjectOfType(data.coord.x, data.coord.y, data.coord.z, 0.7, Config.AtmModels[i], false, false, false)
if atm ~= 0 then
atmPoints[#atmPoints+1] = GetEntityCoords(atm)
end
end
for i = 1, #Config.Banks do
local bankDistance = #(data.coord - Config.Banks[i].Position.xyz)
if bankDistance <= 0.7 then
bankPoints[#bankPoints+1] = Config.Banks[i].Position.xyz
end
if Config.ShowMarker and bankDistance <= (Config.DrawMarker or 10) then
markerPoints[#markerPoints+1] = Config.Banks[i].Position.xyz
end
end
end
if next(bankPoints) and not uiActive then
self:TextUi(true)
end
if next(atmPoints) and not uiActive then
self:TextUi(true, true)
end
if not next(bankPoints) and not next(atmPoints) and uiActive then
self:TextUi(false)
end
Wait(1000)
end
end)
if not Config.ShowMarker then return end
CreateThread(function()
local wait = 1000
while playerLoaded do
if next(markerPoints) then
for i = 1, #markerPoints do
DrawMarker(20, markerPoints[i].x, markerPoints[i].y, markerPoints[i].z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3, 0.2, 0.2, 187, 255, 0, 255, false, true, 2, false, nil, nil, false)
end
wait = 0
end
Wait(wait)
end
end)
end
-- Handle text ui / Keypress
function BANK:TextUi(state, atm)
uiActive = state
if not state then
return ESX.HideUI()
end
ESX.TextUI(TranslateCap('press_e_banking'))
CreateThread(function()
while uiActive do
if IsControlJustReleased(0, 38) then
self:HandleUi(true, atm)
self:TextUi(false)
end
Wait(0)
end
end)
end
-- Create Blips
function BANK:CreateBlips()
local tmpActiveBlips = {}
for i = 1, #Config.Banks do
if type(Config.Banks[i].Blip) == 'table' and Config.Banks[i].Blip.Enabled then
local position = Config.Banks[i].Position
local bInfo = Config.Banks[i].Blip
local blip = AddBlipForCoord(position.x, position.y, position.z)
SetBlipSprite(blip, bInfo.Sprite)
SetBlipScale(blip, bInfo.Scale)
SetBlipColour(blip, bInfo.Color)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(bInfo.Label)
EndTextCommandSetBlipName(blip)
tmpActiveBlips[#tmpActiveBlips + 1] = blip
end
end
activeBlips = tmpActiveBlips
end
-- Remove blips
function BANK:RemoveBlips()
for i = 1, #activeBlips do
if DoesBlipExist(activeBlips[i]) then
RemoveBlip(activeBlips[i])
end
end
activeBlips = {}
end
-- Open / Close ui
function BANK:HandleUi(state, atm)
atm = atm or false
SetNuiFocus(state, state)
inMenu = state
ClearPedTasks(PlayerPedId())
if not state then
SendNUIMessage({
showMenu = false
})
return
end
ESX.TriggerServerCallback('esx_banking:getPlayerData', function(data)
SendNUIMessage({
showMenu = true,
openATM = atm,
datas = {
your_money_panel = {
accountsData = {{
name = "cash",
amount = data.money
}, {
name = "bank",
amount = data.bankMoney
}}
},
bankCardData = {
bankName = TranslateCap('bank_name'),
cardNumber = "2232 2222 2222 2222",
createdDate = "08/08",
name = data.playerName
},
transactionsData = data.transactionHistory
}
})
end)
end
function BANK:LoadNpc(index, netID)
CreateThread(function()
while not NetworkDoesEntityExistWithNetworkId(netID) do
Wait(200)
end
local npc = NetworkGetEntityFromNetworkId(netID)
TaskStartScenarioInPlace(npc, Config.Peds[index].Scenario, 0, true)
SetEntityProofs(npc, true, true, true, true, true, true, true, true)
SetBlockingOfNonTemporaryEvents(npc, true)
FreezeEntityPosition(npc, true)
SetPedCanRagdollFromPlayerImpact(npc, false)
SetPedCanRagdoll(npc, false)
SetEntityAsMissionEntity(npc, true, true)
SetEntityDynamic(npc, false)
end)
end
-- Events
RegisterNetEvent('esx_banking:closebanking', function()
BANK:HandleUi(false)
end)
RegisterNetEvent('esx_banking:pedHandler', function(netIdTable)
for i = 1, #netIdTable do
BANK:LoadNpc(i, netIdTable[i])
end
end)
RegisterNetEvent('esx_banking:updateMoneyInUI', function(doingType, bankMoney, money)
SendNUIMessage({
updateData = true,
data = {
type = doingType,
bankMoney = bankMoney,
money = money
}
})
end)
-- Handlers
-- Resource starting
AddEventHandler('onResourceStart', function(resource)
if resource ~= GetCurrentResourceName() then return end
BANK:Thread()
end)
-- Enable the script on player loaded
RegisterNetEvent('esx:playerLoaded', function()
BANK:Thread()
end)
-- Disable the script on player logout
RegisterNetEvent('esx:onPlayerLogout', function()
playerLoaded = false
end)
-- Resource stopping
AddEventHandler('onResourceStop', function(resource)
if resource ~= GetCurrentResourceName() then return end
BANK:RemoveBlips()
if uiActive then BANK:TextUi(false) end
end)
RegisterNetEvent('esx:onPlayerDeath', function() BANK:TextUi(false) end)
-- Nui Callbacks
RegisterNUICallback('close', function(data, cb)
BANK:HandleUi(false)
cb('ok')
end)
RegisterNUICallback('clickButton', function(data, cb)
if not data or not inMenu then
return cb('ok')
end
TriggerServerEvent("esx_banking:doingType", data)
cb('ok')
end)
RegisterNUICallback('checkPincode', function(data, cb)
if not data or not inMenu then
return cb('ok')
end
ESX.TriggerServerCallback("esx_banking:checkPincode", function(pincode)
if pincode then
cb({
success = true
})
ESX.ShowNotification(TranslateCap('pincode_found'), "success")
else
cb({
error = true
})
ESX.ShowNotification(TranslateCap('pincode_not_found'), "error")
end
end, data)
end)