Tutorial: Como Instalar E Usar O Macro Plugin No Openkore

Papel de parede com códigos.

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.

Salvar em UTF-8 no bloco de notas.

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.

Macro exemplo sendo executado no openkore.

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!

! 10 comentários até o momento

Escreva O Seu Comentário!

Ficou com alguma dúvida?
Tem uma crítica construitiva ou uma sugestão maneira?
Escreva ai embaixo, mas não maltrate o português, por favor!

  1. David comentou: responder

    galera , gostaria de saber se alguem ae tem macro pra descobri o Pin do loguin do ragnarok ?

  2. junior taques comentou: responder

    macro de cultivar plantas

  3. marco comentou: responder

    como eu sei se a auto macro vai rodar como a macro de up !?como faser ela rodar ?
    ###########Upar, Mudando de Mapa######by*> IagoYogo########

    automacro lv 10 {
    base = 9 #lv que você quiser mudar de mapa

    call lv 10

    run-once 1
    }

    macro lv 10 {
    log == Indo salvar em Morocc ==
    do ai manual
    do move morocc 150 97
    do talknpc 156 97 c r0
    do ai auto
    log == salvo em morocc ==
    do conf storageAuto_npc morocc 156 97
    do conf lockMap moc_fild12 #mapa que você deseja ir
    }

    automacro lv 14 {
    base = 14 #lv que você quiser mudar de mapa

    call lv 16

    run-once 1
    }

    macro lv 16 {
    log == Indo salvar em Morocc ==
    do ai manual
    do move morocc 150 97
    do talknpc 156 97 c r0
    do ai auto
    log == salvo em morocc ==
    do conf storageAuto_npc morocc 156 97
    do conf lockMap moc_fild18 #mapa que você deseja ir
    }

    automacro lv 16 {
    base = 16 #level que você deseja mudar de mapa

    call lv 18 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 18 {
    log == Indo salvar em Payon ==
    do ai manual
    do move payon 181 109
    do talknpc 181 104 c r0
    do ai auto
    log == salvo em payon ==
    do conf storageAuto_npc payon 181 104
    do conf lockMap pay_fild08 #mapa que você deseja ir
    }

    automacro lv 18 {
    base = 18 #level que você deseja mudar de mapa

    call lv 29 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 29 {
    log == Indo salvar em Payon ==
    do ai manual
    do move payon 181 109
    do talknpc 181 104 c r0
    do ai auto
    log == salvo em payon ==
    do conf storageAuto_npc payon 181 104
    do conf lockMap pay_fild07 #mapa que você deseja ir
    }

    automacro lv 29 {
    base = 29 #level que você deseja mudar de mapa

    call lv 34 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 34 {
    log == Indo salvar em Payon ==
    do ai manual
    do move payon 181 109
    do talknpc 181 104 c r0
    do ai auto
    log == salvo em payon ==
    do conf storageAuto_npc payon 181 104
    do conf lockMap pay_fild09 #mapa que você deseja ir
    }

    automacro lv 34 {
    base = 34 #level que você deseja mudar de mapa

    call lv 45 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 45 {
    log == Indo salvar em Morocc ==
    do ai manual
    do move morocc 150 97
    do talknpc 156 97 c r0
    do ai auto
    log == salvo em morocc ==
    do conf storageAuto_npc morocc 156 97
    do conf lockMap moc_fild03 #mapa que você deseja ir
    }

    automacro lv 45 {
    base = 45 #level que você deseja mudar de mapa

    call lv 53 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 53 {
    log == Indo salvar em Prontera ==
    do ai manual
    do move prontera 147 326
    do talknpc 152 326 c r0
    do ai auto
    log == salvo em Prontera ==
    do conf storageAuto_npc prontera 152 326
    do conf lockMap prt_fild09 #mapa que você deseja ir
    }

    automacro lv 53 {
    base = 53 #level que você deseja mudar de mapa

    call lv 59 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 59 {
    log == Indo salvar em Geffen ==
    do ai manual
    do move geffen 207 123
    do talknpc 203 123 c r0
    do ai auto
    log == salvo em Geffen ==
    do conf storageAuto_npc geffen 203 123
    do conf lockMap mjolnir_07 #mapa que você deseja ir
    }

    automacro lv 59 {
    base = 59 #level que você deseja mudar de mapa

    call lv 70 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 70 {
    log == Indo salvar em Geffen ==
    do ai manual
    do move geffen 207 123
    do talknpc 203 123 c r0
    do ai auto
    log == salvo em Geffen ==
    do conf storageAuto_npc geffen 203 123
    do conf lockMap mjolnir_03 #mapa que você deseja ir
    }

    automacro lv 70 {
    base = 70 #level que você deseja mudar de mapa

    call lv 79 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 79 {
    log == Indo salvar em Geffen ==
    do ai manual
    do move geffen 207 123
    do talknpc 203 123 c r0
    do ai auto
    log == salvo em Geffen ==
    do conf storageAuto_npc geffen 203 123
    do conf lockMap gef_fild08 #mapa que você deseja ir
    }

    automacro lv 79 {
    base = 79 #level que você deseja mudar de mapa

    call lv 86 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 86 {
    log == Indo salvar em Geffen ==
    do ai manual
    do move geffen 207 123
    do talknpc 203 123 c r0
    do ai auto
    log == salvo em Geffen ==
    do conf storageAuto_npc geffen 203 123
    do conf lockMap gef_fild06 #mapa que você deseja ir
    }

    automacro lv 86 {
    base = 86 #level que você deseja mudar de mapa

    call aeroplano #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro aeroplano {
    do ai manual
    do conf attackAuto 0
    do move izlude 200 54
    do talknpc 206 55 c r0 c r0
    }

    automacro rachel {
    console /No momento estamos em Rachel/
    call andar
    run-once 1
    exclusive 1
    }

    macro andar {
    do move 243 73
    delay 10
    do move rachel 105 138
    do talknpc 109 138 c r0
    do conf attackAuto 2
    do conf storageAuto_npc rachel 109 138
    do conf lockMap ra_fild12 #mapa que você deseja ir
    do ai auto
    release rachel
    }

    automacro lv 95 {
    base = 95 #level que você deseja mudar de mapa

    call lv 99 #nome da macro que a automacro irá chamar

    run-once 1
    }

    macro lv 99 {
    do conf lockMap ra_fild08 #mapa que você deseja ir
    }

    automacro aura {
    base = 99

    call aura!
    }

    macro aura! {

    do move stop

    pause 5

    log — Parabéns, você é lv 99!! —

    do sit

    do c @random (“ALELUIA!!!”,”EEEEEEBAAA!!99!!”)

    pause 5

    do relog 99999999999999999999999999999999999999999999999
    }

    #######MAPA ERRADO MOC FILD20########

    automacro MapaErrado {

    location moc_fild20

    macro_delay 0.1

    exclusive 1

    run-once 1

    call {
    do conf autoTalkCont 1
    do move 40 183

    pause 2
    do talknpc 38 183 r1 r1 r1

    release MapaErrado
    }
    }

  4. will comentou: responder

    eu queria contato direto cm vc tipow whats hotmail face etc skyp

    Mas que perfeito esse Topico vllw!!

    Tenho duvidas tipow como por o personagem ate (do move) qunado o hp for tantos %
    porque eu já coloquei console hp < 90% não funciono coloquei hp < 90% tbm num funfo ajudai

  5. Hudson Machado comentou: responder

    Oi, eu tenho uma duvida. Eu preciso saber se existe um comando pro bot falar com 1 dos npcs que estam na mesma coordenada (389,14), eles tem nomes e ID diferentes, eu so vejo UM npc, mas o bot acaba vendo 3 e buga, me ajude!

  6. Filipo comentou: responder

    Finalmente um tutorial de nivel bom

  7. Kai Yagami comentou: responder

    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…

  8. Rita comentou: responder

    O tutorial é um pouco complicado, mas eu gostei.

  9. Romert comentou: responder

    Instalado e funcionando… vlw.