Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 87 additions & 20 deletions tp-advancedzombies/client/tp-client_main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,26 @@ function isPlayerDead()
return isDead
end

if Config.Zombies.Networked then
Citizen.CreateThread(function()
while true do
Wait(1000)
local playerCoords = GetEntityCoords(PlayerPedId())
ESX.TriggerServerCallback('tp-advancedzombies:getZombies', function(cb)
if Config.Debug then
print(dump(entitys))
end
entitys = cb
if Config.Debug then
print(dump(cb))
end
end, playerCoords)
if Config.Debug then
print("Entity Table Updated")
end
end
end)
end

if Config.Zombies.AttackPlayersOnShooting then

Expand Down Expand Up @@ -157,14 +177,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 then
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

Expand Down Expand Up @@ -359,7 +386,7 @@ StartCheckingZombiePedKills = function()
pedX, pedY, pedZ = table.unpack(GetEntityCoords(v.entity, true))

if not DoesEntityExist(v.entity) then
table.remove(entitys, i)
removeZombie(v.entity,i)
end

if IsPedDeadOrDying(v.entity, 1) == 1 then
Expand Down Expand Up @@ -397,7 +424,7 @@ StartCheckingZombiePedKills = function()
local model = GetEntityModel(v.entity)
SetEntityAsNoLongerNeeded(v.entity)
SetModelAsNoLongerNeeded(model)
table.remove(entitys, i)
removeZombie(v.entity,i)

Wait(2000)

Expand Down Expand Up @@ -451,7 +478,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function()
SetModelAsNoLongerNeeded(GetEntityModel(v.entity))

DeleteEntity(v.entity)
table.remove(entitys,i)
removeZombie(v.entity,i)
end

end
Expand Down Expand Up @@ -540,8 +567,13 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function()
end

until canSpawn

local entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, false, false)

if Config.Zombies.Networked then
entity = CreatePed(4, GetHashKey(EntityModel), posX, posY, posZ, 0.0, true, false)
else
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)
Expand Down Expand Up @@ -584,9 +616,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function()
--if not NetworkGetEntityIsNetworked(entity) then
-- NetworkRegisterEntityAsNetworked(entity)
--end

table.insert(entitys, {entity = entity, name = EntityModel})

addZombie(entity,EntityModel)
local playerX, playerY, playerZ = table.unpack(GetEntityCoords(GetPlayerPed(-1), true))
local distance = GetDistanceBetweenCoords(GetEntityCoords(GetPlayerPed(-1)), GetEntityCoords(entity), true)

Expand All @@ -604,7 +634,7 @@ 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)
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))
Expand All @@ -614,7 +644,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function()
SetEntityAsNoLongerNeeded(v.entity)
SetModelAsNoLongerNeeded(model)
--Citizen.Trace("Zombie Eliminated\n")
table.remove(entitys, i)
removeZombie(v.entity,i)
end
end

Expand All @@ -623,7 +653,7 @@ AddEventHandler("tp-advancedzombies:onZombieSync", function()
SetEntityAsNoLongerNeeded(v.entity)
SetModelAsNoLongerNeeded(model)
DeleteEntity(v.entity)
table.remove(entitys,i)
removeZombie(v.entity,i)
--Citizen.Trace("Zombie Eliminated from Water\n")
end
end
Expand Down Expand Up @@ -703,7 +733,7 @@ AddEventHandler('tp-advancedzombies:clearZombies', function()
for i, v in pairs(entitys) do

if not DoesEntityExist(v.entity) then
table.remove(entitys, i)
removeZombie(v.entity,i)
end

local model = GetEntityModel(v.entity)
Expand All @@ -721,3 +751,40 @@ AddEventHandler("onResourceStop", function(resourceName)

TriggerEvent('tp-advancedzombies:clearZombies')
end)


function addZombie(entity,EntityModel)
if Config.Debug then
print("add zombie called")
print(entity)
end
if Config.Zombies.Networked then
TriggerServerEvent("tp-advancedzombies:addZombie", entity)
if Config.Debug then
print("added via client")
end
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

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
3 changes: 3 additions & 0 deletions tp-advancedzombies/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -103,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,

Expand Down
59 changes: 58 additions & 1 deletion tp-advancedzombies/server/tp-server_functions.lua
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -51,4 +52,60 @@ function getOnlinePlayers()
return QBCore.Functions.GetPlayers()
end

end
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)
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)

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