Dj Pacos Admin
Mensajes : 169 Puntos : 294 Reputación : 56 Fecha de inscripción : 01/05/2011 Edad : 31
| Tema: [GLOBALEVENT] Zombie Event Jue Mayo 05, 2011 12:05 pm | |
| Se abre un teleport por 5 minutos y el que quiere entrar a la competencia entra a este. Los players son teleportados a una zona que tu elijas. NOTA: La zona debe ser NO-PVP y NO-LOGOUT Luego de que pasan los 5 minutos comienzan a aparecer zombies en dicha zona y los players que sean tocados son devueltos al templo, el ultimo player que quede gana una recompensa! 1. Se van a Data/ Globalevents / scripts. Aqui en esta carpeta copian un archivo .lua y le cambian el nombre a " zombieevent" y pegan esto dentro: - Código:
-
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}, -- Coordenadas donde el teleport sera creado teleportToPosition = {x = 1190, y = 1076, z = 7}, -- Coordenadas del teleport a donde el teleport k aparece te lllevara teleportId = 1387, -- Id of the teleport timeToStartEvent = 5, -- Despues de estos minutos el teleport sera serrado y el evento empezara timeBetweenSpawns = 20, -- Segundos k tardaran cada uno de los zombies para aparecer zombieName = "event zombie", -- nombre del monstruo k sera invocado playersNeededToStartEvent = 5, -- Players needed before the zombies can spawn. -- Estas coordenadas deben ser exactamente las mismas k en Movement! -- Los zombies seran invocados aleatoriamente en esta area fromPosition = {x = 1186, y = 1072, z = 7}, -- ezkierda arriba toPosition = {x = 1195, y = 1081, z = 7}, -- derecha abajo estas 2 coordenadas izkierda y derecha forman un cuadrado no sean Loquendos y esto es lo ultimo por editar aki }
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
2. Ahora se van a Data / Movements /scripts. Aqui lo mismo de siempre COPIAN un .lua y le ponen el nombre de " zombieevent" y le pegan esto dentro: - Código:
-
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
3. Ahora vamos a Data / Creaturescripts / scripts. Otra vez copian nombran " zombieevent" y pegan esto dentro: - Código:
-
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. -- Estas coordenadas deben ser exactamente las misma del script en blobal event! -- Los zombies seran invocados aleatoriamente en esta coordenada fromPosition = {x = 1186, y = 1072, z = 7}, -- supongo k ya saben como es esto 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
En este script de arriba que acabamos de poner donde dice: rewards = {2195, 2152, 2160} yo le elimine las 2 primeras recompenzas que son Boots of Haste y Platinum coin, Le dejé el 2160 por que son Crystal Coins. Donde dice: moneyReward = {2160, 10, 1} Ahi pueden cambiar la cantidad de Crystal Coins que ganará el ultimo player que quede, {2160 = el Id del item que ganará osea Crystal Coins, 10 = cantidad de Crystal Coins, 1 = activado y 0 = Desactivado} Yo lo puse asi moneyReward = {2160, 50, 1} 4. Luego en Creaturescripts/scripts/login.lua copian esta linea abajo de los registers: - Código:
-
registerCreatureEvent(cid, "zombieevent")
5. Ahora se van a Data / Global Event y abren el archivo globalevent.xml y pegan esto: - Código:
-
<globalevent name="zombieevent" interval="xxx" event="script" value="zombieevent.lua"/>
Donde dice interval="xxx" xxx = el tiempo que se tomará el evento para ejecutarce, 300 equivale a 5 minutos. 6. Ahora van Data / Movement y abren el archivo movement.xml y pegan: - Código:
-
<movevent type="StepIn" actionid="2000" event="script" value="zombieevent.lua"/>
7. Ahora van a Data / CreatureScript y abren el archivo creaturescript.xml y pegan esto dentro: - Código:
-
<event type="statschange" name="zombieevent" event="script" value="zombieevent.lua"/>
8. Ahora se van a Data / Monsters y copian un archivo .lua y le cambian el nombre a "Event Zombie" y dentro le pegan esto: - Código:
-
<?xml version="1.0" encoding="UTF-8"?> <monster name="Event Zombie" nameDescription="an event zombie" race="undead" experience="280" speed="100" manacost="0"> <health now="500" max="500"/> <look type="311" corpse="9875"/> <targetchange interval="5000" chance="50"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" min="-350" max="-350"/> </attacks> <defenses armor="15" defense="10"/> <immunities> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> <voice sentence="You wont last.. long!"/> <voice sentence="Mmmmh.. braains!"/> <voice sentence="Your... time is over!"/> <voice sentence="Where are you.. going!"/> </voices> <loot> <item id="2148" countmax="1" chance="100000"/><!-- gold coin --> </loot> </monster>
9. Ahora dentro de monsters.xml pegan esto: - Código:
-
<monster name="Event Zombie" file="Event Zombie.xml"/>
Eso seria todo! Perdon por el mega post pero creo que es un event muy divertido y vale la pena! Ahora algunas imagenes: De aqui se pueden descargar el mapa que se ve en las imagenes: http://www.speedyshare.com/files/27615761/Arena.rar Eso seria todo! Espero que a alguien le interese y no me haya hecho el esfuerzo por nada Creo que me meresco un poquito de repp+ Creditos: 70% Gatupojk 30% kudzu1988 | |
|