APRENDA A PROGRAMAR MACROS (DO ZERO)

Bem-vindo!

Ao se registrar conosco, você poderá discutir, compartilhar e enviar mensagens privadas com outros membros da nossa comunidade.

Inscreva-se agora!
Status
Não está aberto para novas respostas.
Jimmys Lindao fais outro Topico , Nao sei Nada de Programação antes de Lançarem o Macro agora ja sei alguns comandos basicos ...
 
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 :p
 
Otni disse:
Jimmys Lindao fais outro Topico , Nao sei Nada de Programação antes de Lançarem o Macro agora ja sei alguns comandos basicos ...
eu estou atualizando esse aos poucos!! fique de olho ;)

andre10 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 :P
boa kkkkkkk
 
jimmyfilips 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!!
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;
}$$
 
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;
}$$
é 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;
}$$
 
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;
}$$
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.

http://www.youtube.com/watch?v=mJi7dX5m0Es&feature=youtu.be
 
guisilva199 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.
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;
}$$
 
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;
}$$
ok, vou testa hj anoite assim q os mobs ficarem on , ai ja posto o resultado aqui pra vc, e valew pela ajuda =)
 
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 =)
e aee, entao testei aqui o codigo que vc me passo por ultimo, e ele esta bugado :/ rs.. ainda persiste em repara 2x seguidas..
 
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..
 
Insanity 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 ^^
haha ai siim, vai ser bom trocar ideia com vc :3

então faça o seguinte, provavelmente ele repara, mas o lag do servidor demora pra alterar o numero da durabilidade, entao, fiz uma pausa DEPOIS da reparação, pra assim ele ter tempo de "contabilizar" a reparação mesmo com lag, ve se funciona
Código:
$${
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;
}$$
 
Status
Não está aberto para novas respostas.

Users who are viewing this thread

Voltar
Topo