• 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!

Zombie Infection Event

patriciou

Member
Joined
Dec 26, 2009
Messages
180
Reaction score
6
Hey i got an ZOmbie infection Event but The event is starting i get this error in my Console :

PHP:
[Error - GlobalEvents::think] Couldn't execute event: zombieevent




REP ++ For fixing It :) Thanksss xx
 
Last edited:
My globalevents Script :




PHP:
local config = {
    playerCount = 2001, -- Global storage for counting the players left/entered in the event
    zombieCount = 2002, -- Global storage for counting the zombies in the event
    teleportActionId = 2000, -- Action id of the teleport needed for the movement script
    teleportPosition = {x = 273, y = 1330, z = 6, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 217, y = 1556, z = 7}, -- Where the teleport will take you
    teleportId = 1387, -- Id of the teleport
    timeToStartEvent = 5, -- Minutes, after these minutes the teleport will be removed and the event will be declared started
    timeBetweenSpawns = 30, -- Seconds between each spawn of zombie
    zombieName = "event zombie", -- Name of the zombie that should be summoned
    playersNeededToStartEvent = 5, -- Players needed before the zombies can spawn.
 
    -- Should be the same as in the creaturescript!
    -- The zombies will spawn randomly inside this area
    fromPosition = {x = 215, y = 1550, z = 7}, -- top left cornor of the playground
    toPosition = {x = 249, y = 1566, z = 7}, -- bottom right cornor of the playground
    }
 
function onThink()
    local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
    doItemSetAttribute(tp, "aid", config.teleportActionId)
    doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
    setGlobalStorageValue(config.playerCount, 0)
    setGlobalStorageValue(config.zombieCount, 0)
    addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
    print(getGlobalStorageValue(2001))
end
 
function startEvent()
    local get = getThingfromPos(config.teleportPosition)
    if get.itemid == config.teleportId then
        doRemoveItem(get.uid, 1)
    end
 
    local fromp, top = config.fromPosition, config.toPosition
 
    if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
        doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)
 
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    getPlayers = getThingfromPos(areapos)
                    if isPlayer(getPlayers.uid) then
                        doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")
                    end
                end
            end
        end
    else
        doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
        for x = fromp.x, top.x do
            for y = fromp.y, top.y do
                for z = fromp.z, top.z do
                    areapos = {x = x, y = y, z = z, stackpos = 253}
                    getPlayers = getThingfromPos(areapos)
                    if isPlayer(getPlayers.uid) then
                        doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
                        doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
                    end
                end
            end
        end
    end
end
 
function spawnZombie()
    if getGlobalStorageValue(config.playerCount) >= 2 then
        pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}
        doSummonCreature(config.zombieName, pos)
        doSendMagicEffect(pos, CONST_ME_MORTAREA)
        setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)
        doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
    end
end
 
Code:
local config = {
    playerCount        = 2001, -- Global storage for counting the players left/entered in the event
    zombieCount        = 2002, -- Global storage for counting the zombies in the event
    teleportActionId   = 2000, -- Action id of the teleport needed for the movement script
    teleportId         = 1387, -- Id of the teleport
    teleportPosition   = { x = 273, y = 1330, z = 6, stackpos = 1 }, -- Where the teleport will be created
    teleportToPosition = { x = 217, y = 1556, z = 7 }, -- Where the teleport will take you
    timeToStartEvent   = 5, -- Minutes, after these minutes the teleport will be removed and the event will be declared started
    timeBetweenSpawns  = 30, -- Seconds between each spawn of zombie
    zombieName         = "event zombie", -- Name of the zombie that should be summoned
    playersNeededToStartEvent = 5, -- Players needed before the zombies can spawn.
 
    -- Should be the same as in the creaturescript!
    -- The zombies will spawn randomly inside this area
    fromPosition = { x = 215, y = 1550, z = 7 }, -- top left cornor of the playground
    toPosition   = { x = 249, y = 1566, z = 7 }, -- bottom right cornor of the playground
    }
 
function onThink()
    local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
    doItemSetAttribute(tp, "aid", config.teleportActionId)
    doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
    doSetStorage(config.playerCount, 0)
    doSetStorage(config.zombieCount, 0)
    addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
    print(getStorage(2001))
end
 
function startEvent()
    local get = getThingfromPos(config.teleportPosition) ; 
    if get.itemid == config.teleportId then doRemoveItem(get.uid, 1) ; end ; 
 
    local fromPosition, toPosition = config.fromPosition, config.toPosition
    if getStorage(config.playerCount) >= config.playersNeededToStartEvent then
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
        doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)
 
        for _x = fromPosition.x, toPosition.x do
            for _y = fromPosition.y, toPosition.y do
                for _z = fromPosition.z, toPosition.z do
                    if isPlayer(getThingfromPos({ x = _x, y = _y, z = _z, stackpos = 253 }).uid) then
                        doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")
                    end
                end
            end
        end
    else
        doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
        for _x = fromPosition.x, toPosition.x do
            for _y = fromPosition.y, toPosition.y do
                for _z = fromPosition.z, toPosition.z do
                    if isPlayer(getThingfromPos({ x = _x, y = _y, z = _z, stackpos = 253 }).uid) then
                        doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
                        doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
                    end
                end
            end
        end
    end
    return true ; 
end
 
function spawnZombie()
    if getStorage(config.playerCount) >= 2 then
        pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}
        doSummonCreature(config.zombieName, pos)
        doSendMagicEffect(pos, CONST_ME_MORTAREA)
        doSetStorage(config.zombieCount, getStorage(config.zombieCount)+1)
        doBroadcastMessage("A zombie has spawned! There is currently " .. getStorage(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)
        addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
    end
end

So umm, did you get anything else in the error message, because that's really kind of vague... What happens if you turn it into a talkaction? (Just for testing purposes)
 
Still get the Same Error But...

Like 2h ago i read that to remove that Error for this zombie event i need to ass "return TRUE to all functions" if somebody could do that for me that
would be brilliant and :

Rep++ For help
 
Thankss that solved the Problem but THere is another one .. :/

Now when the event has started and the zombies spawn, when they try to hit the Player then i get this error in the Console:

PHP:
[Error - CreatureScript Interface]
data/creaturescripts/scripts/zombie event/zombies.lua:onStatsChange
Description:
data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)
stack traceback:
        data/lib/032-position.lua:2: in function 'isInArea'
        ...ata/creaturescripts/scripts/zombie event/zombies.lua:17: in function
<...ata/creaturescripts/scripts/zombie event/zombies.lua:15>


and what it ment to do is that when the zombie touches a Player then the player looses and get teleported back to temple.

/creaturescripts/scripts/zombie event/zombies.lua

PHP:
local config = {
    playerCount = 2001, -- Global storage for counting the players left/entered in the event
 
    goblet = 5805, -- id of the gold goblet you'll get when finishing the event.
    rewards = {2195, 2152, 2160}, -- You will get this +  a gold goblet with your name on.
    --        {moneyId, count, using? 1 for using moneyReward, 0 for not using.}
    moneyReward = {2160, 10, 1},
 
    -- Should be same as in the globalevent!
    -- The zombies will spawn randomly inside this area
	  fromPosition = {x = 215, y = 1550, z = 7}, -- top left cornor of the playground
    toPosition = {x = 249, y = 1566, z = 7}, -- bottom right cornor of the playground
    }
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isMonster(attacker) then
        if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
            if getGlobalStorageValue(config.playerCount) >= 2 then
                doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED)
                local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))
                doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
                doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
                setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)
            elseif getGlobalStorageValue(config.playerCount) == 1 then
                if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
                    doBroadcastMessage(getPlayerName(cid) .. " won the Zombie event! Congratulations!", MESSAGE_STATUS_WARNING)
                    local goblet = doPlayerAddItem(cid, config.goblet, 1)
                    doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(cid) .. " for winning the Zombie event.")
                    local corpse = doCreateItem(3058, 1, getPlayerPosition(cid))
                    doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
                    for _,items in ipairs(config.rewards) do
                        doPlayerAddItem(cid, items, 1)
                    end
                    if config.moneyReward[3] == 1 then
                        doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
                    end
                end
 
                for x = config.fromPosition.x, config.toPosition.x do
                    for y = config.fromPosition.y, config.toPosition.y do
                        for z = config.fromPosition.z, config.toPosition.z do
                            areapos = {x = x, y = y, z = z, stackpos = 253}
                            getMonsters = getThingfromPos(areapos)
                            if isMonster(getMonsters.uid) then
                                doRemoveCreature(getMonsters.uid)
                            end
                        end
                    end
                end
            end
            return false
        end
    end
return true
end

- - - Updated - - -

REPP ++ For Help.

- - - Updated - - -

And my 032-positions.lua

PHP:
function isInRange(pos, fromPosition, toPosition)
	return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)
end

function getDistanceBetween(firstPosition, secondPosition)
	local x, y = math.abs(firstPosition.x - secondPosition.x), math.abs(firstPosition.y - secondPosition.y)
	local diff = math.max(x, y)
	if(firstPosition.z ~= secondPosition.z) then
		diff = diff + 9 + 6
	end

	return diff
end

function getDirectionTo(pos1, pos2)
	local dir = NORTH
	if(pos1.x > pos2.x) then
		dir = WEST
		if(pos1.y > pos2.y) then
			dir = NORTHWEST
		elseif(pos1.y < pos2.y) then
			dir = SOUTHWEST
		end
	elseif(pos1.x < pos2.x) then
		dir = EAST
		if(pos1.y > pos2.y) then
			dir = NORTHEAST
		elseif(pos1.y < pos2.y) then
			dir = SOUTHEAST
		end
	else
		if(pos1.y > pos2.y) then
			dir = NORTH
		elseif(pos1.y < pos2.y) then
			dir = SOUTH
		end
	end
	return dir
end

function getCreatureLookPosition(cid)
	return getPosByDir(getThingPos(cid), getCreatureLookDirection(cid))
end

function getPosByDir(fromPosition, direction, size)
	local n = size or 1

	local pos = fromPosition
	if(direction == NORTH) then
		pos.y = pos.y - n
	elseif(direction == SOUTH) then
		pos.y = pos.y + n
	elseif(direction == WEST) then
		pos.x = pos.x - n
	elseif(direction == EAST) then
		pos.x = pos.x + n
	elseif(direction == NORTHWEST) then
		pos.y = pos.y - n
		pos.x = pos.x - n
	elseif(direction == NORTHEAST) then
		pos.y = pos.y - n
		pos.x = pos.x + n
	elseif(direction == SOUTHWEST) then
		pos.y = pos.y + n
		pos.x = pos.x - n
	elseif(direction == SOUTHEAST) then
		pos.y = pos.y + n
		pos.x = pos.x + n
	end

	return pos
end

function doComparePositions(pos, posEx)
	return pos.x == posEx.x and pos.y == posEx.y and pos.z == posEx.z
end

function getArea(pos, rangeX, rangeY)
	local t = {}
	for i = (pos.x - rangeX), (pos.x + rangeX) do
		for j = (pos.y - rangeY), (pos.y + rangeY) do
			table.insert(t, {x = i, y = j, z = pos.z})
		end
	end

	return t
end
 
Examine the first error:
learn to decyhper what the messages are telling you
data/lib/032-position.lua:2:
this means /this/file.ext : line_number :

attempt to index global 'position' (a nil value)
this means something is trying to access a subvalue of a table that doesn't exist, a table called position

in function 'isInArea'
this is the calling function that is raising the error.


Code:
function isInRange([COLOR=#0000ff]pos[/COLOR], fromPosition, toPosition)
         return ([COLOR=#ff0000][B]position[/B][/COLOR].x >= fromPosition.x and [COLOR=#ff0000][B]position[/B][/COLOR].y >= fromPosition.y and [COLOR=#ff0000][B]position[/B][/COLOR].z >= fromPosition.z and [COLOR=#ff0000][B]position[/B][/COLOR].x <= toPosition.x and [COLOR=#ff0000][B]position[/B][/COLOR].y <= toPosition.y and [COLOR=#ff0000][B]position[/B][/COLOR].z <= toPosition.z)
end

The problem has been made obvious, neh? So has the solution.
 
Last edited:
Mario died because he only ate mush. Add the room, and he yet may live.


I AM A
function
I AM CALLED
isInRange
MY PARAMETERS ARE
(pos, fromPosition, toPosition)
I GIVE FEEDBACK
return
IF... AHH!! WHAT THE FUCK is position!!!
if (position.x
ITS NOT ONE OF MY PARAMETERS!!!
MY PARAMETERS ARE pos, fromPosition, toPosition
I DON'T KNOW WHAT THIS position SHIT IS!
ABORT ABORT!!
NOT EVEN EVALUATED:
>= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)
NEVER GONNA MAKE IT THIS FAR:
end





Get it yet? get rid of the blue.... perhaps make it red?

Read your first error message again... READ IT! Don't just always come here and regurgitate it and expect someone else to fix it for you.

I'll make it fucking funny, just so you may get it
[Error - CreatureScript Interface]
data/creaturescripts/scripts/zombie event/zombies.lua:eek:nStatsChange
Description:
data/lib/032-position.lua:2: attempt to index global 'tap_that_ass' (a nil value)
stack traceback:
data/lib/032-position.lua:2: in function 'isInArea'
...ata/creaturescripts/scripts/zombie event/zombies.lua:17: in function
<...ata/creaturescripts/scripts/zombie event/zombies.lua:15>
function isInRange(forgot_her_birthday, fromPosition, toPosition)
return (tap_that_ass.x >= fromPosition.x and 'tap_that_ass.y >= fromPosition.y and 'tap_that_ass.z >= fromPosition.z and 'tap_that_ass.x <= toPosition.x and 'tap_that_ass.y <= toPosition.y and 'tap_that_ass.z <= toPosition.z)
end

THE ONLY THINGS IN THE WORLD YOU KNOW ARE forgot_her_birthday, fromPosition, toPosition... you don't know this tap_that_ass.
 
Last edited:
Back
Top