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?
Por juliok80, 22 de dez. de 2012 em Scripts
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

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?
info
Grupo: Artesão
Registrado: 15/11/12
Posts: 120
Reputação: +17
Char no Tibia: Ba Rao

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 ![]()
Valeu!
Editado Dezembro 26 por juliok80
info
Grupo: Artesão
Registrado: 18/12/12
Posts: 112
Reputação: +13

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 Dezembro 26 por StackMinute
info
Grupo: Artesão
Registrado: 15/11/12
Posts: 120
Reputação: +17
Char no Tibia: Ba Rao

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!? ![]()
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 Dezembro 27 por juliok80
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 Dezembro 28 por brun123
info
Grupo: Artesão
Registrado: 15/11/12
Posts: 120
Reputação: +17
Char no Tibia: Ba Rao

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:

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 ![]()
Até poderia dizer que eu daria +rep vitalicio, mas isso eu não posso prometer... rsrs
Editado Dezembro 28 por juliok80
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 Dezembro 28 por Manyzin
info
Grupo: Artesão
Registrado: 15/11/12
Posts: 120
Reputação: +17
Char no Tibia: Ba Rao

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!
brun123 ![]()
info
Grupo: Artesão
Registrado: 15/11/12
Posts: 120
Reputação: +17
Char no Tibia: Ba Rao
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!
Editado Dezembro 26 por juliok80