Szerző Téma: Zombik  (Megtekintve 1317 alkalommal)

Zombik
« Dátum: 2016. április 10. - 02:35:01 »
0 Show voters
Hol lehet át állítani, hogy a zombik, ne a 0 -ás dimenzióba jöjjenek létre, hanem például: 1 -es dimenzióba?
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
--SKIN REPLACEMENTS
local skin = engineLoadTXD ( \"skins/13.txd\" ) --bleedin eyes 31 by Slothman
engineImportTXD ( skin, 13 )
local skin = engineLoadTXD ( \"skins/22.txd\" ) -- slashed 12 by Wall-E
engineImportTXD ( skin, 22 )   
local skin = engineLoadTXD ( \"skins/56.txd\" ) --young and blue by Slothman
engineImportTXD ( skin, 56 )
local skin = engineLoadTXD ( \"skins/67.txd\" ) -- slit r* employee
engineImportTXD ( skin, 67 )
local skin = engineLoadTXD ( \"skins/68.txd\" ) -- shredded preist by Deixell
engineImportTXD ( skin, 68 )
local skin = engineLoadTXD ( \"skins/69.txd\" ) --bleedin eyes in denim by Capitanazop
engineImportTXD ( skin, 69 )
local skin = engineLoadTXD ( \"skins/70.txd\" ) --ultra gory scientist by 50p
engineImportTXD ( skin, 70 )
local skin = engineLoadTXD ( \"skins/84.txd\" ) --guitar wolf (nonzombie) by Slothman
engineImportTXD ( skin, 84 )
local skin = engineLoadTXD ( \"skins/92.txd\" ) -- peeled flesh by xbost
engineImportTXD ( skin, 92 )
local skin = engineLoadTXD ( \"skins/97.txd\" ) -- easterboy by Slothman
engineImportTXD ( skin, 97 )
local skin = engineLoadTXD ( \"skins/105.txd\" ) --Scarred Grove Gangster by Wall-E
engineImportTXD ( skin, 105 )
local skin = engineLoadTXD ( \"skins/107.txd\" ) --ripped and slashed grove by Wall-E
engineImportTXD ( skin, 107 )
local skin = engineLoadTXD ( \"skins/108.txd\" ) -- skeleton thug by Deixell
engineImportTXD ( skin, 108 )
local skin = engineLoadTXD ( \"skins/111.txd\" ) --Frank West from dead rising (nonzombie) by Slothman
engineImportTXD ( skin, 111 )
local skin = engineLoadTXD ( \"skins/126.txd\" ) -- bullet ridden wiseguy by Slothman
engineImportTXD ( skin, 126 )
local skin = engineLoadTXD ( \"skins/127.txd\" ) --flyboy from dawn of the dead by Slothman
engineImportTXD ( skin, 127 )
local skin = engineLoadTXD ( \"skins/128.txd\" ) --holy native by Slothman
engineImportTXD ( skin, 128 )
local skin = engineLoadTXD ( \"skins/152.txd\" ) --bitten schoolgirl by Slothman
engineImportTXD ( skin, 152 )
local skin = engineLoadTXD ( \"skins/162.txd\" ) --shirtless redneck by Slothman
engineImportTXD ( skin, 162 )
local skin = engineLoadTXD ( \"skins/167.txd\" ) --dead chickenman by 50p
engineImportTXD ( skin, 167 )
local skin = engineLoadTXD ( \"skins/188.txd\" ) --burnt greenshirt by Slothman
engineImportTXD ( skin, 188 )
local skin = engineLoadTXD ( \"skins/192.txd\" ) --Alice from resident evil (nonzombie) by Slothman
engineImportTXD ( skin, 192 )
local skin = engineLoadTXD ( \"skins/195.txd\" ) --bloody ex by Slothman
engineImportTXD ( skin, 195 )
local skin = engineLoadTXD ( \"skins/206.txd\" ) -- faceless zombie by Slothman
engineImportTXD ( skin, 206 )
local skin = engineLoadTXD ( \"skins/209.txd\" ) --Noodle vendor by 50p
engineImportTXD ( skin, 209 )
local skin = engineLoadTXD ( \"skins/212.txd\" ) --brainy hobo by Slothman
engineImportTXD ( skin, 212 )
local skin = engineLoadTXD ( \"skins/229.txd\" ) --infected tourist by Slothman
engineImportTXD ( skin, 229 )
local skin = engineLoadTXD ( \"skins/230.txd\" ) --will work for brains hobo by Slothman
engineImportTXD ( skin, 230 )
local skin = engineLoadTXD ( \"skins/258.txd\" ) --bloody sided suburbanite by Slothman
engineImportTXD ( skin, 258 )
local skin = engineLoadTXD ( \"skins/264.txd\" ) --scary clown by 50p
engineImportTXD ( skin, 264 )
local skin = engineLoadTXD ( \"skins/274.txd\" ) --Ash Williams (nonzombie) by Slothman
engineImportTXD ( skin, 274 )
local skin = engineLoadTXD ( \"skins/277.txd\" ) -- gutted firefighter by Wall-E
engineImportTXD ( skin, 277 )
local skin = engineLoadTXD ( \"skins/280.txd\" ) --infected cop by Lordy
engineImportTXD ( skin, 280 )
local skin = engineLoadTXD ( \"skins/287.txd\" ) --torn army by Deixell
engineImportTXD ( skin, 287 )
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 = 1 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 )

Zombik
« Válasz #1 Dátum: 2016. április 24. - 22:13:39 »
0 Show voters
Aha, és azt hol kell ebben a scriptben alkalmazni?
« Utoljára szerkesztve: 2016. április 27. - 18:47:09 írta DarkxD »

Zombik
« Válasz #2 Dátum: 2016. április 28. - 16:30:38 »
0 Show voters
setElementDimension(ped, 1)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal