[Macro] DuCacau

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.
Entrou
Abr 10, 2017
Mensagens
3,438
Pontuação de reação
1,329
Idade
23
Localização
Uberlândia
Cubos
1
TbpVkXD.png
Olá, turma! Tudo bem?
Estou lançando a versão v0.1 da macro DuCacau, um projeto em desenvolvimento para facilitar a colheita de cacau. Esta é a primeira versão, e melhorias virão nas próximas atualizações!


Funcionalidades atuais:
✅ Colheita automática de cacau no estilo MKB, permitindo quantidades infinitas (Obs.: é necessário saber o número de colunas de cacau).
E0mGpsf.png
✅ Armazenamento automático do cacau em uma trap de baús MKB, também de forma infinita.
ob6Od9t.png

✅ Compatível com machados de diamante, com ou sem encantamentos. Machado no slot 1 da hotbar.
✅ Suporte a múltiplas homes no formato de prefixo (ex.: /home c1, c2, c3), permitindo infinitas localizações.

84vLRTX.png

OWvnyhW.png

Melhorias previstas para próximas versões:

⌛ Troca ou reparo automático de machados quando estiverem com durabilidade baixa.
⌛ Identificação automática do número de colunas de cacau, eliminando a necessidade de configurá-las manualmente.
⌛ Modo de venda automática, agilizando o processo e otimizando os ganhos.

Código:
[LEFT]$${
#homes = 3;
&prefixo = "/home h";
#quantas_colunas = 17;
&delay = 200ms;
&teleporte = 5000ms;
&mkb = "/home mkb";
if(@rep);
    log("&f&l[&e&lMA&f&lCRO] &f&lDu&e&lCacau &c&lOFF");
    unset(@rep);
    stop();
endif;
else;
    log("&f&l[&e&lMA&f&lCRO] &f&lDu&e&lCacau &a&lON");
    set(@rep);
    unset(@armazem);
    do();
        FOR(#i,1,%#homes%);
            echo(%&prefixo%%#i%);
            wait(6000ms);
            do(%#quantas_colunas%);
                do(1);
                    wait(%&delay%);
                    LOOK(0,44);
                    wait(%&delay%);
                    IF(%HIT_AGE% == 2);
                        pick("diamond_axe");
                        wait(%&delay%);
                        key(attack);
                        wait(%&delay%);
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    elseif(%HITID% == "log");
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    endif;
                    wait(%&delay%);
                    LOOK(0,28);
                    wait(%&delay%);
                    IF(%HIT_AGE% == 2);
                        pick("diamond_axe");
                        wait(%&delay%);
                        key(attack);
                        wait(%&delay%);
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    elseif(%HITID% == "log");
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    endif;
                    wait(%&delay%);
                    LOOK(0,0);
                    wait(%&delay%);
                    IF(%HIT_AGE% == 2);
                        pick("diamond_axe");
                        wait(%&delay%);
                        key(attack);
                        wait(%&delay%);
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    elseif(%HITID% == "log");
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    endif;
                    wait(%&delay%);
                    LOOK(0,-23);
                    wait(%&delay%);
                    IF(%HIT_AGE% == 2);
                        pick("diamond_axe");
                        wait(%&delay%);
                        key(attack);
                        wait(%&delay%);
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    elseif(%HITID% == "log");
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    endif;
                    wait(%&delay%);
                    LOOK(0,-15);
                    wait(%&delay%);
                    IF(%HIT_AGE% == 2);
                        pick("diamond_axe");
                        wait(%&delay%);
                        key(attack);
                        wait(%&delay%);
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    elseif(%HITID% == "log");
                        pick("dye");
                        key(use);
                        wait(%&delay%);
                    endif;
                loop;
                wait(%&delay%);
                look(0,0);
                wait(%&delay%);
                IF(%DIRECTION%=="N");
                    LOOK(450,0);
                ELSEIF(%DIRECTION%=="W");
                    LOOK(360,0);
                ELSEIF(%DIRECTION%=="S");
                    LOOK(270,0);
                ELSEIF(%DIRECTION%=="E");
                    LOOK(180,0);
                ENDIF;
                IF(%DIRECTION%=="N");
                    SET(#looky44a1cc, 360);
                    SET(#lookp44a1cc, 0);
                ELSEIF(%DIRECTION%=="W");
                    SET(#looky44a1cc, 270);
                    SET(#lookp44a1cc, 0);
                ELSEIF(%DIRECTION%=="S");
                    SET(#looky44a1cc, 180);
                    SET(#lookp44a1cc, 0);
                ELSEIF(%DIRECTION%=="E");
                    SET(#looky44a1cc, 450);
                    SET(#lookp44a1cc, 0);
                ENDIF;
                IF(%DIRECTION%=="E");
                    #xpos244a1cd=%XPOS%+1;
                    #zpos244a1ce=0;
                ELSEIF(%DIRECTION%=="N");
                    #zpos244a1ce=%ZPOS%-1;
                    #xpos244a1cd=0;
                ELSEIF(%DIRECTION%=="W");
                    #xpos244a1cd=%XPOS%-1;
                    #zpos244a1ce=0;
                ELSEIF(%DIRECTION%=="S");
                    #zpos244a1ce=%ZPOS%+1;
                    #xpos244a1cd=0;
                ENDIF;
                IF((%DIRECTION%=="N")||(%DIRECTION%=="S"));
                    DO();
                        KEYDOWN(forward);
                        IF(%ZPOS%==%#zpos244a1ce%);
                            LOOK(%#looky44a1cc%,%#lookp44a1cc%);
                            KEYUP(forward);
                            BREAK;
                        ENDIF;
                    LOOP;
                ELSEIF((%DIRECTION%=="E")||(%DIRECTION%=="W"));
                    DO();
                        KEYDOWN(forward);
                        IF(%XPOS%==%#xpos244a1cd%);
                            LOOK(%#looky44a1cc%,%#lookp44a1cc%);
                            KEYUP(forward);
                            BREAK;
                        ENDIF;
                    LOOP;
                ENDIF;
                IF(%DIRECTION%=="N");
                    LOOK(270,0);
                ELSEIF(%DIRECTION%=="W");
                    LOOK(180,0);
                ELSEIF(%DIRECTION%=="S");
                    LOOK(450,0);
                ELSEIF(%DIRECTION%=="E");
                    LOOK(360);
                ENDIF;
                log("&f&l[&e&lMA&f&lCRO] &f&lPassinho pro lado");
                wait(100ms);
            loop;
            wait(3000ms);
            gui(inventory);
            wait(500ms);
            GETSLOTITEM(35,&idvar,#stacks);
            IF(%&idvar% == "dye");
                IF(%#stacks%==64);
                    log("&f&l[&e&lMA&f&lCRO] &f&lIniciando Armazenamento");
                    set(@armazem);
                    break();
                endif;
            ENDIF;
            gui();
        NEXT;
        IF(@armazem);
            wait(500ms);
            echo(%&mkb%);
            wait(6000ms);
            SET(#bau44a1d6,0);
            SET(#distancia44a1d6,0);
            UNSET(#coluna44a1d6);
            UNSET(#baus_verificados44a1d6);
            UNSET(#quantidade_movidos);
            DO;
                #distancia44a1d6=#distancia44a1d6*1;
                if(%DIRECTION%=="N");
                    #dir44a1d7=0;
                    #variacaoz44a1d7=0;
                    #variacaox44a1d7=1;
                    SET(andar_direita44a1d7);
                    SET(distancia_positiva44a1d7);
                elseif(%DIRECTION%=="S");
                    #dir44a1d7=180;
                    #variacaoz44a1d7=0;
                    #variacaox44a1d7=-1;
                    SET(andar_direita44a1d7);
                    UNSET(distancia_positiva44a1d7);
                elseif(%DIRECTION%=="E");
                    #dir44a1d7=90;
                    #variacaox44a1d7=0;
                    #variacaoz44a1d7=1;
                    SET(andar_direita44a1d7);
                    SET(distancia_positiva44a1d7);
                elseif(%DIRECTION%=="W");
                    #dir44a1d7=270;
                    #variacaox44a1d7=0;
                    #variacaoz44a1d7=-1;
                    SET(andar_direita44a1d7);
                    UNSET(distancia_positiva44a1d7);
                endif;
                #destinox44a1d7=XPOS+(%#distancia44a1d6%*#variacaox44a1d7);
                #destinoz44a1d7=ZPOS+(%#distancia44a1d6%*#variacaoz44a1d7);
                SET(#pitch_congelado44a1d7,%PITCH%);
                CENTEROVERBLOCK();
                WAIT(3t);
                do;
                    look(%#dir44a1d7%,%#pitch_congelado44a1d7%);
                    GETIDREL(%#variacaox44a1d7%,-1,%#variacaoz44a1d7%,&bloco_lado44a1d7);
                    GETIDREL(%#variacaox44a1d7%,0,%#variacaoz44a1d7%,&bloco_lado044a1d7);
                    GETIDREL(%#variacaox44a1d7%,1,%#variacaoz44a1d7%,&bloco_lado144a1d7);
                    #diferenca_eixo44a1d7=(#destinox44a1d7-XPOS)+(#destinoz44a1d7-ZPOS);
                    #abs_diferenca_eixo44a1d7=#diferenca_eixo44a1d7;
                    IF(#diferenca_eixo44a1d7<0);
                        #abs_diferenca_eixo44a1d7=#diferenca_eixo44a1d7*-1;
                    ENDIF;
                    IF(((#diferenca_eixo44a1d7>0)&&(!distancia_positiva44a1d7))||((#diferenca_eixo44a1d7<0)&&(distancia_positiva44a1d7)));
                        TOGGLE(andar_direita44a1d7);
                        TOGGLE(distancia_positiva44a1d7);
                        #variacaox44a1d7=#variacaox44a1d7*-1;
                        #variacaoz44a1d7=#variacaoz44a1d7*-1;
                        LOG("§e✘ §8woops");
                        KEYUP("right");
                        KEYUP("left");
                        WAIT(1t);
                    ELSEIF(#diferenca_eixo44a1d7==0);
                        SET(success44a1cf);
                        BREAK;
                    ENDIF;
                    IFMATCHES("%&bloco_lado44a1d7%","^0$|^air$|^31$|^grass$|^6$|^sapling$|^37$|^flower$|^38$|^rose$|^39$|^40$|^torch$|^50$");
                        UNSET(success44a1cf);
                        BREAK;
                    ENDIF;
                    IFMATCHES("{%&bloco_lado044a1d7%}{%&bloco_lado144a1d7%}","^(?!\s*$)(?:\{(0|air|31|grass|6|sapling|37|flower|38|rose|39|40|torch|50)\})+$");
                        SET(success44a1cf);
                    ELSE;
                        UNSET(success44a1cf);
                        BREAK;
                    ENDIF;
                    IF(andar_direita44a1d7);
                        KEYDOWN("right");
                    ELSE;
                        KEYDOWN("left");
                    ENDIF;
                    WAIT(1t);
                LOOP;
                KEYUP("right");
                KEYUP("left");
                WAIT(3t);
                CENTEROVERBLOCK();
                INC(#coluna44a1d6,%#distancia44a1d6%);
                IF(success44a1cf);
                    #front44a1d6=2;
                    #right44a1d6=0;
                    #up44a1d6=3-#bau44a1d6;
                    #x44a1d6=(((DIRECTION=="E")-(DIRECTION=="W"))*(#front44a1d6))+(((DIRECTION=="N")-(DIRECTION=="S"))*(#right44a1d6))+XPOS;
                    #y44a1d6=YPOS+#up44a1d6;
                    #z44a1d6=(((DIRECTION=="S")-(DIRECTION=="N"))*(#front44a1d6))+(((DIRECTION=="E")-(DIRECTION=="W"))*(#right44a1d6))+ZPOS;
                    GETID(%#x44a1d6%,%#y44a1d6%,%#z44a1d6%,&id_bloco44a1d6);
                    UNSET(abriu44a1d6);
                    IFMATCHES("%&id_bloco44a1d6%","^54$|^chest$|^146$|^trapped_chest$|^130$|^ender_chest$");
                        #yaw44a1d8=((DIRECTION=="N")*360)+((DIRECTION=="S")*180)+((DIRECTION=="E")*90)+((DIRECTION=="W")*270);
                        INC(#yaw44a1d8,5);
                        if(%#bau44a1d6%==0);
                            look(%#yaw44a1d8%,310);
                        elseif(%#bau44a1d6%==1);
                            look(%#yaw44a1d8%,335);
                        elseif(%#bau44a1d6%==2);
                            look(%#yaw44a1d8%,0);
                        elseif(%#bau44a1d6%==3);
                            look(%#yaw44a1d8%,35);
                        elseif(%#bau44a1d6%==4);
                            look(%#yaw44a1d8%,50);
                        endif;
                        WAIT(1t);
                        UNSET(abriu44a1d6);
                        IFMATCHES(%HITID%,"^54$|^chest$|^146$|^trapped_chest$|^130$|^ender_chest$");
                            IFMATCHES(%HITSIDE%,"^N$|^S$|^E$|^W$");
                                #distancex44a1cf=XPOS-HITX;
                                #distancez44a1cf=ZPOS-HITZ;
                                #distancesum44a1cf=#distancex44a1cf+#distancez44a1cf;
                                MATCH("%#distancesum44a1cf%","-?([0-9]+)",#distance44a1cf,1);
                                IF(#distance44a1cf==2);
                                    DO;
                                        INC(#count44a1cfabrir,1);
                                        IFMATCHES(%GUI%,CHEST);
                                            SET(abriu44a1d6);
                                            BREAK;
                                        ELSE;
                                            IF(#count44a1cfabrir>50);
                                                BREAK;
                                            ENDIF;
                                            KEYUP(SNEAK);
                                            KEY(USE);
                                            WAIT(10t);
                                        ENDIF;
                                    LOOP;
                                    UNSET(#count44a1cfabrir);
                                ELSE;
                                    LOG("§e✘ §8baú na distância incorreta");
                                ENDIF;
                            ELSE;
                                LOG("§e✘ §8baú mal colocado");
                            ENDIF;
                        ELSE;
                            LOG("§e✘ §8não é báu");
                        ENDIF;
                    endif;
                    IF(abriu44a1d6);
                        IF(!%#baus_verificados44a1d6%);
                            SET(#quantidade_faltando44a1d9,0);
                        ENDIF;
                        UNSET(#quantidade44a1d9);
                        #yaw44a1da=((DIRECTION=="N")*360)+((DIRECTION=="S")*180)+((DIRECTION=="E")*90)+((DIRECTION=="W")*270);
                        INC(#yaw44a1da,5);
                        if(%#bau44a1d6%==0);
                            look(%#yaw44a1da%,310);
                        elseif(%#bau44a1d6%==1);
                            look(%#yaw44a1da%,335);
                        elseif(%#bau44a1d6%==2);
                            look(%#yaw44a1da%,0);
                        elseif(%#bau44a1d6%==3);
                            look(%#yaw44a1da%,35);
                        elseif(%#bau44a1d6%==4);
                            look(%#yaw44a1da%,50);
                        endif;
                        WAIT(1t);
                        UNSET(#quantidade44a1d9);
                        UNSET(obstrucao44a1d9);
                        FOR(#slot44a1db,54,89);
                            IFMATCHES("%ITEM%","^[0-9]+$");
                                GETSLOTITEM(%#slot44a1db%,#id44a1db,#stacksizevar44a1db,#datavar44a1db);
                                MATCH("%#id44a1db%:%#datavar44a1db%","([0-9]+):([0-9]+)",{&id44a1db,&datavar44a1db});
                            ELSE;
                                GETSLOTITEM(%#slot44a1db%,&id44a1db,#stacksizevar44a1db,&datavar44a1db);
                            ENDIF;
                            IF(%#slot44a1db%==54);
                                UNSET(#quant44a1dc);
                            ENDIF;
                            UNSET(obstrucao44a1d9);
                            IF(%#stacksizevar44a1db%>1);
                                IFMATCHES("%&id44a1db%","^dye$");
                                    GETSLOTITEM(%#slot44a1db%,#id44a1dc,#stack44a1dc);
                                    SLOTCLICK(%#slot44a1db%,l,true);
                                    WAIT(1t);
                                    GETSLOTITEM(%#slot44a1db%,#i44a1dc,#newstack44a1dc);
                                    IF(#stack44a1dc>#newstack44a1dc);
                                        INC(#quant44a1dc,1);
                                    ENDIF;
                                    SET(#quantidade44a1d9,%#quant44a1dc%);
                                    IF(#newstack44a1dc!=0);
                                        SET(obstrucao44a1d9);
                                        BREAK;
                                    ENDIF;
                                    SET(#posicao_d44a1dc,-1);
                                    UNSET(#posicao_d44a1dc);
                                    FOR(#slot44a1dd,0,53);
                                        IFMATCHES("%ITEM%","^[0-9]+$");
                                            GETSLOTITEM(%#slot44a1dd%,#id44a1dd,#stacksizevar44a1dd,#datavar44a1dd);
                                            MATCH("%#id44a1dd%:%#datavar44a1dd%","([0-9]+):([0-9]+)",{&id44a1dd,&datavar44a1dd});
                                        ELSE;
                                            GETSLOTITEM(%#slot44a1dd%,&id44a1dd,#stacksizevar44a1dd,&datavar44a1dd);
                                        ENDIF;
                                        ifmatches("%&id44a1dd%","^%#id44a1dc%$");
                                            IF(%#stacksizevar44a1dd%>1);
                                                set(#posicao_d44a1dc,%#slot44a1dd%);
                                                break;
                                            ENDIF;
                                        endif;
                                    NEXT;
                                    SLOTCLICK(%#posicao_d44a1dc%,l,false);
                                    WAIT(1t);
                                    SLOTCLICK(%#slot44a1db%,r,false);
                                    WAIT(1t);
                                    SLOTCLICK(%#posicao_d44a1dc%,l,false);
                                    WAIT(1t);
                                    IF((%#quantidade_faltando44a1d9%>0)&&(#quant44a1dc>=%#quantidade_faltando44a1d9%));
                                        BREAK;
                                    ENDIF;
                                ENDIF;
                            ENDIF;
                        NEXT;
                        INC(#quantidade_movidos,%#quantidade44a1d9%);
                        DEC(#quantidade_faltando44a1d9,%#quantidade44a1d9%);
                        IF((0!=0)&&(#quantidade_faltando44a1d9<=0));
                            BREAK;
                        ENDIF;
                        IF(!obstrucao44a1d9);
                            LOG("§a✓ §8não há mais itens para mover");
                            BREAK;
                        ELSE;
                            LOG("§e⚠ §8baú cheio");
                        ENDIF;
                        UNSET(fechou44a1d6);
                        DO;
                            IFMATCHES(%GUI%,NONE);
                                SET(fechou44a1d6);
                                BREAK;
                            ELSE;
                                GUI();
                            ENDIF;
                            WAIT(5t);
                        LOOP;
                        IF(!fechou44a1d6);
                            UNSET(success44a1cf);
                            BREAK;
                        ENDIF;
                    ENDIF;
                    UNSET(#distancia44a1d6);
                    UNSET(bottom_reached44a1d6);
                    INC(#bau44a1d6,1);
                    IF(#bau44a1d6>4);
                        SET(#bau44a1d6,4);
                        SET(bottom_reached44a1d6);
                    ENDIF;
                    INC(#baus_verificados44a1d6,1);
                    IF((0>0)&&(#baus_verificados44a1d6==0));
                        LOG("§a✓ §8limite de baús alcançado");
                        BREAK;
                    ENDIF;
                    IF(bottom_reached44a1d6);
                        UNSET(#bau44a1d6);
                        INC(#distancia44a1d6,1);
                    ENDIF;
                ELSE;
                    LOG("§e✘ §8fim da passarela");
                    BREAK;
                ENDIF;
            LOOP;
            UNSET(fechou44a1d6);
            DO;
                IFMATCHES(%GUI%,NONE);
                    SET(fechou44a1d6);
                    BREAK;
                ELSE;
                    GUI();
                ENDIF;
                WAIT(5t);
            LOOP;
            IF((success44a1cf)&&(!fechou44a1d6));
                UNSET(success44a1cf);
            ENDIF;
            SET(@#bau,%#bau44a1d6%);
            SET(@#coluna,%#coluna44a1d6%);
            log("&f&l[&e&lMA&f&lCRO] &f&lForam guardados "%#quantidade_movidos%);
            gui();
        ENDIF;
    WHILE(!@concluido);
    log("&f&l[&e&lMA&f&lCRO] &f&lDu&e&lCacau &c&lOFF");
    unset(@rep);
    stop();
endif;
}$$[/LEFT]
[CENTER]
[/CENTER]



Se você testar a macro, seu feedback será essencial para aprimorá-la!

Vamos juntos melhorar a DuCacau
 
Status
Não está aberto para novas respostas.

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

Voltar
Topo