mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 18:01:25 +00:00
245 lines
9.8 KiB
Lua
245 lines
9.8 KiB
Lua
local CurrentActionData, CurrentAction, CurrentActionMsg, hasAlreadyEnteredMarker, lastZone = {}
|
|
ESX = nil
|
|
|
|
Citizen.CreateThread(function ()
|
|
while ESX == nil do
|
|
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
|
|
Citizen.Wait(0)
|
|
end
|
|
|
|
while ESX.GetPlayerData().job == nil do
|
|
Citizen.Wait(100)
|
|
end
|
|
|
|
ESX.PlayerData = ESX.GetPlayerData()
|
|
end)
|
|
|
|
RegisterNetEvent('esx:playerLoaded')
|
|
AddEventHandler('esx:playerLoaded', function (xPlayer)
|
|
ESX.PlayerData = xPlayer
|
|
end)
|
|
|
|
RegisterNetEvent('esx:setJob')
|
|
AddEventHandler('esx:setJob', function (job)
|
|
ESX.PlayerData.job = job
|
|
end)
|
|
|
|
function OpenBankActionsMenu()
|
|
local elements = {
|
|
{label = _U('customers'), value = 'customers'},
|
|
{label = _U('billing'), value = 'billing'}
|
|
}
|
|
|
|
if ESX.PlayerData.job.grade_name == 'boss' then
|
|
table.insert(elements, { label = _U('boss_actions'), value = 'boss_actions' })
|
|
end
|
|
|
|
ESX.UI.Menu.CloseAll()
|
|
|
|
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'bank_actions', {
|
|
title = _U('bank'),
|
|
align = 'top-left',
|
|
elements = elements
|
|
}, function(data, menu)
|
|
if data.current.value == 'customers' then
|
|
OpenCustomersMenu()
|
|
elseif data.current.value == 'billing' then
|
|
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'billing', {
|
|
title = _U('bill_amount')
|
|
}, function(data, menu)
|
|
local amount = tonumber(data.value)
|
|
|
|
if amount == nil then
|
|
ESX.ShowNotification(_U('invalid_amount'))
|
|
else
|
|
menu.close()
|
|
|
|
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer()
|
|
|
|
if closestPlayer == -1 or closestDistance > 5.0 then
|
|
ESX.ShowNotification(_U('no_player_nearby'))
|
|
else
|
|
TriggerServerEvent('esx_billing:sendBill', GetPlayerServerId(closestPlayer), 'society_banker', 'Banque', amount)
|
|
end
|
|
end
|
|
end, function(data, menu)
|
|
menu.close()
|
|
end)
|
|
elseif data.current.value == 'boss_actions' then
|
|
TriggerEvent('esx_society:openBossMenu', 'banker', function (data, menu)
|
|
menu.close()
|
|
end, {wash = false})
|
|
end
|
|
end, function(data, menu)
|
|
menu.close()
|
|
|
|
CurrentAction = 'bank_actions_menu'
|
|
CurrentActionMsg = _U('press_input_context_to_open_menu')
|
|
CurrentActionData = {}
|
|
end)
|
|
end
|
|
|
|
function OpenCustomersMenu()
|
|
ESX.TriggerServerCallback('esx_bankerjob:getCustomers', function(customers)
|
|
local elements = {
|
|
head = { _U('customer'), _U('balance'), _U('actions') },
|
|
rows = {}
|
|
}
|
|
|
|
for i=1, #customers do
|
|
table.insert(elements.rows, {
|
|
data = customers[i],
|
|
cols = {
|
|
customers[i].name,
|
|
customers[i].bankSavings,
|
|
'{{' .. _U('deposit') .. '|deposit}} {{' .. _U('withdraw') .. '|withdraw}}'
|
|
}
|
|
})
|
|
end
|
|
|
|
ESX.UI.Menu.Open('list', GetCurrentResourceName(), 'customers', elements, function(data, menu)
|
|
local customer = data.data
|
|
|
|
if data.value == 'deposit' then
|
|
menu.close()
|
|
|
|
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'customer_deposit_amount', {
|
|
title = _U('amount')
|
|
}, function(data2, menu2)
|
|
local amount = tonumber(data2.value)
|
|
|
|
if amount == nil then
|
|
ESX.ShowNotification(_U('invalid_amount'))
|
|
else
|
|
menu2.close()
|
|
TriggerServerEvent('esx_bankerjob:customerDeposit', customer.source, amount)
|
|
OpenCustomersMenu()
|
|
end
|
|
end, function(data2, menu2)
|
|
menu2.close()
|
|
OpenCustomersMenu()
|
|
end)
|
|
elseif data.value == 'withdraw' then
|
|
menu.close()
|
|
|
|
ESX.UI.Menu.Open('dialog', GetCurrentResourceName(), 'customer_withdraw_amount', {
|
|
title = _U('amount')
|
|
}, function(data2, menu2)
|
|
local amount = tonumber(data2.value)
|
|
|
|
if amount == nil then
|
|
ESX.ShowNotification(_U('invalid_amount'))
|
|
else
|
|
menu2.close()
|
|
TriggerServerEvent('esx_bankerjob:customerWithdraw', customer.source, amount)
|
|
OpenCustomersMenu()
|
|
end
|
|
end, function(data2, menu2)
|
|
menu2.close()
|
|
OpenCustomersMenu()
|
|
end)
|
|
end
|
|
end, function(data, menu)
|
|
menu.close()
|
|
end)
|
|
end)
|
|
end
|
|
|
|
AddEventHandler('esx_bankerjob:hasEnteredMarker', function (zone)
|
|
if zone == 'BankActions' and ESX.PlayerData.job and ESX.PlayerData.job.name == 'banker' then
|
|
CurrentAction = 'bank_actions_menu'
|
|
CurrentActionMsg = _U('press_input_context_to_open_menu')
|
|
CurrentActionData = {}
|
|
end
|
|
end)
|
|
|
|
AddEventHandler('esx_bankerjob:hasExitedMarker', function (zone)
|
|
CurrentAction = nil
|
|
ESX.UI.Menu.CloseAll()
|
|
end)
|
|
|
|
-- Create Blips
|
|
Citizen.CreateThread(function()
|
|
local blip = AddBlipForCoord(Config.Zones.BankActions.Coords)
|
|
|
|
SetBlipSprite(blip, 108)
|
|
SetBlipColour(blip, 30)
|
|
SetBlipAsShortRange(blip, true)
|
|
|
|
BeginTextCommandSetBlipName('STRING')
|
|
AddTextComponentSubstringPlayerName(_U('bank'))
|
|
EndTextCommandSetBlipName(blip)
|
|
end)
|
|
|
|
-- Draw marker & activate menu when player is inside marker
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(0)
|
|
|
|
if ESX.PlayerData.job and ESX.PlayerData.job.name == 'banker' then
|
|
local playerCoords = GetEntityCoords(PlayerPedId())
|
|
local isInMarker, letSleep, currentZone = false, true
|
|
|
|
for k,v in pairs(Config.Zones) do
|
|
local distance = #(playerCoords - v.Coords)
|
|
|
|
if v.Type ~= -1 and distance < Config.DrawDistance then
|
|
letSleep = false
|
|
DrawMarker(v.Type, v.Coords, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, v.Size.x, v.Size.y, v.Size.z, v.Color.r, v.Color.g, v.Color.b, 100, false, true, 2, false, nil, nil, false)
|
|
end
|
|
|
|
if distance < v.Size.x then
|
|
isInMarker, currentZone, letSleep = true, k, false
|
|
end
|
|
end
|
|
|
|
if isInMarker and not hasAlreadyEnteredMarker then
|
|
hasAlreadyEnteredMarker, lastZone = true, currentZone
|
|
TriggerEvent('esx_bankerjob:hasEnteredMarker', currentZone)
|
|
end
|
|
|
|
if not isInMarker and hasAlreadyEnteredMarker then
|
|
hasAlreadyEnteredMarker = false
|
|
TriggerEvent('esx_bankerjob:hasExitedMarker', lastZone)
|
|
end
|
|
|
|
if letSleep then
|
|
Citizen.Wait(500)
|
|
end
|
|
else
|
|
Citizen.Wait(500)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Key Controls
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(0)
|
|
|
|
if CurrentAction then
|
|
ESX.ShowHelpNotification(CurrentActionMsg)
|
|
|
|
if IsControlJustReleased(0, 38) and ESX.PlayerData.job and ESX.PlayerData.job.name == 'banker' then
|
|
if CurrentAction == 'bank_actions_menu' then
|
|
OpenBankActionsMenu()
|
|
end
|
|
|
|
CurrentAction = nil
|
|
end
|
|
else
|
|
Citizen.Wait(500)
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('esx_phone:loaded')
|
|
AddEventHandler('esx_phone:loaded', function (phoneNumber, contacts)
|
|
local specialContact = {
|
|
name = _U('phone_label'),
|
|
number = 'banker',
|
|
base64Icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAJUO2JUS4JkW7Jka+L0y5M0+7O1e9J0fBKEjEKEnHKUrJKUvMKk3PK07SK0/VLFHaLVLeLVPgLlTjOl7kO1/lQFu/RmDBTmbEU2vHXHLIR2jmSGnnVHPoVXToaX7NYX7pYn/qbIHPd4rReYzTbojre5PtfZTuhZbWh5jYiJ7vkqHblqnwl6rxoK3fpLXzsb/1u8Xovsr2ydHty9X419zy5Oj25ur88vT78vT88/X9////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATuU7PwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuNv1OCegAAAUoSURBVHhe5ZvrdtQ2FEZjoCmFltsQ2gYCA4VA06GUhktK3v+5ppK8bUu2jnTk26zV7l+JbH1nR7Y0QglH+zHstpsBb7hWSLHAjnpxttylp0zgKXWSXHCzjgKBxxRQcE4XBVqBc6LV0C+LTqDgh+/Y0TmNRoDAcjRPIi8w6qdvyI9CTiAy4csgRyQjQMoUHhMlkBSYNPodpMVJCdB/OqlBkAXO6D0LZEYQBeg5F+L6LAnQbz7OCO4jCNBrVojuERUoXvh1kB4SE1ioftwgIjDr6x9CBZ+hwGI/v4UaHgOBRetHDAYC3LgYlGnpC3DbcvSX5Z4Ady1Jb+McCnDPslALAoEFJ6AP1WoCAW5YHMo5fAEuL4//GngCM+1/NFDR4glwcRUoaegEuFTEp+vr6298XUS3P2kFRuy/X5rylvd8XwJVPQEu6Dn5Rn3Dc9r0PKVsK1D8BtrR7yh/DtRtBWjWckHhjr+5oobCCNCo5BlFQ95yVUldeJTAVyoOOOEGFXws1gIlb8AHqsX4yj0qXGUEaFLQTD2JgilZTwQnoN6G+VNP4iX35ukEaMgSTj0J9ZQsFRhOPYlP9MjRCKhewfjUk9BNyUaAb5OIU0/iGR1T2EMsncBfpJagmZK1QPb8NTf1JD7QX6YW4BuJE+LGkJuSGgHd1JP4hxQJK5A+f1esPGkeEBTHCvClADHjOb5HUpQVBE6rH4iKsYJAVVU3yIpwlhV4Tg58NnnwhCbLFW0WmuCjayMswv4o/Q5agvfQ5TmuaHHQZvhIi+MJjdUjsgbsj/LbccJqCDQElWgzvKPFcUpjVUmTYX/EFwn8legX8izeEPxGk+UzbYZLmix3SeuhEbC4PKJ8CppvERWyokB8MuxWFIhOhu2qAtVD4jrO1hWohuvyygLVHQJb1haobpLYsLpA/1U8gEC4Lh9CIFiXDyJQ/USs4TAC1W1yDybQrssrr4Q+dfD54QTqybDuh1GP+yZ4zY/jIWZd3h+9oUQamzi/gNmkZHfFYBMXEKiq/73Aq0ML2H+aqc7pbeJSAqohsIn/RYFfDy1QH9FcUCSFTVxMQDMENnF+ge8OLWBqOwHFYblNXE5AMQQ2cXaB77UC3hGJ/y/+L7QZvtBkuaTN4J/cRLCla4G0QXBU2Z1Q/EGL4x2NVXVKi6M+IZJwpRUC70lz0NcQVGoPg6pjWhwvaIziKiOQOKl6O+ms9PKYahFcZQTkISBoPOIgvK4rIyDORGImQL0BdeFGQBwCUiZAvT6/U7gRkN4CUsbjz1Af6rYC0hBMPq4X3kKqegKSATlj+ZOCfSjqC0i/vBvzC6uGq259CKGmoROQp+I9es2H2Qk1eAKywSP6zQYFLb5A4jeoN+g5D9Rz+ALyEGw2d+g7B6yBNYFAyuABvadjN2IdoUByf0r/yVALQoH0H/TdImEaVGroCaQewmbzIxlToE5LXyBt8JCU8TSfQS0DgbTB1BfhFUU6hgIZg9tEjcJbARsiAhmD+4SN4GcK+MQEMgajF+bh+BuiAhmDkQvz4P1zxAVyf1hzl8wSSO4jCOQObsoXZnIHSALZx0CuknD995EFcgYlC3Pw+ReSEMg9Bv1GibwoKYGZ5mNk9fFIC+TOjzTzkSSJjEDu76yyGyVSZLICmeeQno/xtSdAIZBZlqgVQVFeKZB+EMJ8pGcOpYCBchEiGyV3/qRCL5A4ROhtlORlL0KJgIWSfShtSM/6IaUCltjW2W2Uoh/4GcYI1Oy2rcj2XPe/rIfs9/8CuOBqaLBm2ZcAAAAASUVORK5CYII='
|
|
}
|
|
|
|
TriggerEvent('esx_phone:addSpecialContact', specialContact.name, specialContact.number, specialContact.base64Icon)
|
|
end) |