Documentação › Lua

HUD, janelas e utilitários

Esta página junta o que não é do jogo em si: desenhar na tela (HUD), janelas com botões (CustomModalWindow), timers (Timer), wait, JSON, som, teclas de atalho e as funções globais do Lua.

HUD#

Um HUD é um texto ou ícone desenhado por cima da tela do jogo. Some sozinho quando o script para.

HUD.new(x, y, valor)#

HUD.new(x, y, valor) → HUD

Cria um HUD na posição x, y da janela. Com valor número, desenha o ícone do item com esse id; com texto (ou nada), desenha o texto.

lua
local texto = HUD.new(20, 60, "Olá")
local icone = HUD.new(20, 90, 268) -- ícone de mana potion

HUD.newSpellIcon(x, y, spellId) e HUD.newOutfit(x, y, outfitId)#

→ HUD

Criam um HUD com o ícone de uma magia ou um outfit.

lua
local magia = HUD.newSpellIcon(20, 120, Spells.getIdByWords("exura vita"))

Métodos do HUD#

MétodoO que faz
hud:getId()Id do HUD (o que chega em HUD_CLICK e HUD_DRAG)
hud:getPos()Posição atual {x, y}
hud:setPos(x, y)Move
hud:setText(texto)Troca o texto
hud:setColor(r, g, b)Cor do texto (0 a 255)
hud:setFontSize(tamanho)Tamanho da fonte
hud:setHorizontalAlignment(a) / hud:setVerticalAlignment(a)Enums.HorizontalAlign / Enums.VerticalAlign
hud:setItemId(id) / hud:setSpellIconId(id)Troca o ícone
hud:setOutfitId(id), hud:setOutfitAddons(a), hud:setOutfitColors(cabeça, corpo, pernas, pés), hud:setOutfitDirection(d), hud:setOutfitMoving(b)Ajustes do outfit
hud:setSize(largura, altura), hud:setScale(v), hud:setOpacity(v), hud:setZIndex(z)Tamanho, escala, transparência e camada
hud:setDraggable(b)Deixa arrastar com o mouse (evento HUD_DRAG)
hud:setPhantom(b)O HUD não recebe cliques
hud:show() / hud:hide()Mostra / esconde
hud:setCallback(função)Função chamada ao clicar no HUD
hud:destroy()Apaga o HUD
hud:getMargins()Sempre {x = 0, y = 0}
lua
local botao = HUD.new(20, 100, "[ Pausar ]")
botao:setColor(255, 200, 0)
botao:setCallback(function()
  Engine.enableBot(not Engine.isBotEnabled())
end)

CustomModalWindow#

Uma janela com título, texto e botões, desenhada pelo bot no jogo.

CustomModalWindow.new(título, texto)#

→ janela

Cria a janela. O texto perde as quebras de linha e fica com no máximo 54 caracteres.

MétodoO que faz
janela:addButton(texto)Adiciona um botão. Retorna o índice dele (0, 1, 2...), ou nil depois de 20 botões
janela:setCallback(função)Função chamada com o índice do botão clicado
janela:setCaption(texto) / janela:setDescription(texto)Troca título e texto
janela:getId()Id da janela
janela:destroy()Fecha sem clique

Clicar num botão fecha a janela e dispara o evento CUSTOM_MODAL_WINDOW_BUTTON_CLICK.

lua
local janela = CustomModalWindow.new("Hunt", "Continuar a hunt?")
janela:addButton("Sim")
janela:addButton("Não")
janela:setCallback(function(botao)
  if botao == 1 then Engine.enableCaveBot(false) end
end)

Timer#

Roda uma função de tempos em tempos, na thread do script. O bot confere os timers a cada 20 ms mais ou menos.

Timer.new(nome, função, ms, iniciar)#

Timer.new(nome, função, ms, iniciar) → timer

ParâmetroTipoDescrição
nometextoNome do timer. Um timer novo com o mesmo nome substitui o antigo
funçãofunção ou textoA função, ou o nome de uma função global
msnúmero, opcionalIntervalo (padrão 100)
iniciarbooleano, opcionalfalse cria parado (padrão: começa na hora)
MétodoO que faz
timer:start() / timer:stop()Começa / para
timer:isActive()Se está rodando
timer:update(ms)Agenda a próxima execução para daqui a ms (sem ms, o intervalo normal)
timer:run()Roda a função agora
timer:name()Nome do timer

destroyTimer(nome) apaga o timer e retorna true se ele existia.

lua
Timer.new("cap", function()
  if Player.getCapacity() / 100 < 50 then Client.showMessage("Cap baixa") end
end, 5000)

wait(ms)#

wait(ms)

Pausa o script por ms milissegundos. Diferente do ZeroBot, eventos e timers do script continuam rodando durante a espera. Tempo negativo dá erro.

lua
Game.talk("hi")
wait(800)
Game.talk("trade")

JSON#

FunçãoO que faz
JSON.encode(valor)Tabela (ou número, texto, booleano) para texto JSON
JSON.decode(texto)Texto JSON para tabela. Dá erro se não receber um texto
lua
local t = JSON.decode('{"hp": 50}')
print(t.hp, JSON.encode({ 1, 2, 3 }))

Sound#

Sound.play(arquivo, padrão)#

Sound.play(arquivo, padrão) → booleano

Toca um .wav sem travar o script. Um caminho relativo parte de scripts/; com padrão = true, parte de scripts/sounds/. Retorna false se o arquivo não existe.

lua
Sound.play("alarm.wav", true) -- scripts/sounds/alarm.wav

HotkeyManager#

HotkeyManager.parseKeyCombination(texto)#

→ ok, modificadores, tecla

Converte um atalho como "Ctrl+Shift+F5" no código da tecla e na máscara de Enums.FlagModifiers. Aceita ctrl/control, alt, shift, numlock, letras, números, num0–num9, f1–f24 e nomes como space, enter, esc, home, pageup, left, delete. Retorna false, nil, nil para um atalho inválido.

HotkeyManager.keyMapping é a tabela nome → código usada na conversão.

lua
local ok, mods, tecla = HotkeyManager.parseKeyCombination("Alt+2")
if ok then print(tecla, mods) end -- 50  2

Lua e arquivos#

FunçãoO que faz
print(...)Escreve no Console como [nome do script] texto
require(nome)Carrega scripts/<nome>.lua ou scripts/<nome>/init.lua. package.path começa na pasta scripts/, e você pode acrescentar pastas
dofile(caminho)Roda o arquivo. Retorna true, ou nil e o erro (não derruba o script)
loadfile(caminho)Carrega o arquivo sem rodar. Retorna a função, ou nil e o erro
bit.band, bit.bor, bit.bxor, bit.bnot, bit.lshift, bit.rshift, bit.arshift, bit.rol, bit.ror, bit.bswap, bit.tobit, bit.tohexOperações de bits como no LuaJIT (32 bits com sinal)
unpack, loadstring, table.getn, math.pow, math.modNomes do Lua 5.1, para scripts antigos

Caminhos relativos em dofile e loadfile partem de scripts/.

lua
local util = require("lib/util") -- scripts/lib/util.lua