Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Ao se registrar conosco, você poderá discutir, compartilhar e enviar mensagens privadas com outros membros da nossa comunidade.
Inscreva-se agora!ManoFragaBR disse:Belo tutorial, UP![]()
eu estou atualizando esse aos poucos!! fique de olhoOtni disse:Jimmys Lindao fais outro Topico , Nao sei Nada de Programação antes de Lançarem o Macro agora ja sei alguns comandos basicos ...
boa kkkkkkkandre10 disse:Se fizer sol, vou fazer 1
Se Chover, vou fazer 2
Se ficar nublado, tambem vou fazer 2
Se tiver caindo uma tepestade, tambem vou fazer 2
Então vou fazer tudo no banheiro![]()
jimmyfilips paraben pelo seu tutorial muito bem explicado, bom eu estou fazendo um macro de upar espadas baseado no seu tutorial e estou com um problema na hora de repara a espada, fica assim: qnd a durabilidade chaga em 5 o meu esteve olha pra baixo e repara, olha pra frente e olha pra baixo de novo e repara ai ele olha pra frente e continua upando normal, eu ja quebrei a kabça enao descobri o que pode estar ocorrendo, me da uma ajuda ae pf. até fico aguardando.. o codigo q estou usandojimmyfilips disse:AVISO
ESTE POST RECEBERÁ VÁRIOS EDIT's COM O DECORRER DO TEMPO, DE ACORDO COM NECESSIDADE E PEDIDOS NOS COMENTÁRIOS
Pra começar, você precisa entender duas coisas básicas:
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 isso.
Ok, mas tenho duas perguntas:
Que condição é essa?
um exemplo básico é:
Se 5 for maior que 2, ficaria:
if(5 > 2);
(mais detalhes sobre como montar condições vão ser dados mais a frente)
mas o que eu defino o que ele vai fazer?
Bem, logicamente, ele não vai adivinhar o que precisa fazer se a condição for verdadeira, então imagine da seguinte forma:
você tem 5 coisas pra fazer:
1
2
3
4
5
mas na segunda coisa, se algo estiver diferente, você precisa fazer algo mais, mas o 3, 4 e 5 vão ser feitos independente do que acontecer no dois
Como defino o que deve ser feito? Simples!
IMAGINE ISSO:
Se(isso = isso)
fazer isso
isso
e isso
fim"Se"
esse fim"Se" define até onde deve ser executado, SE algo for verdadeiro!
como faço isso?
na macro seria "endif;"
resumindo, ficaria +/- assim:
IF(CONDIÇÃO);
FAÇA ISSO
ISSO
E ISSO
ENDIF;
Mas calma, ainda não acabou
já dá pra fazer muita coisa com isso! mas tem um comando simples que pode ajudar muito!!
Imagine isso:
Se fizer sol, vou fazer 1
Se Chover, vou fazer 2
Se ficar nublado, tambem vou fazer 2
Se tiver caindo uma tepestade, tambem vou fazer 2
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 fizer sol, vou fazer 1
Senão, faço 2
esse senão, vai abranger tempo nublado, tempestade, chuva, neve e qualquer outra condição climática que vier,
afinal, se você não demarcar TAMBÉM o senão, ele faria
Se fizer sol, vou fazer 1
vou fazer 2 (sem condições significa de qualquer forma)
útil não?
ele ficaria assim:
IF(condição);
fazer 1
ELSE;
fazer 2
ENDIF;
Hmmm, legal, mas e se eu quiser dizer "Se for assim, faça isso, mas se for assim, faça isso, se não for nenhum dos dois faça isso"?
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 que o Yao sabiamente me lembrou, entra na jogada!
COMANDO ELSEIF;
Como funciona?
Seguindo a logica dessa frase, analise o codigo de acordo com as cores:
"Se for assim, faça isso, mas se for assim, faça isso, se não for nenhum dos dois faça isso"
if(condicao);
faça isso
elseif(condicao2);
faça isso
else;
faça isso
endif;
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:
DO;
fazer 1
fazer 2
fazer 3
loop;
do(); / loop; Faça(tantas vezes) / repita
esses comandos vão fazer com que tudo repita "tantas vezes", definindo a quantia dentro de "()"
Exemplo:
do(5);
fazer 1
fazer 2
fazer 3
loop;
do; / while(); Faça / enquanto(condiçao)
esses comandos vão fazer com que tudo repita ENQUANTO a condição for verdadeira
(mais detalhes sobre como montar condições vão ser dados mais a frente)
Exemplo:
do;
fazer 1
fazer 2
fazer 3
while(a>2);
do; / until(); Faça / até(condiçao)
esses comandos vão fazer com que tudo repita ATÉ uma condição ser verdadeira
Exemplo:
do;
fazer 1
fazer 2
fazer 3
until(a=5);
2 - CONDIÇÕES
é com isso que você vai definir coisas do tipo:
SE O PLAYER ESTIVER OLHANDO PARA O NORTE, FAÇA ISSO
REPITA ATÉ QUE A DURABILIDADE SEJA MENOR QUE 5
OPERADORES RELACIONAIS (ou só "operadores")
Não vou nem explicar, olhando 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-se 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!
Agradecimentos a iBieel por ter me lembrado desse comando!
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);
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 armazenar texto nela, 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
%#var1%+5 Adicionar
%#var1%-3 Subtrair
%#var1%/7 Dividir
%#var1%*7 Multiplicar
OBS: TODO o tutorial esta sendo feito de cabeça, e muita coisa pode ser deixada pra trás, se souber de outras contas possíveis, marque nos comentários!
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.
VARIÁVEIS DO MINECRAFT
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% - (SEM INFORMAÇOES)
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% - (SEM INFORMAÇOES)
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)%)
PROXIMAS EXPLICAÇÕES:
VARIAVEIS: Random / Strips / globais
PROGRAMADORES
Se quiserem acrescentar ou até mesmo me corrigir, FIQUEM A VONTADE!!
é o seguinte, na linha que voce usou ele vai fazer o seguinte:guisilva199 disse:jimmyfilips paraben pelo seu tutorial muito bem explicado, bom eu estou fazendo um macro de upar espadas baseado no seu tutorial e estou com um problema na hora de repara a espada, fica assim: qnd a durabilidade chaga em 5 o meu esteve olha pra baixo e repara, olha pra frente e olha pra baixo de novo e repara ai ele olha pra frente e continua upando normal, eu ja quebrei a kabça enao descobri o que pode estar ocorrendo, me da uma ajuda ae pf. até fico aguardando.. o codigo q estou usando
$${
IF(espada);
LOG("&6Espadas &4Off");
UNSET(espada);
STOP();
ELSE;
LOG("&6Espadas &aOn");
SET(espada);
IFMATCHES(%DIRECTION%,W);
&frente = WEST;
ENDIF;
DO;
LOOK(%&frente%);
LOOK(,-1);
DO;
KEY(attack);
WAIT(0,50ms);
UNTIL(%DURABILITY% < 20);
LOOK(%&frente%);
LOOK(,+90);
DO(3);
KEY(use);
LOOP;
LOOP;
ENDIF;
}$$
olá, entao testei hoje o coidgo que vc passo e agora melhorou um pouco, mais ainda continua reparando 2x segudas, eu queria que reparasse apenas 1x, ( eu deixo upando de madrugada e do jeito que esta come quase 1 pack de diamante kk) fiz um pequeno video de testes pra te mostra melhor o que esta acontecendo.jimmyfilips disse:é o seguinte, na linha que voce usou ele vai fazer o seguinte:
olha pra frente
ataca ate a durabilidade ser menor que 20
olha pra baixo
repara 3 vezes
repete tudo, porém ele faz tudo MUITO rapido, tenta colocar um delay de 1 segunto "wait(1);" após o LOOK(,90);
fiz algumas alterações, de uma olhada, tenta com esse:
$${
IF(espada);
LOG("&6Espadas &4Off");
UNSET(espada);
STOP();
ELSE;
LOG("&6Espadas &aOn");
SET(espada);
//deixe "ifmatches" para todas as direções, não somente para west
IFMATCHES(%DIRECTION%,N);&frente = NORTH;ENDIF;
IFMATCHES(%DIRECTION%,S);&frente = SOUTH;ENDIF;
IFMATCHES(%DIRECTION%,E);&frente = EAST;ENDIF;
IFMATCHES(%DIRECTION%,W);&frente = WEST;ENDIF;
//para ficar melhor de visualizar, deixe cada repetição um caractere mais a frente, como eu deixei aqui:
DO;
LOOK(%&frente%);
LOOK(,-1);
DO;
KEY(attack);
WAIT(50ms);
//"ms" já significa "milisegundos", 1 já é quase que a mesma coisa que nada,
//entao não use abaixo de "0", como por exemplo o 0,50ms
UNTIL(%DURABILITY% < 20);
LOOK(%&frente%);
LOOK(,+90);
WAIT(1);
DO(3);
KEY(use);
LOOP;
LOOP;
ENDIF;
}$$
certo agora deu pra entender, tenta isso, é pra ter ctz q nao vai dar bugguisilva199 disse:olá, entao testei hoje o coidgo que vc passo e agora melhorou um pouco, mais ainda continua reparando 2x segudas, eu queria que reparasse apenas 1x, ( eu deixo upando de madrugada e do jeito que esta come quase 1 pack de diamante kk) fiz um pequeno video de testes pra te mostra melhor o que esta acontecendo.
ok, vou testa hj anoite assim q os mobs ficarem on , ai ja posto o resultado aqui pra vc, e valew pela ajuda =)jimmyfilips disse:certo agora deu pra entender, tenta isso, é pra ter ctz q nao vai dar bug
$${
IF(espada);
LOG("&6Espadas &4Off");
UNSET(espada);
STOP();
ELSE;
LOG("&6Espadas &aOn");
SET(espada);
//deixe "ifmatches" para todas as direções, não somente para west
IFMATCHES(%DIRECTION%,N);&frente = NORTH;ENDIF;
IFMATCHES(%DIRECTION%,S);&frente = SOUTH;ENDIF;
IFMATCHES(%DIRECTION%,E);&frente = EAST;ENDIF;
IFMATCHES(%DIRECTION%,W);&frente = WEST;ENDIF;
//para ficar melhor de visualizar, deixe cada repetição um caractere mais a frente, como eu deixei aqui:
DO;
LOOK(%&frente%);
LOOK(,-1);
DO;
KEY(attack);
WAIT(50ms);
//"ms" já significa "milisegundos", 1 já é quase que a mesma coisa que nada,
//entao não use abaixo de "0", como por exemplo o 0,50ms
UNTIL(%DURABILITY% < 20);
if(%DURABILITY% < 20);
LOOK(%&frente%);
LOOK(,+90);
DO(3);
WAIT(300ms);
KEY(use);
LOOP;
endif;
LOOP;
ENDIF;
}$$
Imaginaguisilva199 disse:ok, vou testa hj anoite assim q os mobs ficarem on , ai ja posto o resultado aqui pra vc, e valew pela ajuda =)
e aee, entao testei aqui o codigo que vc me passo por ultimo, e ele esta bugado :/ rs.. ainda persiste em repara 2x seguidas..guisilva199 disse:ok, vou testa hj anoite assim q os mobs ficarem on , ai ja posto o resultado aqui pra vc, e valew pela ajuda =)
jimmyfilips disse:certo agora deu pra entender, tenta isso, é pra ter ctz q nao vai dar bug
$${
IF(espada);
LOG("&6Espadas &4Off");
UNSET(espada);
STOP();
ELSE;
LOG("&6Espadas &aOn");
SET(espada);
//deixe "ifmatches" para todas as direções, não somente para west
IFMATCHES(%DIRECTION%,N);&frente = NORTH;ENDIF;
IFMATCHES(%DIRECTION%,S);&frente = SOUTH;ENDIF;
IFMATCHES(%DIRECTION%,E);&frente = EAST;ENDIF;
IFMATCHES(%DIRECTION%,W);&frente = WEST;ENDIF;
//para ficar melhor de visualizar, deixe cada repetição um caractere mais a frente, como eu deixei aqui:
DO;
LOOK(%&frente%);
LOOK(,-1);
DO;
KEY(attack);
WAIT(50ms);
//"ms" já significa "milisegundos", 1 já é quase que a mesma coisa que nada,
//entao não use abaixo de "0", como por exemplo o 0,50ms
UNTIL(%DURABILITY% < 20);
if(%DURABILITY% < 20);
LOOK(%&frente%);
LOOK(,+90);
DO(3);
WAIT(300ms);
KEY(use);
LOOP;
endif;
LOOP;
ENDIF;
}$$
guisilva199 disse:e aee, entao testei aqui o codigo que vc me passo por ultimo, e ele esta bugado :/ rs.. ainda persiste em repara 2x seguidas..
haha ai siim, vai ser bom trocar ideia com vc :3Insanity disse:Boa MLK, eu próprio ando num curso de programação tenho aula todo dia, quem sabe agente não troque umas idéias ^^
$${
IF(espada);
LOG("&6Espadas &4Off");
UNSET(espada);
STOP();
ELSE;
LOG("&6Espadas &aOn");
SET(espada);
//deixe "ifmatches" para todas as direções, não somente para west
IFMATCHES(%DIRECTION%,N);&frente = NORTH;ENDIF;
IFMATCHES(%DIRECTION%,S);&frente = SOUTH;ENDIF;
IFMATCHES(%DIRECTION%,E);&frente = EAST;ENDIF;
IFMATCHES(%DIRECTION%,W);&frente = WEST;ENDIF;
//para ficar melhor de visualizar, deixe cada repetição um caractere mais a frente, como eu deixei aqui:
DO;
LOOK(%&frente%);
LOOK(,-1);
DO;
KEY(attack);
WAIT(50ms);
//"ms" já significa "milisegundos", 1 já é quase que a mesma coisa que nada,
//entao não use abaixo de "0", como por exemplo o 0,50ms
UNTIL(%DURABILITY% < 20);
if(%DURABILITY% < 20);
LOOK(%&frente%);
LOOK(,+90);
DO(3);
WAIT(300ms);
KEY(use);
LOOP;
WAIT(1);
endif;
LOOP;
ENDIF;
}$$