Action 8.10!
Boa noite pessoal!
Há muito tempo eu procurava uma função que me desse a possibilidade de controlar as ACTIONS por TEMPO, ou seja, um evento depois do outro com um TEMPO configurável.
Recentemente o CONDE SAPO postou uma action onde portas eram removidas pausadamente. Eram 4 portas, e uma a uma eram removidas com 2 segundos de intervalo. Excelente, não?! Bom, para mim foi realmente excelente, pois com isso pude me basear nesse código de TEMPO e fazer algumas actions que já tinha em mente.
A ACTION que vou deixar aqui segue esta linha de raciocínio : um evento após o outro, o que cria um grande efeito visual.
Bora lá então!
Crie um arquivo com o nome "serpent.lua" dentro da pasta data/actions/scripts e cole isto:
----------DON-DIEGO----------- XTIBIA function onUse(cid, item, frompos, item2, topos) masterpos = {x=398, y=619, z=7, stackpos=253} -- troque isto pela posição do tile diferenciado na frente da estatua local1pos = {x= masterpos.x-4, y= masterpos.y-1, z= masterpos.z, stackpos=1} -- Bolhas 1 local2pos = {x= masterpos.x-3, y= masterpos.y-4, z= masterpos.z, stackpos=1} -- Bolhas 1 local3pos = {x= masterpos.x+2, y= masterpos.y-4, z= masterpos.z, stackpos=1} -- Bolhas 1 local4pos = {x= masterpos.x+4, y= masterpos.y-2, z= masterpos.z, stackpos=1} -- Bolhas 1 local5pos = {x= masterpos.x, y= masterpos.y+3, z= masterpos.z, stackpos=1} -- Bolhas 1 local6pos = {x= masterpos.x-4, y= masterpos.y, z= masterpos.z, stackpos=1} -- Bolhas 2 local7pos = {x= masterpos.x, y= masterpos.y-5, z= masterpos.z, stackpos=1} -- Bolhas 2 local8pos = {x= masterpos.x+4, y= masterpos.y, z= masterpos.z, stackpos=1} -- Bolhas 2 local9pos = {x= masterpos.x+1, y= masterpos.y+3, z= masterpos.z, stackpos=1} -- Bolhas 2 local10pos = {x= masterpos.x, y= masterpos.y+2, z= masterpos.z, stackpos=1} -- Bolhas 3 local11pos = {x= masterpos.x+1, y= masterpos.y+2, z= masterpos.z, stackpos=1} -- Bolhas 3 local12pos = {x= masterpos.x+2, y= masterpos.y+2, z= masterpos.z, stackpos=1} -- Bolhas 3 local13pos = {x= masterpos.x, y= masterpos.y+3, z= masterpos.z, stackpos=1} -- Bolhas 3 local14pos = {x= masterpos.x+1, y= masterpos.y+3, z= masterpos.z, stackpos=1} -- Bolhas 3 local15pos = {x= masterpos.x+2, y= masterpos.y+3, z= masterpos.z, stackpos=1} -- Bolhas 3 local16pos = {x= masterpos.x+3, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- movimento direita local17pos = {x= masterpos.x+4, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- movimento direita local18pos = {x= masterpos.x+5, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- movimento direita local19pos = {x= masterpos.x+6, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- movimento direita local20pos = {x= masterpos.x+7, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- movimento direita local21pos = {x= masterpos.x+8, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- movimento direita local22pos = {x= masterpos.x+5, y= masterpos.y-6, z= masterpos.z, stackpos=1} -- movimento baixo local23pos = {x= masterpos.x+5, y= masterpos.y-5, z= masterpos.z, stackpos=1} -- movimento baixo local24pos = {x= masterpos.x+5, y= masterpos.y-4, z= masterpos.z, stackpos=1} -- movimento baixo local25pos = {x= masterpos.x+5, y= masterpos.y-3, z= masterpos.z, stackpos=1} -- movimento baixo local26pos = {x= masterpos.x+5, y= masterpos.y-2, z= masterpos.z, stackpos=1} -- movimento baixo local27pos = {x= masterpos.x+5, y= masterpos.y-1, z= masterpos.z, stackpos=1} -- movimento baixo efeito local28pos = {x= masterpos.x-5, y= masterpos.y+4, z= masterpos.z, stackpos=1} -- crack! local29pos = {x= masterpos.x-6, y= masterpos.y+2, z= masterpos.z, stackpos=1} -- crack! local30pos = {x= masterpos.x-6, y= masterpos.y+1, z= masterpos.z, stackpos=1} -- crack! local31pos = {x= masterpos.x-5, y= masterpos.y+2, z= masterpos.z, stackpos=1} -- crack! local32pos = {x= masterpos.x-6, y= masterpos.y, z= masterpos.z, stackpos=1} -- movimento subida local33pos = {x= masterpos.x-6, y= masterpos.y-1, z= masterpos.z, stackpos=1} -- movimento subida local34pos = {x= masterpos.x-6, y= masterpos.y-2, z= masterpos.z, stackpos=1} -- movimento subida local35pos = {x= masterpos.x-6, y= masterpos.y-3, z= masterpos.z, stackpos=1} -- movimento subida local36pos = {x= masterpos.x-6, y= masterpos.y-4, z= masterpos.z, stackpos=1} -- movimento subida local37pos = {x= masterpos.x-6, y= masterpos.y-5, z= masterpos.z, stackpos=1} -- movimento subida local38pos = {x= masterpos.x-6, y= masterpos.y-6, z= masterpos.z, stackpos=1} -- movimento subida local39pos = {x= masterpos.x-7, y= masterpos.y-3, z= masterpos.z, stackpos=1} -- movimento diagonal local40pos = {x= masterpos.x-6, y= masterpos.y-2, z= masterpos.z, stackpos=1} -- movimento diagonal local41pos = {x= masterpos.x-5, y= masterpos.y-1, z= masterpos.z, stackpos=1} -- movimento diagonal local42pos = {x= masterpos.x-4, y= masterpos.y, z= masterpos.z, stackpos=1} -- movimento diagonal local43pos = {x= masterpos.x-2, y= masterpos.y-2, z= masterpos.z, stackpos=1} -- Coal esquerda local44pos = {x= masterpos.x+2, y= masterpos.y-2, z= masterpos.z, stackpos=1} -- Coal direita local45pos = {x= masterpos.x-2, y= masterpos.y, z= masterpos.z, stackpos=253} -- summon l1pos = getThingfromPos(local1pos) l2pos = getThingfromPos(local2pos) l3pos = getThingfromPos(local3pos) l4pos = getThingfromPos(local4pos) l5pos = getThingfromPos(local5pos) l6pos = getThingfromPos(local6pos) l7pos = getThingfromPos(local7pos) l8pos = getThingfromPos(local8pos) l9pos = getThingfromPos(local9pos) l10pos = getThingfromPos(local10pos) l11pos = getThingfromPos(local11pos) l12pos = getThingfromPos(local12pos) l13pos = getThingfromPos(local13pos) l14pos = getThingfromPos(local14pos) l15pos = getThingfromPos(local15pos) l16pos = getThingfromPos(local16pos) l17pos = getThingfromPos(local17pos) l18pos = getThingfromPos(local18pos) l19pos = getThingfromPos(local19pos) l20pos = getThingfromPos(local20pos) l21pos = getThingfromPos(local21pos) l22pos = getThingfromPos(local22pos) l23pos = getThingfromPos(local23pos) l24pos = getThingfromPos(local24pos) l25pos = getThingfromPos(local25pos) l26pos = getThingfromPos(local26pos) l27pos = getThingfromPos(local27pos) l28pos = getThingfromPos(local28pos) l29pos = getThingfromPos(local29pos) l30pos = getThingfromPos(local30pos) l31pos = getThingfromPos(local31pos) l32pos = getThingfromPos(local32pos) l33pos = getThingfromPos(local33pos) l34pos = getThingfromPos(local34pos) l35pos = getThingfromPos(local35pos) l36pos = getThingfromPos(local36pos) l37pos = getThingfromPos(local37pos) l38pos = getThingfromPos(local38pos) l39pos = getThingfromPos(local39pos) l40pos = getThingfromPos(local40pos) l41pos = getThingfromPos(local41pos) l42pos = getThingfromPos(local42pos) l43pos = getThingfromPos(local43pos) l44pos = getThingfromPos(local44pos) l45pos = getThingfromPos(local45pos) player1 = getThingfromPos(masterpos) if item.itemid == 3957 then if player1.itemid == 0 then doSendMagicEffect(frompos, 18) doPlayerSendTextMessage(cid,22,"Este item nao pode ser utilizado neste local.") else if player1.uid >0 then doSendMagicEffect(local1pos, 25) doSendMagicEffect(local2pos, 25) doSendMagicEffect(local3pos, 25) doSendMagicEffect(local4pos, 25) doSendMagicEffect(local5pos, 25) addEvent(doWait1,2000,evento2) end function doWait1(evento2) -- bolhas 2 doPlayerRemoveItem(cid,3957,1) doSendMagicEffect(local6pos, 25) doSendMagicEffect(local7pos, 25) doSendMagicEffect(local8pos, 25) doSendMagicEffect(local9pos, 25) repeat l43pos = getThingfromPos(local43pos) if l43pos.itemid == 1485 then doRemoveItem(l43pos.uid,1) end until l43pos.itemid ~= 1485 repeat l43pos = getThingfromPos(local43pos) if l43pos.itemid == 1484 then doRemoveItem(l43pos.uid,1) end until l43pos.itemid ~= 1484 doCreateItem(1484,1,local43pos) repeat l44pos = getThingfromPos(local44pos) if l44pos.itemid == 1485 then doRemoveItem(l44pos.uid,1) end until l43pos.itemid ~= 1485 repeat l44pos = getThingfromPos(local44pos) if l44pos.itemid == 1484 then doRemoveItem(l44pos.uid,1) end until l43pos.itemid ~= 1484 doCreateItem(1484,1,local44pos) repeat l28pos = getThingfromPos(local28pos) if l28pos.itemid == 6299 then doRemoveItem(l28pos.uid,1) end until l28pos.itemid ~= 6299 repeat l29pos = getThingfromPos(local29pos) if l29pos.itemid == 6298 then doRemoveItem(l29pos.uid,1) end until l29pos.itemid ~= 6298 repeat l30pos = getThingfromPos(local30pos) if l30pos.itemid == 6297 then doRemoveItem(l30pos.uid,1) end until l30pos.itemid ~= 6297 repeat l31pos = getThingfromPos(local31pos) if l31pos.itemid == 6299 then doRemoveItem(l31pos.uid,1) end until l31pos.itemid ~= 6299 addEvent(doWait2,2000,evento3) end function doWait2(evento3) -- bolhas 3 comeca doSendMagicEffect(local10pos, 25) doSendMagicEffect(local12pos, 25) doSendMagicEffect(local14pos, 25) doSendMagicEffect(local15pos, 25) addEvent(doWait3,1000,evento4) end function doWait3(evento4) doSendMagicEffect(local11pos, 25) doSendMagicEffect(local12pos, 25) doSendMagicEffect(local14pos, 25) doSendMagicEffect(local13pos, 25) addEvent(doWait4,1000,evento5) end function doWait4(evento5) -- bolhas 3 fim doSendMagicEffect(local13pos, 25) doSendMagicEffect(local12pos, 25) addEvent(doWait5,1050,evento6) end function doWait5(evento6) -- direita comeca doSendMagicEffect(local16pos, 53) addEvent(doWait6,200,evento7) end function doWait6(evento7) doSendMagicEffect(local17pos, 53) addEvent(doWait7,200,evento8) end function doWait7(evento8) doSendMagicEffect(local18pos, 53) addEvent(doWait8,200,evento9) end function doWait8(evento9) doSendMagicEffect(local19pos, 53) addEvent(doWait9,200,evento10) end function doWait9(evento10) doSendMagicEffect(local20pos, 53) addEvent(doWait10,200,evento11) end function doWait10(evento11) -- direita fim doSendMagicEffect(local21pos, 53) addEvent(doWait11,3000,evento12) end function doWait11(evento12) -- baixo comeca doSendMagicEffect(local22pos, 53) addEvent(doWait12,200,evento13) end function doWait12(evento13) doSendMagicEffect(local23pos, 53) addEvent(doWait13,200,evento14) end function doWait13(evento14) doSendMagicEffect(local24pos, 53) addEvent(doWait14,200,evento15) end function doWait14(evento15) doSendMagicEffect(local25pos, 53) addEvent(doWait15,200,evento16) end function doWait15(evento16) doSendMagicEffect(local26pos, 53) addEvent(doWait16,200,evento17) end function doWait16(evento17) -- baixo fim doSendMagicEffect(local27pos, 33) addEvent(doWait17,10000,evento18) end function doWait17(evento18) -- crack comeca e fim doSendAnimatedText(local28pos,"Crack",186) doCreateItem(6299,1,local28pos) doSendAnimatedText(local29pos,"Crack",186) doCreateItem(6298,1,local29pos) doSendAnimatedText(local30pos,"Crack",186) doCreateItem(6297,1,local30pos) doSendAnimatedText(local31pos,"Crack",186) doCreateItem(6299,1,local31pos) addEvent(doWait18,200,evento19) end function doWait18(evento19) -- subida comeca doSendMagicEffect(local32pos, 53) addEvent(doWait19,200,evento20) end function doWait19(evento20) doSendMagicEffect(local33pos, 53) addEvent(doWait20,200,evento21) end function doWait20(evento21) doSendMagicEffect(local34pos, 53) addEvent(doWait21,200,evento22) end function doWait21(evento22) doSendMagicEffect(local35pos, 53) addEvent(doWait22,200,evento23) end function doWait22(evento23) doSendMagicEffect(local36pos, 53) addEvent(doWait23,200,evento24) end function doWait23(evento24) doSendMagicEffect(local37pos, 53) addEvent(doWait24,200,evento25) end function doWait24(evento25) -- subida fim doSendMagicEffect(local38pos, 53) addEvent(doWait25,2000,evento26) end function doWait25(evento26) -- diagonal comeca doSendMagicEffect(local39pos, 53) addEvent(doWait26,200,evento27) end function doWait26(evento27) doSendMagicEffect(local40pos, 53) addEvent(doWait27,200,evento28) end function doWait27(evento28) doSendMagicEffect(local41pos, 53) addEvent(doWait28,200,evento29) end function doWait28(evento29) -- diagonal fim doSendMagicEffect(local42pos, 53) addEvent(doWait29,200,evento30) end function doWait29(evento30) -- summon doSummonCreature("rat", local45pos) doCreateItem(2025,1, local45pos) addEvent(doWait30,30000,evento31) end function doWait30(evento31) -- retorna repeat l43pos = getThingfromPos(local43pos) if l43pos.itemid == 1484 then doRemoveItem(l43pos.uid,1) end until l43pos.itemid ~= 1484 repeat l43pos = getThingfromPos(local43pos) if l43pos.itemid == 1485 then doRemoveItem(l43pos.uid,1) end until l43pos.itemid ~= 1485 doCreateItem(1485,1,local43pos) repeat l44pos = getThingfromPos(local44pos) if l44pos.itemid == 1484 then doRemoveItem(l44pos.uid,1) end until l43pos.itemid ~= 1484 repeat l44pos = getThingfromPos(local44pos) if l44pos.itemid == 1485 then doRemoveItem(l44pos.uid,1) end until l43pos.itemid ~= 1485 doCreateItem(1485,1,local44pos) repeat l28pos = getThingfromPos(local28pos) if l28pos.itemid == 6299 then doRemoveItem(l28pos.uid,1) end until l28pos.itemid ~= 6299 repeat l29pos = getThingfromPos(local29pos) if l29pos.itemid == 6298 then doRemoveItem(l29pos.uid,1) end until l29pos.itemid ~= 6298 repeat l30pos = getThingfromPos(local30pos) if l30pos.itemid == 6297 then doRemoveItem(l30pos.uid,1) end until l30pos.itemid ~= 6297 repeat l31pos = getThingfromPos(local31pos) if l31pos.itemid == 6299 then doRemoveItem(l31pos.uid,1) end until l31pos.itemid ~= 6299 end end end end
Agora no arquivo ACTIONS.XML adicione isto:
<!-- Serpent -->
<action itemid="3957" script="serpent.lua"/>
Explicando:
Esta ACTION funciona da seguinte forma: eu programei o item 3957 (WAR HORN) para ATIVAR a ACTION se o player estiver na posição correta.
Se não estiver no lugar correto, ele funciona como os outros instrumentos musicais, mas retorna uma mensagem para o player, dizendo que "O ITEM NÃO PODE SER UTILIZADO" naquele local.
A ACTION cria uma série de efeitos como se a Serpente Marinha viesse das profundezas do mar e se movimentasse próximo a superfície da água. A ACTION também sumona a CRIATURA, no entanto deixei ela sumonando um "rat" para que pudesse ir testando.
Existe um tópico no XTIBIA sobre como criar a sua Serpente Marinha... postarei os links no final.
Configurando para o seu SERVER:
Fiz esta ACTION de forma que ela fosse configurada de uma forma bem simples. Vamos lá!
- No início da ACTION você deverá mudar o MASTERPOS:
masterpos = {x=398, y=619, z=7, stackpos=253}
Troque esta posição para a posição do tile à frente da estátua. (veja as SS's) NÃO TROQUE O "STACKPOS=253"
- Você poderá modificar também a MENSAGEM que aparecerá quando o PLAYER der USE no ITEM no local errado.
1 - Abra o arquivo pelo bloco de notas. Aperte CTRL + F e procure por "Este item nao pode ser utilizado neste local".
2 -Troque a mensagem sem retirar as ASPAS (" ")
Para modificar a CRIATURA que é sumonada:
1 - Abra o arquivo pelo bloco de notas. Aperte CTRL + F e procure por "rat".
2 - Substitua o nome da criatura sem retirar as ASPAS (" "). EXEMPLO: doSummonCreature("Sea Serpent", local45pos)
Considerações finais:
Às vezes a ACTION retorna um ERRO:
"Lua Script Error: [Action Interface]
data/actions/scripts/serpent.lua:onUse
LuaAddEvent<>. callback parameter should be a function."
Mas isso não impede que ela seja executada quando acionada pela segunda vez. Estou estudando uma forma de corrigir este erro, mas creio que isto não influenciará em um primeiro momento.
Sei que vão falar dos CRÉDITOS, então já me adianto...
Eu não sou SCRIPTER, mas consigo entender certos SCRIPTS e desta forma montei esta ACTION.
Ela foi formada utilizando o que aprendi com OUTROS SCRIPTS e um pouco que eu já sabia.
Com o script do CONDE SAPO, aprendi a colocar tempo criando EVENTOS.
Com o script da ARENA SVARGROND (by Szuwar, Noxitu e Umbi) aprendi a relacionar as posições baseando em uma posição inicial, o que não facilitou meu trabalho, mas facilitará o trabalho dos outros usuários que colocarão esta ACTION nos seus servers.
Contudo, Créditos a todos:
Créditos:
DON-DIEGO
CONDE SAPO
Szuwar
Noxitu
Umbi
links:
Mapa de exemplo - http://rapidshare.com/files/123731632/exem...otbm.html" -