Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0" encoding="UTF-8"?>
- <mod name="Zombie Event" version="1.00" author="kawon" contact="otland.net" enabled="no">
- <description>
- Scripts by Gatupojk
- Mods by Kawon
- </description>
- <globalevent name="zombieevent" interval="36000" event="script"><![CDATA[
- local config = {
- zombieCount = 2002, -- Global storage for counting the zombies in the event
- active = 4444,
- timeToStartEvent = 1, -- 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 = "Zombie", -- Name of the zombie that should be summoned
- playersNeededToStartEvent = 1, -- 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 = 73, y = 135, z = 9}, -- top left cornor of the playground
- toPosition = {x = 78, y = 139, z = 9}, -- bottom right cornor of the playground
- }
- function onThink()
- doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes!!", MESSAGE_STATUS_WARNING)
- setGlobalStorageValue(config.zombieCount, 0)
- setGlobalStorageValue(config.active, 2)
- addEvent(startEvent, config.timeToStartEvent * 1000 * 10)
- print(getGlobalStorageValue(2001))
- end
- function startEvent()
- 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>
- <event type="statschange" name="zombieevent" event="script"><![CDATA[
- local config = {
- playerCount = 3333, -- 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 = 73, y = 135, z = 9}, -- top left cornor of the playground
- toPosition = {x = 78, y = 139, z = 9}, -- 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="buffer"><![CDATA[
- registerCreatureEvent(cid, "zombieevent")
- ]]></event>
- </mod>
Advertisement
Add Comment
Please, Sign In to add comment