[Ajuda] Dúvida em um código Macro.

Bem-vindo!

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

Registrar agora!


Status
Não está aberto para novas respostas.

Kardouzo

Craftlandiano
VIP
Entrou
Set 11, 2012
Mensagens
6,603
Pontuação de reação
1,182
Idade
26
Cubos
0
ATENÇÃO
SE VOCÊ É UMA PESSOA QUE VEIO SIMPLESMENTE COMENTAR ''NÃO SEI RESOLVER, MANDA MP PRA TAL PESSOA'', OU ''BOA SORTE AÍ PRA ACHAR ALGUÉM'', OU PIOR AINDA, VIER DIZER QUE A CL NÃO DA SUPORTE PRA MACRO, EU PREFIRO QUE NEM COMENTE. É POR ISSO QUE ESTOU POSTANDO AQUI E NÃO EM ''DÚVIDAS GERAIS''.
NÃO POLUA O TÓPICO!
OBRIGADO!





Boa noite,
Recentemente um amigo meu resolveu entrar no ramo de programação e decidiu criar um código de Macro. No entanto, ele está tendo um problema com o código. Do jeito que o código abaixo está, tudo funciona perfeitamente. Porém, quando meu amigo deseja alterar o local de venda de lápis-lazuli, do mesmo jeito que fez com o teletransporte inicial da mina, começam a ocorrer problemas. O que acontece é o seguinte: Ao invés do macro minerar, ele começa a simplesmente funcionar como um ''auto-click'', e fica apenas batendo no minério, sem quebrá-lo. Alguém sabe como resolver esse problema? Deixarei o código abaixo caso alguém saiba como arrumar o problema. Caso contrário, por favor, não comente no tópico. Obrigado!

$${
if(mminerar);
unset(mminerar);log( );
log(&9&lMacro Mineracao);
log(&6&l1.0);
log(&6&l&4&lDesligado);
log(&9&l---------------);log( );
#ciclo=0;#lucro=0;
keyup(forward);keyup(back);
stop;
else;
set(mminerar);log( );
log(&9&lMacro Mineracao);
log(&6&l1.0);
log(&6&l&2&lLigado);
log(&9&l---------------);log( );
achievementget(Hora de minerar,278);
#ciclo=0;#volta=0;#inv=95;
wait(250ms);#delay=%#delay%*1000;#delay=%#delay%+1000;
echo(/warp mina);wait(6);keydown(forward); wait(12); keyup(forward);keydown(right); wait(300ms); keyup(right);keydown(jump); wait(1ms); keyup(jump); keydown(forward); wait(2100ms); keyup(forward);
do;ifmatches(%GUI%,chat);keyup(forward);else;slot(1);
if(%HITID%=21);key(attack);unsprint;keydown(forward);look(%#look%,40);inc(#inv);
else;wait(115ms);keyup(forward);wait(350ms);look(+90,40);wait(350ms);inc(#volta,1);endif;
&look=%DIRECTION%;
if(%&look%="N");look(0,40);#look=0;
elseif(%&look%="S");look(180,40);#look=180;
elseif(%&look%="E");look(90,40);#look=90;
elseif(%&look%="W");look(270,40);#look=270;endif;
if(#volta>4);getidrel(0,-1,0,#bloco);
if(#bloco=21);#volta=0;#altura=%YPOS%;
do;look(+0,90);key(attack);until(%YPOS%!=%#altura%);
wait(500ms);look(+0,40);wait(500ms);
else;echo(/warp mina);#volta=0;wait(5);look(%#look%,40);endif;
endif;
if(%#inv%>100);#inv=0;gui(inventory);getslotitem(35,#id);gui;
if(#id>0);inc(#ciclo,1);#lucro=%#preco%*%#ciclo%;
log( );log(&9&lMacro Mineracao);
log(&6&l1.0);
log(&6&l&e&lVendendo);
log(&9&l----------------------);log( );
echo(/warp mina);wait(5);do(4);key(attack);wait(250ms);loop;wait(500ms);
look(-90,0);
gui(inventory);
for(#limpar,9,44);
getslotitem(%#limpar%,#id);
if(#id=278);elseif(#id=257);elseif(#id=351);elseif(#id=19);else;
slotclick(%#limpar%);wait(110ms);slotclick(-999);endif;
next;gui;echo(/g Macro Mineracao 1.0 de RedEdition);
echo(/warp mina);wait(5);endif;endif;
if(%DURABILITY%<1000);echo(/reparar);wait(1250ms);endif;
endif;
loop;
endif;
}$$


@EDIT: Meu amigo achou a linha defeituosa, mas não sabe qual é o erro presente nela. Alguém sabe resolver? Grato! :


else;echo(/warp mina);#volta=0;wait(5);look(%#look%,40);keydown(forward); wait(12); keyup(forward);keydown(right); wait(300ms); keyup(right);keydown(jump); wait(1ms); keyup(jump); keydown(forward); wait(2100ms); keyup(forward);endif;
endif;
 
NetinGUINCHEIRO disse:
isso quando ele está em segundo plano?
Não, o erro acontece também quando o jogo está em primeiro plano.
 
TequillaZ disse:
Não, o erro acontece também quando o jogo está em primeiro plano.

TequillaZ disse:
Alguem? Revivendo...
tenta arrumar algumas vareáveis que estão de maneira errada no código, elas são colocadas dentro de %% quando são usadas, mas não quando são declaradas.
exemplo.
if(#volta>4);getidrel(0,-1,0,#bloco);
if(#bloco=21);#volta=0;#altura=%YPOS%;
ficaria

if(%#volta%>4);getidrel(0,-1,0,#bloco);
if(%#bloco%=21);#volta=0;#altura=%YPOS%;


elas devem ser postadas desse jeito.

#dima=0;
for(#SLOTVOCÊDECLARA,9,44);
getslotitem(%#SLOTVOCÊUSA%,#IDVOCÊDECLARA,#STACKVOCÊDECLARA);
ifmatches(%#IDVOCÊUSA%,"diamond");inc(%#dima%,1);endif;
next;
log(Você tem %#dima% Slots com diamantes.);

fora isso não posso ajudar muito já que não estou no servidor em questão, mas você pode ir botando logs em cada linha da macro para ajudar a achar a linha defeituosa e testa-la separadamente.

pelo menos é assim que eu faço.

tenta arrumar algumas vareáveis que estão de maneira errada no código, elas são colocadas dentro de %% quando são usadas, mas não quando são declaradas.
exemplo.
if(#volta>4);getidrel(0,-1,0,#bloco);
if(#bloco=21);#volta=0;#altura=%YPOS%;
ficaria

if(%#volta%>4);getidrel(0,-1,0,#bloco);
if(%#bloco%=21);#volta=0;#altura=%YPOS%;


elas devem ser postadas desse jeito.

#dima=0;
for(#SLOTVOCÊDECLARA,9,44);
getslotitem(%#SLOTVOCÊUSA%,#IDVOCÊDECLARA,#STACKVOCÊDECLARA);
ifmatches(%#IDVOCÊUSA%,"diamond");inc(%#dima%,1);endif;
next;
log(Você tem %#dima% Slots com diamantes.);

fora isso não posso ajudar muito já que não estou no servidor em questão, mas você pode ir botando logs em cada linha da macro para ajudar a achar a linha defeituosa e testa-la separadamente.

pelo menos é assim que eu faço.
TequillaZ disse:
Alguem? Revivendo...
tenta arrumar essas vareáveis, elas são colocadas dentro de %% quando são usadas, mas não quando são declaradas.
exemplo.
#dima=0;
for(#SLOTVOCÊDECLARA,9,44);
getslotitem(%#SLOTVOCÊUSA%,#IDVOCÊDECLARA,#STACKVOCÊDECLARA);
ifmatches(%#IDVOCÊUSA%,"diamond");inc(%#dima%,1);endif;
next;
log(Você tem %#dima% Slots com diamantes.);

fora isso não posso ajudar muito já que não estou no servidor em questão, mas você pode ir botando logs em cada linha da macro para ajudar a achar a linha defeituosa e testa-la separadamente.

pelo menos é assim que eu faço.
 
NetinGUINCHEIRO disse:
tenta arrumar algumas vareáveis que estão de maneira errada no código, elas são colocadas dentro de %% quando são usadas, mas não quando são declaradas.
exemplo.
if(#volta>4);getidrel(0,-1,0,#bloco);
if(#bloco=21);#volta=0;#altura=%YPOS%;
ficaria

if(%#volta%>4);getidrel(0,-1,0,#bloco);
if(%#bloco%=21);#volta=0;#altura=%YPOS%;


elas devem ser postadas desse jeito.

#dima=0;
for(#SLOTVOCÊDECLARA,9,44);
getslotitem(%#SLOTVOCÊUSA%,#IDVOCÊDECLARA,#STACKVOCÊDECLARA);
ifmatches(%#IDVOCÊUSA%,"diamond");inc(%#dima%,1);endif;
next;
log(Você tem %#dima% Slots com diamantes.);

fora isso não posso ajudar muito já que não estou no servidor em questão, mas você pode ir botando logs em cada linha da macro para ajudar a achar a linha defeituosa e testa-la separadamente.

pelo menos é assim que eu faço.
tenta arrumar algumas vareáveis que estão de maneira errada no código, elas são colocadas dentro de %% quando são usadas, mas não quando são declaradas.
exemplo.
if(#volta>4);getidrel(0,-1,0,#bloco);
if(#bloco=21);#volta=0;#altura=%YPOS%;
ficaria

if(%#volta%>4);getidrel(0,-1,0,#bloco);
if(%#bloco%=21);#volta=0;#altura=%YPOS%;


elas devem ser postadas desse jeito.

#dima=0;
for(#SLOTVOCÊDECLARA,9,44);
getslotitem(%#SLOTVOCÊUSA%,#IDVOCÊDECLARA,#STACKVOCÊDECLARA);
ifmatches(%#IDVOCÊUSA%,"diamond");inc(%#dima%,1);endif;
next;
log(Você tem %#dima% Slots com diamantes.);

fora isso não posso ajudar muito já que não estou no servidor em questão, mas você pode ir botando logs em cada linha da macro para ajudar a achar a linha defeituosa e testa-la separadamente.

pelo menos é assim que eu faço.

tenta arrumar essas vareáveis, elas são colocadas dentro de %% quando são usadas, mas não quando são declaradas.
exemplo.
#dima=0;
for(#SLOTVOCÊDECLARA,9,44);
getslotitem(%#SLOTVOCÊUSA%,#IDVOCÊDECLARA,#STACKVOCÊDECLARA);
ifmatches(%#IDVOCÊUSA%,"diamond");inc(%#dima%,1);endif;
next;
log(Você tem %#dima% Slots com diamantes.);

fora isso não posso ajudar muito já que não estou no servidor em questão, mas você pode ir botando logs em cada linha da macro para ajudar a achar a linha defeituosa e testa-la separadamente.

pelo menos é assim que eu faço.
Vou dar uma olhada aqui e testar. Obrigado pela ajuda :D
 
Eae, boa sorte pra teu amigo ae, macro é muito fácil cara, depois que você pega o raciocino geral, você embala

Analisei o código, e o problema é o seguinte:

Conforme macro existe um delay entre a realização de um código para o outro (que, posso dizer até onde sei é quase que 1T), o processo aonde a macro tem que bater no bloco (quebrar) contem muitas linhas de código junto com ela dentro do do(); (é um problema pra códigos grandes)

Exemplo, imaginamos que você cria um do(); e informa o loop; 100 linhas abaixo, ou seja (esses números são as linhas)

1. do();
2.
3.
4-95.
96.
97.
98.
99.
100. loop;

dentro desses espaços fingimos ter cada linha um comando de macro, porem, a partir que entra do do() até chegar no loop; para repetir o processo a macro iria, demorar, em cerca quase de 12T de atraso (não corretamente, apenas um exemplo), e conforme isso, se o key(attack); estivesse no meio dessas linhas, até a macro chegar no ponto loop; diríamos que o processo pra bater no bloco novamente pra poder quebrar reseta, e assim fazendo como um hit normal (todo mundo sabe que para quebrar um bloco não pode haver tempo entre um hit ao outro)

Um comando bom que acaba totalmente com o delay de quase 1T é o unsafe(); e endunsafe,

unsafe();
do();
log("Eae");
loop;
endunsafe;

Tudo que estiver dentro do unsafe() e endunsafe, ira realizar rapidamente sem delay nem um (muito, mais muito mais rápido que o normal de uma macro), porem, não recomendo usar isso já que a sua macro está totalmente completa (pode causar danos como os ifs e gui() )

Uma outra dica boa e relevante que dou, é você usar outro do();loop; no key(attack), analisando o tempo necessario pra quebrar o bloco, exemplo, pra você atirar uma flecha, basta usar:

do(40);
key(use);
loop;

Percebe que usei dentro dos parâmetros do do() "40", isso será quantas vezes que o do() repetira, e, conforme nisso, é o tempo aonde o minecraft exato pra atirar uma flecha (pode testar ;)

Mesma coisa para quebrar um minério, porem analise quanto tempo leva pra quebrar o bloco com a picareta desejada, depois, coloque o key(attack); dentro de um do(); especifico, tipo:

do(12);
key(attack);
loop;

(Foi um exemplo)

Outra dica, recomendo usar notepad++ programado na linguagem java, vem ja com alguns conceitos para macro (também o TAB [para deixar légivel qual código está dentro de um conceito], que é muito legível entender se você começar a usar nas macros exemplo:)
Código:
$${
if(macro_exemplo);
    unset(macro_exemplo);
    log("&cDesabilitando");
else;
    set(macro_exemplo);
    log("&aHabilitando");
    do();
        key(attack);
        wait(5ms);
    loop;
endif;
}$$
 
TequillaZ disse:
ATENÇÃO

SE VOCÊ É UMA PESSOA QUE VEIO SIMPLESMENTE COMENTAR ''NÃO SEI RESOLVER, MANDA MP PRA TAL PESSOA'', OU ''BOA SORTE AÍ PRA ACHAR ALGUÉM'', OU PIOR AINDA, VIER DIZER QUE A CL NÃO DA SUPORTE PRA MACRO, EU PREFIRO QUE NEM COMENTE. É POR ISSO QUE ESTOU POSTANDO AQUI E NÃO EM ''DÚVIDAS GERAIS''.

NÃO POLUA O TÓPICO!
OBRIGADO!





Boa noite,
Recentemente um amigo meu resolveu entrar no ramo de programação e decidiu criar um código de Macro. No entanto, ele está tendo um problema com o código. Do jeito que o código abaixo está, tudo funciona perfeitamente. Porém, quando meu amigo deseja alterar o local de venda de lápis-lazuli, do mesmo jeito que fez com o teletransporte inicial da mina, começam a ocorrer problemas. O que acontece é o seguinte: Ao invés do macro minerar, ele começa a simplesmente funcionar como um ''auto-click'', e fica apenas batendo no minério, sem quebrá-lo. Alguém sabe como resolver esse problema? Deixarei o código abaixo caso alguém saiba como arrumar o problema. Caso contrário, por favor, não comente no tópico. Obrigado!

$${
if(mminerar);
unset(mminerar);log( );
log(&9&lMacro Mineracao);
log(&6&l1.0);
log(&6&l&4&lDesligado);
log(&9&l---------------);log( );
#ciclo=0;#lucro=0;
keyup(forward);keyup(back);
stop;
else;
set(mminerar);log( );
log(&9&lMacro Mineracao);
log(&6&l1.0);
log(&6&l&2&lLigado);
log(&9&l---------------);log( );
achievementget(Hora de minerar,278);
#ciclo=0;#volta=0;#inv=95;
wait(250ms);#delay=%#delay%*1000;#delay=%#delay%+1000;
echo(/warp mina);wait(6);keydown(forward); wait(12); keyup(forward);keydown(right); wait(300ms); keyup(right);keydown(jump); wait(1ms); keyup(jump); keydown(forward); wait(2100ms); keyup(forward);
do;ifmatches(%GUI%,chat);keyup(forward);else;slot(1);
if(%HITID%=21);key(attack);unsprint;keydown(forward);look(%#look%,40);inc(#inv);
else;wait(115ms);keyup(forward);wait(350ms);look(+90,40);wait(350ms);inc(#volta,1);endif;
&look=%DIRECTION%;
if(%&look%="N");look(0,40);#look=0;
elseif(%&look%="S");look(180,40);#look=180;
elseif(%&look%="E");look(90,40);#look=90;
elseif(%&look%="W");look(270,40);#look=270;endif;
if(#volta>4);getidrel(0,-1,0,#bloco);
if(#bloco=21);#volta=0;#altura=%YPOS%;
do;look(+0,90);key(attack);until(%YPOS%!=%#altura%);
wait(500ms);look(+0,40);wait(500ms);
else;echo(/warp mina);#volta=0;wait(5);look(%#look%,40);endif;
endif;
if(%#inv%>100);#inv=0;gui(inventory);getslotitem(35,#id);gui;
if(#id>0);inc(#ciclo,1);#lucro=%#preco%*%#ciclo%;
log( );log(&9&lMacro Mineracao);
log(&6&l1.0);
log(&6&l&e&lVendendo);
log(&9&l----------------------);log( );
echo(/warp mina);wait(5);do(4);key(attack);wait(250ms);loop;wait(500ms);
look(-90,0);
gui(inventory);
for(#limpar,9,44);
getslotitem(%#limpar%,#id);
if(#id=278);elseif(#id=257);elseif(#id=351);elseif(#id=19);else;
slotclick(%#limpar%);wait(110ms);slotclick(-999);endif;
next;gui;echo(/g Macro Mineracao 1.0 de RedEdition);
echo(/warp mina);wait(5);endif;endif;
if(%DURABILITY%<1000);echo(/reparar);wait(1250ms);endif;
endif;
loop;
endif;
}$$


@EDIT: Meu amigo achou a linha defeituosa, mas não sabe qual é o erro presente nela. Alguém sabe resolver? Grato! :


else;echo(/warp mina);#volta=0;wait(5);look(%#look%,40);keydown(forward); wait(12); keyup(forward);keydown(right); wait(300ms); keyup(right);keydown(jump); wait(1ms); keyup(jump); keydown(forward); wait(2100ms); keyup(forward);endif;
endif;

estou no meu serviço quando chegar em cs vou analisar sua macro, tentarei resolver seu problema

Enviado de meu SM-G530H usando Tapatalk
 
witer disse:
estou no meu serviço quando chegar em cs vou analisar sua macro, tentarei resolver seu problema

Enviado de meu SM-G530H usando Tapatalk
Pode deixar mano, ja conseguimos resolver. Valeu pela atenção.
 
Status
Não está aberto para novas respostas.

Usuários que estão visualizando este tópico

Voltar
Topo