Sim. Acaba sendo um pouco injusto, exatamente como o @@Skulls falou.
*edit: se ngm postar um script mais "justo", eu acho que posto em breve.
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

Sim. Acaba sendo um pouco injusto, exatamente como o @@Skulls falou.
*edit: se ngm postar um script mais "justo", eu acho que posto em breve.
Editado Janeiro 7 por Danihcv
info
Grupo: Barão
Registrado: 13/07/15
Posts: 242
Reputação: +56
Char no Tibia: Sekk

Tenho quase certeza que é só trocar aquela tag do login.lua por:
if getCreatureStorage(cid, 5834) == -1 then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end
Quase certeza ^^
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

acho que tneho uma solução
Editado Janeiro 7 por Skulls
info
Grupo: Barão
Registrado: 13/07/15
Posts: 242
Reputação: +56
Char no Tibia: Sekk

Não sei então como.. Mas o que eu postei ele apenas checaria se estivesse como -1, e então teleportava pro templo, não?
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Sim, mas a partir do momento que ele loga o addevent para de valer, então quando ele voltar ele ainda vai ter o storage value 1, ou seja, acesso à hunt, mas sem a contagem regressiva que faria com que ele fosse retirado de lá ao final do tempo.
Faz o seguinte, cria um storage pra controlar o tempo.
local position = {x = 123, y = 456, z = 7}
local templepos = {x = 123, y = 456, z = 7}
local tempo = 10 * 60
function reduceTime()
doCreatureSetStorage(cid, 5835, getCreatureStorage(cid, 5835) - 1)
addEvent(reduceTime, 1000)
end
function onUse(cid)
doTeleportThing(cid, position)
doCreatureSetStorage(cid, 5834, 1)
doCreatureSetStorage(cid, 5835, tempo)
addEvent( function()
doTeleportThing(cid, templepos)
doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!")
doCreatureSetStorage(cid, 5834, -1)
end, 1000 * tempo)
addEvent(reduceTime, 1000)
return true
end
E la em login você altera pra isso:
tempo = getCreatureStorage(cid, 5834)
if getCreatureStorage(cid, 5834) == 1 then addEvent( function() doTeleportThing(cid, templepos) doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!") doCreatureSetStorage(cid, 5834, -1) end, 1000 * tempo) addEvent(reduceTime, 1000) end
Não testei, mas isso deve dar, acredito eu.
Editado Janeiro 7 por Skulls
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

Na vdd... Nem precisa complicar tanto.. sahusahuasuh
É só usar os.time:
script:
local position = {x = 123, y = 456, z = 7}
local templepos = {x = 123, y = 456, z = 7}
local tempo = 10
function onUse(cid)
doTeleportThing(cid, position)
doCreatureSetStorage(cid, 5834, os.time()+tempo)
addEvent( function()
doTeleportThing(cid, templepos)
doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!")
doCreatureSetStorage(cid, 5834, -1)
end, 1000 * tempo)
return true
end
parte do login.lua:
local tempo = 10 --tem que ser o mesmo tempo usado na script da action
if os.time() >= getCreatureStorage(cid, 5834) then
doCreatureSetStorage(cid, 5834, -1)
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
#edit: correção na logica...
Editado Janeiro 7 por Danihcv
info
Grupo: Barão
Registrado: 13/07/15
Posts: 242
Reputação: +56
Char no Tibia: Sekk

Dani, tem como vc me explicar oq significa os.time e como usa? Pq eu não achei NENHUM tutorial que me ajuda viu.. Pqp NENHUM
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

Não sei para que isso tudo, o player que deslogar não tem nenhuma intenção em fazer a hunt.
se ele clicou no item é porque ele quer fazer a hunt..., fiz isso só para ninguém burlar.
@@Danihcv, não se esqueça que a variável tempo não está no login.lua
#edit: correção na logica...
huehehueehu, já ia falar.
Dani, tem como vc me explicar oq significa os.time e como usa? Pq eu não achei NENHUM tutorial que me ajuda viu.. Pqp NENHUM
Bom como meu nome é Daniel, vou responder essa: o os.time() é uma função que quando você chama ela sem parametros ela retornar números que significam uma data, só que codificados, e mudam a cada segundo...
Veja aqui:
info
Grupo: Herói
Registrado: 14/02/14
Posts: 341
Reputação: +285
Gênero: Masculino
Char no Tibia: Night Wolf

editado: não tinha lido a ultima página.. já falaram do os.time(). foi mal.
Editado Janeiro 8 por Night Wolf
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Não sei para que isso tudo, o player que deslogar não tem nenhuma intenção em fazer a hunt.
se ele clicou no item é porque ele quer fazer a hunt..., fiz isso só para ninguém burlar.
@@Danihcv, não se esqueça que a variável tempo não está no login.lua
huehehueehu, já ia falar.
Bom como meu nome é Daniel, vou responder essa: o os.time() é uma função que quando você chama ela sem parametros ela retornar números que significam uma data, só que codificados, e mudam a cada segundo...
Veja aqui:
Caronte, eu entendo seu lado. Se o cara usou o trem que esteja apto a fazê-lo naquele momento.
Mas por outro lado, imagina você em um jogo que você curte pra caramba, realizou uma tarefa difícil e ganhou 15 minutos em um respaw único.
Ai, por infelicidade, 2 minutos após entrar no respaw o transformador da sua rua explode. Seria legal se conseguissem recuperar os 13 minutos restantes pra você, né?
Na vdd... Nem precisa complicar tanto.. sahusahuasuh
É só usar os.time:
script:
local position = {x = 123, y = 456, z = 7} local templepos = {x = 123, y = 456, z = 7} local tempo = 10 function onUse(cid) doTeleportThing(cid, position) doCreatureSetStorage(cid, 5834, os.time()+tempo) addEvent( function() doTeleportThing(cid, templepos) doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!") doCreatureSetStorage(cid, 5834, -1) end, 1000 * tempo) return true endparte do login.lua:
local tempo = 10 --tem que ser o mesmo tempo usado na script da action if os.time() >= getCreatureStorage(cid, 5834) then doCreatureSetStorage(cid, 5834, -1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end#edit: correção na logica...
hauehuaehuae Eu imaginei mesmo que tinha um jeito mais fácil.
7 anos sem mexer, jamais lembraria do os.time
Me ajuda a relembrar aqui, eu uso ele pra comparar 2 instantes de tempo, correto? A diferença entre o instante 1 e o instante 2 é a diferença, em segundos, dos dois instantes de tempo. É isso mesmo?
Editado: Se eu me lembro direito do os.time, acho que tem algumas inconsistências no script que você passou.
1. doCreatureSetStorage(cid, 5834, os.time()+tempo) deveria ser doCreatureSetStorage(cid, 5834, os.time()+tempo*1000)
2. O que você fez na verdade não devolve o tempo ao player, só garante que ele vai ter 15 minutos corridos de hunt após usar o item. Então, caso a casa dele exploda e ele queira fazer a hunt amanhã, ele perdeu o tempo do mesmo jeito, correto?
Acho que um jeito simples de resolver isso seria fazer quando o player deslogar a verificação do storage. Se ele não for -1, sinal que o tempo não acabou, então ao deslogar ele faz a comparação entre o storage armazenado e o os.time no instante de logout e encontra o tempo restante, altera o storage para esse tempo. Quando ele logar novamente, ele verifica que o storage não é -1, logo esta em uso, pega o os.time daquele instante soma ao valor do storage (que é o valor em segundos do tempo restante), altera novamente o storage para esse novo valor e chama um novo evento com o novo valor de tempo (o que foi guardado no logout).
Basicamente:
onLogout()
if getCreatureStorage(cid, 5834) ~= -1 then
doCreatureSetStorage(cid, 5834, getCreatureStorage(cid, 5834) - os.time())
end
onLogin()
if getCreatureStorage(cid, 5834) ~= -1 then
tempoRestante = getCreatureStorage(cid, 5834)
doCreatureSetStorage(cid, 5834, tempoRestante + os.time())
addEvent( function()
doTeleportThing(cid, templepos)
doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!")
doCreatureSetStorage(cid, 5834, -1)
end, tempoRestante)
end
Acredito que algo assim funcione. Caso eu tenha entendido errado, por favor me explique! ![]()
Editado Janeiro 8 por Skulls
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

@@Skulls, sobre multiplicar por 1000, isso não é necessario, pois o os.time retorna o valor em segundos e não em milissegundos. Sobre uma certa injustiça permanecer no meu script, isso está correto. Não havia pensado na possibilidade de "pausar" o tempo de uso... hehehehe
Seus scripts me parecem ter uma certa inconsistência tb (acredito que pela falta de pratica, que tb é o meu caso
). Segue os novos codigos:
@[member=Sekk],
Adicione uma tag ao arquivo creaturescripts.xml:
<event type="logout" name="questLogout" event="script" value="arquivo.lua"/>
Agora crie um arquivo.lua em creaturescripts\scripts:
function onLogout(cid)
if getCreatureStorage(cid, 5834) ~= -1 then
doCreatureSetStorage(cid, 5834, getCreatureStorage(cid, 5834)-os.time())
end
return true
end
parte para por no login.lua:
if getCreatureStorage(cid, 5834) ~= -1 then
tempoRestante = getCreatureStorage(cid, 5834)
doCreatureSetStorage(cid, 5834, tempoRestante + os.time())
addEvent( function()
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!")
doCreatureSetStorage(cid, 5834, -1)
end, tempoRestante*1000)
end
#edit: correção na logica...
Editado Janeiro 8 por Danihcv
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

@@Skulls, sobre multiplicar por 1000, isso não é necessario, pois o os.time retorna o valor em segundos e não em milissegundos. Sobre uma certa injustiça permanecer no meu script, isso está correto. Não havia pensado na possibilidade de "pausar" o tempo de uso... hehehehe
Seus scripts me parecem ter uma certa inconsistência tb (acredito que pela falta de pratica, que tb é o meu caso
). Segue os novos codigos:
@[member=Sekk],
Adicione uma tag ao arquivo creaturescripts.xml:
<event type="logout" name="questLogout" event="script" value="arquivo.lua"/>Agora crie um arquivo.lua em creaturescripts\scripts:
function onLogout(cid) if getCreatureStorage(cid, 5834) ~= -1 then doCreatureSetStorage(cid, 5834, os.time()-getCreatureStorage(cid, 5834)) end return true endparte para por no login.lua:
if getCreatureStorage(cid, 5834) ~= -1 then tempoRestante = getCreatureStorage(cid, 5834) doCreatureSetStorage(cid, 5834, tempoRestante + os.time()) addEvent( function() doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, 22, "Seu tempo acabou, e foi transportado de volta ao templo!") doCreatureSetStorage(cid, 5834, -1) end, tempoRestante*1000) end
Ah, bem pontuado. Não sabia que era em miliseconds.
Obrigado por ajustar bonitinho e colocar a tag do logout. Tenho um pouco de preguiça, mas acho que passei a ideia que queria, falta de prática é triste rs. Com relação a mudança que você fez, acredito que seja o storage - os.time mesmo, pois se o tempo não acabou (isto é, storage diferente de -1) então significa que o os.time atual é menor do que o valor do storage, o que resultaria num valor negativo se realizarmos os.time - storage, não?
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino
Acho que o que ele ta falando é que é um pouco injusto, caso eu precise logar e acabei de entrar na hunt, eu perdê-la.