Ir para conteúdo
  • 0

Private Hunting - Sistema


EddyHavaiano

Pergunta

Alguém poderia me disponibilizar um sistema de HUNT privada que apenas players com X item use para ser teletransportado para X área onde vai ter caves quando ele entrar no teleporte inicia uma contagem de tempo que quando acaba ele vai para o templo...Ou então ele é teletransportado direto para a cave e depois de X tempo é teletransportado para o templo.

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

Posts Recomendados

  • 0

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 por Danihcv
Link para o comentário
Compartilhar em outros sites

  • 0

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 ^^

Link para o comentário
Compartilhar em outros sites

  • 0

@, na vdd não... Pois quando o player deslogar, ele vai interromper/cancelar o addEvent. E então ele ficará com a storage em 1 para sempre ao relogar.

Link para o comentário
Compartilhar em outros sites

  • 0

@

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 por Skulls
Link para o comentário
Compartilhar em outros sites

  • 0

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 por Danihcv
Link para o comentário
Compartilhar em outros sites

  • 0

@, ao usar os.time(), o comando retorna a quantidade de segundos que se passaram desde o dia 1 de janeiro de 1970 até o presente momento (em que o comando foi requisitado)

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

  • 0

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:

http://www.lua.org/pil/22.1.html

Link para o comentário
Compartilhar em outros sites

  • 0

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:

http://www.lua.org/pil/22.1.html

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
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...

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! :p

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

  • 0

@@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 :p). 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 por Danihcv
Link para o comentário
Compartilhar em outros sites

  • 0

 

@@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 :p). 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
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

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?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...