Ir para conteúdo
  • 0

Redes

Pergunta

Olá galera do Xtibia.

 

Recentemente vi um script para criar uma 'porta' que quando você puxasse certa alavanca ela era liberada, e logo em seguida ela voltava ao normal, para o próximo.

 

 

imagem1vt.th.png

 

 

imagem2uha.th.png

 

Script exatamente deste tópico.

 

http://www.xtibia.co...89348-alavanca/

 

____________________________________________

Utilizei o script disponibilizado pelo colega Leoxtibia.

 

pedra = {x=1,y=1,z=1, stackpos = 1} --- a posição da pedra // nao mexa no stackpos

idpedra = 1111 -- coloque o id da pedra

time = 20 -- tempo em segundos para a pedra aparecer

function onUse(cid, item, fromPosition, itemEx, toPosition)

doRemoveItem(getThingfromPos(pedra).uid, 1)

doPlayerSendTextMessage(cid, 18, "Você tem ".. time .." segundos para passar antes que a pedra volte!")

addEvent(createPedra, time*1000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

 

function createPedra(pos)

pos = {x=1,y=1,z=1,stackpos=1} --- posicao da pedra

idpedra = 1111 --- id da pedra

doCreateItem(idpedra, 1, pos)

end

 

 

_________________________

 

Ele funciona como o determinado, entretanto quando eu clico mais de um vez na alavanca, antes que a 'porta' volte, gera uma mensagem de erro:

 

[6/8/2012 18:59:54] [Error - Action Interface]

[6/8/2012 18:59:54] data/actions/scripts/Sacrificio Tomb.lua:onUse

[6/8/2012 18:59:54] Description:

[6/8/2012 18:59:54] (luaDoRemoveItem) Item not found

 

 

E então, por mais que eu puxe a alavanca, a 'porta' não abre mais.

 

 

imagem3ay.th.png

 

__________________________

 

Gostaria de saber como faço para a alavanca travar, enquanto a 'porta' está livre.

 

Obrigado

Redes

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Actions.xml:

<action actionid="7779" script="removewall.lua"/>

data/actions/scripts crie um arquivo chamado removewall.lua e adicione:

function onUse(cid, item, fromPosition, itemEx, toPosition)

function Wall()

local x = true

local B = {

{1056,{x=1041, y=1051, z=15, stackpos = 1}}, -- id da parede e pos da parede

{1056,{x=1041, y=1052, z=15, stackpos = 1}},

{1056,{x=1041, y=1053, z=15, stackpos = 1}},

{1056,{x=1041, y=1054, z=15, stackpos = 1}}

}

for i = 1, #B do

if getTileItemById(B[2], B[1]).uid == 0 then x = false end

if x == true then

doRemoveItem(getThingfromPos(B[2]).uid,1)

else

doCreateItem(B[1], 1, B[2])

end

end

end

Wall()

addEvent(Wall, 5000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

-Vermelho: Unica variável

 

Obs: Adicione e remova de acorda com o numero de paredes.

{1056,{x=1041, y=1053, z=15, stackpos = 1}},

 

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

Editando no RME:

action25.png

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

  • 0

Newtonnotwen

 

Fiz o que voce sugeriu, mas não deu certo.

 

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

function Wall()

local x = true

local B = {

{12902,{x=1511, y=559, z=8, stackpos = 1}}, -- id da parede e pos da parede

}

for i = 1, #B do

if getTileItemById(B[2], B[1]).uid == 0 then x = false end

if x == true then

doRemoveItem(getThingfromPos(B[2]).uid,1)

else

doCreateItem(B[1], 1, B[2])

end

end

end

Wall()

addEvent(Wall, 5000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

return true

end

 

Utilizei o seu script, mas não deu resultado.

 

Mesmo assim obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0
pedra = {x=1,y=1,z=1, stackpos = 1} --- a posição da pedra // nao mexa no stackpos
idpedra = 1111 -- coloque o id da pedra
time = 20 -- tempo em segundos para a pedra aparecer

local storage = 5931
local time_now = os.time()

function onUse(cid, item, fromPosition, itemEx, toPosition)
if getGlobalStorageValue(storage) - time_now >= 0 then
  doPlayerSendTextMessage(cid, 18, "A passagem já está liberada!")
else
  doRemoveItem(getThingfromPos(pedra).uid, 1)
  doPlayerSendTextMessage(cid, 18, "Você tem ".. time .." segundos para passar antes que a pedra volte!")
  addEvent(createPedra, time*1000)
  doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
  setGlobalStorageValue(storage, time_now+time)
end
return true
end
function createPedra(pos)
pos = {x=1,y=1,z=1,stackpos=1} --- posicao da pedra
idpedra = 1111 --- id da pedra
doCreateItem(idpedra, 1, pos)
end

Link para o comentário
Compartilhar em outros sites

  • 0

Eskylo e Newtonnotwen, obrigado pela paciência.

 

Infelizmente só poderei testar amanha, agora preciso sair.

 

Mas uma vez obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui voltar a tempo

 

Eskylo

 

O seu script realmente funcionou em partes.

 

Eu puxo a alavanca e a parede abre.

Caso eu puxe a alavanca novamente nada acontece, ótimo.

Mas quando o tempo passa e a parede volta, a alavanca fica travada, impossibilitando o uso novamente.

 

Newtonnotwen

 

Meu arquivo .xml está como o código do Eskylo:

 

 

pedra = {x=1511,y=559,z=8, stackpos = 1} --- a posição da pedra // nao mexa no stackpos

idpedra = 12902 -- coloque o id da pedra

time = 25 -- tempo em segundos para a pedra aparecer

 

local storage = 5931

local time_now = os.time()

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

if getGlobalStorageValue(storage) - time_now >= 0 then

else

doRemoveItem(getThingfromPos(pedra).uid, 1)

doPlayerSendTextMessage(cid, 18, "You can hear something moving!")

addEvent(createPedra, time*1000)

doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)

setGlobalStorageValue(storage, time_now+time)

end

return true

end

function createPedra(pos)

pos = {x=1511,y=559,z=8,stackpos=1} --- posicao da pedra

idpedra = 12902 --- id da pedra

doCreateItem(idpedra, 1, pos)

end

 

Agradeço a paciência desde já.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...