O intuito desse poste é literalmente começar do começo (desculpem o pleonasmo), se você já programa, ele pode ser um pouco chato pra você. EDIT: Correção e alteração feita em 28/12/2017 às 13:14 Mais uma vez tive problemas com formatação, por favor, se videm algum erro ou caso algum trecho tenha ficado dificil de ler, por favor me avisem 1 - CONTROLES DE VARIÁVEIS COMANDO "IF" (SE) em português, 'if' significa "se". O uso dela é simples: SE uma condição for real, fazer algo. Ok, mas tenho duas perguntas: "Condição"? O que é isso? um exemplo: Se 5 for maior que 2: if(5 > 2); Mas como eu digo o que ele vai fazer? Logicamente, ele não vai adivinhar o que vai ser feito se a condição for verdadeira, vamos supor: você precisa quebrar um bloco de terra e colocar uma grama no lugar, na grama você vai colocar uma flor: 1 Quebrar a terra 2 Colocar a grama 3 Colocar a flor Se você não precisar quebrar a terra, você vai colocar a flor de qualquer forma, então essa função não precisa estar no "se". VEJA: Se(bloco = terra) quebrar a terra colocar a grama fim"Se" colocar a flor esse fim"Se" define até onde deve ser executado SE algo for verdadeiro! Isso significa que, se o bloco não for de terra, ele não vai quebrar o bloco nem colocar um novo, apenas vai colocar a flor! Na macro, isso seria "endif;", ficaria +/- assim: IF(bloco = terra); quebrar a terra colocar a grama ENDIF; Mas calma, ainda não acabou Já dá pra fazer muita coisa com isso, mas e se eu precisar fazer mais de uma verificação? Imagine isso: Se for um bloco de terra , vou quebrar ele e colocar um de grama. Se não for terra só vou colocar a flor imagine a poluição (e complicação) de colocar vários "SE", condição por condição! Não seria mais fácil dizer Se for um bloco de terra, vou quebrar ele e colocar um de grama. SENÃO, vou colocar a flor esse "senão" quer dizer, se o primeiro for FALSO (ou seja, não for terra) eu coloco a flor, tudo com apenas um comando! Útil não? ele ficaria assim: IF(bloco = terra); quebrar terra colocar grama ELSE; colocar flor ENDIF; Hmmm, legal, mas e se eu quiser dizer "Se for terra, quebre e coloque grama, se for grama, coloque uma flor, se não for nenhum dos dois, diga ok"? veja bem, é um comando um tanto complexo, daria pra fazer só com if e else, mas seria um pouco chato, não concorda? é a partir daí que outro comando entra na jogada! COMANDO ELSEIF; Como funciona? Seguindo a logica dessa frase, analise o codigo de acordo com as cores: "Se for terra, quebre e coloque a grama, mas se for grama, coloque a flor, se não for nenhum dos dois diga ok!" if(bloco = terra); quebrar o bloco colocar a grama elseif(bloco = grama); colocar a flor else; diga "ok" endif; COMANDO IFMATCHES Espera, eu tentei usar o if com texto, mas parece que ele não funciona, porque? Para utilizar o comando if para texto é um pouquinho diferente ao invés de IF(condição); você usará IFMATCHES(condição); Como faço uma condição para IFMATCHES? Ela aceita um tipo de condição, como uma espécie de verdadeiro ou falso, ou simplesmente igual, você deve usar o comando assim: IFMATCHES(%&var%,teste); Esse comando esse comando funciona apenas para texto e é o mesmo que usar IF(%&var% = "teste"); Dessa forma, ele verá se a variável &var é igual a "teste" Note que se usar a palavra entre aspas, como está o "teste", o IF funciona, mas com IFMATCHES você ganha a possibilidade de usar REGEX, mas vamos deixar isso pra mais tarde... Por hora, crie o costume de usar IFMATCHES, pois ele será bem interessante mais pra frente. COMANDO "DO" (REPETIR) "DO", no português mais simples seria "FAÇA" Pegando a logica do "endif", ele funciona da seguinte forma: do; / loop; Faça / repita esses comandos vão fazer com que tudo repita dentro deles até que a macro seja desligada imagine o "loop;" como o "endif;" Exemplo, vamos supor que está pescando: DO; jogar a isca puxar a isca ver se veio um peixe loop; do(); / loop; Faça(5 vezes) / repita esses comandos vão fazer com que tudo repita "tantas vezes", definindo a quantia dentro de "()", por exemplo, e se você quiser pescar 5 vezes antes de verificar se veio algum peixe? Exemplo: do(5); jogar a isca puxar a isca loop; ver se veio um peixe do; / while(); Faça / enquanto(condiçao) esses comandos vão fazer com que tudo repita ENQUANTO a condição for verdadeira, por exemplo, continuar pescando enquanto a durabilidade da vara for maior que 10 Exemplo: do; jogar a isca puxar a isca while(durabilidade > 10); do; / until(); Faça / até(condiçao) esses comandos vão fazer com que tudo repita ATÉ uma condição ser verdadeira, por exemplo, pescar ATÉ a vara quase quebrar Exemplo: do; jogar a isca puxar a isca until(durabilidade = 1); 2 - CONDIÇÕES é com isso que você vai definir coisas do tipo: SE O PLAYER ESTIVER OLHANDO PARA O NORTE, VÁ EM FRENTE ou REPITA ATÉ QUE A DURABILIDADE SEJA MENOR QUE 5 OPERADORES RELACIONAIS (ou só "operadores") Não vou nem explicar, apenas observando já é possível entender IGUAL = DIFERENTE seria a mesma coisa de dizer (se isso não for assim) != MAIOR > MENOR < MAIOR OU IGUAL >= MENOR OU IGUAL <= MAS O QUE FAÇO COM ELES? é com eles que você irá comparar números e variáveis (vou explicar sobre elas mais pra frente) Um exemplo pratico muito usado é o de durabilidade, por exemplo, se sua espada estiver com baixa durabilidade, a macro para, ficaria assim: IF(%DURABILITY% < 5); // Se a durabilidade for menor que 5 STOP; ENDIF; 3 - VARIÁVEIS FLAGS "flags" em portuguêns significa "bandeira" Como Funcionam? uma bandeira só tem 2 "status": Ligado ou Desligado lembre-se dos bandeirinhas no futebol, SE estiver levantada (ligada) é impedimento, SE estiver baixada (desligada) não é nada (lembre desse SE) COMO LIGAR set(nome_da_flag); COMO DESLIGAR unset(nome_da_flag); E SE EU QUISER APENAS "INVERTER", TENHO QUE USAR IF? Não, você pode usar um comando que define isso automaticamente! COMANDO TOGGLE(nome_da_flag); esse comando, irá inverter o status da flag Se ela estiver desligada, irá ligar Se estiver ligada, irá desligar Mas onde aplico elas? Você vai utilizá-la com o comando IF (lembre-se do exemplo dos bandeirinhas) if(nome_da_flag); IMPEDIMENTO! else; segue o jogo... endif; assim, escrevendo o comando dessa forma, ele já lê como: se a flag "nome_da_flag" estiver LIGADA TEXTUAIS E NUMÉRICAS Essas variáveis armazenam dados que podem ser alterados durante o código, ou armazenar dados que sejam adquiridos na hora do uso, como por exemplo %ITEM%, %DIRECTION%, %PLAYER%, etc. (todas vão ser explicadas mais pra frente). Como Funcionam? o uso delas são simples, vou explicar uma de cada vez NUMÉRICAS usadas para armazenar APENAS NÚMEROS, ela não armazena texto, caso tente, ela ficará em branco. elas são identificadas da seguinte forma: #nome_da_variavel automaticamente, qualquer variável numérica vem com o valor 0, para alterá-lo, é simples: #nome_da_variavel= conteudo; OBS: 1 - o "nome_da_variavel" é a sua escolha! 2 - o símbolo "#" deve SEMPRE estar na frente do nome da variável 3 - o conteúdo pode ser um numero ex.: #nome_da_variavel=20; ou pode ser outra variável ex.: #nome_da_variavel=%#var2%; USANDO AS VARIÁVEIS: para usá-las é simples, elas devem ficar dentro de "%", por exemplo: IF(%#variavel%); (lembrando que junto com o nome é obrigatório colocar o simbolo # ou &, e ele deve ser o mesmo que você usou quando atribuiu um valor a ela). MANIPULANDO AS VARIÁVEIS: uma variável numerica pode ser manipulada de várias formas, como são números, contas matemáticas podem ser feitas com elas, veja %#var1% = %#var1%+2 esse comando altera a variável var1 adicionando 2 a mesma %#var2% = %#var1%+2 esse, altera OUTRA variável (var2) colocando nela o valor da variável var1 + 2 com elas é possível, por exemplo: %#var1%+5 Adicionar %#var1%-3 Subtrair %#var1%/7 Dividir %#var1%*7 Multiplicar outra forma de manipulá-las, é através dos comandos INC e DEC o uso deles também é bem simples e útil COMANDO INC é usado para ACRESCENTAR um numero a variável, desta forma: INC(#nome_da_variavel, valor); um exemplo simples de uso é: INC(#var, 1); este comando irá acrescentar 1 a variável #var COMANDO DEC é usado para SUBTRAIR um numero a variável, desta forma: DEC(#nome_da_variavel, valor); um exemplo simples de uso é: DEC(#var, 1); Este comando irá subtrair 1 a variável #var TEXTUAIS usadas para armazenar caracteres de TEXTO, com ela você pode salvar nomes e outros tipos de informações em forma de texto e/ou números. elas são identificadas da seguinte forma: &nome_da_variavel automaticamente, qualquer variável numérica vem com o valor 0, para alterá-lo, é simples: &nome_da_variavel= conteudo; OBS: 1 - o "nome_da_variavel" é a sua escolha! 2 - o símbolo "&" deve SEMPRE estar na frente do nome da variável 3 - o conteúdo pode ser um texto ex.: &nome_da_variavel=OLÁ; ou pode ser outra variável ex.: &nome_da_variavel=%&var5%; USANDO AS VARIÁVEIS: assim como as numéricas, para usá-las é simples, elas devem ficar dentro de "%", por exemplo: IF(%&variavel%); (lembrando que junto com o nome é obrigatório colocar o simbolo # ou &, e ele deve ser o mesmo que você usou quando atribuiu um valor a ela). DESVANTAGEM: ela não pode ser manipulada (ou até pode, mas é bem complicado). VARIÁVEIS DO MINECRAFT (Variáveis de Ambiente) Responsáveis por obter dados do jogo, essas variáveis são separadas em seis grupos ao contrario das demais elas não levam um caractere do tipo # ou &, mas elas tem duas características únicas: 1 - São escritas SEMPRE em letras MAIÚSCULAS 2 - SEMPRE serão escritas entre "%" INFORMAÇÕES GERAIS %PLAYER% - nick do jogador %DIMENSION% - nome da dimensão atual (nether/mundo normal) %SERVER% - IP do server %RAIN% - condiçao de chuva (0 - 400) INFORMAÇÕES DO PLAYER %XPOS% - posição X atual %YPOS% - posição Y atual %ZPOS% - posição Z atual %DIRECTION% - direçao em que está olhando (apresentada atraves de uma letra N/S/E/W) %YAW% - direção horizontal em que está olhando, medida em ângulos, vai de (-90 a 0) e de (0 a 90) %PITCH% - direçao vertical em que está olhando, medida em ângulos, vai de (-90 a 0) e de (0 a 90) %HEALTH% - Sangue atual do jogador (0 - 20) sendo meio coraçao = 1 %HUNGER% - Fome atual do jogador (0 - 20) sendo meia carne = 1 %SATURATION% - (SEM INFORMAÇOES) %OXYGEN% - Oxigênio atual do jogador (0 - 400) INFORMAÇÕES DA ARMADURA (EM USO) %BOOTSDURABILITY% - Durabilidade da bota %BOOTSID% - ID da bota usada %LEGGINGSDURABILITY% - Durabilidade da calça %LEGGINGSID% - ID da calça usada %CHESTPLATEDURABILITY% - Durabilidade do Peitoral %CHESTPLATEID% - ID do peitoral usado %HELMDURABILITY% - Durabilidade do capacete %HELMID% - ID do capacete usado INFORMAÇÕES DO ITEM QUE ESTÁ EM SUA MÃO %ITEM% - ID do item que esta em sua mão %ITEMNAME% - Nome do item que está em sua mão (Ex: Torch) %DURABILITY% - Durabilidade do item que está em sua mão %STACKSIZE% - Quantia de itens na mão do jogador (stackado) INFORMAÇÕES SOBRE O QUE ESTÁ EM SUA MIRA %HIT% - Tipo do que esta em sua mira (PLAYER, BLOCK, etc) %HITID% - ID do que esta em sua mira %HITNAME% - Nome do que está em sua mira (baseado no ID) %HITDATA% - "fase" ou "estágio" do bloco, Exemplo: Fungo pronto para colher HITDATA=3 INFORMAÇÕES DE "BOTÕES PRESSIONADOS" %KEY_CTRL% - Verifica se a tecla CTRL esta sendo pressionado %KEY_ALT% - Verifica se a tecla ALT esta sendo pressionado %KEY_SHIFT% - Verifica se a tecla SHIFT esta sendo pressionado %KEY_(name)% - Verifica se a tecla definida esta sendo pressionado (ex: %KEY_B% ) VARIÁVEIS DIVERSAS ALEATÓRIAS (RANDOM) uma variável aleatória, é gerada pelo macro, respeitando a limitações dadas pelo programador Exemplo: "Diga-me um numero qualquer de 1 a 20". COMO FUNCIONA ela tem a seguinte estrutura: RANDOM(#variavel,max,min); #variavel: o valor gerado pelo random será armazenado aqui. o nome é escolhido por você, basta deixar o "#" pra que assim ela seja identificada como numérica. max: é o valor máximo que a variável pode ter min: é o valor mínimo que a variável pode ter exemplo de uso: RANDOM(#chute,100,5); GLOBAIS Essas variáveis não trazem nada de novo comparado ao que já foi explicado, porém, as variáveis #var e &var só podem ser usadas DENTRO DA MACRO em que elas estão sendo manipuladas Ok, espera... Eu não entendi '-' É mais simples do que parece, imagine que você tem duas macros rodando, e você precisa que uma pare, quando a outra fizer algo, como fazer isso? Variáveis globais salvam um valor que pode ser usado em QUALQUER OUTRA MACRO, mesmo com a que criou o valor ainda executando. Como usar basta colocar um @ na frente da variável e pronto! Exemplos: @#var1 | @&var2 Código: %@#var1% %@&var2% 4 - COMANDOS BÁSICOS Ok, você já aprendeu a trabalhar com números e condições, mas não tem graça aprender tudo isso se não tiver o que fazer com eles, certo? Então vamos a alguns comandos básicos que o macro oferece, como por exemplo, atacar, clique direito, ir para frente, para trás, para os lados, pular, etc. Para isso, leia o final deste tópico PROGRAMADORES Se quiserem acrescentar ou até mesmo me corrigir, FIQUEM A VONTADE!! Esta postagem ensina como dar vida ao seu macro, porém, este é só o "esqueleto" de tudo, após aprender tudo o que foi dito aqui, é hora de se aprofundar nos milhares de comandos oferecidos por este macro. Até a próxima! LEIA AGORA: TODOS OS COMANDOS DO MOD MACRO KEYBIND Quer ver mais destes tutoriais para aprender a programar? acesse meu blog! Agradecimentos especiais a [member=Xtycon] pelas observações importantes! Copyright Filipe Daineze © 2018
Ótimo tutorial, quem quiser aprender basta estudar um pouco por dia, pois nada se aprende de um dia pro outro. Bjos.
O nome real dessas 'variaveis do minecraft' sao Variaveis de Ambiente, o moço la que fez o mod chama elas de "Enviroment Variable". a variavel %STACKSIZE% da a quantidade atual de itens na mao do jogador, ex: se ele tiver com 5 bifes na mao, ela vai dar 5 como resultado, nao 64, que é o stack maximo do bife. E as variaveis das teclas %KEY_LETRA% nao precisa de usar parenteses nas letras, ex: se quiser saber se a letra X ta pressionada voce só usa %KEY_X% e nao %KEY_(X)%. O lance que variaveis locais só podem ser usadas na macro que foram manipuladas ta até certo, só que eu acho mais certo voce colocar que: Cada tecla/evento que inicia uma macro, guarda todas os valores das variaveis locais usadas nelas de forma permanente. Pode ter ficado meio embolado a ideia mas é assim que funciona. Outra coisa, no IF nao precisa por %% nas variaveis pra funcionar, nem nas variaveis de ambiente, do tipo, funciona se eu colocar assim: #num = 10; IF(#num=10); LOG("Verdadeiro"); ENDIF; IF(KEY_X); LOG("Tecla X pressionada"); ELSE; LOG("Tecla X nao esta pressionada"); ENDIF; é bem provavel que esse detalhe funcione em outros testes condicionais tambem mas eu n tenho certeza. Pra usar o IF em um texto voce precisa por o texto entre "", ex: &variavel_legal = "Texto Legal"; IF(&variavel_legal="Texto Legal"); LOG("Essa variavel é legal mesmo ein"); ELSE; LOG("Essa variavel nao é legal de verdade"); ENDIF; ja o comando IFMATCHES é usado pra testar expressoes regulares (regex) e é muito mais poderoso que um simples IF, usando o IFMATCHES em conjunto com o MATCH eu ja fiz muita coisa louca com esse modzinho. E as variaveis de texto podem ser manipuladas usando o regex que eu falei agora, com um pouco de pratica, é claro. E voce esqueceu de falar sobre as arrays.
ÓTIMAS colocações, de verdade, algumas das suas observações vão para o topico, outras n vou colocar mas vou explicar pra vc pra n parecer chatice minha kkk "Cada tecla/evento que inicia uma macro, guarda todas os valores das variaveis locais usadas nelas de forma permanente." A explicação é ótima, mas muito técnica, parti do principio que algumas pessoas vão ler esse tópico sem nem mesmo saber o que é programar, não vão entender por exemplo o que é uma variável local, não vão assimilar logo de cara o que são variáveis locais e globais. Quanto a %STACKSIZE% tenho que verificar, mas tem diferença entre o stack total e o que está na sua mão, agora que reparei que não coloquei isso no tópico, vou revisar pq n lembro de cabeça mas vou destacar isso Quanto ao uso do %KEY_B% vc está correto, nem eu uso entre parenteses, nesse caso foi erro de digitação, o parenteses era pra ser apenas pra mostrar onde é alterado, não pra ser usado no exemplo, obg por avisar! "Outra coisa, no IF nao precisa por %% nas variaveis pra funcionar" Realmente não precisa, mas pra você usar em um "log" por exemplo precisa, e como funciona nesse modo no if resolvi simplificar, ao invés de criar a confusão de "use sem no if, com no log, sem no until e while" e etc, resolvi adotar o "na duvida, use em tudo", nesse caso a intenção foi não complicar. "Pra usar o IF em um texto voce precisa por o texto entre "" " Estou ciente, mas essa parte fiquei com dúvida em explicar, eu queria deixar uma "introdução" ao uso de regex, mas não queria complicar, por exemplo, você pode usar: IFMATCHES("%CHATCLEAN%","^»Bem vindo de volta. .... sendo o "^" pra marcar o inicio, mas pegando a ideia de que "algumas pessoas vão ler esse tópico sem nem mesmo saber o que é programar" resolvi deixar padronizado que, para texto, use "ifmatches", dessa forma quando eu for explicar o "^" a pessoa não vai tentar usar isso no "if" e não vai causar mais confusão... mas vou dar uma mudada no texto pra deixar a diferença levemente explicada Mais uma vez, se tiver alguma critica a fazer até sobre o que acabei de dizer, é só falar! Esse tópico é na verdade uma revisão de um post de 2015, então posso ter deixado passar muita coisa Quase esqueci "E voce esqueceu de falar sobre as arrays." Vou colocar a observação pra explicação posterior, provavelmente vai entrar quando trouxer esse topico pra ca: http://jimmyfilips.blogspot.com.br/2015/12/todos-os-comandos-do-mod-macro.html
Obrigado por responder, peço até desculpas por ter esquecido do principal que era deixar bem simples pra galera, acabei me empolgando um pouquinho hehehe
Relaxa, acredite, a primeira vez q escrevi eu refiz isso umas 5 vezes pq tb me empolgava kkkkk e olha o que eu faleio zExcalibur ja n entendeu kkkkkk
- Coloquei a referencia a variavel de ambiente e deixei um link a wiki do macro onde fala sobre elas - Deixei mais bem explicado o IFMATCHES sem dificultar muito explicando que dá pra usar IF pra texto - Mudei a desc do STACKSIZE, realmente é exatamente como vc disse, fiz o teste prático Quanto a arrays, to pensando em fazer outro topico falando de arrays, for e talvez foreach Mais uma vez, obrigado!
kkkk achei que aprendia de um dia para o outro kkk mas bora salvar nos favoritos para ver se consigo aprender kkkk
Bom tutorial, irei estudar macros para poder fazer, por que ficar pedindo direto para vocês devem encher o saco kkkk