Ir para conteúdo

Killua

Posts Recomendados

Warzone Event

por Killua, antigo amoeba13

 

 

Eu fiz o famoso Warzone Event do tibia global e vou disponibilizar pra vcs, pra quem nao conhece, segue video do evento. (Assistam a partir dos 3 minutos.)

 

 

PS: Os codigos estao configurados com as posicoes do mapa global "originial"

A primeira parte eh a action (De clicar no cristal verde pra comecar a nascer os monstros)

 

Crie um arquivo chamado warzone.lua em data/actions/scripts e coloque esse codigo:

 

 

 


--- [[ Warzone Event by Killua, antigo amoeba13 ]] ---

local posdotp = {x= 33104, y=31908, z=10} -- Posicao que o tp vai ser criado (Eh o tp que leva pra sala do Deathstriker)
local salaDeathstriker = {x=33101, y=31956, z=10} -- Posicao da sala do Deathstriker (Pos pra onde o player vai qd entrar no tp)
local posDeathstriker = {x=33108, y=31968, z=10} -- Posicao onde o Deathstriker vai nascer.

function removerTp(tp)
    local t = getTileItemById(posdotp, 1387)
    if t then
        doRemoveItem(t.uid, 1)
        doSendMagicEffect(posdotp, CONST_ME_POFF)
    end
end

function TirarCristal()
    local cristal = getTileItemById(posdotp, 17999) -- Id do cristal azul que some para dar lugar ao tp
    if cristal then
        doRemoveItem(cristal.uid, 1)
    end
    return true
end
     

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local times = {100, 5000, 15000, 20000, 30000, 35000, 45000, 55000, 60000, 65000, 75000, 85000, 100000, 115000, 120000}
    local change = false
    local position = {x = 33094 + math.random(1, 10), y = 31904 + math.random(1, 8), z = 10}
    
    if os.time()-getGlobalStorageValue(cid, 96963) > 30*60 then
                     
        for _, time in ipairs(times) do
            if(change) then
                addEvent(doCreateMonster, time, "Humongous Fungus", position)
                addEvent(doSendMagicEffect, time, position, CONST_ME_TELEPORT)
            else
                addEvent(doCreateMonster, time, "Humorless Fungus", position)
                addEvent(doSendMagicEffect, time, position, CONST_ME_TELEPORT)
            end
            addEvent(doCreateMonster, time, "Hideous Fungus", position)
            addEvent(doSendMagicEffect, time, position, CONST_ME_TELEPORT)
            change = change and false or true
        end
        
        addEvent(doCreateMonster, 3*60*1000, "Deathstrike", posDeathstriker)
        addEvent(doSendMagicEffect, 4 * 60 * 1000, posDeathstriker, CONST_ME_TELEPORT)     			
        addEvent(TirarCristal, 2*60*1000)
        addEvent(doCreateTeleport, 121000, 1387, salaDeathstriker, posdotp)
        setGlobalStorageValue(96963, os.time())
        addEvent(removerTp, 60000+121000)
        addEvent(doCreateItem, 60000+122000, 17999, posdotp)
        doCreatureSay(cid, "The crystals are damaging!", TALKTYPE_ORANGE_1)
    else
        doPlayerSendCancel(cid, "Wait 30 minutes to start again.")
    end
    return true
end

E em data/actions/actions.xml adicione essa tag:

 

<action actionid="7231" script="warzone.lua" />

Coloque actionId 7231 no cristal verde.

 

 

 

 

Configurando: Siga as instrucoes que estao dentro do script e

 

Em


local position = {x = 33094 + math.random(1, 10), y = 31904 + math.random(1, 8), z = 10}

No lugar do 33094 vc coloca a posicao x minima da area onde vao nascer os monstros.

No lugar do 31904 vc coloca a posicao y minima da area onde vao nascer os monstros.

 

 

Agora, a segunda parte eh o movement

 

Em data/movements/scripts crie warzone.lua e coloque esse codigo:

 

 

 


--- [[ Warzone Event by Killua, antigo amoeba13 ]] ---

local kickposs = {x=33000, y=31899, z=9}  -- Posicao pra onde o player vai ser kikado se permanecer mais de 30 minutos na sala do Deathstriker.(Se ele sair voluntariamente, vai pra essa pos tbm)
     
function kikar(cid)
    doTeleportThing(cid, kickposs)
    doPlayerSendTextMessage(cid, 18, "You have been removed from the boss room, because you can not stay for more than 30 minutes.")
    return true
end
       
function onStepIn(cid, item, position, topos, frompos)
    if not isPlayer(cid) then
        return false
    end
           
    if item.actionid == 5157 then
        doPlayerSendTextMessage(cid, 18, "You have half an hour to heroically defeat Deathstrike. Otherwise you'll be teleported out by the gnomish emergency device.")
        evento = addEvent(kikar, 3*60*1000, cid)
    elseif item.actionid == 5158 then
        doTeleportThing(cid, tpsaida)
        stopEvent(evento)
    end
    return true
end

E, em data/movements/movements.xml adicione essa tag:

<movevent type="StepIn" actionid="5158;5157" event="script" value="warzone.lua"/>

 

 

 

Configurando: Simplesmente coloque o actionID 5157 no piso onde eh criado o tp (o local posdotp da action) e o actionID 5158 no piso que vai ser a saida da sala do Deathstriker.

 

 

Eh isso ai, espero que ajude alguem.

Fiz esse evento a pedido do usuario UroTTa

 

Por favor, deixe seu comentario.

 

Abracos

Editado por Killua
Link para o comentário
Compartilhar em outros sites

Acho que você poderia ter substituído todos esses

doCreateMonster("Hideous Fungus", {x=33097, y=31904, z=10})
doSendMagicEffect({x=33097, y=31904, z=10}, CONST_ME_TELEPORT)

Por uma tabela com:

local monsters = {
    {pos = {x=123, y=123, z=7}, name = "Hideous Fungus"},
    {pos = {...}, name = ...},
}

E usado um loop pra criar cada um:

for _, monster in pairs(monsters) do
    doCreateMonster(monster.name, monster.pos)
    doSendMagicEffect(monster.pos, 10)
end

Economizaria muitas linhas e muito trabalho.

 

Além disso, o que acontece se o grupo não completar a quest? Acho que você deveria ter adicionado uma remoção pros monstros que já estão na área.

 

Mesmo assim, aposto que ajudará muitas pessoas que querem esse evento no servidor.

Link para o comentário
Compartilhar em outros sites

 

 

local times = {100, 5000, 15000, 20000, 30000, 35000, 45000, 55000, 60000, 65000, 75000, 85000, 100000, 115000, 120000}
 
    local change = false
    local position = {x = 33094 + math.random(1, 10), y = 31904 + math.random(1, 8), z = 10}
    
    for _, time in ipairs(times) do
        if(change) then
            addEvent(doCreateMonster, time, "Humongous Fungus", position)
        else
            addEvent(doCreateMonster, time, "Humorless Fungus", position)
        end
        addEvent(doCreateMonster, time, "Hideous Fungus", position)
        change = change and false or true
    end
    
    addEvent(doCreateMonster, 3 * 60 * 1000, "Deathstrike", {x = 33108, y = 31968, z = 10})
    addEvent(doSendMagicEffect, 4 * 60 * 1000, {x = 33108, y = 31968, z = 10}, CONST_ME_TELEPORT)

Link para o comentário
Compartilhar em outros sites

 

 

Acho que você poderia ter substituído todos esses

doCreateMonster("Hideous Fungus", {x=33097, y=31904, z=10})
doSendMagicEffect({x=33097, y=31904, z=10}, CONST_ME_TELEPORT)

Por uma tabela com:

local monsters = {
    {pos = {x=123, y=123, z=7}, name = "Hideous Fungus"},
    {pos = {...}, name = ...},
}

E usado um loop pra criar cada um:

for _, monster in pairs(monsters) do
    doCreateMonster(monster.name, monster.pos)
    doSendMagicEffect(monster.pos, 10)
end

Economizaria muitas linhas e muito trabalho.

 

Além disso, o que acontece se o grupo não completar a quest? Acho que você deveria ter adicionado uma remoção pros monstros que já estão na área.

 

Mesmo assim, aposto que ajudará muitas pessoas que querem esse evento no servidor.

 

 

 

 

local times = {100, 5000, 15000, 20000, 30000, 35000, 45000, 55000, 60000, 65000, 75000, 85000, 100000, 115000, 120000}
 
    local change = false
    local position = {x = 33094 + math.random(1, 10), y = 31904 + math.random(1, 8), z = 10}
    
    for _, time in ipairs(times) do
        if(change) then
            addEvent(doCreateMonster, time, "Humongous Fungus", position)
        else
            addEvent(doCreateMonster, time, "Humorless Fungus", position)
        end
        addEvent(doCreateMonster, time, "Hideous Fungus", position)
        change = change and false or true
    end
    
    addEvent(doCreateMonster, 3 * 60 * 1000, "Deathstrike", {x = 33108, y = 31968, z = 10})
    addEvent(doSendMagicEffect, 4 * 60 * 1000, {x = 33108, y = 31968, z = 10}, CONST_ME_TELEPORT)

 

 

 

 

Obrigado vcs dois! No dia que eu fiz esse script eu nem sabia usar o for x, y in pairs do.... Ficou realmente mt melhor.

 

No global, os monstros nao somem quando o time entra no tp. Eles continuam la e o proximo time que for tem que matar eles (Pelo menos foi isso que me foi dito, eu nunca vi esse evento pessoalmente)

 

Abracos.

Link para o comentário
Compartilhar em outros sites

Muito legal este script, estilo uma demon oak automática ;p

 

Porém, eu acredito que os players serão kickados 3 minutos após entrar na sala não? porque:

 

addEvent(kikar, 3*60*1000

 

Acredito que seja:

addEvent(kikar, 30*60*1000
Editado por Martelix
Link para o comentário
Compartilhar em outros sites

 

Muito legal este script, estilo uma demon oak automática ;p

 

Porém, eu acredito que os players serão kickados 3 minutos após entrar na sala não? porque:

 

addEvent(kikar, 3*60*1000

Acredito que seja:

addEvent(kikar, 30*60*1000

Realmente faltoum um 0 ali, vlw por avisar vou por.

Link para o comentário
Compartilhar em outros sites

Errado, no global os monstros são removidos sim.

O que acontece, é que o TP do BOSS, só é liberado, quando e removido um certo crystal,

quando nasce monstros até não ter mais sqm para nascer...

Quando nao tem nenhum SQM mais para nenhum monstro narcer, o Teleport é liberado, para os times entrar

Depois de um certo tempo, sem player la mais, os monstro são removidos,

só fica lá ainda, o leve respawn da area mesmo

 

Se quiser podemos marca uma hora, e eu abro cast pra você ver meu time fazendo, todos os dias a gente faz,

em Azura (World PVP)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 4 months later...
  • 4 years later...
×
×
  • Criar Novo...