Roksas 846 Posted April 23, 2013 Share Posted April 23, 2013 Cooldown com Storage 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 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 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 to comment Share on other sites More sharing options...
LuckOake 400 Posted April 23, 2013 Share Posted April 23, 2013 (edited) 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. Edited April 23, 2013 by LuckOake Link to comment Share on other sites More sharing options...
Roksas 846 Posted April 23, 2013 Author Share Posted April 23, 2013 Acho, mas, infelizmente nunca funciona comigo, rsrs. Link to comment Share on other sites More sharing options...
FenixBorges 13 Posted April 24, 2013 Share Posted April 24, 2013 (edited) 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. Edited April 24, 2013 by FenixBorges Link to comment Share on other sites More sharing options...
Roksas 846 Posted April 24, 2013 Author Share Posted April 24, 2013 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 to comment Share on other sites More sharing options...
Gears 109 Posted April 24, 2013 Share Posted April 24, 2013 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 to comment Share on other sites More sharing options...
Roksas 846 Posted April 24, 2013 Author Share Posted April 24, 2013 No caso ficaria do mesmo tamanho, são 2 linhas, uma a verificar a outra a setar. Obrigado galerinha. Link to comment Share on other sites More sharing options...
Gears 109 Posted April 24, 2013 Share Posted April 24, 2013 No caso ficaria do mesmo tamanho, são 2 linhas, uma a verificar a outra a setar. Obrigado galerinha. Menor de se ler. Link to comment Share on other sites More sharing options...
Slicer 1070 Posted April 24, 2013 Share Posted April 24, 2013 provavel q o roks teste o exhaustion com GOD kkk -querem apostar?- Link to comment Share on other sites More sharing options...
Roksas 846 Posted April 24, 2013 Author Share Posted April 24, 2013 Ainda não cheguei a este ponto. Link to comment Share on other sites More sharing options...
kttallan 318 Posted April 24, 2013 Share Posted April 24, 2013 Gostei Do Tutorial Por Mim Aprovado ;D Link to comment Share on other sites More sharing options...
Recommended Posts