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

Lua Zombie script problem

Eduardo170

Well-Known Member
Joined
Jan 7, 2014
Messages
422
Solutions
3
Reaction score
66
Location
Caracas, Venezuela
Hello community. I have a problem with this scripts, first i use this distro

Code:
[13/8/2017 18:27:45] The OTX Server Version: (2.9) - Codename: (VANXI)



If I change
Code:
function onTime()
To
Code:
function onTimer()
I get this error
Code:
[Error - Event::checkScript] Event onTime not found (data/globalevents/scripts/Evo/globalevent_zombie.lua)



If i change to

Code:
function onTime()
I get this error
Code:
[13/8/2017 18:47:0] [Error - GlobalEvent Interface]
[13/8/2017 18:47:0] data/globalevents/scripts/Evo/globalevent_zombie.lua:onTime
[13/8/2017 18:47:0] Description:
[13/8/2017 18:47:0] data/globalevents/scripts/Evo/globalevent_zombie.lua:28: attempt to index global 'get' (a nil value)
[13/8/2017 18:47:0] stack traceback:
[13/8/2017 18:47:0]     data/globalevents/scripts/Evo/globalevent_zombie.lua:28: in function <data/globalevents/scripts/Evo/globalevent_zombie.lua:21>
[13/8/2017 18:47:0] [Error - GlobalEvents::timer] Couldn't execute event: zombie_event



Script
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 = 2150, -- Action id of the teleport needed for the movement script
    teleportPosition = {x = 1002, y = 995, z = 7, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 1190, y = 1076, z = 7}, -- Where the teleport will take you
    stonePosition = {x = 1002, y = 995, z = 7, stackpos = 1},
    stoneId = 1353,
    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 = "Dead Walker", -- 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 = 1028, y = 703, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1046, y = 721, z = 7}, -- bottom right cornor of the playground
    }
function onTime()
    local getstone = getThingfromPos(config.stonePosition)
    if getstone.itemid == config.stoneId then
        doRemoveItem(getstone.uid, 1)
    end
    local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
    doItemSetAttribute(tp, "aid", config.teleportActionId)
    doRemoveItem(get.uid, 1)
    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))
return true
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
 
Last edited:
Lua:
doRemoveItem(get.uid, 1)

-- get <--- --> getstone

doRemoveItem(getstone.uid, 1)

Now the script
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 = 2150, -- Action id of the teleport needed for the movement script
    teleportPosition = {x = 1002, y = 995, z = 7, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 1190, y = 1076, z = 7}, -- Where the teleport will take you
    stonePosition = {x = 1002, y = 995, z = 7, stackpos = 1},
    stoneId = 1353,
    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 = "Dead Walker", -- 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 = 1028, y = 703, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1046, y = 721, z = 7}, -- bottom right cornor of the playground
    }
function onTime()
    local removestone = getThingfromPos(config.stonePosition)
    if removestone.itemid == config.stoneId then
        doRemoveItem(removestone.uid, 1)
    end
    local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
    doItemSetAttribute(tp, "aid", config.teleportActionId)
    doRemoveItem(get.uid, 1)
    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
Error
Code:
[13/8/2017 19:51:0] [Error - GlobalEvent Interface]
[13/8/2017 19:51:0] data/globalevents/scripts/Evo/globalevent_zombie.lua:onTime
[13/8/2017 19:51:0] Description:
[13/8/2017 19:51:0] data/globalevents/scripts/Evo/globalevent_zombie.lua:28: attempt to index global 'get' (a nil value)
[13/8/2017 19:51:0] stack traceback:
[13/8/2017 19:51:0]     data/globalevents/scripts/Evo/globalevent_zombie.lua:28: in function <data/globalevents/scripts/Evo/globalevent_zombie.lua:21>
[13/8/2017 19:51:0] [Error - GlobalEvents::timer] Couldn't execute event: zombie_event
 
Last edited:
Now the script
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 = 2150, -- Action id of the teleport needed for the movement script
    teleportPosition = {x = 1002, y = 995, z = 7, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 1190, y = 1076, z = 7}, -- Where the teleport will take you
    stonePosition = {x = 1002, y = 995, z = 7, stackpos = 1},
    stoneId = 1353,
    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 = "Dead Walker", -- 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 = 1028, y = 703, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1046, y = 721, z = 7}, -- bottom right cornor of the playground
    }
function onTime()
    local removestone = getThingfromPos(config.stonePosition)
    if removestone.itemid == config.stoneId then
        doRemoveItem(removestone.uid, 1)
    end
    local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
    doItemSetAttribute(tp, "aid", config.teleportActionId)
    doRemoveItem(get.uid, 1)
    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
Error
Code:
[13/8/2017 19:51:0] [Error - GlobalEvent Interface]
[13/8/2017 19:51:0] data/globalevents/scripts/Evo/globalevent_zombie.lua:onTime
[13/8/2017 19:51:0] Description:
[13/8/2017 19:51:0] data/globalevents/scripts/Evo/globalevent_zombie.lua:28: attempt to index global 'get' (a nil value)
[13/8/2017 19:51:0] stack traceback:
[13/8/2017 19:51:0]     data/globalevents/scripts/Evo/globalevent_zombie.lua:28: in function <data/globalevents/scripts/Evo/globalevent_zombie.lua:21>
[13/8/2017 19:51:0] [Error - GlobalEvents::timer] Couldn't execute event: zombie_event
you changed the variable name.
on line 28 change get.uid to removestone.uid
 
This script, not working, the teleport does no create now.
Teleport create on MagicEffect with name "Zombie"

Image:
QaVrDCp.jpg


Actual
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 = 2150, -- Action id of the teleport needed for the movement script
    teleportPosition = {x = 1002, y = 995, z = 7, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 1190, y = 1076, z = 7}, -- Where the teleport will take you
    stonePosition = {x = 1002, y = 995, z = 7, stackpos = 1},
    stoneId = 1353,
    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 = "Dead Walker", -- 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 = 1028, y = 703, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1046, y = 721, z = 7}, -- bottom right cornor of the playground
    }
function onTime()
    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, 1)
    setGlobalStorageValue(config.zombieCount, 1)
    addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
    print(getGlobalStorageValue(2001))
   return true
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

bump

bump
 
Last edited:
Back
Top