0.0.1
This commit is contained in:
261
resources/[esx_addons]/esx_banking/client/main.lua
Normal file
261
resources/[esx_addons]/esx_banking/client/main.lua
Normal 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)
|
||||
Reference in New Issue
Block a user