

O openkore é certamente um dos melhores e mais completos robots que existem no mercado, e ainda podemos adicionar-lhe outras funções com o uso de plugins. O mais usado certamente é o Macro Plugin, como ele podemos escrever sequências de comandos que serão executadas manualmente ou até mesmo ativadas de forma autônoma. Nesta matéria iremos aprender a instalar, testar e rabiscar nossas primeiras macros, então mãos a obra.
Primeiramente vou ressaltar que referências são importantes na hora de programar qualquer coisa, já que sempre podemos esquecer alguma sintaxe ou comando. A wiki internacional possui uma página simplesmente repleta de conteúdo, e além disso temos muito material no fórum oficial, no fórum brasileiro e no nosso fórum também.
Como Instalar Corretamente O Macro Plugin
O primeiro passo é baixar a versão mais recente e extrair ela onde desejar, use o 7zip ou outro programa de sua preferência. Repare que dentro do arquivo compactado existe outro e dentro dele temos uma pasta chamada trunk. Ela contém o plugin propriamente dito e duas pastas, uma chamada macro e outra chamada test. Tudo que precisamos fazer é enviar esses três itens para a pasta plugins do openkore, e se ela não existir basta cria-la. Repare que a estrutura de pasta do openkore deve ficar exatamente assim para funcionar:
openkore |-- control | |-- macros.txt |-- plugins | |-- Macro | |-- test | |-- macro.pl
Como vimos na acima é preciso criar um arquivo chamado macros.txt dentro da pasta control. Portanto abra o bloco de notas e use a opção salvar como, isto é necessário pois se não salvarmos o arquivo com a codificação em UTF-8 o kore vai dar erro.

Para testar se tudo deu certo apenas escreva macro list no console do openkore, irá aparecer uma lista de macros, vazia no caso, mas já um grande indicativo de que a instalação foi bem sucedida.
Criando A Nossa Primeira Macro E Fazendo Um Teste
Antes de começar vamos relembrar algo importante, o kore possui muitos comandos de console, como o macro list, e é exatamente eles que usaremos em nossas macros. Um exemplo é o comando move, que manda o boneco ir a alguma lugar, ou o comando talknpc, que o faz falar com um NPC, a lista é bem extensa, e a wiki internacional possui ela na integra.
Entenda que criar uma macro é usar estes comandos, aliado a laços condicionais e de repetição, para o propósito de automatizar alguma tarefa, portanto ter o conhecimento prévio de lógica de programação e dos comandos do openkore é fundamental na hora de se criar uma macro. Dito isto copie e cole o seguinte trecho no seu macro.txt:
macro salvarPRT {
log === INDO PARA PRONTERA ===
do ai manual
do move prontera 152 326
do talknpc 152 326 r0
do ai auto
log === SALVO EM PRONTERA ===
}
Salve o arquivo e digite reload all no seu openkore para atualiza-lo com a nova macro.
Explicando A Macro De Exemplo E Aprendendo A Usa-la
Cada uma das nossas macros deve começar com a palavra macro seguido do nome da macro, e tudo o que está os colchetes são os comandos dela. Portanto está a sintaxe básica para qualquer macro: macro nomeDaMacro { comandos …}, simples né?
Repare que algumas linhas do exemplo começam com o comando do e outras não. Tudo o que começa com isto faz uma chamada a um comando de console, tal como explicado anteriormente, já o que não tem o do é um comando de macro mesmo. Portanto nosso exemplo usa apenas um comando de macro, que é o log, sendo que ele serve apenas para criar uma mensagem de texto no console.
O primeiro comando do exemplo apenas escreve a frase “INDO PARA PRONTERA” no console. O segundo coloca o kore em modo manual e o terceiro o faz ir para prontera, na kafra norte. Na sequência ele fala com a kafra em 152 326 e escolhe a opção r0, que no caso é salvar.

Este é um exemplo bastante simples, mas que já demonstra o poder de automatizar tarefas com macros. Para chamar e testar a macro exemplo apenas digite macro seguido do nome da macro, no caso ficaria macro salvarPRT, lembrando que o kore diferencia maiúscula de minúscula.
Como Passar Variáveis E Criar Laços Condicionais
A partir daqui começa a complicar e é preciso ter uma base sólida de programação para entender o próximo exemplo. Nele iremos ver como passar uma variável para a macro e usa-la para através de laços condicionais que irão fazer uma escolha, veja:
macro salvar {
do ai manual
if ($.param1 = prontera) goto prontera
if ($.param1 = payon) goto payon
:prontera
log == INDO PARA PRONTERA
goto fim
:payon
log == INDO PARA PAYON
goto fim
:fim
do ai auto
}
Quando chamarmos esta macro devemos inserir um parâmetro que nos indicará onde o personagem irá salvar. Para passa-lo devemos usar a seguinte sintaxe: macro salvar — nomedacidade, por exemplo, macro salvar — payon, não se esqueça de inserir o espaço depois dos dois traços.
Esta macro começa colocando o kore em modo manual e depois avalia o parâmetro passado com o comandos condicionais. Em if ($.param1 = prontera) goto prontera, ele verifica se $.param1, ou seja, o primeiro parâmetro passado é igual a prontera, se sim ele segue para a linha :prontera, se não ele verifica se o parâmetro passo é igual a payon e por ai vai.
Perceba que ao final de cada bloco existe um goto fim, que chama a linha :fim, sem isto após ser executado o bloco prontera ele iria executar as linhas da sequencia, que no caso representa o bloco :payon. Isto ocorre porque o macro plugin usa um esquema bastante arcaico baseado em blocos e chamadas para determinados pontos, linguagem modernas como o Visual Basic são bem diferentes.
Criando Variáveis E Usando Laços De Repetição
Este exemplo é um pouco mais complexo do que o anterior e serve para retiramos itens do armazém. A macro leva o personagem até a kafra de prontera, fala com ela e abre o storage, depois vai pegando os itens e avaliando se ainda cabe mais, e continua pegando até ficar pesado.
macro pegar {
# Vai para a kafra.
do ai manual
do move prontera 152 326
do talknpc 152 326 r1
pause 3
# Define variáveis
$contador = 0
$pesoMaximo = @eval(0.49*$.maxweight)
$quantidadeItens = @eval($::storage{items})
# Pega itens na kafra.
while ($contador < $quantidadeItens) as loop
if ($.weight > $pesoMaximo) goto fim
do storage get $contador
$contador++
end loop
# Finaliza a macro pegar.
:fim
do storage close
do storage
}
Todas as linhas que começam com # são apenas comentários e são usadas para organizar melhor a macro. A parte que está abaixo do comentário #Vai para a kafra, apenas manda o personagem ir até kafra e abrir o armazém, depois ele da um pause de três segundos, isto porque ao abrir o storage pode haver algum lag, ainda mais se kafra estiver muito cheia.
Depois foram definidas algumas variáveis: $contador é quem irá controlar o loop e foi iniciado em zero. Já $pesoMaximo usa uma special keywords chamada @eval que no caso está servindo simplesmente para executarmos uma conta de multiplicação. Dentro desta mesma linha usamos também usamos uma variável especial que é $.maxweight, ela retorna o peso máximo que o personagem pode carregar. Já deu pra perceber que 0,49 vezes o peso máximo retorna 49% do peso máximo, sendo que este resultado será armazenado em $pesoMaximo.
Depois disso a variável $quantidadeItens irá receber a quantidade total de itens existentes no armazém. Então while ($contador < $quantidadeItens) as loop irá repetir tudo o que estiver entre ele e end loop desde que o $contador, que foi iniciado em zero seja menor que $quantidadeItens.
A cada execução do loop a linha do storage get $contador vai adicionar um item do armazém ao inventário e a linha $contador++ irá incrementar o contador e pular para o próximo item antes de reiniciar o processo. Nesse meio if ($.weight > $pesoMaximo) goto fim irá avaliar se peso do personagem, $.weight, é maior que o peso máximo que calculamos em $pesoMaximo = @eval(0.49*$.maxweight), se sim ele vai para :fim fechando o storage e terminando a macro.
Criando Macros Automáticas E Conclusão Final
Um recurso bastante interessante é o uso de automacro, com elas é possÃvel chamar uma macro automaticamente, por exemplo, quando um personagem está em certo mapa, com um peso especÃfico ou mesmo quando um GM cura um monstro, veja o exemplo:
automacro gmCurou {
priority 1
run-once 1
exclusive 1
console /^(Player \[GM\](.*) uses Curar on Monster .*)/
call deslogar
}
Basicamente a linha console /^(Player \[GM\](.*) uses Curar on Monster .*)/ faz com que a automacro seja executada quando aparecer as palavras ^(Player \[GM\](.*) uses Curar on Monster .*) no console, e então call deslogar chama a macro deslogar. Na macro deslogar você pode ser criativo e se teleportar, responder algo ao GM, ou simplesmente deslogar o personagem, as possibilidades são limitadas apenas pela sua imaginação e conhecimento.
Por isso é muito importante sempre usar a referência oficial do macro plugin, ela contém todas as informações de variáveis especiais, de eventos que podem ser usados em automacros e outras tabelas importantes. Além disso é preciso fazer um bom estudo dos comandos de console, e é claro, ter bastante talento para lidar com lógica de programação. É isso!
Instalado e funcionando… vlw.
O tutorial é um pouco complicado, mas eu gostei.
gostei muito eagradeceria se tivesse um tutorial ou uma configuração para comprar itens de outros players calculando a quantidade e ficando com um chat aberto…
Infelizmente eu não tenho.
Finalmente um tutorial de nivel bom