Refactoring peds

This commit is contained in:
P Gergő
2022-11-24 22:48:13 +01:00
committed by GitHub
parent b2be63f5f4
commit 9716580e7b
4 changed files with 65 additions and 93 deletions
+24 -76
View File
@@ -1,9 +1,10 @@
local PlayerData, ActivateBlips, Peds = {}, {}, {}
local ActivateBlips = {}
local PlayerLoaded = true
local isInMarker, isInAtmMarker, isInMenu, isMarkerShowed = false, false, false, false
local _GetEntityCoords, _PlayerPedId
-- Functions
-- Listen for keypress while player inside the marker
local function Listen4Key()
CreateThread(function()
@@ -46,57 +47,6 @@ local function RemoveBlips()
ActivateBlips = {}
end
-- Ped Handler
local function PedHandler(ids)
local tmpPeds = {}
for _, id in pairs(ids) do
if not Peds[id] then
if not HasModelLoaded(Config.Peds[id].Model) then
RequestModel(Config.Peds[id].Model)
Wait(100)
while not HasModelLoaded(Config.Peds[id].Model) do
Wait(10)
end
end
local npc = CreatePed(6, Config.Peds[id].Model, Config.Peds[id].Position + vector4(0, 0, -1, 0), false,
false)
TaskStartScenarioInPlace(npc, Config.Peds[id].Scenario, 0, true)
SetEntityInvincible(npc, true)
SetEntityProofs(npc, true, true, true, true, true, true, 1, true)
SetBlockingOfNonTemporaryEvents(npc, true)
FreezeEntityPosition(npc, true)
SetPedDiesWhenInjured(npc, false)
SetEntityCanBeDamaged(npc, false)
SetPedCanRagdollFromPlayerImpact(npc, false)
SetPedCanRagdoll(npc, false)
SetEntityAsMissionEntity(npc, true, true)
SetEntityDynamic(npc, false)
Peds[id] = npc
end
end
for id, handle in pairs(Peds) do
local del = true
for i = 1, #ids do
if ids[i] == id then
del = false
tmpPeds[id] = handle
end
end
if del then
DeletePed(handle)
end
end
Peds = tmpPeds
end
function OpenUi(atm)
atm = atm or false
isInMenu = true
@@ -129,7 +79,7 @@ function OpenUi(atm)
end
local function CloseUi()
SetNuiFocus(false)
SetNuiFocus(false, false)
isInMenu = false
SendNUIMessage({
showMenu = false
@@ -144,8 +94,7 @@ end
local function ShowMarker(coord)
CreateThread(function()
while isMarkerShowed do
DrawMarker(20, coord.x, coord.y, coord.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, nil, nil, false)
DrawMarker(20, coord.x, coord.y, coord.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)
Wait(0)
end
end)
@@ -159,19 +108,6 @@ local function StartThread()
_PlayerPedId = PlayerPedId()
_GetEntityCoords = GetEntityCoords(_PlayerPedId)
if Config.EnablePeds then
local closestPed = {}
for i = 1, #Config.Peds do
local distance = #(_GetEntityCoords - Config.Peds[i].Position.xyz)
if distance <= Config.DrawMarker then
closestPed[#closestPed + 1] = i
end
end
PedHandler(closestPed)
end
if IsPedOnFoot(PlayerPedId()) then
local closestBank = {}
@@ -261,6 +197,21 @@ RegisterNetEvent('esx_banking:closebanking', function()
CloseUi()
end)
RegisterNetEvent('esx_banking:PedHandler', function(netIdTable)
local npc
for i = 1, #netIdTable do
npc = NetworkGetEntityFromNetworkId(netIdTable[i])
TaskStartScenarioInPlace(npc, Config.Peds[i].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)
RegisterNetEvent('esx_banking:updateMoneyInUI')
AddEventHandler('esx_banking:updateMoneyInUI', function(doingType, bankMoney, money)
SendNUIMessage({
@@ -275,23 +226,20 @@ end)
-- Resource starting
AddEventHandler('onResourceStart', function(resource)
if resource ~= GetCurrentResourceName() then
return
end
if resource ~= GetCurrentResourceName() then return end
StartThread()
end)
-- Enables it on player loaded
RegisterNetEvent('esx:playerLoaded', function()
StartThread()
end)
end)
-- Resource stopping
AddEventHandler('onResourceStop', function(resource)
if resource ~= GetCurrentResourceName() then
return
end
if resource ~= GetCurrentResourceName() then return end
RemoveBlips()
if isInMenu then
CloseUi()
end
end)
end)
+1 -1
View File
@@ -2,7 +2,7 @@ Config = {
Debug = false,
DrawMarker = 10,
Locale = GetConvar('esx:locale', 'en'),
EnablePeds = true,
EnablePeds = true,
AtmModels = {`prop_fleeca_atm`, `prop_atm_01`, `prop_atm_02`, `prop_atm_03`},
Banks = {
{
+1 -1
View File
@@ -4,7 +4,7 @@ game 'gta5'
description 'ESX banking'
lua54 'yes'
version '1.8.5'
version '1.8.6'
shared_scripts {
'@es_extended/imports.lua',
+39 -15
View File
@@ -1,3 +1,5 @@
local spawnedPeds, netIdTable = {}, {}
-- get keys utils
local function get_key(t)
local key
@@ -9,28 +11,34 @@ end
-- Resource starting
AddEventHandler('onResourceStart', function(resourceName)
if (GetCurrentResourceName() ~= resourceName) then
return
end
if (GetCurrentResourceName() ~= resourceName) then return end
if Config.EnablePeds then BANK.CreatePeds() end
local twoMonthMs = (os.time() - 5259487) * 1000
MySQL.Sync.fetchScalar('DELETE FROM banking WHERE time < ? ', {twoMonthMs})
end)
AddEventHandler('onResourceStop', function(resourceName)
if (GetCurrentResourceName() ~= resourceName) then return end
if Config.EnablePeds then BANK.DeletePeds() end
end)
AddEventHandler('esx:playerLoaded', function(playerId, xPlayer)
if not Config.EnablePeds then return end
TriggerClientEvent('esx_banking:PedHandler', playerId, netIdTable)
end)
-- event
RegisterServerEvent('esx_banking:doingType')
AddEventHandler('esx_banking:doingType', function(typeData)
if source == nil then
return
end
if (typeData == nil) then
return
end
if source == nil then return end
if (typeData == nil) then return end
local source = source
local xPlayer = ESX.GetPlayerFromId(source)
local identifier = xPlayer.getIdentifier()
local money = xPlayer.getAccount('money').money
local bankMoney = xPlayer.getAccount('bank').money
local amount
local key = get_key(typeData)
if typeData.deposit then
@@ -43,9 +51,7 @@ AddEventHandler('esx_banking:doingType', function(typeData)
amount = tonumber(typeData.pincode)
end
if not tonumber(amount) then
return
end
if not tonumber(amount) then return end
amount = ESX.Math.Round(amount)
if amount == nil or (not typeData.pincode and amount <= 0) then
@@ -116,6 +122,24 @@ end)
-- bank functions
BANK = {
CreatePeds = function()
for i = 1, #Config.Peds do
local model = Config.Peds[i].Model
local coords = Config.Peds[i].Position
spawnedPeds[i] = CreatePed(0, model, coords.x, coords.y, coords.z, coords.w, true, true)
netIdTable[i] = NetworkGetNetworkIdFromEntity(spawnedPeds[i])
while not DoesEntityExist(spawnedPeds[i]) do Wait(50) end
end
Wait(100)
TriggerClientEvent('esx_banking:PedHandler', -1, netIdTable)
end,
DeletePeds = function()
for i = 1, #spawnedPeds do
DeleteEntity(spawnedPeds[i])
spawnedPeds[i] = nil
end
end,
Withdraw = function(amount, xPlayer)
xPlayer.addAccountMoney('money', amount)
xPlayer.removeAccountMoney('bank', amount)
@@ -132,7 +156,7 @@ BANK = {
xPlayer.removeAccountMoney('bank', amount)
xTarget.addAccountMoney('bank', amount)
bankMoney = xTarget.getAccount('bank').money
local bankMoney = xTarget.getAccount('bank').money
BANK.LogTransaction(xTarget.source, "TRANSFER_RECEIVE", amount, bankMoney)
TriggerClientEvent("esx:showNotification", xTarget.source, TranslateCap('receive_transfer', amount, xPlayer.source),
"success")
@@ -151,5 +175,5 @@ BANK = {
MySQL.insert('INSERT INTO banking (identifier, type, amount, time, balance) VALUES (?, ?, ?, ?, ?)',
{identifier, logType, amount, os.time() * 1000, bankMoney})
end
}
end
}