Ir para conteúdo

fabao

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    fabao deu reputação a Smart Maxx em [GlobalEvents] Perfect Zombie Event 100% automatico   
    Primeiramente o evento foi testado num servidor 8.6, TFS 0.4, sem apresentar nenhum problema.
     
     
     
     
    Em data/creaturescripts/scripts  crie o arquivo zombieevent.lua :
     
    local config = {     playerCount = 2001, -- Storage dos players que entram e sai do evento          goblet = 5805, -- Troféu que vai pro vencedor do evento     rewards = {2195, 2152, 2160}, -- Recompensas.            moneyReward = {2160, 10, 1}, -- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}          -- Area que o zumbi vai spawnar     fromPosition = {x = 543, y = 578, z = 7}, -- top de fromPosition até     toPosition = {x = 577, y = 600, z = 7} -- em baixo toPostion     } 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 Na mesma pasta  em login.lua antes do ultimo return true adicione :
    registerCreatureEvent(cid, "zombieevent") Agora em data/creaturescripts adicione em creturescripts.XML :
    <!-- ZOMBIE EVENT -->    <event type="statschange" name="zombieevent" event="script" value="zombieevent.lua"/> Agora vamos em data/monster crie uma pasta com o nome ZombieEvent e dentro dessa pasta crie o arquivo chamado event zombie.XML :
    <?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="-35000" max="-35000"/>     </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!"/>     </voices>     <loot>         <item id="2148" countmax="1" chance="100000"/><!-- gold coin -->     </loot> </monster> voltando pra pasta data/monster abra o arquivo monsters.XML  e adicione :
    <!-- ZombieEvent --> <monster name="event zombie" file="ZombieEvent/event zombie.xml"/> tudo ok até aqui ... então vamos pra pasta data/movements/scripts crie zombieevent.lua :
    local config = {    playerCount = 2001, -- Storage do players do evento     maxPlayers = 20, -- Maximo de players pra partiparem do evento     minLevel = 17 -- Level minimo pra entrar no evento     }      function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getPlayerLevel(cid) < config.minLevel then         addEvent(tpBack, 1000, cid, fromPosition)         doPlayerSendCancel(cid, "You need to be at least level " .. config.minLevel .. ".")         return false end     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 voltando pra data/movements abra o arquivo movements.XML e adicione :
     
     <!-- ZOMBIE event -->     <movevent type="StepIn" actionid="2008" event="script" value="zombieevent.lua"/> agora vamos pra parte mais importante e que devemos mais prestar atenção... 
     
    em data/globalevents/scripts crie zombieevent.lua :
    local config = {    semana_mes = "semana",     days = {1,2,3,4,5,6,7}, -- Dia das semanas que irá acontecer o evento     goblet = 5805, -- Troféu que vai pro vencedor do evento     rewards = {2195, 2152, 2160}, -- Recompensas.        moneyReward = {2160, 10, 1},-- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}     playerCount = 2001, -- Storage dos players que entram e sai do evento     zombieCount = 2002, -- Storage do zombie do event     teleportActionId = 2008, -- Action ID do teleport     teleportPosition = {x = 652, y = 1020, z = 7, stackpos = 1}, -- Onde o teleport é criado     teleportToPosition = {x = 559, y = 589, z = 7}, -- Pra onde será teleportado     teleportId = 1387, -- ID do teleporte     timeToStartEvent = 2, -- Minutos que o portal irá ficar aberto até os player entrarem     timeBetweenSpawns = 20, -- Segundos dps do evento ser startado começarem a aparecer os zombie     zombieName = "event zombie", -- Nome do zombie sumonado     playersNeededToStartEvent = 3, -- Players necessários pro evento ser iniciado          -- Area que o zumbi vai spawnar     fromPosition = {x = 543, y = 578, z = 7}, -- top de fromPosition até     toPosition = {x = 577, y = 600, z = 7} -- -- em baixo toPostion     } function onTime()     local time = os.date("*t")     if (config.semana_mes == "semana" and isInArray(config.days,time.wday)) or (config.semana_mes == "mes" and isInArray(config.days,time.day)) or config.semana_mes == "" then    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)     end     return TRUE 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!") pvgaylord()                     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)     else local fromp, top = config.fromPosition, config.toPosition         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}                     cid = getThingfromPos(areapos).uid                     if isPlayer(cid) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false) doBroadcastMessage(getCreatureName(cid)..' has survived at zombie event!')                   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                 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.")    elseif isMonster(cid) then doRemoveCreature(cid)                     end                 end             end         end     end end function pvgaylord() local fromp, top, p, m = config.fromPosition, config.toPosition, 0, 0 for x = fromp.x, top.x do             for y = fromp.y, top.y do                 for z = fromp.z, top.z do                     local areapos = {x = x, y = y, z = z, stackpos = 253}                     local cid = getThingfromPos(areapos).uid                     if isPlayer(cid) then p = p+1    elseif isMonster(cid) then m = m+1                     end                 end             end         end if p ~= getGlobalStorageValue(config.playerCount) then setGlobalStorageValue(config.playerCount, p) end if p < 2 then return true end addEvent(pvgaylord,100,nil) end na mesma pasta crie o arquivo fechazombie.lua :
    local teleportPos = {x = 652, y = 1020, z = 7, stackpos = 1} -- Posição em que se abre o teleport local teleportId = 1387 function onTimer()     for i = 1, 255 do         teleportPos.stackpos = i         if getThingFromPos(teleportPos).itemid == teleportId then             doRemoveItem(getThingFromPos(teleportPos).uid, 1)         end     end     return true end agora em data/globalevents abra o arquivo globalevents.XML e adicione :
     
    <globalevent name="zombieevent" time="23:41" event="script" value="zombieevent.lua"/> <globalevent name="zombieventt" time="23:43" event="script" value="fechazombie.lua"/> Importante : time="Horário que irá acontecer o evento" e no fechazombie coloque 2 minutos a mais da hora que vc colocou pra iniciar, para assim fechar o teleport na hora em que o evento é startado (configuração padrão do script, se alterar lá terá que alterar aqui tb)
     
     
     
     
     
    Agora só abrir e desfrutar do seu novo sistema...
     
     
    Download de mapas :
     
    http://tibiaking.com...apa-modificado/ - tiago.bordin1988
    http://tibiaking.com...mbie-event-v10/ - ricardo3
    http://tibiaking.com...map-86-inovado/ - OhGod
    http://www.speedysha...ombieEvent.otbm
     
     
     
     
     
     
     
    Créditos...
    Fausto32
    Sociopata
    Orochi Elf
    Phowned
    Smart Maxx
     
     

Informação Importante

Confirmação de Termo