Ir para conteúdo

[Tutorial] Cooldown com Storage


Roksas

Posts Recomendados

Cooldown com Storage

 

 

divisor.png

Saudações caros XTibianos, neste tópico ensinarei á vocês como criar um sisteminha de cooldown, seja ele oque for, movements, actions, talkactions.

 

 

 

Começando

 

divisor.png

Primeiramente, vocês devem ter uma leve noção sobre storages. Apartir disto, vamos á uns exemplos:

 

function onUse(cid, item, frompos, item2, topos)
doCreatureAddMana(cid, 100)
return true
end

 

Nesse código, ao usarmos X item iremos healar 100 de mana. Mas o player pode ficar clicando 500x que não vai ter um intervalo, ele vai sempre ficar healando, isso prejudica o game.

 

Mas como podemos fazer para ele poder usar de X em Xtempo? Com esta simples lógica:

 

function onUse(cid, item, frompos, item2, topos)

if getPlayerStorageValue(cid, 1234) < os.time () then
doCreatureAddMana(cid, 100)
setPlayerStorageValue(cid, 1234, os.time () + 10)
else
doPlayerSendCancel(cid, "Aguarde 10 segundos para utilizar novamente!")
end
return true
end

 

OU:

 

function onUse(cid, item, frompos, item2, topos)

if getPlayerStorageValue(cid, 1234) > os.time () then
doPlayerSendCancel(cid, "Aguarde 10 segundos!")
return true
end

doCreatureAddMana(cid, 100)
setPlayerStorageValue(cid, 1234, os.time() + 10)

 

Oque entendemos disso? É como se fosse uma quest, vai ganhar uma storage ao usar o item.

Ok, mas e daí?

 

setPlayerStorageValue(cid, 1234, os.time () + 10)

 

Os valores das storages podem ser strings (letras e/ou palavras) e muitas outras coisas.

 

Vocês devem estar acostumados com:

 

setPlayerStorageValue(cid, 1234, 1)

 

Também é certo, mas no exemplo que usei, você vai pegar o os.time() e dar a ele +10.

 

Mas, oque é os.time?

 

O os.time() é uma função da biblioteca "OS", que pega os segundos no exato momento em que declarou ele, ou seja:

 

setPlayerStorageValue(cid, 1234, os.time () + 10)

 

os.time() vai pegar os segundos de AGORA, e dar + 10.

 

E então, os.time () + 10 vai ser como uma contagem regressiva, a cada segundo vai caindo 1, até chegar no 0, ou seja sobrar apenas o os.time()

 

E aí o player vai poder usar novamente o item. Legal né? Vamos a mais uns exemplos:

 

function onSay(cid, words, param)

if getPlayerStorageValue(cid, 3210) > os.time() then
doPlayerSendTextMessage(cid, 27, "Você ainda está com cooldown.")
return true
end

doPlayerAddItem(cid, 2160, 1)
setPlayerStorageValue(cid, 3210, os.time () + 10)
end

 

No começo do código verificamos se a storage 3210 do player que executou a talkaction é MAIOR (>) que o os.time().

 

Se for vai mandar uma mensagem avisando, se não for vai adicionar 1 crystal coin ao player.

Depois que adicionar vamos atribuir á ele a storage:

 

setPlayerStorageValue(cid, 3210, os.time () + 10)

 

E aí começa a contagem dos 10 segundos, até o os.time() estiver peladinho :)

 

 

 

Finalizações

 

divisor.png

Só isso galerinha, espero que tenham entendido, caso eu tenha esquecido de algo só avisar, demais dúvidas estou aqui para atendê-los, beijo grande!

Link para o comentário
Compartilhar em outros sites

Rapaz, não acha mais fácil usar exhaustion.set(cid, storage, time), exhaustion.check(cid, storage) e exhaustion.get(cid, storage)?

 

OBS: O tutorial não passou pela aprovação ainda.

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

Roksas, sempre trazendo ótimos conteúdos e ajudando a galéra!

Intão né cara, eu acho que você deveria explicar no tutorial, como e onde adicionar

esse "Cooldown" em algum Iten, pois muitos iniciantes/e ou usuários nóvos não intende disso.

Bom, eu pelomenos que só me dou bem com Mapping, até que tenho uma noçãozinha

de Storages, por mexer com Ot servers por um "longo" tempo.

Por mim aprovado, mas ségue oque eu te falei que vai deixar o tutorial muito mais claro. (para quem ta começando)

Flw.

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

Eu dei esse exemplo usando a função onUse, leia novamente o tópico.

Creio que para entender melhor isso deve ter uma certa noção com storages.

Link para o comentário
Compartilhar em outros sites

Serio, eu acho que com exhaustion.set ficaria menorzin, talvez não funcione com você porque você um algum tipo de servidor que não tenha isso.

 

 

 

function onUse(cid, item, frompos, item2, topos)

   if exhaustion.check(cid, 1234) then
       doPlayerSendCancel(cid, "Aguarde 10 segundos!")
       return true
   end
   doCreatureAddMana(cid, 100)
   exhaustion.set(cid, 1234, 100)
end
end

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...