Lua / 60 MIN DE LEITURA
Lua no RGXbot: curso completo e referência da API
Aprenda a escrever waypoints Action e Lua. Aprenda todas as funções, variáveis, formas e exemplos práticos.
Curso básico + catálogo API completo · 11/12/2026
Introdução
Você aprenderá três lugares para usar Lua, escrever sua primeira condição, preparar um formulário de opções e conectá-lo a uma rota. Abaixo do curso você encontrará um catálogo completo de funções, aliases, variáveis e caminhos de configuração disponíveis no RGXbot. Status do conteúdo: 12 de novembro de 2026. Este é um subconjunto próprio de Lua, portanto, scripts prontos de outros bots requerem personalização.
1. Escolha um local de execução
Action executa tarefas periódicas. Na aba Action, clique em Adicionar, informe um nome, ative a ação e defina o intervalo em milissegundos, por exemplo 1000. Cole o código, use Testar Lua e depois Salvar em Action. Iniciar inicia o módulo. Arquivo → Salvar salva a configuração em XML. Salvar o código e iniciar o módulo são etapas separadas.
Waypoint Action executa o código em um determinado ponto da rota. No editor de waypoints, selecione o tipo Action e insira o código. Use-o para verificar suprimentos, trocar guias ou NPCs de sequência única. Prepare etiquetas antes de iniciar o salto. O próprio Action cíclico não possui posição de waypoint.
Configuração do script → Definição Lua / JSON cria um formulário de configurações. Declare os controles neste editor; ele não controla o jogo. Use Aplicar e depois Arquivo → Salvar. O código do formulário é separado do código Action.
Não cole o curso inteiro em um campo. Cada bloco é um exemplo separado; o bloco marcado como "Formulário" vai apenas para a definição do formulário.
2. O primeiro script sem comandos de jogo
Este exemplo calcula apenas os valores. Cole-o em uma nova ação e selecione Test Lua com o personagem carregado. Nenhum comando agendado é o resultado correto aqui. Não use print(): o interpretador não oferece suporte.
-- $... to odczyty RGXbot. local to własna zmienna.
local minimumCap = 150
local lowCapacity = $cap < minimumCap
local healthPercent = $hppc
local missingMana = max(0, $maxmp - $mp)local armazena um valor apenas durante a chamada atual. O próximo ciclo de Action reinicia o código. $hp é a quantidade de pontos de vida e $hppc é a porcentagem. Atribuir um valor a uma variável não cura o personagem. Leituras em Testar Lua exigem o contexto adequado do cliente.
3. Condições, nil e unidades
if inicia uma condição, elseif verifica outra possibilidade e else trata os demais casos. Cada bloco termina com end. Compare com ==, atribua com = e escreva desigualdade como ~=. Combine condições com and, or, not. Apenas false e nil são falsos; 0 é verdadeiro.
local state = "gotowy"
if $stamina == nil then
state = "brak odczytu staminy"
elseif $stamina < 1200 then
state = "stamina ponizej 20 godzin"
else
state = "stamina wystarcza"
endA stamina tem uma unidade de minutos: 1200 são 20 horas. wait(1000) representa um segundo e spellcooldown() retorna segundos. Nunca compare uma leitura desconhecida nil com um número. Os status $poisoned e similares também podem ser nil. Nenhum dado significa nenhum conhecimento, nem um estado seguro ou um saldo zero.
4. Primeira regra cíclica
O código a seguir planeja interromper os módulos após a morte ou quando a stamina estiver abaixo do limite da amostra. Primeiro, visualize o plano em Test Lua e, em seguida, selecione o limite para sua própria sessão. As condições de parada do painel integrado ainda se aplicam; não os substitua pelo próprio script. stopbot() encerra o script atual.
if $dead then
stopbot("Smierc postaci")
end
if $stamina ~= nil and $stamina < 1200 then
stopbot("Limit staminy: ponizej 20 godzin")
endO teste Lua mostra um plano e não executa comandos no cliente. Não prova uma parada, lançamento de feitiço ou compra bem-sucedida. Somente após verificar o plano, execute o módulo apropriado e confirme o resultado no painel e no jogo. Na ausência de stamina, o exemplo não toma decisões com base nesta leitura.
5. Um feitiço com controle de recursos
Escolha uma magia conhecida, a vocação e o custo de mana do seu personagem. Abaixo há uma condição de exemplo para um personagem que conhece exura. O limite de 70% e o custo de 20 de mana são valores do exemplo. Não execute regras de cura concorrentes ao mesmo tempo sem verificar sua configuração.
if not $dead and not $pz and $hppc < 70 and $mp >= 20 then
if spellcooldown("exura") == 0 then
spell("exura")
end
endspell() é um comando e retorna nil; não escreva if spell(...) then. Avalie HP e mana após a execução. As leituras são atualizadas após o comando, mas a variável local mantém o valor calculado anteriormente. Para poções use useself() e itemcooldown(), e para runas no alvo verifique também $target ~= 0.
6. Um formulário para vários personagens
Cole o bloco abaixo na definição do formulário, use Aplicar e confira os campos em Configuração do script. O ID 268 é um suprimento de exemplo; ajuste o ID, as quantidades e o nome da etiqueta à sua rota. O formulário não compra poções sozinho.
addmenu("return", "Powrot i zapasy")
addcheckbox("return_enabled", "Kontroluj powrot", true)
addspinbox("min_cap", "Minimalny cap", 150, 0, 10000)
addtextbox("return_label", "Etykieta powrotu", "refill")
addsupply("mana", "Mana potion", 268, 50, 300)Em seguida, crie um rótulo refill na rota e adicione o waypoint Action com o código abaixo. needsrefill() leva em consideração a habilitação de retorno, limite mínimo e mínimos de estoque habilitados. supplyneed() conta o erro em relação ao alvo, não o mínimo. Os contadores incluem equipamentos e contêineres abertos.
if needsrefill() then
gotolabel(getuseroption("return_label"))
endgotolabel() encerra o script: nenhuma linha adicional é executada. Defina as opções como Do script ou Personalizado para caractere para que o XML comum tenha limites diferentes para caracteres diferentes. Salve o perfil e o XML e verifique se há recarga.
7. Pedido, espera e loops
Os comandos são executados em ordem. wait() pausa o script atual; pausewalking() pausa o movimento. Na entrada opcional compatível, o Healer compartilhado pode funcionar durante a espera. Evite laços longos e infinitos: use o intervalo de Action para verificações regulares. Os laços têm limite de 10.000 iterações e o aninhamento, de 32 níveis.
local attempt = 0
while attempt < 3 do
attempt = attempt + 1
if $target ~= 0 then
break
end
wait(200)
endNão tente novamente uma compra ou transferência automaticamente após um resultado desconhecido. submitted significa que a entrada foi enviada e confirmed significa que o observador confirma o efeito. Lembre-se de inputactionid() antes de wait() se estiver rastreando uma operação específica: a recuperação pode alterar o último registro.
8. NPC, banco e depósito
Primeiro, leve seu personagem ao NPC correto no mesmo andar. npcsay("hi") inicia conversação; verifique a resposta npcisopen(), npcname() e npcmessage() antes de continuar. O comércio precisa de uma oferta aberta, dinheiro, espaço e o nome certo do item. Suporte para compra e venda no máximo 100 peças por ligação.
checkbank() consulta o saldo e bankbalance() o lê. Não adicione npcyes() após bankwithdraw(): a confirmação é automática. depositall() deposita moedas no banco. depositer() guarda o loot no depot, enquanto deposititems() guarda todas as pilhas dos IDs indicados. stashcount() exige a leitura de um Supply Stash aberto.
A referência abaixo contém assinaturas completas e exemplos separados de banco, comércio, munição, transferências, depot e Stash. Os números dos contêineres são IDs atuais de janelas; não os salve permanentemente entre sessões. Os slots de itens em contêineres começam em 0.
9. Reconecte e controle de execução
reconnect() deve ser a primeira instrução do Action cíclico para funcionar sem leitura do PLAYER. Usa as configurações de reconexão e o mesmo caractere selecionado no painel. Não ignora morte, 2FA ou limites; o erro interrompe o código adicional. Em um waypoint, a chamada só funciona quando o mecanismo executa esse waypoint. Não inicia a rota automaticamente após a desconexão.
reconnect()
local character = $character
local currentHealth = $hpApós cada novo script, verifique a sintaxe através do Test Lua, leia o plano, faça um teste controlado e observe o resultado. Em caso de erro utilize log Action e Diagnóstico. Mantenha o nome da função, os argumentos e a mensagem de erro. Uma função desconhecida geralmente significa um erro de digitação, um caso diferente ou um pedaço de Lua completo que este interpretador não suporta.
10. O que você sabe e onde procurar em seguida
Você pode selecionar contexto, ler $..., verificar nil, criar condições, controlar entidades, construir um formulário e direcionar uma rota. O diretório API abaixo inclui todos os nomes de funções de tempo de execução, aliases matemáticos, declarações de formulário e variáveis. Pesquise, por exemplo. $stamina, buyitems, addspinbox ou priority.targeting. Para cada grupo, leia também os requisitos e restrições, não apenas a assinatura em si.
O interpretador não suporta function, for, repeat, criação de tabela, pairs, ipairs, print, require ou bibliotecas de arquivos, rede e sistema. A exceção à falta de tabelas são os valores de intervalo prontos do formato JSON: seus campos from e to podem ser lidos. Utilize exemplos compatíveis com RGXbot.
Introdução
Referência completa da API do RGXbot. Abrange Action e waypoints Action; declarações do formulário usam um contexto separado.
Como os scripts são executados
Os comandos de um script em execução seguem a ordem. Após um comando, o mecanismo atualiza o estado: o próximo itemcount() ou $hp usa uma nova leitura. Variáveis locais mantêm seus valores até o fim da chamada. Elas não preservam estado entre execuções separadas do script Action.
O teste Lua mostra o plano, sem executar comandos no cliente. Não simula resultados de compras ou tratamentos. Portanto, a condição após a compra planejada pode dar um resultado diferente do que durante a execução real com atualização de status.
Lê números de retorno, strings ou valores lógicos. Comandos como spell(), buyitems() e checkbank() retornam nil para código Lua; o resultado da operação é verificado na próxima leitura e os erros são incluídos nos logs. Não escreva if buyitems(...) then: esta não é uma função de sucesso.
Os comandos usam a entrada selecionada. memory significa simulação opcional de teclado e mouse; não troca o backend padrão native. Leituras da interface e algumas operações de janelas exigem um cliente em execução e um controlador de memória disponível, independentemente de onde o script roda.
Faça login novamente: reconnect()
reconnect()Sem argumentos: registra novamente o mesmo caractere selecionado no painel. Usa o controlador de login existente e o cofre da conta do sistema. Ele não desconecta um personagem que já está online corretamente e não reinicia o cliente do jogo. Outras instruções do script são executadas somente após a confirmação de um personagem ao vivo com o nome correto; eles então atualizam as leituras da nova sessão. O resultado para Lua é nil, assim como acontece com outros comandos de controle.
No módulo Action, coloque reconnect() como primeira instrução para que execute mesmo sem leitura PLAYER disponível. Uma condição com $hp ou $name antes dela ainda exige leitura do personagem. Em waypoints Action, a função fica disponível quando o mecanismo executa o ponto; ela não inicia o waypoint automaticamente após uma desconexão.
A função respeita as configurações de reconexão do painel e limita toda a espera a no máximo 10 minutos. Interromper ou alterar o cliente, back-end ou caractere selecionado interrompe a operação. 2FA, morte, caráter incompatível, detalhes da conta ausentes ou limite excedido interrompem instruções adicionais; eles não ignoram as medidas de segurança e não zeram automaticamente o contador de tentativas. O erro Action requer uma nova tentativa explícita. Os status são visíveis na janela Reconectar… e no log do script. O modo nativo mantém os controles de jogo nativos; somente o login usa a ponte de UI existente.
Sintaxe e unidades
São suportados local, atribuições, if/elseif/else/end, while/do/end, break, return, comentários -- e --[[ ... ]], strings em ambos os tipos de aspas, números, true, false, Ações nil, + - * / % ^, comparações == ~= < <= > >=, concatenação .. e and/or/not. Ponto e vírgula são opcionais. Os nomes das funções diferenciam maiúsculas de minúsculas. Apenas false e nil são falsos: o número 0 é verdadeiro.
Definições personalizadas function, for/repeat loops, tabelas, pairs/ipairs, print, require, arquivos, rede e bibliotecas de sistema não são suportadas. local não fornece a semântica de escopo completo de Lua completa. O loop tem um limite de 10.000 iterações e o aninhamento tem um limite de 32 níveis.
| Valor | Unidade/intervalo |
|---|---|
wait, pausewalking, $hunt_time, $target_time, $stand_time | milissegundos |
spellcooldown, itemcooldown, $food | segundos |
| HP/mana em porcentagem | 0–100 |
| ID do item | inteiro 1–65535 |
| coordenadas x/y e piso z | x/y 0–65535, z 0–15 |
| número do contêiner aberto | ID da janela atual, geralmente 0–255; não a posição na tela |
| slot no contêiner | um índice de 0 |
| número da caixa do depot | 1–21 |
| quantidade em comandos de item | geralmente 1–100.000; comprar/vender no máximo 100 por ligação |
Nas assinaturas, [argument] indica um argumento opcional; não digite os colchetes no código. Um contêiner nil em moveitem() significa equipamento. Leituras protegidas, como blessings, cooldowns e banco, geram erro quando o estado é desconhecido. isitemontile() consulta apenas o snapshot: campo ausente retorna false.
Slots de equipamento: 1 cabeça, 2 pescoços, 3 mochilas, 4 armaduras, 5 mãos/escudo, 6 mãos/arma, 7 pernas, 8 botas, 9 anéis, 10 slots secundários, 11 Store Inbox. Flechas e virotes são recarregados na aljava, não diretamente no slot 10.
Variáveis de personagem
| Variáveis | Significado |
|---|---|
$name, $level, $exp | nome, nível, experiência |
$character | personagem reconhecido e atribuído ao painel; identidade também usada para relog |
$hp, $maxhp, $hppc | HP, HP máximo, porcentagem de HP |
$mp, $maxmp, $mppc | mana, mana máxima, porcentagem de mana |
$cap | capacidade de carga disponível |
$x, $y, $z | posição mundial |
$posx, $posy, $posz | apelidos de itens |
$soul, $speed | soul, velocidade do cliente |
$stamina | stamina atual em minutos: 0–2520; nil quando a leitura não está correta |
$food, $hungry | balcão de comida; fome é verdade com contador 0 |
$pz, $pzblock | Protection Zone e bloqueio de PZ |
$target, $followed | ID do alvo atacado / seguido; 0 significa nenhum |
$attacked | se o ID do alvo atacado está definido, não "alguém está me batendo" |
$dead, $deathcount | morte e contador de mortes na sessão atual de política de mortes |
$route | nome da aba de rota ativa |
$statusknown, $statusflags | disponibilidade de leitura e máscara de estado bruto; a máscara é nil se nenhum dado estiver disponível |
$poisoned, $paralyzed, $burning, $hasted, $bleeding, $drunk, $mana_shield | booleano ou nil se o agente não fornecer uma máscara |
$hunt_time, $target_time, $stand_time | hora da caça, alvo atual e parado |
$stamina funciona em waypoints do Cavebot e ações Lua. 1200 significa 20 horas e 2520, as 42 horas completas. O valor é atualizado com o contexto do script, inclusive após wait(). A ausência de leitura não significa zero.
if $stamina ~= nil and $stamina < 1200 then
gotolabel("rest")
endNem todo contexto tem um waypoint ativo, alvo ou contador de caça. Tempos iniciais indisponíveis produzem 0. As variáveis $... descrevem leituras; atribuir um valor próprio não muda o estado do personagem no jogo.
Leituras e cálculos
Itens, mapa e posição
inputstatus([id]), inputaction([id]) e inputactionid([id]) leem o status, o nome e o ID de operação de uma entrada opcional. Sem argumento, eles se aplicam à última operação. Registro ausente (também em nativo) dá nil. O histórico possui no máximo 64 entradas, separadamente para o controlador; o registro não contém argumentos, texto digitado ou detalhes de erros.
Os estados são started, submitted, completed, confirmed, failed, cancelled, uncertain. submitted significa que a entrada foi enviada; completed indica que a função terminou sem confirmação separada do efeito. failed e cancelled descrevem o fim da execução, não a reversão dos eventos anteriores. confirmed exige um observador explícito do efeito. ListedLoot e transferências dentro de Game.deposit_all só atribuem esse estado após verificar as alterações exatas e a mesma sessão de personagem. Uma sequência no depot tem um registro separado para cada transferência, não uma confirmação para toda a sequência. Banco e comércio na entrada opcional também atribuem confirmed quando seu observador verifica o saldo/dinheiro ou os itens/valor, respectivamente, e o manipulador termina na mesma sessão. A resposta da função sozinha não promove o estado. moveitem() não inicia esse observador automaticamente.
local operation = inputactionid()
local status = inputstatus(operation)
local action = inputaction(operation)O ID permite verificar uma transferência mais antiga após outra ação. Os resultados são consistentes em todo o snapshot Lua e atualizados após o envio. Não se destinam a repetir automaticamente compras ou transferências não confirmadas.
actionbarcount() retorna o número de entradas não vazias da barra de ação reconhecidas. hasitemhotkey(id) verifica se um item possui um atalho de teclado atribuído a ele, e hasspellhotkey("formuła") faz o mesmo para a fórmula ortográfica exata (insensível a maiúsculas e minúsculas e espaços extras). Nenhum hash fornece false; faltar ou não conseguir ler o cliente é um erro de script. Uma entrada sem atalho ainda pode ser ativada por clique pelo módulo de entrada. O atalho em si não confirma inventário de itens, disponibilidade de feitiço, alvo ou tempo de espera.
-- Te zapytania tylko czytają konfigurację bieżącego klienta.
local entries = actionbarcount()
local healthBound = hasitemhotkey(266)
local healBound = hasspellhotkey("exura")Continue a usar useself(), usetarget() ou spell() para executar. Mantém o controle de meta/tempo de espera e a prioridade dos botões reconhecidos antes da entrada da fórmula. A leitura da barra é compartilhada no snapshot Lua e atualizada após a ação; nomes ou abreviações não são lembrados globalmente entre os clientes.
| Função | Resultado e ação |
|---|---|
itemcount(id [, lokalizacja]) | quantidade em equipamentos e contêineres abertos; o filtro de localização corresponde a parte do nome sem maiúsculas e minúsculas |
groundcount(id, x, y, z) | a soma dos números confirmados de itens físicos no campo de leitura |
isitemontile(id, x, y, z) | presença de ID no instantâneo do mapa atual; não indica faixa de uso ou capacidade de levantamento |
canshoot(x, y, z) | true/false para linha de tiro local conhecida; estado desconhecido relata um erro |
getfacing() | "north", "east", "south" ou "west" |
islocation([zakres]) | se o personagem está perto do waypoint Action atual no mesmo andar; alcance padrão 0; retorna false fora desse contexto |
getlurelocation(nazwa) | se a localização nomeada existe; retorna bool, não coordenadas |
getoption(nazwa) | valor da opção do script ou nil se ausente |
itemcount() não revista mochilas fechadas ou banco. Janelas abertas de cadáver ou depósito poderão entrar no valor total; use o filtro de nome quando precisar de uma fonte específica. Os números dos contêineres podem ser reutilizados após o fechamento: não os codifique entre sessões.
Cooldowny, okna, NPC, banco e Stash
| Função | Resultado e requisitos |
|---|---|
spellcooldown(formuła) | tempo de espera restante do grupo de feitiços e de si mesmo, em segundos |
itemcooldown() | cooldown comum multiuso restante, em segundos |
windowcount() | número de raízes de diálogo/menu visíveis, não o número de todas as barras laterais |
windowexists(tytuł) | se uma janela com o título exato fornecido está visível |
npcisopen() | se a conversa do NPC está visível |
npcname() | nome de uma conversa aberta ou de uma string vazia |
npcmessage() | última resposta do NPC reconhecida, sem prefixo de hora/nome; string em branco quando nenhum |
npccontains(tekst) | se a última resposta contém o texto, sem diferenciar maiúsculas e minúsculas |
bankbalance() | último saldo confirmado no contexto de entrada; faça checkbank() primeiro |
stashcount(id) | quantidade na leitura disponível do Supply Stash aberto; Stash fechado significa estado desconhecido |
bankbalance() não consulta o banqueiro sozinho. Um estado desconhecido não é saldo zero. Mensagens do jogador não são respostas do NPC. canshoot() é uma avaliação conservadora do mapa local, não uma garantia de acerto.
Morte e bênçãos
| Função | Resultado |
|---|---|
isdead() | bool: HP máximo correto e HP atual ≤ 0 |
deathcount() | contador de mortes de sessão como $deathcount |
hasblessing(nazwa_lub_id) | se o personagem tem a bênção indicada |
hasblessings() | se ele tem pelo menos uma das sete bênçãos ordinárias |
hasallblessings() | se ele tem todas as sete bênçãos ordinárias |
blessingscount() | quantidade de blessings comuns, excluindo Adventurer e Twist |
blessings() / blessingnames() | nomes das blessings possuídas em uma string separada por vírgulas |
| ID do cliente | Nome assumido por hasblessing |
|---|---|
| 1 | Adventurer's Blessing |
| 2 | Twist of Fate |
| 4 | Wisdom of Solitude |
| 8 | Spark of the Phoenix |
| 16 | Fire of the Suns |
| 32 | Spiritual Shielding |
| 64 | Embrace of Tibia |
| 128 | Heart of the Mountain |
| 256 | Blood of the Mountain |
Os nomes podem omitir o prefixo The e não diferenciam maiúsculas de minúsculas. Não são índices sequenciais de 1 a 9: use nomes ou IDs exatos da tabela. Uma leitura de blessings indisponível gera erro, em vez de informar falsamente sua ausência.
Estados de personagem
| Função | Resultado |
|---|---|
statusknown() | bool: Se o instantâneo contém uma máscara de estado válida |
statusflags() | número: máscara bruta de 32 bits, também com bits não reconhecidos |
hascondition("poisoned") | bool: se o estado indicado está ativo |
conditions() | texto: nomes ativos separados por vírgulas; vazio quando nenhuma condição está ativa |
ispoisoned(), isparalyzed(), isburning() | abreviações para envenenamento, paralisia e incêndio criminoso |
ishasted(), isbleeding(), isdrunk() | atalhos para aceleração, sangramento e embriaguez |
iselectrified(), iscursed(), ismanashielded() | abreviações para eletrificação, maldição e escudo mágico |
Nomes para hascondition: poisoned, burning, electrified, drunk, mana_shield, paralyzed, hasted, in_fight, drowning, freezing, dazzled, cursed, party_buff, pz_block, protection_zone, bleeding, hungry. Aliases aceitos: poison, burn, fire, energy, paralyze, paralysed, haste, manashield, pz, pzblock.
Todas as funções, exceto statusknown(), geram erro quando a leitura é desconhecida. Um nome não aceito também é um erro. A ausência do campo status em um agente antigo significa estado desconhecido, enquanto status=0 explícito significa ausência de condições ativas. $hungry continua usando o contador de comida; verifique o ícone de fome com hascondition("hungry"). Bits altos desconhecidos são preservados apenas em statusflags(). O mapa de bits vem do enum PlayerStates no código do OTClient. A confirmação completa de todos os efeitos na versão atual do cliente exige observar cada um em execução.
if statusknown() and ispoisoned() and $level >= 10 and $mp >= 30 then
if spellcooldown("exana pox") == 0 then
spell("exana pox")
end
endif statusknown() and hascondition("paralyzed") and $mp >= 10 then
if spellcooldown("exura infir ico") == 0 then
spell("exura infir ico")
end
endEsses scripts agendam feitiços regulares por meio de uma entrada selecionada. Apenas enviar um feitiço não remove o efeito. A condição integrada Healer confirma o desaparecimento de um sinalizador na mesma sessão, usa cooldowns compartilhados e uma fila de prioridade. Não adiciona nenhuma regra ativa por padrão.
Matemática e desenho
| Função | Resultado |
|---|---|
min(a, ...)/math.min(a, ...) | mínimo de 1 a 32 números |
max(a, ...) / math.max(a, ...) | máximo de 1 a 32 números |
abs(x)/math.abs(x) | valor absoluto |
floor(x) / math.floor(x) | arredondando para baixo |
ceil(x)/math.ceil(x) | arredondar para cima |
random()/math.random() | um número de 0 inclusive a 1 apenas |
random(maximum) / math.random(maximum) | inteiro de 1 a maximum, incluindo ambos |
random(minimum, maximum)/math.random(minimum, maximum) | número total em um intervalo fechado |
Comandos de controle
Movimento, combate, feitiços e itens
| Função | Funcionamento |
|---|---|
move(kierunek) | movimento consistente com o modo de entrada selecionado |
turn(kierunek) | rotação sem andar; apenas norte/leste/sul/oeste |
facetarget(id) | virar para o alvo ativo |
attack(id) | selecionar o alvo atacado; 0 cancela sua seleção de alvo |
follow(id) | seguindo uma meta; 0 cancelamentos |
stop() | parar por atalho compatível/Esc no modo teclado e mouse; não clica no botão Stop |
cancel() | cancelar a ação atual |
loot() | saque rápido configurado via entrada selecionada |
hotkey(skrót) | por exemplo "F1" ou "Ctrl+F2"; usa a atribuição de cliente atual |
spell(formuła) | feitiço, com controle de tempo de espera e preferência por barra de ação reconhecida |
spelltarget(formuła, id [, zasięg]) | feitiço no alvo ativo; intervalo padrão 3, intervalo 1–7 |
useitem(id) | uso de itens |
useself(id) | use em seu próprio personagem |
ensureaol([maksymalna_cena]) | mantém o AoL estabelecido ou obtém e instala o que falta; limite de 1 a 70.000 po, padrão 70.000 |
usetarget(id, cel) | usando uma runa/item em um alvo atacado ativamente no mapa |
useinventory(slot, id) | usando um item do seu inventário |
usecontainer(kontener, slot, id) | usando um item de um contêiner aberto |
useworld(x, y, z, id) | uso de um objeto no campo mundial |
moveitem(id [, ilość, źródło, slot_źródła, cel, slot_celu]) | transferir; nil significa equipamento; informe origem e destino completos |
pickupitem(id, x, y, z, kontener [, ilość, slot]) | pegar para uma mochila; padrão: maior pilha disponível, slot escolhido automaticamente |
refillammo(id [, minimum, ilość, kołczan]) | reabastecimento abaixo do mínimo para a quantidade especificada; o padrão é 50/100 e a única aljava aberta |
Direções de movimento: north, east, south, west, ne, se, sw, nw. move() não é um comando de coordenadas arbitrário; a rota é marcada por waypoints. Após definir o destino, o status é verificado pelo $target.
spelltarget, facetarget e usetarget requerem um destino ativo válido. Fora do alcance, mudança de alvo ou linha de tiro bloqueada/desconhecida interrompe o uso apropriado. O mero consumo de uma runa ou mana não prova o dano causado. Combine o feitiço com a profissão, nível e habilidades aprendidas do personagem.
Os padrões para moveitem() são quantidade 1, origem/destino nulo e slots 0. Isso não procura automaticamente a origem; na maioria das vezes, todos os seis argumentos são necessários. Se a quantidade for maior que a pilha de origem, o comando poderá ser rejeitado. Não tente novamente em um loop de transferência com resultado desconhecido. Reabastecer a munição requer uma aljava aberta e um suprimento em mochilas abertas. Para várias aljavas, dê o número dele. A função não compra munição, não abre a aljava e não a equipa.
Chat, NPCs e comércio
| Função | Funcionamento |
|---|---|
chat_on()/chaton() | ativar a digitação no chat |
chat_off() / chatoff() | desabilitando digitação no chat |
say(tekst) | mensagem local comum |
npcsay(tekst) | enviar mensagem à janela correta de conversa com NPC |
npcdialog(akcja) | ação yes, no, bye, trade ou close |
npcyes() / npcno() | responder pelo botão yes/no |
npctrade() | abrir comércio |
npcbye()/npcclose() | despedir-se / fechar a janela |
buyitems(nazwa, ilość) | compre de 1 a 100 peças; verificando o preço e ambas as mudanças de status |
sellitems(nazwa, ilość) | venda de 1 a 100 peças com item e confirmação de dinheiro |
Use letras minúsculas para NPCs. say("hi") pode iniciar uma conversa, mas enviar mais respostas via npcsay(). O hash hotkey() não verifica a intenção de uma atribuição específica; prefira comandos semânticos para feitiços e poções. npcsay("hi") e npcsay("hello") também funcionam em um cliente novo sem a guia NPCs: a própria saudação usa o Chat Local. Outras mensagens requerem uma conversa existente ou canal de NPCs. Enviar uma saudação não significa resposta: verifique npcisopen(), npcname() e npcmessage() antes de prosseguir. O NPC deve estar dentro do alcance de conversação no mesmo andar. No cliente 15.33.124f6c Native envia respostas através do método digitado do controlador de janela aberta NPC. Requer uma conversa atual e o mesmo NPC dentro do alcance. Ele não usa o foco do teclado ou o antigo setter protobuf. A resposta de Gustavo aos “goblins” foi confirmada no jogo. No modo teclado e mouse, os itens necessários devem estar acessíveis por meio de uma barra de ação reconhecida, inventário ou janelas abertas.
Banco, depósito em Supply Stash
| Função | Funcionamento |
|---|---|
checkbank() | pergunta ao banqueiro sobre o saldo; então leia saldo bancário() |
bankdeposit([kwota]) | depositar uma quantia ou todas as moedas disponíveis |
bankwithdraw(kwota) | contracheque; o próprio módulo envia sim após a pergunta apropriada e confirma o saldo/moedas |
depositall() | depositando todas as moedas em banco, alias comportamento de bankdeposit() |
opendepot() | abrindo um depósito próximo |
opendepotbox([numer]) | abrindo o cofre; padrão 1 |
deposit(id [, skrzynka, ilość]) | guardar um item; padrões: caixa 1, quantidade 1 |
withdraw(id [, skrzynka, ilość]) | retirar para uma mochila; padrões 1 e 1 |
depositer([nazwa, depot(x,y,z), box(n)]) | deixando de lado o saque especificado na configuração Looting de todas as pilhas |
findfreedepot([depot(x,y,z)]) | escolher um campo livre e acessível diante de um locker e abrir seu depot |
reachnpc(nazwa [, dystans]) | aproximar-se da posição atual do NPC com o nome exato; distância padrão 3 campos; intervalo 1–3 |
deposititems(id, ... [, nazwa, depot(x,y,z), box(n)]) | guardar todas as pilhas dos IDs indicados |
box(n) | marcador de caixa para depositer/deposititems, n=1–21 |
depot(x,y,z) | marcador de posição para armazenamento de alto nível |
openstash()/closestash() | abrir / fechar Supply Stash |
retrievestash(id [, ilość]) | download; quantidade padrão 1 |
stowitem(id [, ilość]) | guardar no Stash; padrão 1 |
stash(nazwa_plecaka) | suporte Stash de alto nível para mochila aberta designada |
depositall() é para o banco; depositer() guarda loot no depot — são funções diferentes. Não adicione npcyes() manualmente após bankwithdraw(): a confirmação já é tratada e verificada. Uma quantidade grande em deposit/withdraw não percorre todos os contêineres automaticamente; use depositer e deposititems para todas as pilhas. Essas operações exigem acesso ao depot e as mochilas corretas abertas. Apenas informar coordenadas não ignora paredes, distância nem requisitos de interação.
findfreedepot() verifica o novo mapa e personagens, move-se diretamente para a praça de acesso, verifica novamente a ocupação e abre o depósito. O item opcional limita a busca à vizinhança de uma determinada jazida. Se não houver estação livre, ele repete as leituras por até 30 segundos e depois pausa a sequência. Não confirma depósito ou compras sem sucesso. Em um script ao vivo, pode ser seguido por uma chamada para depositer(box(1)).
Clique em Olhar
| Função tutorial Native | Funcionamento |
|---|---|
buttonexists(napis) | observando botões de diálogo claros |
clientbutton(napis [, tytuł_okna]) | clicando no botão selecionado após o texto e o título da janela opcional |
tutorialhint() | dica tutorial atual; texto em branco significa nenhuma dica |
tutorialhintcontains(tekst) | corresponde à dica atual, sem diferenciar maiúsculas e minúsculas |
tutorialclick(oczekiwana_wskazówka [, przycisk]) | clicar no destaque atual do tutorial; botão left/right |
tutorialdrag(oczekiwana_wskazówka) | arrastando o único item visível para o alvo vazio indicado pelo tutorial |
tutorialuse(oczekiwana_wskazówka) | clicando na ferramenta destacada e, em seguida, no segundo objetivo do tutorial, por ex. usando uma corda |
classiccontrols() | definir Classic Controls no cliente, Apply e reabrir opções para verificar o salvamento; exige Native, diálogos fechados e nenhum monstro na tela |
choosevocation(nazwa) | selecionar e confirmar uma vocação na janela do tutorial; Confirm deve pertencer ao cartão dessa vocação |
O arraste seleciona a origem pelo item lido no slot, não pela posição do texto da dica. Vários destinos, dois slots ocupados ou a ausência do item interrompem a operação. O mouse é liberado mesmo após um erro. Essas funções usam a ponte Qt existente do agente e não movem o cursor do sistema nem trocam a entrada para memory.
No modo Native, buttonexists("Start") lê botões de diálogo do cliente visíveis e clientbutton("Start") seleciona um botão inequívoco após seu texto. Não seleciona itens da barra de ação nem clica em coordenadas fixas. Nenhuma leitura, vários botões correspondentes, morte ou alteração de sessão abortam a operação. O simples envio de um clique não confirma que você concluiu o tutorial; leia a próxima tela/item antes da próxima ação. O modo memória não muda automaticamente para esta operação Native.
| Função | Funcionamento |
|---|---|
opencontainer(id) | abrindo a mochila equipada no slot 3 padrão; para pesquisar dentro use openitem() |
openitem(id_lub_nazwa [, źródło, nowe_okno, indeks]) | pesquisa e abertura; nova janela padrão=true, índice=1; fonte é nome ou terreno (x,y,z) |
ground(x,y,z) | marcador de posição para openitem() |
closecontainer(numer) | fechar o contêiner aberto indicado |
containerup(numer) | abrir o contêiner pai nesta janela |
minimizecontainer(numer)/maximizecontainer(numer) | definir o estado da janela; repetir não alterna de volta |
closewindows([limit]) | Esc para diálogos/menus, padrão 6, máximo 8; não fecha automaticamente a janela da morte |
lookinventory(slot, id) | Look em um item equipado |
lookcontainer(numer, slot, id) | Look em um contêiner específico |
lookworld(x,y,z) | Olhe no topo da caixa mundial |
lookcreature(id) | Look no personagem/NPC/monstro indicado |
deathdialog([akcja]) | padrão revive; character_list abre a lista de personagens |
Look espera por uma resposta de um novo cliente; em Lua não retorna texto de descrição. Nenhum resultado novo é um erro sem nova tentativa. Fechar/recolher/recolher o contêiner verifica a identidade real da janela. containerup() sem nenhum pai disponível não é tratado automaticamente como um sucesso.
Aliases de comando
Além dos nomes de tabelas, npc_dialog(), use_item(), use_self(), use_inventory(), use_container(), use_world(), move_item() e open_container() funcionam, com os mesmos argumentos de suas contrapartes compactas.
Rota e configuração
Configuração do script e perfis de personagens
A aba Configuração do script contém opções e suprimentos, o único editor de regras de mochilas e um editor separado de definições Lua. Após editar, clique em Aplicar. Cavebot e Action usam os mesmos valores na próxima leitura; não é necessário reiniciar a rota. Arquivo → Salvar grava a configuração completa em XML: a definição do formulário (setup_code) e os valores padrão das opções (script_api.options). Cada opção pode usar Do script ou Próprio do personagem. Apenas as substituições selecionadas explicitamente entram no perfil escolhido, preservando os padrões do XML. Salvar como… cria uma cópia sem modificar o script anterior. setsettings() e Aplicar alteram a configuração atual; salvar o XML exige Salvar ou ativar o salvamento automático em Arquivo. Escolher outro script não transfere as opções do anterior.
A definição do formulário é realizada offline. As seguintes declarações, variáveis locais, condições, loops de limite e cálculos básicos são permitidas. Comandos de jogo, leituras de cliente, wait() e alterações de configuração são rejeitados neste editor. As declarações de controle não se destinam a waypoints ou circulares Action.
O editor Definição Lua / JSON também aceita um formulário JSON no estilo WindBot User Options: um grupo, uma lista de grupos ou grupos separados por vírgulas. Os tipos aceitos são group, lineedit, checkbox, combobox, spinbox, doublespinbox e rangespinbox. Os grupos têm children, column (1 ou 2) e checkable opcional. Os campos description fornecem dicas; campos de texto aceitam placeholder, e campos numéricos aceitam prefix e suffix. O checkbox do grupo desativa a edição de seus filhos; o script deve verificar o valor do grupo antes de executar ações relacionadas. Não é um importador de scripts completos do WindBot.
rangespinbox armazena dois limites como [od, do]; um único value define ambos igualmente. getuseroption("wait_spawn") retorna uma tabela com os campos from e to, por exemplo:
if getuseroption("wait_spawn") then
local bounds = getuseroption("wait_spawn")
wait(random(bounds.from, bounds.to))
endO botão Inserir JSON de amostra contém um conjunto de controles básicos. O formulário JSON e seus valores são armazenados no mesmo XML e perfis do formulário Lua. Alterar o formato não aciona nenhum comando do jogo.
| Declaração no editor de formulários | Funcionamento |
|---|---|
addmenu(klucz, tytuł) | criar ou selecionar um grupo/menu para os próximos controles |
addcheckbox(klucz, etykieta, domyślna) | checkbox com valor true/false |
addspinbox(klucz, etykieta, domyślna, minimum, maksimum [, krok]) | campo numérico, etapa 1 padrão; para frações, insira um passo menor que 1 |
addtextbox(klucz, etykieta, domyślna) | campo de texto |
addcombobox(klucz, etykieta, domyślna, wybory) | lista; as seleções são texto, por ex. "safe|normal" |
addlabel(tekst) | descrição no menu atual |
addsupply(klucz, etykieta, id, minimum, cel) | quatro campos supplies.KLUCZ.enabled/id/minimum/target; o mínimo não deve exceder a meta |
addbackpack(nazwa, id [, rodzic, przeznaczenie]) | adiciona uma regra ausente ao gerenciador de mochilas existente; não substitui regra salva com o mesmo nome; finalidade: loot/gold/supplies/other |
As regras de mochila padrão são adicionadas uma vez por configuração de personagem. Renomear ou excluir posteriormente uma regra em um perfil não recria a regra antiga do modelo.
As chaves de controle devem ser exclusivas; Letras ASCII, números, sublinhado, ponto final e travessão são permitidos. Máximo de 200 controles, 30 menus e 50 regras de mochila por definição. Exemplo de definição (cole em Lua Definition):
addmenu("return", "Powrót i zapasy")
addcheckbox("return_enabled", "Kontroluj powrót", true)
addspinbox("min_cap", "Minimalny cap", 150, 0, 10000)
addtextbox("return_label", "Etykieta powrotu", "refill")
addsupply("mana", "Mana potion", 268, 50, 300)
addmenu("hunt", "Polowanie")
addcombobox("hunt_mode", "Tryb", "normal", "safe|normal")
addlabel("Dostosuj zapasy i nazwy plecaków do postaci.")
addbackpack("Backpack", 2854, "", "supplies")| Função disponível em Cavebot e Action | Resultado / funcionamento |
|---|---|
getuseroption(klucz) | alias de getoption(); retorna o valor salvo ou o padrão do formulário |
setuseroption(klucz, wartość) | alias setoption(); valida o tipo e o escopo do controle declarado |
getsettings(ścieżka) | ler uma opção do formulário ou configurações reais da tabela abaixo |
setsettings(ścieżka, wartość) | registro de valor; a execução atualiza o contexto antes do próximo comando |
getsetting(ścieżka)/setsetting(ścieżka, wartość) | alias getsettings/setsettings |
caplow() | se $cap está abaixo da opção min_cap; sem limite definido, usa 0 |
supplycount(klucz) | quantidade do ID definido em addsupply(); equipamento e contêineres abertos |
supplyneed(klucz) | quanto está faltando na quantidade alvo, não menos que 0 |
supplieslow() | se algum estoque habilitado está abaixo do mínimo |
needsrefill() | return_enabled i (caplow lub suprimentoslow); brak return_enabled oznacza verdadeiro |
| Caminho getsettings/setsettings | Valor |
|---|---|
setup.min_cap, setup.return_label, setup.supplies.mana.target | opções de formulário; Os prefixos de opções/opções do usuário são equivalentes; a própria chave também é permitida |
navigation.pass_players_outside_pz, navigation.ignore_players_path, navigation.enter_echo_raids | verdadeiro/falso, configuração de navegação real |
looting.enabled, looting.quick_loot, looting.eat_food, looting.auto_echo_loot, looting.own_kills_only | verdadeiro/falso, LootConfig existente |
containers.Backpack.keep_open, containers.Backpack.item_id, containers.Backpack.parent, containers.Backpack.purpose | propriedades de uma regra existente chamada Backpack; também os campos ContainerRule restantes, exceto nome |
priority.targeting, priority.looting, priority.cavebot | prioridade de 1 a 10; menor vence |
Você pode usar / em vez de . como separador. Um caminho de módulo desconhecido, uma regra de mochila ausente ou um tipo incorreto gera erro. Não há compatibilidade completa com caminhos históricos arbitrários do WindBot. As funções não alteram a configuração da entrada nem dados de login e não iniciam módulos da interface. looting.enabled altera a configuração do módulo, não seu controle de execução. Da mesma forma, consultar suprimentos não compra itens nem pesquisa mochilas fechadas. Compras e retiradas exigem código Lua explícito na rota.
Exemplo de waypoint Action utilizando o formato:
if needsrefill() then
gotolabel(getuseroption("return_label"))
endExemplo de alteração de configurações durante a execução:
setsettings("setup.min_cap", 200)
setsettings("navigation.enter_echo_raids", false)
setuseroption("hunt_mode", "safe")No Test Lua, as alterações nas configurações são apenas um plano; os valores reais permanecem inalterados. Salvar um perfil e aplicar um formulário não executa ações do jogo.
O padrão de formulários se baseia no mecanismo WindBot Cavebot User Options descrito pelo fabricante. O RGXbot usa sua própria sintaxe de declarações e seus próprios caminhos de configuração.
Controle de rotas e opções
| Função | Funcionamento |
|---|---|
gotolabel(etykieta [, sekcja]) | saltar para um waypoint com etiqueta; encerra o script atual |
gototab(nazwa) | mudar a guia de rota; termina o script atual |
reachgrounditem(id [, dystans]) | aproximar-se de um objeto visível; distância padrão 1, intervalo 0–18; encerra o script |
wait(ms) | espera do script atual, 0–3600000 ms |
stopbot([powód]) | interrompe todos os módulos e encerra o script; motivo opcional até 200 caracteres |
pausewalking(ms) | pausa apenas na caminhada, 0–3600000 ms |
setoption(nazwa, wartość) | opção de escrita de script; não é uma chamada arbitrária para configurações da GUI |
setlocation(nazwa, x,y,z) | salvar uma localização nomeada |
setlurelocation(nazwa, x,y,z) | alias de salvamento de local |
addspecialarea(nazwa, x,y,z) | adicionando um campo nomeado excluído da rota |
removespecialarea(nazwa) | excluindo tal campo |
setpriority(moduł, priorytet) | prioridade de targeting/looting/cavebot, número de 1 a 10; menor vence |
No modo de controle opcional, wait deixa o cliente disponível para tratamento. Durante a pausa, o agendador verifica a mesma sessão de caracteres e suporta Healer compartilhado habilitado; a próxima instrução ainda está aguardando o final da pausa. O cancelamento, morte ou alteração da sessão interrompe instruções adicionais deste script. O tratamento pode alterar a última operação de entrada durante wait: para rastrear uma transferência anterior, mantenha seu inputactionid() antes de pausar.
A chave técnica cavebot representa o módulo de rota. Locais e opções oferecem suporte a scripts de tempo de execução; não são variáveis Lua locais. Os recursos de salto exigem uma rota/etiqueta existente. getlurelocation() verifica apenas a presença de um nome. openitem() e stash() também encerram o script atual. No plano Test Lua, as operações findfreedepot/depositer/deposititems encerram o plano, enquanto na execução live podem continuar após a operação confirmada.
Exemplos
Cada bloco abaixo é um exemplo separado. Ajuste IDs de itens, números de contêineres, magias, etiquetas e coordenadas para seu personagem.
Knighta cura com controle de mana e cooldown
if not $dead and $hppc < 70 and $mp >= 10 then
if spellcooldown("exura infir ico") == 0 then
spell("exura infir ico")
end
endPara cura permanente, use principalmente regras de cura. O exemplo mostra uma chamada de função; o feitiço deve estar disponível para este personagem.
Poção e reposição de mana
if $mppc < 40 and itemcount(268, "bag") > 0 then
if itemcooldown() == 0 then
useself(268)
end
endRuna no alvo ativo
if $target > 0 and not $pz then
if itemcount(21352) > 0 and itemcooldown() == 0 then
usetarget(21352, $target)
end
endID 21352 significa Runa de Míssil Mais Leve no diretório atual. Para outra runa, verifique o ID e os requisitos. A posição e a linha de tiro são verificadas pela ação.
Comida e modo de bate-papo explícito
if $hungry and itemcount(3578) > 0 then
useitem(3578)
end
chat_off()Banco: verificação e saque seguro
checkbank()
if bankbalance() >= 100 then
bankwithdraw(100)
end
npcclose()Fique ao lado do banqueiro. A própria retirada confirma yes; não adicione uma segunda confirmação. bankdeposit() deposita todas as moedas sem discussão.
Comprar as poções que faltam
local brakuje = 5 - itemcount(266, "bag")
if brakuje > 0 then
buyitems("health potion", min(brakuje, 100))
endFique perto do vendedor correto, com oferta disponível, dinheiro e espaço. Uma compra não faz uma viagem automática à loja. O exemplo separado abaixo vende um vial apenas após uma leitura confirmar sua posse:
if itemcount(285, "bag") > 0 then
sellitems("empty potion flask", 1)
endConversa com NPCs
say("hi")
if npcisopen() and npcname() == "Aurelia" then
npctrade()
endNão substitua npcsay() por say() simples nas respostas subsequentes. npccontains("balance") verifica a resposta, não o histórico de suas próprias declarações.
Completando a aljava
refillammo(3447, 50, 100)Requer exatamente uma aljava aberta. Se houver vários, selecione o ID atual:
refillammo(3447, 50, 100, 2)Mover um item para o equipamento
moveitem(3338, 1, 0, 2, nil, 6)O exemplo assume a Espada de Osso no recipiente 0, slot 2. O slot 6 é a mão da arma. O estado de origem e o número real da janela devem ser determinados antes da execução. Não execute isso repetidamente quando o resultado da primeira operação não for confirmado.
Salvando itens e baixando do Stash
opendepotbox(2)
deposititems(3031, 3272, box(2))openstash()
local brakuje = 5 - itemcount(266, "bag")
if brakuje > 0 and stashcount(266) >= brakuje then
retrievestash(266, brakuje)
end
closestash()Recipientes e aparência
maximizecontainer(0)
lookinventory(6, 3338)
lookcontainer(0, 0, 285)
minimizecontainer(0)O exemplo requer um frasco no slot 0 do contêiner 0. Você pode usar separadamente containerup(0), closecontainer(0), lookworld($x, $y, $z) ou lookcreature($target) com um ID positivo e visível.
Voltar a uma etiqueta com suprimentos baixos
if itemcount(266, "bag") < 2 or $cap < 40 then
gotolabel("depo")
endA rota deve ter o rótulo depo. Esta é uma mudança de rota, não um sistema independente de fuga de combate e não uma garantia de uma rota segura.
Verificar blessings e morte
local liczba = blessingscount()
local twist = hasblessing("Twist of Fate")
local komplet = hasallblessings()
local nazwy = blessings()if isdead() then
deathdialog("revive")
return
endPara uma resposta automática após a morte, prefira as configurações da política de morte. Um script não altera seu limite de mortes nem sua decisão de retomar.
Opções, bloqueio de campo e pausa aleatória
setoption("tryb_testowy", true)
setlocation("baza", $x, $y, $z)
addspecialarea("pole_do_ominiecia", $x + 1, $y, $z)
setpriority("targeting", 1)
pausewalking(random(200, 400))Remova o bloqueio depois com removespecialarea("pole_do_ominiecia"). A aleatoriedade deste exemplo afeta o tempo; o movimento do mouse e o comportamento de caminhada são configurados separadamente no módulo de entrada opcional.
Laço com limite explícito
local i = 0
while i < 3 do
i = i + 1
if $dead then
break
end
wait(100)
endNão crie um ciclo interminável de cura ou negociação. O script Action pode ser chamado periodicamente pelo módulo e o estado é atualizado entre as ações.
Erros e limitações
Cooldown, Blessed, Balance ou Stash desconhecidos são um erro de leitura, não um zero.
Número errado de argumentos, ID 0, número não inteiro e nome de função desconhecido são rejeitados. Exceções como
attack(0)são descritas separadamente.Janela alterada, item faltante, transferência ou compra não confirmada exigir verificação de condição. Não repita a operação cegamente.
O teste Lua não verifica disponibilidade de itens, aprendizado de ortografia ou resultado servidor. O resultado final é confirmado por leituras durante a performance ao vivo.
Abrir mochilas, negociar e Look pode exigir controles visíveis dentro do cliente, também quando o próprio cliente é executado em uma tela virtual oculta.
Descrições relacionadas: combate à distância, agendador de cura, módulo de entrada.