Postado Junho 29, 2020 4 anos Salve pessoal, eu amo tibia e a comunidade já me deu muito, hoje finalmente sinto que posso dar algo de volta e vou estar disponibilizando esse código pra evento que eu fiz pro meu servidor. Esse código pode ser melhorado bastante mas é funcional e acredito ter pensando em todas as possibilidades de abuso e ter corrigido, ainda assim caso você faça alguma melhora por favor compartilhe aqui nos comentários :). Vou disponibilizar também a hotkey de elfbot no fim do tópico. Durante o evento (duração de 15 min que você pode diminuir/aumentar), quando um player clica no item ele vai receber x leveis e a cada 2 clicks ele vai ganhar um item (no meu caso, uma event coin). Tem um exhaust de 2 secs a cada click pra evitar abuso com elfbot/auto click e eu não recomendo tirar, embora você possa diminuir/aumentar tranquilamente Em globalevents.xml adicione <globalevent name="clickupstart" time="19:00" event="script" value="clickupstart.lua"/> <globalevent name="clickupclose" time="19:15" event="script" value="clickupend.lua"/> Em globalevents/scripts crie um novo arquivo e nomeie de clickupend.lua e cole isso dentro local storage = 64242 -- storage function onTime() setGlobalStorageValue (storage, -1) doBroadcastMessage("THE CLICK UP EVENT HAS ENDED") return true end Ainda em globalevents/scripts crie um novo arquivo e nomeie de clickupstart.lua e cole isso dentro local storage = 64242 -- storage que você quer zerar. function onTime() setGlobalStorageValue (storage, 1) doBroadcastMessage("THE CLICK UP EVENT HAS STARTED") return true end Agora em actions.xml adicione a tag <action actionid="42113" script="clickup.lua"/> Em actions/scripts crie um arquivo chamado clickup.lua e cole isso dentro local tempo = 2 -- segundos para usar novamente function onUse(cid, item, frompos, item2, topos) if getGlobalStorageValue(64242) == 1 then if getPlayerStorageValue(cid, 45890) > os.time() or getPlayerLevel(cid) >= 717217 then -- se estiver no cooldown ou se for level maximo return doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, 45890) - os.time()).. " segundos para usar novamente e nao pode ser nivel maximo.") end if getPlayerStorageValue(cid, 45891) < 1 then doPlayerAddLevel(cid, 32) doCreatureSay(cid, "LEVEL UP", TALKTYPE_ORANGE_1, true, cid) setPlayerStorageValue(cid, 45890, 2 + os.time()) local bah = getPlayerStorageValue(cid, 45891) doPlayerSetStorageValue(cid, 45891, bah+1) return true else doPlayerAddLevel(cid, 32) doCreatureSay(cid, "LEVEL UP + EVENT COIN", TALKTYPE_ORANGE_1, true, cid) doPlayerAddItem(cid,10558,1) setPlayerStorageValue(cid, 45890, 2 + os.time()) doPlayerSetStorageValue(cid, 45891, -1) return true end else -- msg quando o evento não ta rolando return doPlayerSendCancel(cid, "The event haven't started yet.") end end Agora você abre seu mapa, cria uma area pro evento e você coloca a actions 42113 na statua/pedra/cristal que o player vai precisar dar use pra ganhar os leveis (eu uso o id 9779) NÃO SE ESQUEÇA QUE A HOTKEY DE ELFBOT VAI MUDAR SE VOCÊ NÃO USAR O MESMO ID QUE EU auto 200 listas 'Evento' | usegrounditem 8865 Editado Junho 29, 2020 4 anos por Gabrieldsadaxas erro gramatical (veja o histórico de edições)
Postado Junho 29, 2020 4 anos Autor Um cara no otland deu uma editada no código da action e deixou assim, sem usar nenhuma storage p armazenar tempo local players = {} local tempo = 2 -- exhaust to click again and get levels local level_gain = 32 local event_coin = {10558, 1} -- itemid, amount function onUse(cid, item, frompos, item2, topos) if getGlobalStorageValue(64242) ~= 1 then doPlayerSendCancel(cid, "The event haven't started yet.") return true end local cur_time = os.time() if players[cid] and players[cid][1] > cur_time or getPlayerLevel(cid) >= 717217 then -- if the player is on cooldown or has already reached max level doPlayerSendCancel(cid, "You must wait " .. (players[cid][1] - cur_time) .. " seconds to use again or you have already reached maximum level.") return true end local text = "LEVEL UP" if players[cid] and players[cid][2] == 2 then text = text .. " + EVENT COIN" doPlayerAddItem(cid, event_coin[1], event_coin[2]) end doPlayerAddLevel(cid, level_gain) doCreatureSay(cid, text, TALKTYPE_ORANGE_1, true, cid) players[cid] = {cur_time + tempo, players[cid] and players[cid][2] == 1 and 2 or 1} return true end
Postado Junho 29, 2020 4 anos Em 29/06/2020 em 13:21, Gabrieldsadaxas disse: Um cara no otland deu uma editada no código da action e deixou assim, sem usar nenhuma storage p armazenar tempo De uma maneira ou de outra a informação vai ficar na memoria, no caso de isso ser um evento massivo, eu iria optar pela sua versão com storage.
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.