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

GlobalEvent +[Creaturescript+Movement] Zombie event!

Status
Not open for further replies.
If you use 0.3.6 you've done something wrong. It works perfect for me. If you use 0.4 I can't help you much, as I said earlier.
 
Could it be possible to make people that can't use spells/runes? They are blocking against walls and zoombies can't pass...
Also the event finished and keep appearing zombies :S
Any command to stop the event?
 
Could it be possible to make people that can't use spells/runes? They are blocking against walls and zoombies can't pass...
Also the event finished and keep appearing zombies :S
Add creature event like:
Lua:
local fromPosition = {x=1,y=1,z=1}
local toPosition = {x=5,y=5,z=5}
function onCast(cid, target)
return not isInRange(getThingPosition(cid), fromPosition, toPosition)
end
in .xml type of event is "cast", dont forget to register it in login.lua
It should block spells, NOT TESTED!
If you want block only magic walls you should check if target is item (when use spell by battle on player they target will be player).
example:
(it will block all area runes [GFB etc.])
Lua:
return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
of course.. NOT TESTED
 
Last edited:
If you use 0.3.6 you've done something wrong. It works perfect for me. If you use 0.4 I can't help you much, as I said earlier.

I did not do anything wrong man:S could you send me a link to the server you are using?
 
Hey i got this error in console:
Code:
[28/02/2011 16:47:48] [Error - CreatureScript Interface] 
[28/02/2011 16:47:48] data/creaturescripts/scripts/zombieevent/creaturescript.lua:onStatsChange
[28/02/2011 16:47:48] Description: 
[28/02/2011 16:47:48] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)
[28/02/2011 16:47:48] stack traceback:
[28/02/2011 16:47:48] 	data/lib/032-position.lua:2: in function 'isInArea'
[28/02/2011 16:47:48] 	...eaturescripts/scripts/zombieevent/creaturescript.lua:17: in function <...eaturescripts/scripts/zombieevent/creaturescript.lua:15>
 
So i tried the MOD but i got this error: [28/02/2011 20:10:16] > Loading zombie.xml...[Error - ScriptingManager::loadFromXml] Cannot load mod mods/zombie.xml
[28/02/2011 20:10:16] Line: 180, Info: StartTag: invalid element name


[28/02/2011 20:10:16] failed!

what's wrong?
 
Add creature event like:
Lua:
local fromPosition = {x=1,y=1,z=1}
local toPosition = {x=5,y=5,z=5}
function onCast(cid, target)
return not isInRange(getThingPosition(cid), fromPosition, toPosition)
end
in .xml type of event is "cast", dont forget to register it in login.lua
It should block spells, NOT TESTED!
If you want block only magic walls you should check if target is item (when use spell by battle on player they target will be player).
example:
(it will block all area runes [GFB etc.])
Lua:
return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
of course.. NOT TESTED

Could you implement it (block all runes) on the script please, because I can't get it :S

Where is fixed?

I fixed my bug, just edited post.
 
mod version (don't tested!):

Code:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Zombie Event" version="1.00" author="kawon" contact="otland.net" enabled="yes">
    <description>
Scripts by Gatupojk
Mods by Kawon
    </description>
<globalevent name="zombieevent" time="15:00" event="buffer"><=!=[=C=D=A=T=A=[
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 = 1135, y = 1077, z = 3, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 1190, y = 1076, 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 = 20, -- 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 = 1186, y = 1072, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1195, y = 1081, z = 7}, -- bottom right cornor of the playground
    }

function onTimer()
    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		
    ]=]=></globalevent>
	
<movevent type="StepIn" actionid="2000" event="buffer"><=!=[=C=D=A=T=A=[
local config = {
    playerCount = 2001, -- Global storage for counting the players in the event
    maxPlayers = 15, -- Max players who can participate
    
    }
    
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getGlobalStorageValue(config.playerCount) < config.maxPlayers then
        setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)+1)
        if getGlobalStorageValue(config.playerCount) == config.maxPlayers then
            doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(config.playerCount) .. " players]! The event will soon start.")
        else    
            doBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(config.playerCount) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)
        end    
    else
        addEvent(tpBack, 1000, cid, fromPosition)
        doPlayerSendCancel(cid, "The event is full. There is already " .. config.maxPlayers .. " players participating in the quest.")
        return false
    end
    print(getStorage(config.playerCount) .. " Players in the zombie event.")
    return true
end

function tpBack(cid, fromPosition)
    doTeleportThing(cid, fromPosition, true)
    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
end		
    ]=]=></movevent>
<event type="statschange" name="zombieevent" event="script"><=!=[=C=D=A=T=A=[
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}, -- second collumn(count) 0 if you don't want money to be used. or a stackable item you want more than 1 of.
    
    -- Should be same as in the globalevent!
    -- The zombies will spawn randomly inside this area
    fromPosition = {x = 1186, y = 1072, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1195, y = 1081, 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
    ]=]=></event>

	        <event type="login" name="zombieRegister" event="script"><=!=[=C=D=A=T=A=[
        function onLogin(cid)
	registerCreatureEvent(cid, "zombieevent")
        return true
end]=]=></event>
</mod>


If I helped you please REP me :)


Hey can u tell me please how i start this event without time:15:00 like the command by raids : /raid raidname..
can u tell me what to write to start the event manuell ?
 
Add creature event like:
Lua:
local fromPosition = {x=1,y=1,z=1}
local toPosition = {x=5,y=5,z=5}
function onCast(cid, target)
return not isInRange(getThingPosition(cid), fromPosition, toPosition)
end
in .xml type of event is "cast", dont forget to register it in login.lua
It should block spells, NOT TESTED!
If you want block only magic walls you should check if target is item (when use spell by battle on player they target will be player).
example:
(it will block all area runes [GFB etc.])
Lua:
return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
of course.. NOT TESTED

Could you implement it (block all runes) on the script please, because I can't get it :S

Where is fixed?

I fixed my bug, just edited post.
 
[28/02/2011 02:34:43] [Warning - Event::loadScript] Event onThink not found (data/globalevents/scripts/zombie event/zombie.lua) Help me D;
 
How do i remove instant dead from the script.. its pretty good but could be usefull to make other events ^_^ , now everybody dies who touches an creature no matter what creature there is in that zone.. even if its a spider/rat XD
 
Add creature event like:
Lua:
local fromPosition = {x=1,y=1,z=1}
local toPosition = {x=5,y=5,z=5}
function onCast(cid, target)
return not isInRange(getThingPosition(cid), fromPosition, toPosition)
end
in .xml type of event is "cast", dont forget to register it in login.lua
It should block spells, NOT TESTED!
If you want block only magic walls you should check if target is item (when use spell by battle on player they target will be player).
example:
(it will block all area runes [GFB etc.])
Lua:
return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
of course.. NOT TESTED

Could you implement it (block all runes) on the script please, because I can't get it :S
 
In my serv i got like an event.. but zombies are 100% resistant to ice/fire/energy, so that you can only kill them with SD's also modified HP.. higher hp.. stronger dmg, and loot upgradable items.. so you upgrade your eq..
+ atm i dont use this script for the event :S only raid.. cause with this script you really dead in 1 hit if touch you.. i would love to see such script without instant death tho ^^ i just got everything fixed. but need to find the right event script.. T_T
 
This script is so fucking awesome

But i got a couple questions:

-What if i want it to give goblet + cc + random item (i mean some cool armor or whatever i want it to give)???
-Is it possible to make it summon some kind of zombie boss which only spawns every 1min???
-How do i make it manual activation by command like /raid raidname instead of timer???

Thanks in advice.
Rep++ for you
 
Status
Not open for further replies.
Back
Top