Jump to content

Porque deja de funcionar?


NodZen

Recommended Posts

Amigos , quiero sacar la parte del script "zombies" que reemplaza los DFF y TXD , pero cuando borro esa parte , el script deja de funcionar , porque es?

client

myZombies = { }

helmetzombies = { 27, 51, 52, 99, 27, 137, 153, 167, 205, 260, 277, 278, 279, 284, 285 }

resourceRoot = getResourceRootElement()

--FORCES ZOMBIES TO MOVE ALONG AFTER THEIR TARGET PLAYER DIES

function playerdead ()

setTimer ( Zomb_release, 4000, 1 )

end

addEventHandler ( "onClientPlayerWasted", getLocalPlayer(), playerdead )

function Zomb_release ()

for k, ped in pairs( myZombies ) do

if (isElement(ped)) then

if (getElementData (ped, "zombie") == true) then

setElementData ( ped, "target", nil )

setElementData ( ped, "status", "idle" )

table.remove(myZombies,k)

end

end

end

end

--REMOVES A ZOMBIE FROM INFLUENCE AFTER ITS KILLED

function pedkilled ( killer, weapon, bodypart )

if (getElementData (source, "zombie") == true) and (getElementData (source, "status") ~= "dead" ) then

setElementData ( source, "target", nil )

setElementData ( source, "status", "dead" )

end

end

addEventHandler ( "onClientPedWasted", getRootElement(), pedkilled )

--THIS CHECKS ALL ZOMBIES EVERY SECOND TO SEE IF THEY ARE IN SIGHT

function zombie_check ()

if (getElementData (getLocalPlayer (), "zombie") ~= true) and ( isPlayerDead ( getLocalPlayer () ) == false ) then

local zombies = getElementsByType ( "ped",getRootElement(),true )

local Px,Py,Pz = getElementPosition( getLocalPlayer () )

if isPedDucked ( getLocalPlayer ()) then

local Pz = Pz-1

end

for theKey,theZomb in ipairs(zombies) do

if (isElement(theZomb)) then

local Zx,Zy,Zz = getElementPosition( theZomb )

if (getDistanceBetweenPoints3D(Px, Py, Pz, Zx, Zy, Zz) < 45 ) then

if (getElementData (theZomb, "zombie") == true) then

if ( getElementData ( theZomb, "status" ) == "idle" ) then --CHECKS IF AN IDLE ZOMBIE IS IN SIGHT

local isclear = isLineOfSightClear (Px, Py, Pz+1, Zx, Zy, Zz +1, true, false, false, true, false, false, false)

if (isclear == true) then

setElementData ( theZomb, "status", "chasing" )

setElementData ( theZomb, "target", getLocalPlayer() )

table.insert( myZombies, theZomb ) --ADDS ZOMBIE TO PLAYERS COLLECTION

table.remove( zombies, theKey)

zombieradiusalert (theZomb)

end

elseif (getElementData(theZomb,"status") == "chasing") and (getElementData(theZomb,"target") == nil) then --CHECKS IF AN AGGRESSIVE LOST ZOMBIE IS IN SIGHT

local isclear = isLineOfSightClear (Px, Py, Pz+1, Zx, Zy, Zz +1, true, false, false, true, false, false, false)

if (isclear == true) then

setElementData ( theZomb, "target", getLocalPlayer() )

isthere = "no"

for k, ped in pairs( myZombies ) do

if ped == theZomb then

isthere = "yes"

end

end

if isthere == "no" then

table.insert( myZombies, theZomb ) --ADDS THE WAYWARD ZOMBIE TO THE PLAYERS COLLECTION

table.remove( zombies, theKey)

end

end

elseif ( getElementData ( theZomb, "target" ) == getLocalPlayer() ) then --CHECKS IF AN ALREADY AGGRESSIVE ZOMBIE IS IN SIGHT

local isclear = isLineOfSightClear (Px, Py, Pz+1, Zx, Zy, Zz +1, true, false, false, true, false, false, false)

if (isclear == false) then --IF YOUR ZOMBIE LOST YOU, MAKES IT REMEMBER YOUR LAST COORDS

setElementData ( theZomb, "target", nil )

triggerServerEvent ("onZombieLostPlayer", theZomb, oldPx, oldPy, oldPz)

end

end

end

end

end

end

--this second half is for checking peds and zombies

local nonzombies = getElementsByType ( "ped",getRootElement(),true )

for theKey,theZomb in ipairs(zombies) do

if (isElement(theZomb)) then

if (getElementData (theZomb, "zombie") == true) then

local Zx,Zy,Zz = getElementPosition( theZomb )

for theKey,theNonZomb in ipairs(nonzombies) do

if (getElementData (theNonZomb, "zombie") ~= true) then -- if the ped isnt a zombie

local Px,Py,Pz = getElementPosition( theNonZomb )

if (getDistanceBetweenPoints3D(Px, Py, Pz, Zx, Zy, Zz) < 45 ) then

local isclear = isLineOfSightClear (Px, Py, Pz+1, Zx, Zy, Zz +1, true, false, false, true, false, false, false )

if (isclear == true) and ( getElementHealth ( theNonZomb ) > 0) then

if ( getElementData ( theZomb, "status" ) == "idle" ) then --CHECKS IF AN IDLE ZOMBIE IS IN SIGHT

triggerServerEvent ("onZombieLostPlayer", theZomb, Px, Py, Pz)

setElementData ( theZomb, "status", "chasing" )

setElementData ( theZomb, "target", theNonZomb )

zombieradiusalert (theZomb)

elseif ( getElementData ( theZomb, "status" ) == "chasing" ) and ( getElementData ( theZomb, "target" ) == nil) then

triggerServerEvent ("onZombieLostPlayer", theZomb, Px, Py, Pz)

setElementData ( theZomb, "target", theNonZomb )

end

end

end

if ( getElementData ( theZomb, "target" ) == theNonZomb ) then --CHECKS IF AN ALREADY AGGRESSIVE ZOMBIE IS IN SIGHT OF THE PED

local Px,Py,Pz = getElementPosition( theNonZomb )

if (getDistanceBetweenPoints3D(Px, Py, Pz, Zx, Zy, Zz) < 45 ) then

local isclear = isLineOfSightClear (Px, Py, Pz+1, Zx, Zy, Zz+1, true, false, false, true, false, false, false)

if (isclear == false) then --IF YOUR ZOMBIE LOST THE PED, MAKES IT REMEMBER the peds LAST COORDS

triggerServerEvent ("onZombieLostPlayer", theZomb, Px, Py, Pz)

setElementData ( theZomb, "target", nil )

end

end

end

end

end

end

end

end

end

for k, ped in pairs( myZombies ) do

if (isElement(ped) == false) then

table.remove( myZombies, k)

end

end

oldPx,oldPy,oldPz = getElementPosition( getLocalPlayer () )

end

--INITAL SETUP

function clientsetupstarter(startedresource)

if startedresource == getThisResource() then

setTimer ( clientsetup, 1234, 1)

MainClientTimer1 = setTimer ( zombie_check, 1000, 0) --STARTS THE TIMER TO CHECK FOR ZOMBIES

end

end

addEventHandler("onClientResourceStart", getRootElement(), clientsetupstarter)

function clientsetup()

oldPx,oldPy,oldPz = getElementPosition( getLocalPlayer () )

throatcol = createColSphere ( 0, 0, 0, .3)

woodpic = guiCreateStaticImage( .65, .06, .1, .12, "zombiewood.png", true )

guiSetVisible ( woodpic, false )

--ALL ZOMBIES STFU

local zombies = getElementsByType ( "ped" )

for theKey,theZomb in ipairs(zombies) do

if (isElement(theZomb)) then

if (getElementData (theZomb, "zombie") == true) then

setPedVoice(theZomb, "PED_TYPE_DISABLED")

end

end

end

--UPDATES PLAYERS COUNT OF AGGRESIVE ZOMBIES

addEventHandler ( "onClientElementDataChange", getRootElement(),

function ( dataName )

if getElementType ( source ) == "ped" and dataName == "status" then

local thestatus = (getElementData ( source, "status" ))

if (thestatus == "idle") or (thestatus == "dead") then

for k, ped in pairs( myZombies ) do

if ped == source and (getElementData (ped, "zombie") == true) then

setElementData ( ped, "target", nil )

table.remove( myZombies, k)

setElementData ( getLocalPlayer(), "dangercount", tonumber(table.getn( myZombies )) )

end

end

end

end

end )

--MAKES A ZOMBIE JUMP

addEvent( "Zomb_Jump", true )

function Zjump ( ped )

if (isElement(ped)) then

setPedControlState( ped, "jump", true )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedControlState ( ped, "jump", false) end end, 800, 1, ped )

end

end

addEventHandler( "Zomb_Jump", getRootElement(), Zjump )

--MAKES A ZOMBIE PUNCH

addEvent( "Zomb_Punch", true )

function Zpunch ( ped )

if (isElement(ped)) then

setPedControlState( ped, "fire", true )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedControlState ( ped, "fire", false) end end, 800, 1, ped )

end

end

addEventHandler( "Zomb_Punch", getRootElement(), Zpunch )

--MAKES A ZOMBIE STFU

addEvent( "Zomb_STFU", true )

function Zstfu ( ped )

if (isElement(ped)) then

setPedVoice(ped, "PED_TYPE_DISABLED")

end

end

addEventHandler( "Zomb_STFU", getRootElement(), Zstfu )

--MAKES A ZOMBIE MOAN

addEvent( "Zomb_Moan", true )

function Zmoan ( ped, randnum )

if (isElement(ped)) then

local Zx,Zy,Zz = getElementPosition( ped )

local sound = playSound3D("sounds/mgroan"..randnum..".ogg", Zx, Zy, Zz, false)

setSoundMaxDistance(sound, 20)

end

end

addEventHandler( "Zomb_Moan", getRootElement(), Zmoan )

--ZOMBIE HEADSHOTS TO ALL BUT HELMETED ZOMBIES

function zombiedamaged ( attacker, weapon, bodypart )

if getElementType ( source ) == "ped" then

if (getElementData (source, "zombie") == true) then

if ( bodypart == 9 ) then

helmeted = "no"

local zskin = getElementModel ( source )

for k, skin in pairs( helmetzombies ) do

if skin == zskin then

helmeted = "yes"

end

end

if helmeted == "no" then

triggerServerEvent ("headboom", source, source, attacker, weapon, bodypart )

end

end

end

end

end

addEventHandler ( "onClientPedDamage", getRootElement(), zombiedamaged )

function zombiedkilled(killer, weapon, bodypart)

if getElementType ( source ) == "ped" then

if (getElementData (source, "zombie") == true) then

setElementCollisionsEnabled(source, false)

end

end

end

addEventHandler ( "onClientPedWasted", getRootElement(), zombiedkilled )

--CAUSES MORE DAMAGE TO PLAYER WHEN ATTACKED BY A ZOMBIE

function zombieattack ( attacker, weapon, bodypart )

if (attacker) then

if getElementType ( attacker ) == "ped" then

if (getElementData (attacker, "zombie") == true) then

local playerHealth = getElementHealth ( getLocalPlayer() )

if playerHealth > 15 then

setElementHealth ( source, playerHealth - 15 )

else

triggerServerEvent ("playereaten", source, source, attacker, weapon, bodypart )

end

end

end

end

end

addEventHandler ( "onClientPlayerDamage", getLocalPlayer(), zombieattack )

--WOOD GUI

function showwoodpic ( theElement, matchingDimension )

if ( theElement == getLocalPlayer() ) and (getElementData ( source, "purpose" ) == "zombiewood" ) then

guiSetVisible ( woodpic, true )

end

end

addEventHandler ( "onClientColShapeHit", getRootElement(), showwoodpic )

function hidewoodpic ( theElement, matchingDimension )

if ( theElement == getLocalPlayer() ) and (getElementData ( source, "purpose" ) == "zombiewood" ) then

guiSetVisible ( woodpic, false )

end

end

addEventHandler ( "onClientColShapeLeave", getRootElement(), hidewoodpic )

--ZOMBIES ATTACK FROM BEHIND AND GUI STUFF

function movethroatcol ()

local screenWidth, screenHeight = guiGetScreenSize()

local dcount = tostring(table.getn( myZombies ))

dxDrawText( dcount, screenWidth-40, screenHeight -50, screenWidth, screenHeight, tocolor ( 0, 0, 0, 255 ), 1.44, "pricedown" )

dxDrawText( dcount, screenWidth-42, screenHeight -52, screenWidth, screenHeight, tocolor ( 255, 255, 255, 255 ), 1.4, "pricedown" )

if isElement(throatcol) then

local playerrot = getPedRotation ( getLocalPlayer () )

local radRot = math.rad ( playerrot )

local radius = 1

local px,py,pz = getElementPosition( getLocalPlayer () )

local tx = px + radius * math.sin(radRot)

local ty = py + -(radius) * math.cos(radRot)

local tz = pz

setElementPosition ( throatcol, tx, ty, tz )

end

end

addEventHandler ( "onClientRender", getRootElement(), movethroatcol )

function choketheplayer ( theElement, matchingDimension )

if getElementType ( theElement ) == "ped" and ( isPlayerDead ( getLocalPlayer () ) == false ) then

if ( getElementData ( theElement, "target" ) == getLocalPlayer () ) and (getElementData (theElement, "zombie") == true) then

local px,py,pz = getElementPosition( getLocalPlayer () )

setTimer ( checkplayermoved, 600, 1, theElement, px, py, pz)

end

end

end

addEventHandler ( "onClientColShapeHit", getRootElement(), choketheplayer )

function checkplayermoved (zomb, px, py, pz)

if (isElement(zomb)) then

local nx,ny,nz = getElementPosition( getLocalPlayer () )

local distance = (getDistanceBetweenPoints3D (px, py, pz, nx, ny, nz))

if (distance < .7) and ( isPlayerDead ( getLocalPlayer () ) == false ) then

setElementData ( zomb, "status", "throatslashing" )

end

end

end

--ALERTS ANY IDLE ZOMBIES WITHIN A RADIUS OF 10 WHEN GUNSHOTS OCCUR OR OTHER ZOMBIES GET ALERTED

function zombieradiusalert (theElement)

local Px,Py,Pz = getElementPosition( theElement )

local zombies = getElementsByType ( "ped" )

for theKey,theZomb in ipairs(zombies) do

if (isElement(theZomb)) then

if (getElementData (theZomb, "zombie") == true) then

if ( getElementData ( theZomb, "status" ) == "idle" ) then

local Zx,Zy,Zz = getElementPosition( theZomb )

local distance = (getDistanceBetweenPoints3D (Px, Py, Pz, Zx, Zy, Zz))

if (distance < 10) and ( isPlayerDead ( getLocalPlayer () ) == false ) then

isthere = "no"

for k, ped in pairs( myZombies ) do

if ped == theZomb then

isthere = "yes"

end

end

if isthere == "no" and (getElementData (getLocalPlayer (), "zombie") ~= true) then

if (getElementType ( theElement ) == "ped") then

local isclear = isLineOfSightClear (Px, Py, Pz, Zx, Zy, Zz, true, false, false, true, false, false, false)

if (isclear == true) then

setElementData ( theZomb, "status", "chasing" )

setElementData ( theZomb, "target", getLocalPlayer () )

table.insert( myZombies, theZomb ) --ADDS ZOMBIE TO PLAYERS COLLECTION

end

else

setElementData ( theZomb, "status", "chasing" )

setElementData ( theZomb, "target", getLocalPlayer () )

table.insert( myZombies, theZomb ) --ADDS ZOMBIE TO PLAYERS COLLECTION

end

end

end

end

end

end

end

end

function shootingnoise ( weapon, ammo, ammoInClip, hitX, hitY, hitZ, hitElement)

if alertspacer ~= 1 then

if (weapon == 9) then

alertspacer = 1

setTimer ( resetalertspacer, 5000, 1 )

zombieradiusalert(getLocalPlayer ())

elseif (weapon > 21) and (weapon ~= 23) then

alertspacer = 1

setTimer ( resetalertspacer, 5000, 1 )

zombieradiusalert(getLocalPlayer ())

end

end

if hitElement then

if (getElementType ( hitElement ) == "ped") then

if (getElementData (hitElement, "zombie") == true) then

isthere = "no"

for k, ped in pairs( myZombies ) do

if ped == hitElement then

isthere = "yes"

end

end

if isthere == "no" and (getElementData (getLocalPlayer (), "zombie") ~= true) then

setElementData ( hitElement, "status", "chasing" )

setElementData ( hitElement, "target", getLocalPlayer () )

table.insert( myZombies, hitElement ) --ADDS ZOMBIE TO PLAYERS COLLECTION

zombieradiusalert (hitElement)

end

end

end

end

end

addEventHandler ( "onClientPlayerWeaponFire", getLocalPlayer (), shootingnoise )

function resetalertspacer ()

alertspacer = nil

end

function choketheplayer ( theElement, matchingDimension )

if getElementType ( theElement ) == "ped" and ( isPlayerDead ( getLocalPlayer () ) == false ) and (getElementData (theElement , "zombie") == true) then

if ( getElementData ( theElement, "target" ) == getLocalPlayer () ) then

local px,py,pz = getElementPosition( getLocalPlayer () )

setTimer ( checkplayermoved, 600, 1, theElement, px, py, pz)

end

end

end

addEvent( "Spawn_Placement", true )

function Spawn_Place(xcoord, ycoord)

local x,y,z = getElementPosition( getLocalPlayer() )

local posx = x+xcoord

local posy = y+ycoord

local gz = getGroundPosition ( posx, posy, z+500 )

triggerServerEvent ("onZombieSpawn", getLocalPlayer(), posx, posy, gz+1 )

end

addEventHandler("Spawn_Placement", getRootElement(), Spawn_Place)

server

ZombieLimit = get("zombies.MaxZombies")-- HOW MANY ZOMBIES SHOULD EXIST AT MAXIMUM?

ZombieStreaming = get("zombies.StreamMethod") -- 1 to constantly stream zombies, 0 to only allow zombies to spawn via createZombie function, 2 to only allow spawning at set spawnpoints

ZombiePedSkins = {13,22,56,67,68,69,70,92,97,105,107,108,126,127,128,152,162,167,188,195,206,209,212,229,230,258,264,277,280,287 } --ALTERNATE SKIN LISTS FOR ZOMBIES (SHORTER LIST IS TEXTURED ZOMBIES ONLY)

--ZombiePedSkins = {7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,36,37,38,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,66,67,68,69,70,71,72,73,75,76,77,78,79,80,81,82,83,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,159,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,209,210,211,212,213,214,215,216,217,218,219,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,275,276,277,278,279,280,281,282,283,284,285,286,287,288 }

ZombieSpeed = get("zombies.Speed")

if ZombieSpeed == 0 then --super slow zombies (goofy looking)

chaseanim = "WALK_drunk"

checkspeed = 2000

elseif ZombieSpeed == 1 then -- normal speed

chaseanim = "run_old"

checkspeed = 1000

elseif ZombieSpeed == 2 then -- rocket zombies (possibly stressful on server)

chaseanim = "Run_Wuzi"

checkspeed = 680

else -- defaults back to normal

chaseanim = "run_old"

checkspeed = 1000

end

resourceRoot = getResourceRootElement()

moancount =0

moanlimit = 10

everyZombie = { }

--IDLE BEHAVIOUR OF A ZOMBIE

function Zomb_Idle (ped)

if isElement(ped) then

if ( getElementData ( ped, "status" ) == "idle" ) and ( isPedDead ( ped ) == false ) and (getElementData (ped, "zombie") == true) then

local action = math.random( 1, 6 )

if action < 4 then -- walk a random direction

local rdmangle = math.random( 1, 359 )

setPedRotation( ped, rdmangle )

setPedAnimation ( ped, "PED", "Player_Sneak", -1, true, true, true)

setTimer ( Zomb_Idle, 7000, 1, ped )

elseif action == 4 then -- get on the ground

setPedAnimation ( ped, "MEDIC", "cpr", -1, false, true, true)

setTimer ( Zomb_Idle, 4000, 1, ped )

elseif action == 5 then -- stand still doing nothing

setPedAnimation ( ped )

setTimer ( Zomb_Idle, 4000, 1, ped )

end

end

end

end

--BEHAVIOUR WHILE CHASING PLAYERS

function Zomb_chase (ped, Zx, Zy, Zz )

if isElement(ped) then

if (getElementData ( ped, "status" ) == "chasing") and (getElementData (ped, "zombie") == true) then

local x, y, z = getElementPosition( ped )

if (getElementData ( ped, "target" ) == nil) and getElementData ( ped, "Tx" ) ~= false then

local Px = getElementData ( ped, "Tx" )

local Py = getElementData ( ped, "Ty" )

local Pz = getElementData ( ped, "Tz" )

local Pdistance = (getDistanceBetweenPoints3D( Px, Py, Pz, x, y, z ))

if (Pdistance < 1.5 ) then

setTimer ( function (ped) if ( isElement ( ped ) ) then setElementData ( ped, "status", "idle" ) end end, 2000, 1, ped )

end

end

local distance = (getDistanceBetweenPoints3D( x, y, z, Zx, Zy, Zz ))

if (distance < 1 ) then -- IF THE PED HASNT MOVED

if (getElementData ( ped, "target" ) == nil) then

local giveup = math.random( 1, 15 )

if giveup == 1 then

setElementData ( ped, "status", "idle" )

else

local action = math.random( 1, 2 )

if action == 1 then

setPedAnimation ( ped )

triggerClientEvent ( "Zomb_Punch", getRootElement(), ped )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedAnimation ( ped, "ped", chaseanim, -1, true, true, true ) end end, 800, 1, ped )

setTimer ( Zomb_chase, 2000, 1, ped, x, y, z )

elseif action == 2 then

setPedAnimation ( ped )

triggerClientEvent ( "Zomb_Jump", getRootElement(), ped )

setTimer ( Zomb_chase, 3500, 1, ped, x, y, z )

end

end

else

local Ptarget = (getElementData ( ped, "target" ))

if isElement(Ptarget) then

local Px, Py, Pz = getElementPosition( Ptarget )

local Pdistance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (Pdistance < 1.2 ) then -- ATTACK A PLAYER IF THEY ARE CLOSE

if ( isPedDead ( Ptarget ) ) then --EAT A DEAD PLAYER

setPedAnimation ( ped )

setPedAnimation ( ped, "MEDIC", "cpr", -1, false, true, false)

setTimer ( function (ped) if ( isElement ( ped ) ) then setElementData ( ped, "status", "idle" ) end end, 10000, 1, ped )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedRotation ( ped, getPedRotation(ped)-180) end end, 10000, 1, ped )

zmoan(ped)

else

local action = math.random( 1, 6 )

if action == 1 then

setPedAnimation ( ped)

triggerClientEvent ( "Zomb_Jump", getRootElement(), ped )

setTimer ( Zomb_chase, 2000, 1, ped, x, y, z )

else

setPedAnimation ( ped)

triggerClientEvent ( "Zomb_Punch", getRootElement(), ped )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedAnimation ( ped, "ped", chaseanim, -1, true, true, true ) end end, 800, 1, ped )

setTimer ( Zomb_chase, 2000, 1, ped, x, y, z )

end

end

else

if ( isPedDead (Ptarget) ) then

setTimer ( function (ped) if ( isElement ( ped ) ) then setElementData ( ped, "status", "idle" ) end end, 2000, 1, ped )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedRotation ( ped, getPedRotation(ped)-180) end end, 1800, 1, ped )

else

local action = math.random( 1, 2 )

if action == 1 then

setPedAnimation ( ped)

triggerClientEvent ( "Zomb_Punch", getRootElement(), ped )

setTimer ( function (ped) if ( isElement ( ped ) ) then setPedAnimation ( ped, "ped", chaseanim, -1, true, true, true ) end end, 800, 1, ped )

setTimer ( Zomb_chase, 2000, 1, ped, x, y, z )

elseif action == 2 then

setPedAnimation ( ped)

triggerClientEvent ( "Zomb_Jump", getRootElement(), ped )

setTimer ( Zomb_chase, 2000, 1, ped, x, y, z )

end

end

end

else

setElementData ( ped, "status", "idle" )

end

end

else

setPedAnimation ( ped, "ped", chaseanim, -1, true, true, true) --KEEP WALKING

setTimer ( Zomb_chase, checkspeed, 1, ped, x, y, z ) --CHECK AGAIN

end

end

end

end

--SET THE DIRECTION OF THE ZOMBIE

function setangle ()

for theKey,ped in ipairs(everyZombie) do

if isElement(ped) then

if ( getElementData ( ped, "status" ) == "chasing" ) then

local x

local y

local z

local px

local py

local pz

if ( getElementData ( ped, "target" ) ~= nil ) then

local ptarget = getElementData ( ped, "target" )

if isElement(ptarget) then

x, y, z = getElementPosition( ptarget )

px, py, pz = getElementPosition( ped )

else

setElementData ( ped, "status", "idle" )

x, y, z = getElementPosition( ped )

px, py, pz = getElementPosition( ped )

end

zombangle = ( 360 - math.deg ( math.atan2 ( ( x - px ), ( y - py ) ) ) ) % 360 --MAGIC SPELL TO MAKE PEDS LOOK AT YOU

setPedRotation( ped, zombangle )

elseif ( getElementData ( ped, "target" ) == nil ) and (getElementData ( ped, "Tx" ) ~= false) then --IF THE PED IS AFTER THE PLAYERS LAST KNOWN WHEREABOUTS

x = getElementData ( ped, "Tx" )

y = getElementData ( ped, "Ty" )

z = getElementData ( ped, "Tz" )

px, py, pz = getElementPosition( ped )

zombangle = ( 360 - math.deg ( math.atan2 ( ( x - px ), ( y - py ) ) ) ) % 360 --MAGIC SPELL TO MAKE PEDS LOOK AT YOU

setPedRotation( ped, zombangle )

end

end

end

end

end

--SETS THE ZOMBIE ACTIVITY WHEN STATUS CHANGES

addEventHandler ( "onElementDataChange", getRootElement(),

function ( dataName )

if getElementType ( source ) == "ped" and dataName == "status" then

if (getElementData (source, "zombie") == true) then

if ( isPedDead ( source ) == false ) then

if (getElementData ( source, "status" ) == "chasing" ) then

local Zx, Zy, Zz = getElementPosition( source )

setTimer ( Zomb_chase, 1000, 1, source, Zx, Zy, Zz )

local newtarget = (getElementData ( source, "target" ))

if isElement (newtarget) then

if getElementType ( newtarget ) == "player" then

setElementSyncer ( source, newtarget )

end

end

zmoan(source)

elseif (getElementData ( source, "status" ) == "idle" ) then

setTimer ( Zomb_Idle, 1000, 1, source)

elseif (getElementData ( source, "status" ) == "throatslashing" ) then

local tx,ty,tz = getElementPosition( source )

local ptarget = getElementData ( source, "target" )

if isElement(ptarget) then

local vx,vy,vz = getElementPosition( ptarget )

local zombdistance = (getDistanceBetweenPoints3D (tx, ty, tz, vx, vy, vz))

if (zombdistance < .8) then

zmoan(source)

setPedAnimation ( source, "knife", "KILL_Knife_Player", -1, false, false, true)

setPedAnimation ( ptarget, "knife", "KILL_Knife_Ped_Damage", -1, false, false, true)

setTimer ( Playerthroatbitten, 2300, 1, ptarget, source)

setTimer ( function (source) if ( isElement ( source ) ) then setElementData ( source, "status", "idle" ) end end, 5000, 1, source )

else

setElementData ( source, "status", "idle" )

end

else

setElementData ( source, "status", "idle" )

end

end

elseif (getElementData ( source, "status" ) == "dead" ) then

setTimer ( Zomb_delete, 10000, 1, source)

end

end

end

end)

--RESOURCE START/INITIAL SETUP

function outbreak(startedResource)

newZombieLimit = get("" .. getResourceName(startedResource) .. ".Zlimit")

if newZombieLimit ~= false then

if newZombieLimit > ZombieLimit then

newZombieLimit = ZombieLimit

end

else

newZombieLimit = ZombieLimit

end

WoodTimer = setTimer ( WoodSetup, 2000, 1) -- CHECKS FOR BARRIERS

if startedResource == getThisResource() then

-- call(getResourceFromName("scoreboard"), "scoreboardAddColumn", "Zombie kills") --ADDS TO SCOREBOARD

local allplayers = getElementsByType ( "player" )

for pKey,thep in ipairs(allplayers) do

setElementData ( thep, "dangercount", 0 )

end

local alivePlayers = getAlivePlayers ()

for playerKey, playerValue in ipairs(alivePlayers) do

setElementData ( playerValue, "alreadyspawned", true )

end

if ZombieSpeed == 2 then

MainTimer1 = setTimer ( setangle, 200, 0) -- KEEPS ZOMBIES FACING THE RIGHT DIRECTION (fast)

else

MainTimer1 = setTimer ( setangle, 400, 0) -- KEEPS ZOMBIES FACING THE RIGHT DIRECTION

end

MainTimer3 = setTimer ( clearFarZombies, 3000, 0) --KEEPS ALL THE ZOMBIES CLOSE TO PLAYERS

if ZombieStreaming == 1 then

MainTimer2 = setTimer ( SpawnZombie, 2500, 0 ) --Spawns zombies in random locations

elseif ZombieStreaming == 2 then

MainTimer2 = setTimer ( SpawnpointZombie, 2500, 0 ) --spawns zombies in zombie spawnpoints

end

end

end

addEventHandler("onResourceStart", getRootElement(), outbreak)

function player_Connect()

setElementData ( source, "dangercount", 0 )

end

addEventHandler ( "onPlayerConnect", getRootElement(), player_Connect )

function WoodSetup()

local allcols = getElementsByType ( "colshape" ) --clears off old wood cols

for colKey, colValue in ipairs(allcols) do

if ( getElementData ( colValue, "purpose" ) =="zombiewood" ) then

destroyElement(colValue)

end

end

local allobjects = getElementsByType ( "object" ) --SETS UP ALL THE WOOD BARRIERS

for objectKey, objectValue in ipairs(allobjects) do

if ( getElementData ( objectValue, "purpose" ) =="zombiewood" ) then

setElementDimension ( objectValue, 26 )

local x,y,z = getElementPosition( objectValue )

local thecol = createColSphere ( x, y, z, 1.6 )

setElementData ( thecol, "purpose", "zombiewood" )

setElementParent ( thecol, objectValue )

end

end

end

function ReduceMoancount()

moancount = moancount-1

end

function zmoan(zombie)

if moancount < moanlimit then

moancount = moancount+1

local randnum = math.random( 1, 10 )

triggerClientEvent ( "Zomb_Moan", getRootElement(), zombie, randnum )

setTimer ( ReduceMoancount, 800, 1 )

end

end

--CLEARS A DEAD ZOMBIE

function Zomb_delete (ped)

if isElement(ped) then

if (getElementData (ped, "zombie") == true) then

for theKey,thePed in ipairs(everyZombie) do

if ped == thePed then

table.remove( everyZombie, theKey )

break

end

end

destroyElement ( ped )

end

end

end

--HEADSHOTS

addEvent( "headboom", true )

function Zheadhit ( ped,attacker, weapon, bodypart)

if (getElementData (ped, "zombie") == true) then

killPed ( ped, attacker, weapon, bodypart )

setPedHeadless ( ped, true )

end

end

addEventHandler( "headboom", getRootElement(), Zheadhit )

--KILL FROM ZOMBIE ATTACK

addEvent( "playereaten", true )

function Playerinfected ( player, attacker, weapon, bodypart)

killPed ( player, attacker, weapon, bodypart )

end

addEventHandler( "playereaten", getRootElement(), Playerinfected )

--CHECKS FOR ZOMBIE GRABBING FROM BEHIND

function Playerthroatbitten ( player, attacker)

local Zx, Zy, Zz = getElementPosition( attacker )

local Px, Py, Pz = getElementPosition( player )

local distance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (distance < 1) then

killPed ( player, attacker, weapon, bodypart )

else

setPedAnimation (player)

end

end

--ADJUSTS PLAYERS ZOMBIE KILL SCORE

function deanimated( ammo, attacker, weapon, bodypart )

if (attacker) then

if (getElementType ( attacker ) == "player") and (getElementType ( source ) == "ped") then

if (getElementData (source, "zombie") == true) then

local oldZcount = getElementData ( attacker, "Zombie kills" )

if oldZcount ~= false then

setElementData ( attacker, "Zombie kills", oldZcount+1 )

triggerEvent ( "onZombieWasted", source, attacker, weapon, bodypart )

else

setElementData ( attacker, "Zombie kills", 1 )

triggerEvent ( "onZombieWasted", source, attacker, weapon, bodypart )

end

end

end

end

end

addEventHandler("onPedWasted", resourceRoot, deanimated)

--STUFF TO ALLOW PLAYERS TO PLACE BOARDS

function boarditup( player, key, keyState )

local rightspot = 0

local allcols = getElementsByType ( "colshape" )

for ColKey,theCol in ipairs(allcols) do

if (getElementData ( theCol, "purpose" ) == "zombiewood" ) then

if (isElementWithinColShape ( player, theCol )) then

local rightcol = theCol

local Cx, Cy, Cz = getElementPosition( rightcol )

local Bx, By, Bz = getElementPosition( player )

woodangle = ( 360 - math.deg ( math.atan2 ( ( Cx - Bx ), ( Cy - By ) ) ) ) % 360

setPedRotation( player, woodangle )

setPedAnimation(player, "riot", "RIOT_PUNCHES", 3000, true, true, true )

local wx, wy, wz = getElementPosition( player )

setTimer( doneboarding, 2000, 1, player, rightcol, wx, wy, wz )

end

end

end

end

addCommandHandler ( "construct", boarditup )

function doneboarding(player, rightcol, wx, wy, wz)

setPedAnimation(player)

local newx, newy, newz = getElementPosition( player )

local distance = (getDistanceBetweenPoints3D( wx, wy, wz, newx, newy, newz ))

if (distance < .7 ) then

newwood = getElementParent ( rightcol )

setElementDimension ( newwood, 25 )

setTimer( setElementDimension, 50, 1, newwood, 0)

end

end

--SPAWN ZOMBIE (now can be cancelled!)

addEvent( "onZombieSpawn", true )

function RanSpawn_Z ( gx, gy, gz, rot)

local safezone = 0

local allradars = getElementsByType("radararea")

for theKey,theradar in ipairs(allradars) do

if getElementData(theradar, "zombieProof") == true then

if isInsideRadarArea ( theradar, gx, gy ) then

safezone = 1

end

end

end

if safezone == 0 then

if table.getn ( everyZombie ) < newZombieLimit then

if not rot then

rot = math.random (1,359)

end

randomZskin = math.random ( 1, table.getn ( ZombiePedSkins ) )

local zomb = createPed( tonumber( ZombiePedSkins[randomZskin] ), gx, gy, gz )

if zomb ~= false then

setElementData ( zomb, "zombie", true )

table.insert( everyZombie, zomb )

setTimer ( function (zomb, rot) if ( isElement ( zomb ) ) then setPedRotation ( zomb, rot ) end end, 500, 1, zomb, rot )

setTimer ( function (zomb) if ( isElement ( zomb ) ) then setPedAnimation ( zomb, "ped", chaseanim, -1, true, true, true ) end end, 1000, 1, zomb )

setTimer ( function (zomb) if ( isElement ( zomb ) ) then setElementData ( zomb, "status", "idle" ) end end, 2000, 1, zomb )

triggerClientEvent ( "Zomb_STFU", getRootElement(), zomb )

end

end

end

end

addEventHandler( "onZombieSpawn", getRootElement(), RanSpawn_Z )

--SPAWNS ZOMBIES RANDOMLY NEAR PLAYERS

function SpawnZombie ()

local pacecount = 0

while pacecount < 5 do --4 ZOMBIES AT A TIME TO PREVENT FPS DROP

if (table.getn( everyZombie )+pacecount < newZombieLimit ) and (ZombieStreaming == 1) then

local xcoord = 0

local ycoord = 0

local xdirection = math.random(1,2)

if xdirection == 1 then

xcoord = math.random(15,40)

else

xcoord = math.random(-40,-15)

end

local ydirection = math.random(1,2)

if ydirection == 1 then

ycoord = math.random(15,40)

else

ycoord = math.random(-40,-15)

end

local liveplayers = getAlivePlayers ()

if (table.getn( liveplayers ) > 0 ) then

local lowestcount = 99999

local lowestguy = nil

for PKey,thePlayer in ipairs(liveplayers) do

if isElement(thePlayer) then

if (getElementData (thePlayer, "dangercount")) and (getElementData(thePlayer, "zombieProof") ~= true) and (getElementData(thePlayer, "alreadyspawned" ) == true) then

if (getElementData (thePlayer, "dangercount") < lowestcount) then

local safezone = 0

local gx, gy, gz = getElementPosition( thePlayer )

local allradars = getElementsByType("radararea")

for theKey,theradar in ipairs(allradars) do

if getElementData(theradar, "zombieProof") == true then

if isInsideRadarArea ( theradar, gx, gy ) then

safezone = 1

end

end

end

if safezone == 0 then

lowestguy = thePlayer

lowestcount = getElementData (thePlayer, "dangercount")

end

end

end

end

end

pacecount = pacecount+1

if isElement(lowestguy) then

triggerClientEvent ( "Spawn_Placement", lowestguy, ycoord, xcoord )

else

pacecount = pacecount+1

end

else

pacecount = pacecount+1

end

else

pacecount = pacecount+1

end

end

end

--SPAWNS ZOMBIES IN SPAWNPOINTS NEAR PLAYERS

function SpawnpointZombie ()

local pacecount = 0

while pacecount < 6 do --5 ZOMBIES AT A TIME TO PREVENT FPS DROP

if (table.getn( everyZombie )+pacecount < newZombieLimit ) and (ZombieStreaming == 2) then

local liveplayers = getAlivePlayers ()

if (table.getn( liveplayers ) > 0 ) then

local lowestcount = 99999

local lowestguy = nil

for PKey,thePlayer in ipairs(liveplayers) do --THIS PART GETS THE PLAYER WITH THE LEAST ZOMBIES ATTACKING

if (getElementData (thePlayer, "dangercount")) and (getElementData(thePlayer, "zombieProof") ~= true) then

if (getElementData (thePlayer, "dangercount") < lowestcount) then

lowestguy = thePlayer

lowestcount = getElementData (thePlayer, "dangercount")

end

end

end

if isElement(lowestguy) then

local zombiespawns = { }

local possiblezombies = getElementsByType ( "Zombie_spawn" )

local Px, Py, Pz = getElementPosition( lowestguy )

for ZombKey,theZomb in ipairs(possiblezombies) do

local Zx, Zy, Zz = getElementPosition( theZomb )

local distance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (distance < 8) then

table.remove( possiblezombies, ZombKey) --IF SPAWN IS TOO CLOSE TO ANY PLAYER

end

end

local Px, Py, Pz = getElementPosition( lowestguy )

for ZombKey2,theZomb2 in ipairs(possiblezombies) do

local Zx, Zy, Zz = getElementPosition( theZomb2 )

local distance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (distance < 60) then --AS LONG AS THE SPAWN IS CLOSE ENOUGH TO A PLAYER

table.insert( zombiespawns, theZomb2 )

end

end

if (table.getn( zombiespawns ) >0 ) then--IF THE LOWEST PLAYER HAS ANY CLOSE SPAWNS,USE ONE

local random = math.random ( 1, table.getn ( zombiespawns ) )

local posX = getElementData(zombiespawns[random], "posX")

local posY = getElementData(zombiespawns[random], "posY")

local posZ = getElementData(zombiespawns[random], "posZ")

local rot = getElementData(zombiespawns[random], "rotZ")

pacecount = pacecount+1

triggerEvent ( "onZombieSpawn",zombiespawns[random], posX, posY, posZ, rot )

else--IF THE LOWEST PLAYERS DOESNT HAVE ANY SPAWNS, THEN SEE IF ANYONE HAS ANY

local zombiespawns = { }

local possiblezombies = getElementsByType ( "Zombie_spawn" )

local allplayers = getAlivePlayers ()

for theKey,thePlayer in ipairs(allplayers) do

local Px, Py, Pz = getElementPosition( thePlayer )

for ZombKey,theZomb in ipairs(possiblezombies) do

local Zx, Zy, Zz = getElementPosition( theZomb )

local distance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (distance < 8) then

table.remove( possiblezombies, ZombKey) --IF SPAWN IS TOO CLOSE TO ANY PLAYER

end

end

end

for theKey,thePlayer in ipairs(allplayers) do

local Px, Py, Pz = getElementPosition( thePlayer )

for ZombKey2,theZomb2 in ipairs(possiblezombies) do

local Zx, Zy, Zz = getElementPosition( theZomb2 )

local distance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (distance < 60) then --AS LONG AS THE SPAWN IS CLOSE ENOUGH TO A PLAYER

table.insert( zombiespawns, theZomb2 )

end

end

end

if (table.getn( zombiespawns ) >1 ) then

local random = math.random ( 1, table.getn ( zombiespawns ) )

local posX = getElementData(zombiespawns[random], "posX")

local posY = getElementData(zombiespawns[random], "posY")

local posZ = getElementData(zombiespawns[random], "posZ")

local rot = getElementData(zombiespawns[random], "rotZ")

pacecount = pacecount+1

triggerEvent ( "onZombieSpawn",zombiespawns[random], posX, posY, posZ, rot )

else

pacecount = pacecount+1

end

end

else

pacecount = pacecount+1

end

else

pacecount = pacecount+1

end

else

pacecount = pacecount+1

end

end

end

--DELETES ZOMBIES THAT ARE TOO FAR FROM ANY PLAYERS TO KEEP THEM MORE CONCENTRATED WHILE STREAMING ZOMBIES

function clearFarZombies ()

if newZombieLimit ~= false then

local toofarzombies = { }

local allplayers = getElementsByType ( "player" )

for ZombKey,theZomb in ipairs(everyZombie) do

if isElement(theZomb) then

if (getElementData (theZomb, "zombie") == true) then

far = 1

local Zx, Zy, Zz = getElementPosition( theZomb )

for theKey,thePlayer in ipairs(allplayers) do

local Px, Py, Pz = getElementPosition( thePlayer )

local distance = (getDistanceBetweenPoints3D( Px, Py, Pz, Zx, Zy, Zz ))

if (distance < 75) then

far = 0

end

end

if far == 1 then

table.insert( toofarzombies, theZomb )

end

end

else

table.remove( everyZombie, ZombKey )

end

end

if (table.getn( toofarzombies ) >1 ) then

for ZombKey,theZomb in ipairs(toofarzombies) do

if (getElementData (theZomb, "zombie") == true) and ( getElementData ( theZomb, "forcedtoexist" ) ~= true) then

Zomb_delete (theZomb)

end

end

end

end

end

-- DESTROYS UP TO 13 ZOMBIES THAT ARE IDLE WHEN A PLAYER SPAWNS (TO FORCE NEW ZOMBIES TO SPAWN NEAR THE NEW GUY)

function player_Spawn ()

if ZombieStreaming == 1 or ZombieStreaming == 2 then

local relocatecount = 0

for ZombKey,theZomb in ipairs(everyZombie) do

if relocatecount < 14 then

if ( getElementData ( theZomb, "forcedtoexist" ) ~= true) then

if ( getElementData ( theZomb, "status" ) == "idle" ) and ( isPedDead ( theZomb ) == false ) and (getElementData (theZomb, "zombie") == true) then

relocatecount = relocatecount+1

Zomb_delete (theZomb)

end

end

end

end

end

if ( getElementData ( source, "alreadyspawned" ) ~= true) then

setElementData ( source, "alreadyspawned", true )

end

end

addEventHandler ( "onPlayerSpawn", getRootElement(), player_Spawn )

--EXPORTED FUNCTIONS!!!!!!!!!!!!!!

function createZombie ( x, y, z, rot, skin, interior, dimension )

if (table.getn( everyZombie ) < newZombieLimit ) then

--this part handles the args

if not x then return false end

if not y then return false end

if not z then return false end

if not rot then

rot = math.random (1,359)

end

if not skin then

randomZskin = math.random ( 1, table.getn ( ZombiePedSkins ) )

skin = ZombiePedSkins[randomZskin]

end

if not interior then interior = 0 end

if not dimension then dimension = 0 end

--this part spawns the ped

local zomb = createPed (tonumber(skin),tonumber(x),tonumber(y),tonumber(z))--spawns the ped

--if successful, this part applies the zombie settings/args

if (zomb ~= false) then

setTimer ( setElementInterior, 100, 1, zomb, tonumber(interior)) --sets interior

setTimer ( setElementDimension, 100, 1, zomb, tonumber(dimension)) --sets dimension

setElementData ( zomb, "zombie", true )

setElementData ( zomb, "forcedtoexist", true )

setTimer ( function (zomb, rot) if ( isElement ( zomb ) ) then setPedRotation ( zomb, rot ) end end, 500, 1, zomb, rot )

setTimer ( function (zomb) if ( isElement ( zomb ) ) then setElementData ( zomb, "status", "idle" ) end end, 2000, 1, zomb )

setTimer ( function (zomb) if ( isElement ( zomb ) ) then setElementData ( zomb, "forcedtoexist", true ) end end, 1000, 1, zomb )

setTimer ( function (zomb) if ( isElement ( zomb ) ) then table.insert( everyZombie, zomb ) end end, 1000, 1, zomb )

triggerClientEvent ( "Zomb_STFU", getRootElement(), zomb )

return zomb --returns the zombie element

else

return false --returns false if there was a problem

end

else

return false --returns false if there was a problem

end

end

--check if a ped is a zombie or not

function isPedZombie(ped)

if (isElement(ped)) then

if (getElementData (ped, "zombie") == true) then

return true

else

return false

end

else

return false

end

end

addEvent( "onZombieLostPlayer", true )

function ZombieTargetCoords ( x,y,z )

setElementData ( source, "Tx", x, false )

setElementData ( source, "Ty", y, false )

setElementData ( source, "Tz", z, false )

end

addEventHandler( "onZombieLostPlayer", getRootElement(), ZombieTargetCoords )

meta

    
        "*MaxZombies" value="[100]" /> --maximum allowed zombies --> 
        "*StreamMethod" value="[1]" /> -- 1 to constantly stream zombies, 0 to only allow zombies to spawn via createZombie function, 2 to only allow spawning at set spawnpoints --> 
        "*Speed" value="[1]" /> -- 0 is slowest, 1 is normal, 2 faster --> 
    
     
    "Slothman" name="Zday script" version="3.0.1" type="script" description="Zombie Infestation script" edf:definition="edf/zombies.edf"/>/> 
    

alguna solucion?

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...