[Macro] DuCacau

Discussão em 'Tutoriais macro' iniciado por Duardo Br, 18 Março 2025.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. Duardo Br

    Duardo Br Craftlandiano
    VIP

    Afiliado:
    10 Abril 2017
    Mensagens:
    3,437
    Curtidas Recebidas:
    1,327
    Curtiu:
    1,483
    Sexo:
    Masculino
    Localização:
    Uberlândia
    Cubos:
    0.00
    Nick:
    Duardo_brs
    Discord:
    Duardo Br#6086
    Skype:
    guellito_br
    Twitter:
    @EdeEstranho
    [​IMG]
    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).
    [​IMG]

    ✅ Armazenamento automático do cacau em uma trap de baús MKB, também de forma infinita.
    [​IMG]

    ✅ 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.

    [​IMG]
    [​IMG]

    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
     
    lomexicano, Maaaaatteeus e D4nDe curtiram isso.
  2. CavaleiroBlaack

    CavaleiroBlaack Craftlandiano
    VIP

    Afiliado:
    13 Agosto 2018
    Mensagens:
    788
    Curtidas Recebidas:
    510
    Curtiu:
    619
    Sexo:
    Masculino
    Cubos:
    210.00
    Nick:
    CavaleiroBlaack
    Clan:
    SoS
    Boa. Parabéns
     
    SchwiN e Duardo Br curtiram isso.
  3. DET0NA

    DET0NA Hardcore
    Gamers VIP

    Afiliado:
    24 Junho 2015
    Mensagens:
    21,804
    Curtidas Recebidas:
    3,349
    Curtiu:
    2,401
    Sexo:
    Masculino
    Ocupação:
    DET0NADUS
    Localização:
    DET0NADU
    Cubos:
    454.00
    Nick:
    DET0NADU
    Clan:
    DTN
    ai simmmmmmmmmmmmm boaaa
     
    Duardo Br curtiu isso.
  4. lomexicano

    lomexicano Craftlandiano
    VIP

    Afiliado:
    20 Agosto 2013
    Mensagens:
    669
    Curtidas Recebidas:
    916
    Curtiu:
    806
    Sexo:
    Masculino
    Ocupação:
    Mestrando...
    Localização:
    Rio Grande...
    Cubos:
    492.00
    Nick:
    lomexicano
    Discord:
    lomexicano
    YouTube:
    LoMexicano
    Da hora, parabéns!
     
    Duardo Br curtiu isso.
Status do Tópico:
Não esta aberto para novas mensagens.