Ir para conteúdo
  • Cadastre-se

[GlobalEvents] Perfect Zombie Event 100% automatico


Posts Recomendados

  • 2 months later...

[Warning - Event::LoadScript] Event onTimer is not found <data/globalevents/scripts/zombieevent.lua>

Editado por kelnaru (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 1 month later...
  • 5 months later...
  • 1 month later...

Funcionou perfeitamente,parabens !
So que apenas o TP nao fecha.

Editado por cesarfilho55 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 7 months later...
  • 2 weeks later...
  • 7 months later...
Em 19/11/2014 ás 01:42, Smart Maxx disse:

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

 

 

Queria saber como faço pra ver qual lcoal q portal abre pro event zumbie, no meu ot ativa event mas pessoal na acha portal nem eu, queria saber qual pasta do ot fica marcado o X, Y, Z pr mim pode arruma :/

Link para o post
Compartilhar em outros sites
  • 2 months later...
  • 1 year later...

Adaptado para a 1.X e funcionando perfeitamente(depois de algumas correções). Ótimo evento!

Editado por Skydrowz (veja o histórico de edições)

Master yourself, master the enemy.

Link para o post
Compartilhar em outros sites
  • 1 year later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo