Serginov
Onkonkoronkonk
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.
Add creature event like: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
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
return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
Fixed.
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.
[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>
Add creature event like:
in .xml type of event is "cast", dont forget to register it in login.luaLua: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
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.])
of course.. NOT TESTEDLua:return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
Where is fixed?
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
Add creature event like:
in .xml type of event is "cast", dont forget to register it in login.luaLua: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
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.])
of course.. NOT TESTEDLua:return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))
Where is fixed?
[28/02/2011 02:34:43] [Warning - Event::loadScript] Event onThink not found (data/globalevents/scripts/zombie event/zombie.lua) Help me D;
Add creature event like:
in .xml type of event is "cast", dont forget to register it in login.luaLua: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
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.])
of course.. NOT TESTEDLua:return not (target and isInRange(getThingPosition(cid), fromPosition, toPosition) and not isCreature(target))