Ir para conteúdo
  • 0

Teleport onde só um player pode passar, e liberar a entrada novamente depois de 3 min


juliok80

Pergunta

E ae galera, joinha!?

 

Bom... estava eu procurando por ai um script para teleport, onde apenas um player pode entrar e depois de uns 3 minutos liberar a entrada novamente, porém não encontrei o script. Então estou aqui humildemente pedindo a ajuda de uma alma bondosa para que possa me ajudar.

 

Como eu havia falado, o script deve permitir a entrada de apenas 1 player por vez, e liberar a entrada novamente após 3 minutos. Caso outro player tentar entrar neste teleport, o player voltará para a posição anterior e será notificado com uma mensagem dizendo "Já existe um player nesta sala."

 

A versão do otserv é 8.6

 

@Edit

 

Também pode ser assim assim... o player entra no teleport, dai faz o que tem que fazer lá no lugar que foi teleportado, dai quando ele pisar em um tile especifico o teleport que ele havia passado é liberado para que outro player possa entrar... acho que assim fica até melhor!

 

Abraços, e um feliz ano novo a todos! positivo.gif

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

9 respostass a esta questão

Posts Recomendados

  • 0

ta diz uma coisa... vai ser soh um tile na entrada de uma sala eh isso?

e dai quando algum player passar vai precisar esperar 3min pra q outro player entre... mas e se passar os 3min e o 1* player ainda estiver la dentro?

Link para o comentário
Compartilhar em outros sites

  • 0

ta diz uma coisa... vai ser soh um tile na entrada de uma sala eh isso?

e dai quando algum player passar vai precisar esperar 3min pra q outro player entre... mas e se passar os 3min e o 1* player ainda estiver la dentro?

 

Então, era pra ser um teleport, mas se quiser fazer um tile tudo bem... algo que teleporte a pessoa pra dentro de uma sala, e depois de 3 min liberaria a passagem novamente mesmo que tenha alguém lá dentro.

 

 

@Edit

 

Também pode ser assim assim... o player entra no teleport, dai faz o que tem que fazer lá no lugar que foi teleportado, dai quando ele pisar em um tile especifico o teleport que ele havia passado é liberado para que outro player possa entrar... acho que assim fica até melhor!

 

Preciso muito desse script sad.png

 

Valeu!

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

  • 0

local posentrar = {x=123, y=321, z=7} -- Posiçao que ele irá ao ser teleportado para dentro
local possair = {x=321, y=123, z=7} -- Posiçao que ele irá ao ser teleportado para fora
local mins = 30 -- Minutos que ele ficará na sala
local storagemundial = 10101 -- Não mexa
local hours = 3
function onSair(cid)
doTeleportThing(cid,possair)
setPlayerStorageValue(cid,20202,-1)
doPlayerSendTextMessage(cid,27,"Voce foi teleportado para fora da sala")
return true
end
function storageSair(cid)
setGlobalStorageValue(storagemundial, -1)
doBroadcastMessage("A Sala está aberta denovo.")
return true
end
function onUse(cid,item,item2,topos,frompos,pos)
if getGlobalStorageValue(storagemundial) <= 0 then
doTeleportThing(cid,posentrar)
addEvent(function() onSair(cid) end,mins*60)
doPlayerSendTextMessage(cid,27,"Voce foi teleportado para dentro da sala e ficara "..mins.." ai dentro")
setPlayerStorageValue(cid,20202,1)
setGlobalStorageValue(storagemundial, 1)
addEvent(function() storageSair(cid) end,hours*60*60)
else
doPlayerSendTextMessage(cid,27,"A Sala ainda não está aberta")
return true
end
end

 

Em Actions.xml adicione :

<action itemid ="XXXX" event="script" value="magicroom.lua"/>

 

Agora , para evitar bugs , ao player deslogar dentro da sala , vá em

 

Data/CreatureScript/Scripts . e crie um arquivo chamado (roomlogout.lua)

e dentro adicione :

 

local possair = {x=123, y=321, z=7}
function onLogout(cid)
if getPlayerStorageValue(cid,20202) >= 1 then
doTeleportThing(cid,possair)
addEvent(doRemoveCreature,1,cid)
end
end

 

Ainda em creaturescripts/scripts , vá em (login.lua) e lá dentro adicione:

registerCreatureEvent(cid, "RoomLogout")

 

Agora em creaturescripts.xml adicone

<event type="logout" name="RoomLogout" event="script" value="roomlogout.lua"/>

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

  • 0

local posentrar = {x=123, y=321, z=7} -- Posiçao que ele irá ao ser teleportado para dentro
local possair = {x=321, y=123, z=7} -- Posiçao que ele irá ao ser teleportado para fora
local mins = 30 -- Minutos que ele ficará na sala
local storagemundial = 10101 -- Não mexa
local hours = 3
function onSair(cid)
doTeleportThing(cid,possair)
setPlayerStorageValue(cid,20202,-1)
doPlayerSendTextMessage(cid,27,"Voce foi teleportado para fora da sala")
return true
end
function storageSair(cid)
setGlobalStorageValue(storagemundial, -1)
doBroadcastMessage("A Sala está aberta denovo.")
return true
end
function onUse(cid,item,item2,topos,frompos,pos)
if getGlobalStorageValue(storagemundial) <= 0 then
doTeleportThing(cid,posentrar)
addEvent(function() onSair(cid) end,mins*60)
doPlayerSendTextMessage(cid,27,"Voce foi teleportado para dentro da sala e ficara "..mins.." ai dentro")
setPlayerStorageValue(cid,20202,1)
setGlobalStorageValue(storagemundial, 1)
addEvent(function() storageSair(cid) end,hours*60*60)
else
doPlayerSendTextMessage(cid,27,"A Sala ainda não está aberta")
return true
end
end

 

Em Actions.xml adicione :

<action itemid ="XXXX" event="script" value="magicroom.lua"/>

 

Agora , para evitar bugs , ao player deslogar dentro da sala , vá em

 

Data/CreatureScript/Scripts . e crie um arquivo chamado (roomlogout.lua)

e dentro adicione :

 

local possair = {x=123, y=321, z=7}
function onLogout(cid)
if getPlayerStorageValue(cid,20202) >= 1 then
doTeleportThing(cid,possair)
addEvent(doRemoveCreature,1,cid)
end
end

 

Ainda em creaturescripts/scripts , vá em (login.lua) e lá dentro adicione:

registerCreatureEvent(cid, "RoomLogout")

 

Agora em creaturescripts.xml adicone

<event type="logout" name="RoomLogout" event="script" value="roomlogout.lua"/>

 

 

Muitíssimo obrigado!

 

Só uma duvida... teria como eu criar uma action para um teleport de saida caso o player complete a quest... tipo, ele entra em um teleport dai remove o evento de teleportar ele pra fora da sala.

 

Será que daria certo se eu fizesse uma action usando o script de logout!?

 

Assim, em data/actions/actions.xml:

 

<action itemid ="XXXX" event="script" value="saidaroom.lua"/>

 

E em data/actions/scripts/saidaroom.lua

 

local possair = {x=123, y=321, z=7}
function onLogout(cid)
if getPlayerStorageValue(cid,20202) >= 1 then
doTeleportThing(cid,possair)
addEvent(doRemoveCreature,1,cid)
end
end

 

@Edit

 

Rapaz... acabei de testar aqui e não funcionou, queria saber se estou fazendo certo.

 

Eu criei um arquivo dentro de data/actions/scripts/magicroom.lua com o código abaixo:

 


local posentrar = {x=85, y=944, z=15} -- Posiçao que ele irá ao ser teleportado para dentro
local possair = {x=110, y=920, z=14} -- Posiçao que ele irá ao ser teleportado para fora
local mins = 1 -- Minutos que ele ficará na sala (coloquei 1 min pra testar)
local storagemundial = 10101 -- Não mexa
local hours = 3
function onSair(cid)
doTeleportThing(cid,possair)
setPlayerStorageValue(cid,20202,-1)
doPlayerSendTextMessage(cid,27,"Você foi teleportado para fora da sala.")
return true
end
function storageSair(cid)
setGlobalStorageValue(storagemundial, -1)
doBroadcastMessage("A Sala está aberta novamente.")
return true
end
function onUse(cid,item,item2,topos,frompos,pos)
if getGlobalStorageValue(storagemundial) <= 0 then
doTeleportThing(cid,posentrar)
addEvent(function() onSair(cid) end,mins*60)
doPlayerSendTextMessage(cid,27,"Você foi teleportado para dentro da sala e terá "..mins.." minutos para finalizar, senão você será teleportado para fora da sala.")
setPlayerStorageValue(cid,20202,1)
setGlobalStorageValue(storagemundial, 1)
addEvent(function() storageSair(cid) end,hours*60*60)
else
doPlayerSendTextMessage(cid,27,"A Sala ainda não está aberta.")
return true
end
end

 

Dai adicionei em data/actions/actions.xml

 

<action itemid ="9000" event="script" value="magicroom.lua"/>

 

Ai fui no Map Editor e adicionei o ActionID 9000 no teleport, também fiz as outras partes, porém acho que até aqui já deveria estar funcionando (parcialmente) não é mesmo!? ohmy.png

 

Não aparece nem as mensagens.

 

@Edit 2

 

Os players acabaram de me avisar de um bug que estava ocorrendo, quando eles tentavam deslogar usando CTRL+L ou CTRL+Q ou clicando no botão logout, não acontecia nada... dai lembrei que tinha alterado o script do login.lua, retirei aquela linha do arquivo e exclui o arquivo roomlogout.lua, reiniciei o ot e ai voltou a funcionar o logout.

 

Por favor Sensei, me diga o que eu fiz de errado, ou se está faltando alguma coisa...

 

Obrigado!

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

  • 0

local bloqueado = 0

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)

if os.time() - bloqueado < 0 then
	doTeleportThing(cid, fromPosition, false)
	doPlayerSendCancel(cid, "Deve esperar "..math.abs(os.time() - bloqueado).." segundos para entrar aqui.")
return true
end

local teleportEntrada = {x = 1, y = 1, z = 1}
local tempo = 3 * 60 -- em segundos, isso equivale a 3 minutos

doTeleportThing(cid, teleportEntrada, false)
doSendMagicEffect(teleportEntrada, CONST_ME_TELEPORT)
bloqueado = os.time() + tempo

return true
end

 

Um player entra, e durante 3 minutos a entrada é bloqueada. Após os 3 minutos, mesmo que o player antigo continue no lugar onde ele foi teleportado, outro player poderá entrar e a entrada será novamente fechada por 3 minutos. Se o player que entrou sair antes do tempo ter passado, a passagem continuará bloqueada até que o tempo passe.

 

O problema do logout foi causado pela falta de um return true antes do último end no script do logout.

 

A script é um movements, o tipo é StepIn, basta ver outra tag no movements.xml e copiar.

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

  • 0

local bloqueado = 0

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)

if os.time() - bloqueado < 0 then
	doTeleportThing(cid, fromPosition, false)
	doPlayerSendCancel(cid, "Deve esperar "..math.abs(os.time() - bloqueado).." segundos para entrar aqui.")
return true
end

local teleportEntrada = {x = 1, y = 1, z = 1}
local tempo = 3 * 60 -- em segundos, isso equivale a 3 minutos

doTeleportThing(cid, teleportEntrada, false)
doSendMagicEffect(teleportEntrada, CONST_ME_TELEPORT)
bloqueado = os.time() + tempo

return true
end

 

Um player entra, e durante 3 minutos a entrada é bloqueada. Após os 3 minutos, mesmo que o player antigo continue no lugar onde ele foi teleportado, outro player poderá entrar e a entrada será novamente fechada por 3 minutos. Se o player que entrou sair antes do tempo ter passado, a passagem continuará bloqueada até que o tempo passe.

 

O problema do logout foi causado pela falta de um return true antes do último end no script do logout.

 

A script é um movements, o tipo é StepIn, basta ver outra tag no movements.xml e copiar.

 

Rapaz... não deu certo, agora também não sei se fiz certo, veja só:

 

Eu adicionei essa linha em \data\movements\movements.xml

 

<movevent type="StepIn" actionid="13507" event="script" value="teleportarena.lua"/>

 

E em data\movements\scripts\teleportarena.lua

 

 

local bloqueado = 0


function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)

	if os.time() - bloqueado < 0 then
			doTeleportThing(cid, fromPosition, false)
			doPlayerSendCancel(cid, "Já existe um player fazendo essa quest.")
	return true
	end

	local teleportEntrada = {x = 95, y = 940, z = 15} -- localização do teleport de entrada
	local tempo = 1 * 60 -- em segundos, isso equivale a 1 minutos (coloquei 1 para testar)

	doTeleportThing(cid, teleportEntrada, false)
	doSendMagicEffect(teleportEntrada, CONST_ME_TELEPORT)
	bloqueado = os.time() + tempo

return true
end

 

E no map editor adicionei o actionID 13507 no teleport conforme imagem abaixo:

 

35929707.png

 

Por favor, você poderia me falar se fiz algo errado!?

 

Se alguém puder me ajudar eu ficarei eternamente grato e prometo que darei +rep durante 1 mes inteiro positive.gif

 

Até poderia dizer que eu daria +rep vitalicio, mas isso eu não posso prometer... rsrs

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

  • 0

Tente pôr esse ActionId seu (13507) no tile(chão) e não no teleport

mas pode por o teleport em cima do chão pra disfarçar.

PS: Coloca o teleport sem destination, o destino você muda no script do brun

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

  • 0

Tente pôr esse ActionId seu (13507) no tile(chão) e não no teleport

mas pode por o teleport em cima do chão pra disfarçar.

PS: Coloca o teleport sem destination, o destino você muda no script do brun

 

Rapaz... era isso mesmo!

 

Muito obrigado... brun123 serei eternamente grato, pode esperar muitos +rep de mim, você também Manyzin... assim que eu terminar de dar +rep pro brun123 eu dou o seu!

 

Agradeço a todos que tentaram me ajudar, um forte abraço!

 

heart.png brun123 oops.gif

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...