Ir para conteúdo

Serpente Marinha - Fantástico


dondiego

Posts Recomendados

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:

 

Tópico sobre a CRIATURA

Mapa de exemplo - http://rapidshare.com/files/123731632/exem...otbm.html" -

 

seaserpent1wf4.th.png

 

seaserpent2hp8.th.png

 

seaserpent3tg9.th.png

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...