Ir para conteúdo
  • 0

[Resolvido]Teleport Com Script De Mudar As Coordenadas


Spectrusz

Pergunta

Olá, quero criar um teleporte, que de 20 em 20min mude as coordenadas dele, isso é possível?

 

Dúvida sanada:

O brun123 terminou a script do notle2012 que recebeu modificação do Skymagnum

É porque po/pos não foi declarado nessa 2ª function, o certo seria:

 

 

local teleportPosition = {x=160, y=51, z=7} -- aqui coloca tp que vai aparecer
local pos = {
[1] = {x = 160, y = 50, z = 7}, -- Coordenadas do destino
[2] = {x = 160, y = 51, z = 7},  -- Coordenadas do destino
[3] = {x = 160, y = 52, z = 7},  -- Coordenadas do destino
[4] = {x = 160, y = 53, z = 7},  -- Coordenadas do destino
[5] = {x = 160, y = 54, z = 7},  -- Coordenadas do destino
}

function onThink(interval, lastExecution, thinkInterval)
local time = 5
doCreateTeleport(1387, pos[math.random(1, #pos)], teleportPosition)
doBroadcastMessage("O portal para o evento foi aberto e se fexará em 5 minutos.")
addEvent(deleteTp, time*60*1000)
addEvent(doBroadcastMessage, time*1000*60, "O portal do evento foi fexado. Próximo evento em 2 horas.")
return true
end

function deleteTp()
local delete = getTileItemById(teleportPosition, 1387)
if delete.uid > 0 then
	doRemoveItem(delete.uid, 1)
	doSendMagicEffect(teleportPosition, CONST_ME_TELEPORT)
end
return true
end

 

 

A script vai funcionar, mas não sei se é exatamente o que você quer...

Ela cria um teleporte no posição teleportPosition com um destino aleatório que pode ser qualquer um dentro daquelas especificadas na tabela "pos". Depois de 5 min esse teleporte é destruído e mais 1 hora depois outro é criado, com mesmo efeito, aleatório, por 5 min bla bla...

 

Achei que você quisesse um teleporte fixo que de 2 em 2 min mude o destino, não precisa usar storage pra fazer isso.

A propósito, storage são valores que vão ser armazenados, só pra guardar uma informação, por exemplo, em qual estado está uma certa quest do player, aí eu pego a storage value de key 100 e coloco o valor 1, seria o estágio inicial. Aí num NPC, quando o player conversa com esse NPC, ele verifica qual o valor da key 100 do player (o campo 100 de valores armazenados) pra ver qual o estágio da quest... Se for 1, vai pedir um item X, ai depois que o player entregar, coloca o valor como 2, ai pede um item Y, ai coloca o valor como 3 que seria a quest concluída, só um exemplo...

Existem storages para players e storages globais, que seria um storage que vale pro server inteiro, utilizada em quests globais, como por exemplo anihilator... Também muito utilizada pra customizar o quest log, editando o quests.xml

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

9 respostass a esta questão

Posts Recomendados

  • 0

data\globalevents\scripts\tp.lua

function onThink(interval, lastExecution, thinkInterval)
local pos = {
[1] = {x = 160, y = 50, z = 7}, -- Coordenadas do destino
[2] = {x = 160, y = 51, z = 7},  -- Coordenadas do destino
[3] = {x = 160, y = 52, z = 7},  -- Coordenadas do destino
[4] = {x = 160, y = 53, z = 7},  -- Coordenadas do destino
[5] = {x = 160, y = 54, z = 7},  -- Coordenadas do destino
}
local po = {x=160, y=51, z=7} -- aqui coloca tp que vai aparecer
local time = 5
doCreateTeleport(1387, pos[math.random(1,5)],po)
doBroadcastMessage("O portal para o evento foi aberto e se fexará em 5 minutos.")
addEvent(deleteTp, time*60*1000)
addEvent(doBroadcastMessage, time*1000*60, "O portal do evento foi fexado. Próximo evento em 2 horas.")
return true
end
function deleteTp()
local delete = getTileItemById(pos, 1387)
doRemoveItem(delete.uid, 1)
doSendMagicEffect(pos, CONST_ME_TELEPORT)
end

data\globalevents\globalevents.xml

adiciona isso

<globalevent name="evento" interval="3600" event="script" value="tp.lua"/>

Link para o comentário
Compartilhar em outros sites

  • 0

@Vodkart

Eu ainda não entendo muito storage, na verdade, eu não sei oque é de verdade :x

Se tiver um tópico pra passar que me ajude a entender, adoraria ler ^^

 

Mas vou procurando saber oque é aqui, obrigado pela informação, aposto que logo será útil para mim ;)

 

@notle2012

Você é o cara que mais me responde aqui no forum rsrs

Obrigado pela ajuda amigo, vou testar aqui a script, daqui a pouco edito e digo se funcionou ou não...

 

--edit

A script funciona quase toda, ela só não deleta o portal, ai cria um em baixo do outro e acaba sempre teleportando para o mesmo lugar ):

 

Acredito que o problema esteja aqui:

 

function deleteTp()

local delete = getTileItemById(pos, 1387)

doRemoveItem(delete.uid, 1)

doSendMagicEffect(pos, CONST_ME_TELEPORT)

end

 

Me ajuda a terminar '---'

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

  • 0

function deleteTp()
local delete = getTileItemById(pos, 1387)
if delete.uid > 0 then
doRemoveItem(delete.uid, 1)
doSendMagicEffect(pos, CONST_ME_TELEPORT)
end
return true
end

 

 

Notle

usa assim

 

 

doCreateTeleport(1387, pos[math.random(1, #pos)],po)

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

  • 0

blz

Skymagnum

deixa monta pra ele

fico assim

function onThink(interval, lastExecution, thinkInterval)
local pos = {
[1] = {x = 160, y = 50, z = 7}, -- Coordenadas do destino
[2] = {x = 160, y = 51, z = 7},  -- Coordenadas do destino
[3] = {x = 160, y = 52, z = 7},  -- Coordenadas do destino
[4] = {x = 160, y = 53, z = 7},  -- Coordenadas do destino
[5] = {x = 160, y = 54, z = 7},  -- Coordenadas do destino
}
local po = {x=160, y=51, z=7} -- aqui coloca tp que vai aparecer
local time = 5
doCreateTeleport(1387, pos[math.random(1, #pos)],po)
doBroadcastMessage("O portal para o evento foi aberto e se fexará em 5 minutos.")
addEvent(deleteTp, time*60*1000)
addEvent(doBroadcastMessage, time*1000*60, "O portal do evento foi fexado. Próximo evento em 2 horas.")
return true
end
function deleteTp()
local delete = getTileItemById(pos, 1387)
if delete.uid > 0 then
doRemoveItem(delete.uid, 1)
doSendMagicEffect(pos, CONST_ME_TELEPORT)
end
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Ainda não funciona T.T

Da esse erro no distro:

[29/08/2012 23:16:08] [Error - GlobalEvent Interface]
[29/08/2012 23:16:08] In a timer event called from:
[9/08/2012 23:16:08] data/globalevents/scripts/tp.lua:onThink
[29/08/2012 23:16:08] Description:
[29/08/2012 23:16:08] attempt to index a nil value
[29/08/2012 23:16:08] stack traceback:
[29/08/2012 23:16:08]  [C]: in function 'getTileItemById'
[29/08/2012 23:16:08]  data/globalevents/scripts/tp.lua:18: in function <data/globalevents/scripts/tp.lua:17>

 

O problema é nessa linha:

local delete = getTileItemById(pos, 1387)

 

Já tentei colocar assim:

local delete = getTileItemById(po, 1387)

assim:

local delete = getTileItemById(pos, 1387).uid

assim:

local delete = getTileItemById(po, 1387).uid

e assim:

local delete = getTileItemById(pos, 1387)

 

E ainda nada T.T

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

  • 0

É porque po/pos não foi declarado nessa 2ª function, o certo seria:

 

 

local teleportPosition = {x=160, y=51, z=7} -- aqui coloca tp que vai aparecer
local pos = {
[1] = {x = 160, y = 50, z = 7}, -- Coordenadas do destino
[2] = {x = 160, y = 51, z = 7},  -- Coordenadas do destino
[3] = {x = 160, y = 52, z = 7},  -- Coordenadas do destino
[4] = {x = 160, y = 53, z = 7},  -- Coordenadas do destino
[5] = {x = 160, y = 54, z = 7},  -- Coordenadas do destino
}

function onThink(interval, lastExecution, thinkInterval)
local time = 5
doCreateTeleport(1387, pos[math.random(1, #pos)], teleportPosition)
doBroadcastMessage("O portal para o evento foi aberto e se fexará em 5 minutos.")
addEvent(deleteTp, time*60*1000)
addEvent(doBroadcastMessage, time*1000*60, "O portal do evento foi fexado. Próximo evento em 2 horas.")
return true
end

function deleteTp()
local delete = getTileItemById(teleportPosition, 1387)
if delete.uid > 0 then
	doRemoveItem(delete.uid, 1)
	doSendMagicEffect(teleportPosition, CONST_ME_TELEPORT)
end
return true
end

 

 

A script vai funcionar, mas não sei se é exatamente o que você quer...

Ela cria um teleporte no posição teleportPosition com um destino aleatório que pode ser qualquer um dentro daquelas especificadas na tabela "pos". Depois de 5 min esse teleporte é destruído e mais 1 hora depois outro é criado, com mesmo efeito, aleatório, por 5 min bla bla...

 

Achei que você quisesse um teleporte fixo que de 2 em 2 min mude o destino, não precisa usar storage pra fazer isso.

A propósito, storage são valores que vão ser armazenados, só pra guardar uma informação, por exemplo, em qual estado está uma certa quest do player, aí eu pego a storage value de key 100 e coloco o valor 1, seria o estágio inicial. Aí num NPC, quando o player conversa com esse NPC, ele verifica qual o valor da key 100 do player (o campo 100 de valores armazenados) pra ver qual o estágio da quest... Se for 1, vai pedir um item X, ai depois que o player entregar, coloca o valor como 2, ai pede um item Y, ai coloca o valor como 3 que seria a quest concluída, só um exemplo...

Existem storages para players e storages globais, que seria um storage que vale pro server inteiro, utilizada em quests globais, como por exemplo anihilator... Também muito utilizada pra customizar o quest log, editando o quests.xml

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

  • 0

@brun123

Muito obrigado cara, funcionou perfeitamente!!

 

E você tem rasão, não era exatamente como eu queria, mas eu posso colocar para um teleporte aparecer exatamente 1 segundo depois que ele abrir, assim funciona como eu pedi XD

 

Mas não é só isso que eu pedi que eu quero, quero envolver essa script com outras, do jeito que eu estou pensando, acho que vou precisar usar storage ou colocar a outra script toda dentro dessa, mas vou ver com calma, quero fazer algo novo que não tem em nenhum ot, então preciso fazer parte da script xD

 

Quero ver se loto meu ot com esse systema que estou planejando :D

 

@vorkart

Sou bem novo nisso, você poderia representar isso dentro de uma script, me ajudaria muito, se quiser, responda por mensagem privada, vou reportar esse tópico como dúvida sanada =P

 

@all

Obrigado a todos, assim que eu tiver um rep+ eu mando pro brun123, eu já tinha dado rep no notle2012

 

Vou ir dormir, boa noite a todos!

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

×
×
  • Criar Novo...