• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Windows Zombie event without spawn? - HELP

lego

New Member
Joined
Mar 11, 2013
Messages
86
Reaction score
2
Location
Stockholm
Hello!

im running version 0.3.6 V7 forgotten server 8.6 ... just updated to V8

i have been following the tutorial PhoOwned made here on otland with zombie events.

link: http://otland.net/f82/zombie-event-new-version-bug-free-updated-128664/

Everything works fine except the zombies does not spawn!! :(

How do i fix so my event zombies is spawning and attack players?

i tried to fix the problem by my own first b4, but i did not succeed!
Please, provide me the help.. you guys are pro's! im not.. :p

here is whole my zombie event scripts and xml:

/data/creaturescripts/scripts/zombie/onattack.lua

LUA:
function loseOnZombieArena(cid)
	kickPlayerFromZombiesArea(cid)
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "BOOM! You are dead.")
	local players = getZombiesEventPlayers()
	if(#players <= 1) then
		local winner = players[1]
		if(winner) then
			doPlayerAddItem(winner, 2157, 5, true)
			doPlayerAddItem(winner, 6119, 1, true)
			doPlayerSendTextMessage(winner, MESSAGE_STATUS_CONSOLE_BLUE, "You won zombies arena event.")
			doBroadcastMessage("After " .. os.time() - getPlayerZombiesEventStatus(winner) .. " seconds of fight " .. getCreatureName(winner) .. " won Zombie Arena Event in game versus " .. getStorage(ZE_ZOMBIES_SPAWNED) .. " zombies!")
			kickPlayerFromZombiesArea(winner)
		else
			doBroadcastMessage("Zombie arena event finished! No one win?!?!?! WTF!")
		end
		doSetStorage(ZE_STATUS, 0)
		doSetStorage(ZE_PLAYERS_NUMBER, ZE_DEFAULT_NUMBER_OF_PLAYERS)
		doSetStorage(ZE_ZOMBIES_TO_SPAWN, 0)
		doSetStorage(ZE_ZOMBIES_SPAWNED, 0)
		local width = (math.max(ZE_spawnFromPosition.x, ZE_spawnToPosition.x) - math.min(ZE_spawnFromPosition.x, ZE_spawnToPosition.x)) / 2 + 1
		local height = (math.max(ZE_spawnFromPosition.y, ZE_spawnToPosition.y) - math.min(ZE_spawnFromPosition.y, ZE_spawnToPosition.y)) / 2 + 1
		local centerPos = {x=math.min(ZE_spawnFromPosition.x, ZE_spawnToPosition.x)+width,y=math.min(ZE_spawnFromPosition.y, ZE_spawnToPosition.y)+height,z=ZE_spawnFromPosition.z}
		for z = math.min(ZE_spawnFromPosition.z, ZE_spawnToPosition.z), math.max(ZE_spawnFromPosition.z, ZE_spawnToPosition.z) do
			centerPos.z = z
			for i, uid in pairs(getSpectators(centerPos, width, height, false)) do
				if(isMonster(uid)) then
					doRemoveCreature(uid)
				end
			end
		end
	end
end
 
function onStatsChange(target, cid, changetype, combat, value)
	if((cid and isMonster(cid) and getCreatureName(cid) == "Zombie Event") or (isInRange(getThingPosition(target), ZE_spawnFromPosition, ZE_spawnToPosition) and changetype == STATSCHANGE_HEALTHLOSS and math.abs(value) >= getCreatureHealth(target))) then
		doCreatureAddHealth(target, getCreatureMaxHealth(target))
		loseOnZombieArena(target)
		return false
	end
	return true
end

/data/creaturescripts/scripts/zombie/ondeath.lua

LUA:
function onDeath(cid)
	setZombiesToSpawnCount(getZombiesToSpawnCount() + 2)
	doCreatureSay(cid, "I'll be back!", 19)
	return true
end

/data/creaturescripts/scripts/zombie/onthink.lua

LUA:
function onThink(cid)
	local target = getCreatureTarget(cid)
	if(target ~= 0 and not isPlayer(target)) then
		doRemoveCreature(target)
	end
	return true
end

/data/creaturescripts/scripts/login.lua

LUA:
registerCreatureEvent(cid, "ZombieAttack")


/data/globalevents/scripts/zombie/onstartup.lua

LUA:
function onStartup()
	db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = " .. ZE_isOnZombieArea .. ";")
	doSetStorage(ZE_STATUS, 0)
	doSetStorage(ZE_PLAYERS_NUMBER, ZE_DEFAULT_NUMBER_OF_PLAYERS)
	doSetStorage(ZE_ZOMBIES_TO_SPAWN, 0)
	doSetStorage(ZE_ZOMBIES_SPAWNED, 0)
	addZombiesEventBlockEnterPosition()
	return true
end


/data/globalevents/scripts/zombie/onthink.lua

LUA:
function onThink(interval, lastExecution, thinkInterval)
	if(getStorage(ZE_STATUS) == 2) then
		setZombiesToSpawnCount(getZombiesToSpawnCount()+1)
		local players = getZombiesEventPlayers()
		for i=1, getZombiesToSpawnCount() * 2 do
			if(getZombiesToSpawnCount() > 50 and spawnNewZombie()) then
				setZombiesToSpawnCount(getZombiesToSpawnCount()-1)
			end
		end
	end
	return true
end


/data/lib/zombie_event.lua
LUA:
-- CONFIG
ZE_DEFAULT_NUMBER_OF_PLAYERS = 10
ZE_ACCESS_TO_IGNORE_ARENA = 8
-- POSITIONS
ZE_blockEnterItemPosition = {x= 919, y=1038, z=6}
ZE_enterPosition = {x = 1573, y = 1031, z = 13}
ZE_kickPosition = {x=1000, y=1000, z=7}
ZE_spawnFromPosition = {x = 1464, y = 1029, z = 13}
ZE_spawnToPosition = {x = 1600, y = 1092, z = 13}
-- ITEM IDS
ZE_blockEnterItemID = 1484
-- STORAGES
-- - player
ZE_isOnZombieArea = 34370
-- - global
ZE_STATUS = 34370 -- =< 0 - off, 1 - waiting for players, 2 - is running
ZE_PLAYERS_NUMBER = 10
ZE_ZOMBIES_TO_SPAWN = 5
ZE_ZOMBIES_SPAWNED = 5

-- FUNCTION

function setZombiesEventPlayersLimit(value)
doSetStorage(ZE_PLAYERS_NUMBER, value)
end

function getZombiesEventPlayersLimit()
return getStorage(ZE_PLAYERS_NUMBER)
end

function addPlayerToZombiesArea(cid)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
doTeleportThing(cid, ZE_enterPosition, true)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
if(getPlayerAccess(cid) < ZE_ACCESS_TO_IGNORE_ARENA) then
setPlayerZombiesEventStatus(cid, os.time())
end
end

function kickPlayerFromZombiesArea(cid)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
doTeleportThing(cid, ZE_kickPosition, true)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
setPlayerZombiesEventStatus(cid, 0)
end

function getPlayerZombiesEventStatus(cid)
return getCreatureStorage(cid, ZE_isOnZombieArea)
end

function setPlayerZombiesEventStatus(cid, value)
doCreatureSetStorage(cid, ZE_isOnZombieArea, value)
end

function getZombiesEventPlayers()
local players = {}
for i, cid in pairs(getPlayersOnline()) do
if(getPlayerZombiesEventStatus(cid) > 0) then
table.insert(players, cid)
end
end
return players
end

function getZombiesCount()
return getStorage(ZE_ZOMBIES_SPAWNED)
end

function addZombiesCount()
doSetStorage(ZE_ZOMBIES_SPAWNED, getStorage(ZE_ZOMBIES_SPAWNED)+1)
end

function resetZombiesCount()
doSetStorage(ZE_ZOMBIES_SPAWNED, 0)
end

function getZombiesToSpawnCount()
return getStorage(ZE_ZOMBIES_TO_SPAWN)
end

function setZombiesToSpawnCount(count)
doSetStorage(ZE_ZOMBIES_TO_SPAWN, count)
end

function addZombiesEventBlockEnterPosition()
if(getTileItemById(ZE_blockEnterItemPosition, ZE_blockEnterItemID).uid == 0) then
doCreateItem(ZE_blockEnterItemID, 1, ZE_blockEnterItemPosition)
end
end

function removeZombiesEventBlockEnterPosition()
local item = getTileItemById(ZE_blockEnterItemPosition, ZE_blockEnterItemID)
if(item.uid ~= 0) then
doRemoveItem(item.uid)
end
end

function spawnNewZombie()
local posx = {}
local posy = {}
local posz = {}
local pir = {}
for i=1, 5 do
local posx_tmp = math.random(ZE_spawnFromPosition.x ,ZE_spawnToPosition.x)
local posy_tmp = math.random(ZE_spawnFromPosition.y ,ZE_spawnToPosition.y)
local posz_tmp = math.random(ZE_spawnFromPosition.z ,ZE_spawnToPosition.z)
local pir_tmp = 0
local spec = getSpectators({x=posx_tmp, y=posy_tmp, z=posz_tmp}, 3, 3, false)
if(spec and #spec > 0) then
for z, pid in pairs(spec) do
if(isPlayer(pid)) then
pir_tmp = pir_tmp + 1
end
end
end
posx[i] = posx_tmp
posy[i] = posy_tmp
posz[i] = posz_tmp
pir[i] = pir_tmp
end
local lowest_i = 1
for i=2, 5 do
if(pir[i] < pir[lowest_i]) then
lowest_i = i
end
end
local ret = (type(doCreateMonster("Zombie Event", {x=posx[lowest_i], y=posy[lowest_i], z=posz[lowest_i]}, false)) == 'number')
if(ret) then
addZombiesCount()
end
return ret
end


/data/movements/scripts/zombie/onenter.lua
LUA:
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
	if(not isPlayer(cid)) then
		return true
	end
	if(getPlayerAccess(cid) >= ZE_ACCESS_TO_IGNORE_ARENA) then
		addPlayerToZombiesArea(cid)
	elseif(#getZombiesEventPlayers() < getZombiesEventPlayersLimit() and getStorage(ZE_STATUS) == 1) then
		addPlayerToZombiesArea(cid)
		local players_on_arena_count = #getZombiesEventPlayers()
		if(players_on_arena_count == getZombiesEventPlayersLimit()) then
			addZombiesEventBlockEnterPosition()
			doSetStorage(ZE_STATUS, 2)
			doBroadcastMessage("Zombie Arena Event started.")
		else
			doBroadcastMessage(getCreatureName(cid) .. " has entered a Zombie Arena. We still need " .. getZombiesEventPlayersLimit() - players_on_arena_count .. " players.")
		end
	else
		doTeleportThing(cid, fromPosition, true)
		addZombiesEventBlockEnterPosition()
	end
	return true
end

/data/talkactions/scripts/zombie/onsay.lua
LUA:
function onSay(cid, words, param, channel)
	if(getStorage(ZE_STATUS) ~= 2) then
		local players_on_arena_count = #getZombiesEventPlayers()
		if(param == 'force') then
			if(players_on_arena_count > 0) then
				setZombiesEventPlayersLimit(players_on_arena_count  )
				addZombiesEventBlockEnterPosition()
				doSetStorage(ZE_STATUS, 2)
				doBroadcastMessage("Zombie Arena Event started.")
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Zombies event started.")
			else
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cannot start Zombies event. There is no players on arena.")
			end
		else
			if(param ~= '' and tonumber(param) > 0) then
				setZombiesEventPlayersLimit(tonumber(param))
			end
			removeZombiesEventBlockEnterPosition()
			doSetStorage(ZE_STATUS, 1)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Event started.")
			doPlayerBroadcastMessage(cid, "Zombie Arena Event teleport is opened. We are waiting for " .. getZombiesEventPlayersLimit() - players_on_arena_count .. " players to start.")
		end
	else
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Zombies event is already running.")
	end
	return true
end

/data/creaturescripts/creaturescripts.xml
XML:
<event type="think" name="ZombieThink" event="script" value="zombie/onthink.lua"/>
<event type="statschange" name="ZombieAttack" event="script" value="zombie/onattack.lua"/>
<event type="death" name="ZombieDeath" event="script" value="zombie/ondeath.lua"/>


/data/globalevents/globalevents.xml
XML:
 <globalevent name="ZombieGlobalThink" interval="5" event="script" value="zombie/onthink.lua"/>
	<globalevent name="ZombieGlobalStartup" type="start" event="script" value="zombie/onstartup.lua"/>


/data/movements/movements.xml
XML:
 <movevent type="StepIn" actionid="5555" event="script" value="zombie/onenter.lua"/>



/data/monster/zombie_event.xml
XML:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Zombie Event" nameDescription="an event zombie" race="undead" experience="480" speed="170" manacost="0">
    <health now="20000" max="20000"/>
    <look type="311" corpse="9875"/>
    <targetchange interval="5000" chance="50"/>
    <strategy attack="100" defense="0"/>
    <flags>
        <flag summonable="0"/>
        <flag attackable="1"/>
        <flag hostile="1"/>
        <flag illusionable="0"/>
        <flag convinceable="0"/>
        <flag pushable="0"/>
        <flag canpushitems="1"/>
        <flag canpushcreatures="1"/>
        <flag targetdistance="1"/>
        <flag staticattack="90"/>
        <flag runonhealth="0"/>
    </flags>
    <attacks>
        <attack name="melee" interval="1000" min="-1500" max="-2350"/>
    </attacks>
    <defenses armor="0" defense="0"/>
	<immunities>
		<immunity paralyze="1"/>
		<immunity invisible="1"/>
		<immunity fire="1"/>
		<immunity energy="1"/>
		<immunity poison="1"/>
	</immunities>	
    <voices interval="5000" chance="10">
        <voice sentence="You wont last long!"/>
        <voice sentence="Mmmmh.. braains!"/>
    </voices>
	<script>
		<event name="ZombieThink"/>
		<event name="ZombieDeath"/>
	</script>
    <loot>
 
    </loot>
</monster>


/data/monster/monsters.xml
XML:
<monster name="Zombie Event" file="zombie_event.xml"/>
 
Last edited:
Code:
ZE_spawnFromPosition = {x = 1464, y = 1029, z = 13}
ZE_spawnToPosition = {x = 1600, y = 1092, z = 13}

You know ,your zone are very long or don't edit your position from and topos?
why you need put zone frompos topos and zombies appear in zone
 
I copied a whole swamp city from another map to have zombie event in. thats why its so long! :) does the buildings interfere maybe? i rly want this to work with zombie event because i only have to do a webpage and after that and im done! thank you for respond btw!
 
I copied a whole swamp city from another map to have zombie event in. thats why its so long! :) does the buildings interfere maybe? i rly want this to work with zombie event because i only have to do a webpage and after that and im done! thank you for respond btw!
so what??
edit the frompos and topos according to your map
frompos is the left top corner of the area.. and topos is the right bottom corner of the area
 
XML:
ZE_spawnFromPosition = {x = 1464, y = 1029, z = 13}
ZE_spawnToPosition = {x = 1600, y = 1092, z = 13}

was my frompos & toppos , i changed it to:

XML:
ZE_spawnFromPosition = {x = 1456, y = 1017, z = 13}
ZE_spawnToPosition = {x = 1601, y = 1104, z = 13}

still nothing .. :/ they wont spawn..

- - - Updated - - -

bump
 
Do you have the monster in data/monster/zombie_event.xml?

And also register it here /data/monster/monsters.xml
 
XML:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Zombie Event" nameDescription="an event zombie" race="undead" experience="480" speed="170" manacost="0">
    <health now="20000" max="20000"/>
    <look type="311" corpse="9875"/>
    <targetchange interval="5000" chance="50"/>
    <strategy attack="100" defense="0"/>
    <flags>
        <flag summonable="0"/>
        <flag attackable="1"/>
        <flag hostile="1"/>
        <flag illusionable="0"/>
        <flag convinceable="0"/>
        <flag pushable="0"/>
        <flag canpushitems="1"/>
        <flag canpushcreatures="1"/>
        <flag targetdistance="1"/>
        <flag staticattack="90"/>
        <flag runonhealth="0"/>
    </flags>
    <attacks>
        <attack name="melee" interval="1000" min="-1500" max="-2350"/>
    </attacks>
    <defenses armor="0" defense="0"/>
	<immunities>
		<immunity paralyze="1"/>
		<immunity invisible="1"/>
		<immunity fire="1"/>
		<immunity energy="1"/>
		<immunity poison="1"/>
	</immunities>	
    <voices interval="5000" chance="10">
        <voice sentence="You wont last long!"/>
        <voice sentence="Mmmmh.. braains!"/>
    </voices>
	<script>
		<event name="ZombieThink"/>
		<event name="ZombieDeath"/>
	</script>
    <loot>
 
    </loot>
</monster>

XML:
<monster name="Zombie Event" file="zombie_event.xml"/>

behöver verkligen hjälpen cornex! / rly need the help! thx
 
Mind sharing how you solved it?? I cant get it to work in mine and I have edited the spawn pos to correct locations. When player enters, nothing appears
 
Back
Top