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.
local texto = HUD.new(20, 60, "Olá")
local icone = HUD.new(20, 90, 268) -- ícone de mana potionHUD.newSpellIcon(x, y, spellId) e HUD.newOutfit(x, y, outfitId)#
→ HUD
Criam um HUD com o ícone de uma magia ou um outfit.
local magia = HUD.newSpellIcon(20, 120, Spells.getIdByWords("exura vita"))Métodos do HUD#
| Método | O 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} |
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étodo | O 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.
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âmetro | Tipo | Descrição |
|---|---|---|
| nome | texto | Nome do timer. Um timer novo com o mesmo nome substitui o antigo |
| função | função ou texto | A função, ou o nome de uma função global |
| ms | número, opcional | Intervalo (padrão 100) |
| iniciar | booleano, opcional | false cria parado (padrão: começa na hora) |
| Método | O 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.
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.
Game.talk("hi")
wait(800)
Game.talk("trade")JSON#
| Função | O 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 |
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.
Sound.play("alarm.wav", true) -- scripts/sounds/alarm.wavHotkeyManager#
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.
local ok, mods, tecla = HotkeyManager.parseKeyCombination("Alt+2")
if ok then print(tecla, mods) end -- 50 2Lua e arquivos#
| Função | O 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.tohex | Operações de bits como no LuaJIT (32 bits com sinal) |
unpack, loadstring, table.getn, math.pow, math.mod | Nomes do Lua 5.1, para scripts antigos |
Caminhos relativos em dofile e loadfile partem de scripts/.
local util = require("lib/util") -- scripts/lib/util.lua
Comentários
para comentar.