From 750c8fce10abd17a9ac0dc598f2816bf437f334b Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:22:33 -0500 Subject: [PATCH 1/8] feat: High3DSound intergration modified: tp-advancedzombies/client/tp-client_main.lua modified: tp-advancedzombies/config.lua --- tp-advancedzombies/client/tp-client_main.lua | 23 +++++++++++++------- tp-advancedzombies/config.lua | 2 ++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index 75b33b4..7c9b75f 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -157,14 +157,21 @@ if Config.Zombies.PlayCustomSpeakingSounds then if sounds ~= nil and next(sounds) ~= nil then local _sound = sounds[ math.random( #sounds ) ] - - SendNUIMessage({ - action = "playSound", - - sound = _sound, - soundVolume = volume - }) - + if Config.High3DSounds + exports["high_3dsounds"]:Play3DEntity( + NetworkGetNetworkIdFromEntity(v.entity), -- entity net id + 50.0, -- distance + _sound, -- sound URL/file name + volume, -- volume + false -- looped + ) + else + SendNUIMessage({ + action = "playSound", + sound = _sound, + soundVolume = volume + }) + end end end diff --git a/tp-advancedzombies/config.lua b/tp-advancedzombies/config.lua index 513cb4f..1059785 100644 --- a/tp-advancedzombies/config.lua +++ b/tp-advancedzombies/config.lua @@ -93,6 +93,8 @@ Config.ZombiePedModelWalks = { "move_lester_CaneUp", } +Config.High3DSounds = false -- Enables intergration with High3DSounds and disables NUI Player + -- https://www.high-scripts.com/package/5035810 Config.MuteAmbience = true Config.NotHealthRecharge = true From 77bf10f48ae198201a8426fd743025b5678744ff Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Mon, 3 Oct 2022 11:07:00 -0500 Subject: [PATCH 2/8] feat: networked entity table --- tp-advancedzombies/client/tp-client_main.lua | 66 ++++++++++++++++--- tp-advancedzombies/config.lua | 1 + .../server/tp-server_functions.lua | 34 +++++++++- 3 files changed, 90 insertions(+), 11 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index 7c9b75f..69f953b 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -63,6 +63,22 @@ function isPlayerDead() return isDead end +if Config.Zombies.Networked + Citizen.CreateThread(function() + while true do + Wait(1000) + local playerCoords = GetEntityCoords(PlayerPedId()) + ESX.TriggerServerCallback('tp-advancedzombies:getZombies', function(cb) + print(dump(entitys)) + entitys = cb + print(dump(cb)) + end, playerCoords) + if Config.Debug + print("Entity Table Updated") + end + end + end) +end if Config.Zombies.AttackPlayersOnShooting then @@ -366,7 +382,11 @@ StartCheckingZombiePedKills = function() pedX, pedY, pedZ = table.unpack(GetEntityCoords(v.entity, true)) if not DoesEntityExist(v.entity) then - table.remove(entitys, i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys, i) + end end if IsPedDeadOrDying(v.entity, 1) == 1 then @@ -404,7 +424,11 @@ StartCheckingZombiePedKills = function() local model = GetEntityModel(v.entity) SetEntityAsNoLongerNeeded(v.entity) SetModelAsNoLongerNeeded(model) - table.remove(entitys, i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys, i) + end Wait(2000) @@ -458,7 +482,11 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() SetModelAsNoLongerNeeded(GetEntityModel(v.entity)) DeleteEntity(v.entity) - table.remove(entitys,i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys,i) + end end end @@ -591,9 +619,11 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() --if not NetworkGetEntityIsNetworked(entity) then -- NetworkRegisterEntityAsNetworked(entity) --end - - table.insert(entitys, {entity = entity, name = EntityModel}) - + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:addZombie", entity,s) + else + table.insert(entitys, {entity = entity, name = EntityModel}) + end local playerX, playerY, playerZ = table.unpack(GetEntityCoords(GetPlayerPed(-1), true)) local distance = GetDistanceBetweenCoords(GetEntityCoords(GetPlayerPed(-1)), GetEntityCoords(entity), true) @@ -611,7 +641,11 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() for i, v in pairs(entitys) do if not DoesEntityExist(v.entity) then SetEntityAsNoLongerNeeded(v.entity) - table.remove(entitys, i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys, i) + end else local playerX, playerY, playerZ = table.unpack(GetEntityCoords(GetPlayerPed(-1), true)) local pedX, pedY, pedZ = table.unpack(GetEntityCoords(v.entity, true)) @@ -621,7 +655,11 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() SetEntityAsNoLongerNeeded(v.entity) SetModelAsNoLongerNeeded(model) --Citizen.Trace("Zombie Eliminated\n") - table.remove(entitys, i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys, i) + end end end @@ -630,7 +668,11 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() SetEntityAsNoLongerNeeded(v.entity) SetModelAsNoLongerNeeded(model) DeleteEntity(v.entity) - table.remove(entitys,i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys,i) + end --Citizen.Trace("Zombie Eliminated from Water\n") end end @@ -710,7 +752,11 @@ AddEventHandler('tp-advancedzombies:clearZombies', function() for i, v in pairs(entitys) do if not DoesEntityExist(v.entity) then - table.remove(entitys, i) + if Config.Zombies.Networked + TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) + else + table.remove(entitys, i) + end end local model = GetEntityModel(v.entity) diff --git a/tp-advancedzombies/config.lua b/tp-advancedzombies/config.lua index 1059785..120ca75 100644 --- a/tp-advancedzombies/config.lua +++ b/tp-advancedzombies/config.lua @@ -105,6 +105,7 @@ Config.Zombies = { -- If you set this to true, zombies will only spawn in zones where you allow. SpawnZombiesOnlyInZones = false, + Networked = false, -- Requires ESX for callbacks SpawnZombieAtDaylight = 5, SpawnZombieAtNight = 10, diff --git a/tp-advancedzombies/server/tp-server_functions.lua b/tp-advancedzombies/server/tp-server_functions.lua index 413c7df..ad38d56 100644 --- a/tp-advancedzombies/server/tp-server_functions.lua +++ b/tp-advancedzombies/server/tp-server_functions.lua @@ -1,6 +1,7 @@ -- ESX & QBCore Support. ESX, QBCore = nil, nil +zombieEntites = {} if Config.Framework == "ESX" then TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) @@ -51,4 +52,35 @@ function getOnlinePlayers() return QBCore.Functions.GetPlayers() end -end \ No newline at end of file +end + +function addEntityToTable(entity,EntityModel) + table.insert(zombieEntites, {entity = entity, name = EntityModel}) +end + +function getEntityTable() + return zombieEntites +end + +function removeEntityFromTable(entity) + for i, v in ipairs (zombieEntites) do + if (v.entity == entity) then + zombieEntites[i] = nil + end + end +end + +RegisterServerEvent("tp-advancedzombies:addZombie") +AddEventHandler("tp-advancedzombies:addZombie", function(entity, EntityModel) + addEntityToTable(entity,EntityModel) +end) + +RegisterServerEvent("tp-advancedzombies:removeZombie") +AddEventHandler("tp-advancedzombies:removeZombie", function(entity, EntityModel) + removeEntityFromTable(entity) +end) + +ESX.RegisterServerCallback('tp-advancedzombies:getZombies', function(source, cb) + zombies = getEntityTable() + cb(zombies) +end) \ No newline at end of file From 81152bbf6a0583a4b750d56e1e9d4f019f475bb2 Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Mon, 3 Oct 2022 11:15:55 -0500 Subject: [PATCH 3/8] fix: CreatPed modified: tp-advancedzombies/client/tp-client_main.lua --- tp-advancedzombies/client/tp-client_main.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index 69f953b..c5c09cb 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -572,11 +572,16 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() break else canSpawn = true - end + end` until canSpawn - - local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, false, false) + + if Config.Zombies.Networked + local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, true, false) + else + local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, false, false) + end + local entityMaxHealth = Config.ZombiePedModelsData[string.lower(EntityModel)].data.health SetEntityHealth(entity, entityMaxHealth) From 0c1ae67f1c7fe3965562d81e1f4282c615afd458 Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:36:14 -0500 Subject: [PATCH 4/8] dry do not repeat yourself --- tp-advancedzombies/client/tp-client_main.lua | 65 ++++++++------------ 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index c5c09cb..700ed11 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -382,11 +382,7 @@ StartCheckingZombiePedKills = function() pedX, pedY, pedZ = table.unpack(GetEntityCoords(v.entity, true)) if not DoesEntityExist(v.entity) then - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys, i) - end + removeZombie(v.entity,i) end if IsPedDeadOrDying(v.entity, 1) == 1 then @@ -424,11 +420,7 @@ StartCheckingZombiePedKills = function() local model = GetEntityModel(v.entity) SetEntityAsNoLongerNeeded(v.entity) SetModelAsNoLongerNeeded(model) - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys, i) - end + removeZombie(v.entity,i) Wait(2000) @@ -482,11 +474,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() SetModelAsNoLongerNeeded(GetEntityModel(v.entity)) DeleteEntity(v.entity) - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys,i) - end + removeZombie(v.entity,i) end end @@ -624,11 +612,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() --if not NetworkGetEntityIsNetworked(entity) then -- NetworkRegisterEntityAsNetworked(entity) --end - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:addZombie", entity,s) - else - table.insert(entitys, {entity = entity, name = EntityModel}) - end + addZombie(entity,EntityModel) local playerX, playerY, playerZ = table.unpack(GetEntityCoords(GetPlayerPed(-1), true)) local distance = GetDistanceBetweenCoords(GetEntityCoords(GetPlayerPed(-1)), GetEntityCoords(entity), true) @@ -646,11 +630,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() for i, v in pairs(entitys) do if not DoesEntityExist(v.entity) then SetEntityAsNoLongerNeeded(v.entity) - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys, i) - end + removeZombie(v.entity,i) else local playerX, playerY, playerZ = table.unpack(GetEntityCoords(GetPlayerPed(-1), true)) local pedX, pedY, pedZ = table.unpack(GetEntityCoords(v.entity, true)) @@ -660,11 +640,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() SetEntityAsNoLongerNeeded(v.entity) SetModelAsNoLongerNeeded(model) --Citizen.Trace("Zombie Eliminated\n") - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys, i) - end + removeZombie(v.entity,i) end end @@ -673,11 +649,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() SetEntityAsNoLongerNeeded(v.entity) SetModelAsNoLongerNeeded(model) DeleteEntity(v.entity) - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys,i) - end + removeZombie(v.entity,i) --Citizen.Trace("Zombie Eliminated from Water\n") end end @@ -757,11 +729,7 @@ AddEventHandler('tp-advancedzombies:clearZombies', function() for i, v in pairs(entitys) do if not DoesEntityExist(v.entity) then - if Config.Zombies.Networked - TriggerServerEvent("tp-advancedzombies:removeZombie", v.entity) - else - table.remove(entitys, i) - end + removeZombie(v.entity,i) end local model = GetEntityModel(v.entity) @@ -779,3 +747,20 @@ AddEventHandler("onResourceStop", function(resourceName) TriggerEvent('tp-advancedzombies:clearZombies') end) + + +function addZombie(entity,EntityModel) + if Config.Zombies.Networked then + TriggerServerEvent("tp-advancedzombies:removeZombie", entity) + else + table.insert(entitys, {entity = entity, name = EntityModel}) + end +end + +function removeZombie(entity,tableRow) + if Config.Zombies.Networked then + TriggerServerEvent("tp-advancedzombies:removeZombie", entity) + else + table.remove(entitys, tableRow) + end +end \ No newline at end of file From 8eea0861a68ac1bb770cee820e81531868df2264 Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:37:38 -0500 Subject: [PATCH 5/8] modified: tp-advancedzombies/client/tp-client_main.lua --- tp-advancedzombies/client/tp-client_main.lua | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index 700ed11..9486afa 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -69,9 +69,9 @@ if Config.Zombies.Networked Wait(1000) local playerCoords = GetEntityCoords(PlayerPedId()) ESX.TriggerServerCallback('tp-advancedzombies:getZombies', function(cb) - print(dump(entitys)) + if Config.Debug print(dump(entitys)) entitys = cb - print(dump(cb)) + if Config.Debug print(dump(cb)) end, playerCoords) if Config.Debug print("Entity Table Updated") @@ -763,4 +763,17 @@ function removeZombie(entity,tableRow) else table.remove(entitys, tableRow) end -end \ No newline at end of file +end + +function dump(o) + if type(o) == 'table' then + local s = '{ ' + for k,v in pairs(o) do + if type(k) ~= 'number' then k = '"'..k..'"' end + s = s .. '['..k..'] = ' .. dump(v) .. ',' + end + return s .. '} ' + else + return tostring(o) + end + end \ No newline at end of file From 8f19c99d3a1fe1250b11a8ea79748d1db09fc0ea Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Tue, 4 Oct 2022 13:25:04 -0500 Subject: [PATCH 6/8] fix: missing then on thread and createped modified: tp-advancedzombies/client/tp-client_main.lua --- tp-advancedzombies/client/tp-client_main.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index 9486afa..714bcc7 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -63,7 +63,7 @@ function isPlayerDead() return isDead end -if Config.Zombies.Networked +if Config.Zombies.Networked then Citizen.CreateThread(function() while true do Wait(1000) @@ -564,7 +564,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() until canSpawn - if Config.Zombies.Networked + if Config.Zombies.Networked then local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, true, false) else local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, false, false) From ca380e040fccf4ff246a51bd70807ef561e09649 Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Tue, 4 Oct 2022 13:28:25 -0500 Subject: [PATCH 7/8] fix: another missing then --- tp-advancedzombies/client/tp-client_main.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index 714bcc7..eecf3a0 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -173,7 +173,7 @@ if Config.Zombies.PlayCustomSpeakingSounds then if sounds ~= nil and next(sounds) ~= nil then local _sound = sounds[ math.random( #sounds ) ] - if Config.High3DSounds + if Config.High3DSounds then exports["high_3dsounds"]:Play3DEntity( NetworkGetNetworkIdFromEntity(v.entity), -- entity net id 50.0, -- distance From cf523e85c04f2e84e8e307f19b324309099554c1 Mon Sep 17 00:00:00 2001 From: Robert Crawford <68483930+robert4049@users.noreply.github.com> Date: Tue, 4 Oct 2022 15:19:32 -0500 Subject: [PATCH 8/8] finally fixed modified: tp-advancedzombies/client/tp-client_main.lua modified: tp-advancedzombies/server/tp-server_functions.lua --- tp-advancedzombies/client/tp-client_main.lua | 25 ++++++++++++----- .../server/tp-server_functions.lua | 27 ++++++++++++++++++- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/tp-advancedzombies/client/tp-client_main.lua b/tp-advancedzombies/client/tp-client_main.lua index eecf3a0..5ea2d59 100644 --- a/tp-advancedzombies/client/tp-client_main.lua +++ b/tp-advancedzombies/client/tp-client_main.lua @@ -69,11 +69,15 @@ if Config.Zombies.Networked then Wait(1000) local playerCoords = GetEntityCoords(PlayerPedId()) ESX.TriggerServerCallback('tp-advancedzombies:getZombies', function(cb) - if Config.Debug print(dump(entitys)) + if Config.Debug then + print(dump(entitys)) + end entitys = cb - if Config.Debug print(dump(cb)) + if Config.Debug then + print(dump(cb)) + end end, playerCoords) - if Config.Debug + if Config.Debug then print("Entity Table Updated") end end @@ -560,14 +564,14 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function() break else canSpawn = true - end` + end until canSpawn if Config.Zombies.Networked then - local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, true, false) + entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, true, false) else - local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, false, false) + entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, false, false) end local entityMaxHealth = Config.ZombiePedModelsData[string.lower(EntityModel)].data.health @@ -750,8 +754,15 @@ end) function addZombie(entity,EntityModel) + if Config.Debug then + print("add zombie called") + print(entity) + end if Config.Zombies.Networked then - TriggerServerEvent("tp-advancedzombies:removeZombie", entity) + TriggerServerEvent("tp-advancedzombies:addZombie", entity) + if Config.Debug then + print("added via client") + end else table.insert(entitys, {entity = entity, name = EntityModel}) end diff --git a/tp-advancedzombies/server/tp-server_functions.lua b/tp-advancedzombies/server/tp-server_functions.lua index ad38d56..33b794a 100644 --- a/tp-advancedzombies/server/tp-server_functions.lua +++ b/tp-advancedzombies/server/tp-server_functions.lua @@ -72,15 +72,40 @@ end RegisterServerEvent("tp-advancedzombies:addZombie") AddEventHandler("tp-advancedzombies:addZombie", function(entity, EntityModel) + if Config.Debug then + print("entity added | server table") + end addEntityToTable(entity,EntityModel) end) RegisterServerEvent("tp-advancedzombies:removeZombie") AddEventHandler("tp-advancedzombies:removeZombie", function(entity, EntityModel) + if Config.Debug then + print("entity removed | server table") + end removeEntityFromTable(entity) end) ESX.RegisterServerCallback('tp-advancedzombies:getZombies', function(source, cb) + if Config.Debug then + print("callback initiated") + end zombies = getEntityTable() + if Config.Debug then + print(dump(zombies)) + end cb(zombies) -end) \ No newline at end of file +end) + +function dump(o) + if type(o) == 'table' then + local s = '{ ' + for k,v in pairs(o) do + if type(k) ~= 'number' then k = '"'..k..'"' end + s = s .. '['..k..'] = ' .. dump(v) .. ',' + end + return s .. '} ' + else + return tostring(o) + end + end \ No newline at end of file