Ir para conteúdo

Featured Replies

Postado

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 por Gabrieldsadaxas
erro gramatical (veja o histórico de edições)

  • Respostas 5
  • Visualizações 3.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

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

  • Muito criativo, primeira vez que vejo um evento assim, obrigado!

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

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo