Ir para conteúdo
  • 0

[Spell] Teleport Dimension And Return! [Spell] Summon Diferente


Newtonnotwen

Pergunta

Ola galera do xtibia estou querendo um script de uma spell que faz o seguinte:

 

Ao ser utilizada a magia abre um portal na frente do player e quando ele entra é teleportado pra um lugar no mapa marcado (ex: x=0 y=0 z=0) o teleporte continua la por durante 5 segundos (na frente de onde o player usou a magia), porem ao entrar no teleporte ele retornará automaticamente ao lugar onde usou a magia apos 10 segundos.

 

Obs: Se outro player (outro que não tenha utilizado a magia) entrar no teleporte no período de 5 segundos em que o teleporte esta aberto, ele ira retornar também no mesmo tempo que quem entrou primeiro ou após os 20 segundos dele, no caso voltando 5 segundos depois que o primeiro player.

 

Caso não seja possível fazer a seguinte spell gostaria então da seguinte:

 

Player utiliza magia e é teleportado para tal lugar (ex: x=0 y=0 z=0), porem sem abrir teleporte ele é teleportado no momento que fala e após 20 segundos retorna ao lugar original (onde usou a magia).

 

Porque quero essa magia?

 

-Queria uma magia tipo o jutsu do Tobi (no anime naruto) onde ele teleporta para outra dimensão e retorna.

 

Qual a funcionalidade?

 

-O player pode fugir de seu adversário mudando de "dimensão".

 

Protocolo: 8.6

Sevidor: The forgotten server

Nível de experiência: Stages

Informações adicionais: Nenhuma!

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

A outra spell seria a seguinte:

 

Queria um summon com efeito, segue o exemplo:

 

Sabe aquele efeito do espelho que sai um orc, do /z? Ou do dragão que sai da aguá?

 

Queria o seguinte:

-Ao player utilizar a magia ele invocasse um orc e aparecesse o espelho.

-Ao player utilizar a magia ele invocasse um dragon e aparecesse o efeito do dragão.

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

REP+ por cada spell (no caso das 2, REP+ por 2 dias seguidos)

 

Obs: Hoje não posso mais dar REP+ pois da dei (04/08/2012).Espere por amanhã.

 

 

Protocolo: 8.6

Sevidor: The forgotten server

Nível de experiência: Stages

Informações adicionais: Nenhuma!

 

 

Obrigado pela atenção!

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

Posts Recomendados

  • 0

Referente a primeira spell:

 

Não pelo o seguinte, o player não vai ter exausted ai vai ser muita apelação.

 

No caso pode ser, porem deve ter exausted ou tipo uma remoção de item ai boto um item muito raro.

 

- - - - - - - - - - - - - - - - - - - - - - - - ​- - - - - - - - - - - - - - - - - - - - - - - - ​- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

Referente a segunda e a terceira tem que ser por spell pelo acaso de gastar mana e treinar ml.

 

@Skymagnum

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

  • 0

Primeira coisa que você pediu:

 

Talkactions.xml:

 

<talkaction words="/tp" event="script" value="tp.lua"/>

 

Tp.lua:

 

-- Script by Luck Oake
function onSay(cid, words, param)
local waittime = 10 -- Tempo de exhaustion
local storage = 5560
local tpId = 1387 -- ID do seu Teleport
local p = getCreaturePosition(cid)
local x = {
[0] = {x=p.x, y=p.y-1, z=p.z},
[1] = {x=p.x+1, y=p.y, z=p.z},
[2] = {x=p.x, y=p.y+1, z=p.z},
[3] = {x=p.x-1, y=p.y, z=p.z}
}
pos = x[getCreatureLookDirection(cid)]
from = {x=pos.x, y=pos.y, z=7}
to = {x = 1000, y = 1000, z = 7} -- Para onde o teleport levará
area1 = {x = 998, y = 998, z = 7} -- Ponta de cima na esquerda na area que o tp leva
area2 = {x = 1002, y = 1002, z = 7} -- Ponta de baixo na direita na area que o tp leva

function back(cid)
if isInArea(getCreaturePosition(cid), area1, area2) then
doTeleportThing(cid, from)
end
end

function removeTp(tp)
local tp = getTileItemById(from, tpId)
if tp then
doRemoveItem(tp.uid, 1)
doSendMagicEffect(from, CONST_ME_POFF)
end
end

if exhaustion.get(cid, storage) == FALSE then
for _, pid in ipairs(getPlayersOnline()) do
addEvent(back, 20000, pid)
end
doCreateTeleport(tpId, to, from)
addEvent(removeTp, 5000, tp)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")
end
return true
end

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

  • 0

[04/08/2012 18:23:58] [Error - TalkAction Interface]
[04/08/2012 18:23:58] In a timer event called from:
[04/08/2012 18:23:58] data/talkactions/scripts/tp.lua:onSay
[04/08/2012 18:23:58] Description:
[04/08/2012 18:23:58] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)
[04/08/2012 18:23:58] stack traceback:
[04/08/2012 18:23:58]  data/lib/032-position.lua:2: in function 'isInArea'
[04/08/2012 18:23:58]  data/talkactions/scripts/tp.lua:12: in function <data/talkactions/scripts/tp.lua:11>

 

A talkaction só cria o teleport que leva o player a posição, mas ele não retorna ao lugar onde usou.

Da um erro no console apesar dele não cair (o erro pode continuar desde que a talkaction funcione)

 

@LuckOake

 

- - - - - - - - - - - -

Editado

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

  • 0

Rapidim, vou só ajustar uma coisinha no script.

 

 

-- Script by Luck Oake

function onSay(cid, words, param)

local waittime = 10 -- Tempo de exhaustion

local storage = 5560

local tpId = 1387 -- ID do seu Teleport

local p = getCreaturePosition(cid)

local x = {

[0] = {x=p.x, y=p.y-1, z=p.z},

[1] = {x=p.x+1, y=p.y, z=p.z},

[2] = {x=p.x, y=p.y+1, z=p.z},

[3] = {x=p.x-1, y=p.y, z=p.z}

}

pos = x[getCreatureLookDirection(cid)]

from = {x=pos.x, y=pos.y, z=7}

to = {x = 1000, y = 1000, z = 7} -- Para onde o teleport levará

area1 = {x = 998, y = 998, z = 7} -- Ponta de cima na esquerda na area que o tp leva

area2 = {x = 1002, y = 1002, z = 7} -- Ponta de baixo na direita na area que o tp leva

 

function back(cid)

if isInArea(getCreaturePosition(cid), area1, area2) then

doTeleportThing(cid, from)

end

end

 

function removeTp(tp)

local tp = getTileItemById(from, tpId)

if tp then

doRemoveItem(tp.uid, 1)

doSendMagicEffect(from, CONST_ME_POFF)

end

end

 

if exhaustion.get(cid, storage) == FALSE then

for _, pid in ipairs(getPlayersOnline()) do

addEvent(back, 20000, pid)

end

doCreateTeleport(tpId, to, from)

addEvent(removeTp, 5000, tp)

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")

end

return true

end

 

 

Agora o teleport aparece exatamente na frente do player.

 

Sobre seu problema, vá em lib/032-position.lua e substitua a função isInRange por essa:

function isInRange(position, fromPosition, toPosition)
return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)
end

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

  • 0

Agora o teleporte aparece mas eu queria que ele retornasse ao lugar original (onde usou a magia) apos certo tempo.

 

Ex: Player usa magia (x=1 y=1 z=1)

Player vai para (x=2 y=2 z=2) ou cria um teleporte que leve a esse lugar.

e apos certo tempo player volta automaticamente para o lugar onde usou a magia (x=1 y=1 z=1)

 

Será que tem como?

 

@LuckOake

 

--------------------

Editado

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

  • 0

Perfeito script! Funcionou perfeitamente.

 

Eu errei porque não adicionei o position-32 no lib.

 

Muito obrigado, se puder botar exausted eu agradeço.

 

@LuckOake

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

  • 0

Eu pude notar que existe um erro que acho que é incorrigível e não acho que possa ser corrigido o erro é o seguinte:

 

Quando usa a magia o teleporte nasce na frente do player e se nascer em cima de uma borda buga tudo da seguinte maneira:

 

Nenhum teleport que foi utilizado depois desse não é removido porque ele não acha item em cima da boda e não remove entendeu ?

 

Mas de qualquer forma muito obrigado amanhã ti dou REP+ é porque hoje já dei, muito obrigado.

 

@LuckOake

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

  • 0

Pronto, arrumei a exhaust, porém está com um bug que sua correção vai além das minhas habilidades de scripter.

 

Substitua seu tp.lua por esse:

 

-- Script by Luck Oake

function onSay(cid, words, param)

local waittime = 10 -- Tempo de exhaustion

local storage = 5560

local tpId = 1387 -- ID do seu Teleport

local p = getCreaturePosition(cid)

local x = {

[0] = {x=p.x, y=p.y-1, z=p.z},

[1] = {x=p.x+1, y=p.y, z=p.z},

[2] = {x=p.x, y=p.y+1, z=p.z},

[3] = {x=p.x-1, y=p.y, z=p.z}

}

pos = x[getCreatureLookDirection(cid)]

from = {x=pos.x, y=pos.y, z=7}

to = {x = 1000, y = 1000, z = 7} -- Para onde o teleport levará

area1 = {x = 998, y = 998, z = 7} -- Ponta de cima na esquerda na area que o tp leva

area2 = {x = 1002, y = 1002, z = 7} -- Ponta de baixo na direita na area que o tp leva

 

function back(cid)

if isInArea(getCreaturePosition(cid), area1, area2) then

doTeleportThing(cid, from)

end

end

 

function removeTp(tp)

local tp = getTileItemById(from, tpId)

if tp then

doRemoveItem(tp.uid, 1)

doSendMagicEffect(from, CONST_ME_POFF)

end

end

 

if exhaustion.check(cid, storage) == false then

for _, pid in ipairs(getPlayersOnline()) do

addEvent(back, 20000, pid)

end

exhaustion.set(cid, storage, waittime)

doCreateTeleport(tpId, to, from)

addEvent(removeTp, 5000, tp)

else

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.")

end

return true

end

 

 

Agora não é criado outros teleports, porém se o player usar o comando /tp por uma segunda vez enquanto outro teleport estiver aberto, o aberto atualmente não fecha mais.

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...