[DÚVIDA] Acessar inventário

Discussão em 'Dúvidas resolvidas (macro)' iniciado por SHORT, 8 Setembro 2019.

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

    SHORT Neutro

    Afiliado:
    8 Setembro 2019
    Mensagens:
    12
    Curtidas Recebidas:
    2
    Curtiu:
    3
    Sexo:
    Masculino
    Cubos:
    55.00
    Nick:
    SthorHd
    Olá! Atualmente eu estou querendo fazer um macro para que meu personagem se alimente sozinho, e para isso preciso que ele acesse o inventário, e detecte Cooked_Beef, Cooked_Chicken, Cooked_Porkchop, Se detectar algum destes (O primeiro), o macro irá trocar de local com o item que estiver na hotbar 9, depois irá fechar o inventário. Eu fiz o resto da macro mas não sei fazer essa parte para acessar o inventário.

    Essa é a minha parte

    Obs: Em negrito tem a parte onde eu "preciso de ajuda"
     
    .Carol curtiu isso.
  2. lomexicano

    lomexicano Craftlandiano
    VIP

    Afiliado:
    20 Agosto 2013
    Mensagens:
    655
    Curtidas Recebidas:
    899
    Curtiu:
    785
    Sexo:
    Masculino
    Ocupação:
    Mestrando...
    Localização:
    Rio Grande...
    Cubos:
    2,514.00
    Nick:
    lomexicano
    Discord:
    lomexicano
    YouTube:
    LoMexicano
    Buenas.
    Cara, pra acessar o que está na hotbar você não precisa abrir o inventário. Entretanto, até onde sei, o comando PICK funciona com IDs numéricos

    PICK(id1,id2,id3,id4) -> ele vai pegar o primeiro desses itens que estiver na hotbar
     
    .Carol curtiu isso.
  3. SHORT

    SHORT Neutro

    Afiliado:
    8 Setembro 2019
    Mensagens:
    12
    Curtidas Recebidas:
    2
    Curtiu:
    3
    Sexo:
    Masculino
    Cubos:
    55.00
    Nick:
    SthorHd
    Sim, disso eu sei. Mas para a maneira onde eu quero, é para que acesse o inventário e pegue as comidas selecionadas (...) , preciso aprender como fazer isso.
     
    .Carol curtiu isso.
  4. lomexicano

    lomexicano Craftlandiano
    VIP

    Afiliado:
    20 Agosto 2013
    Mensagens:
    655
    Curtidas Recebidas:
    899
    Curtiu:
    785
    Sexo:
    Masculino
    Ocupação:
    Mestrando...
    Localização:
    Rio Grande...
    Cubos:
    2,514.00
    Nick:
    lomexicano
    Discord:
    lomexicano
    YouTube:
    LoMexicano
    Certo.
    Seguinte:

    • gui(inventory) -> abrir inventário
    • getslot(ID DO ITEM,#variavel_que_guardara_o_slot,[primeiro slot a partir do qual vai procurar])

    Os IDs das suas comidas são, respectivamente, 364, 366 e 320.

    Para o procedimento, utilizei uma lista.
    Como funcionam listas em modmacro:
    • Você nomeia elas com um & na frente, e um abre e fecha colchetes depois:
      • ex: &lista1[]
    • Elas possuem várias funções, mas, em resumo, digamos que elas salvam informações na ordem que você adicionou. Cada informação fica salva separadamente, em sua própria "casa", como se fosse uma variável separada.
    • Para percorrer essas informações da lista, você pode usar o comando foreach, que é um comando de repetição, igual o "for", mas que percorre as informações da lista, na ordem em que foram adicionadas, uma de cada vez.
    • exemplo:
      • unset(&lista1[]); //// esvaziar a lista, caso ela já tenha alguma coisa;
      • &lista1[] = "opa"; &lista1[] = "salve"; &lista1[] = "buenas"; &lista1 = "quarto valor da lista"; //// nesse caso, adicionei quatro textos à lista, para servir de exemplo.
      • Foreach(&lista1[],&resultado); /// para cada valor da &lista1[], que ficará salvo momentaneamente em &resultado;
        • log(%&resultado%); /// mostrar o &resultado no chat;
      • next; //// passar para o próximo valor da lista;
    Nesse caso, podemos fazer o seguinte:


    Código:
    $${
        unset(&id_comidas[]); //// setar variaveis de texto com colchetes, depois delas, significa criar uma lista (ou, em ingles, array). Nesse caso, estou dando unset na lista, ou seja, resetando ela.;
        &id_comidas[] = 364; //// adiciono o ID 364 à lista;
        &id_comidas[] = 366; //// adiciono o ID 366 à lista;
        &id_comidas[] = 320; //// adiciono o ID 320 à lista;
        &id_comidas[] = 350;
       
        if(@autocomer);
            log("&b[MACRO] &9[&3 Auto-Eater &4[OFF] &9]");
            unset(@autocomer);
            stop();
        else;
            log("&b[MACRO] &9[&3 Auto-Eater &2[ON] &9]");
            set(@autocomer);
           
            do();  /////;
                gui(inventory); //// abrir o inventario;
            until(%GUI% == "GUIINVENTORY"); /////;
           
            wait(500ms); //// aguardar meio segundo por garantia;
           
           
            #slot = -1; //// salvo o valor da variavel #slot como "-1", que é o valor que o getslot retorna quando não encontra algum item;
           
            foreach(&id_comidas[],#id_de_alguma_comida); //// esse processo começará a setar o valor da #id_de_alguma_comida para os ids que eu adicionei lá no começo, em ordem. Toda vez que o código chegar no "next", ele voltará para esta linha (foreach), e passará o valor do #id_de_alguma_comida para a próxima comida da lista;
                getslot(%#id_de_alguma_comida%,#slot); ///// caso ele encontre a comida, o slot dela ficará salvo em #slot, caso contrário, #slot ficará com valor -1.
                if(#slot != -1); ///// caso #slot não seja -1:
                   
                    #foodid = #id_de_alguma_comida; //// salvar o valor do #foodid para o id da comida que eu achei no inventario;
                    break; ///// parar o processo de repetição (foreach);
                endif;
               
            next;
           
            if((#slot != -1)&&(#slot != 44)); //// caso o slot não seja -1, ou seja, caso haja comida no inventario, e caso o slot não seja o 44, que é o slot no qual iremos colocar a comida;
           
                slotclick(%#slot%,l,false); //// clicar com o botão esquerdo no slot que tem a comida;
                wait(100ms);
                slotclick(44,l,false); //// clicar com o botão esquerdo no slot 9 da hotbar (id do slot: 44, ultimo slot do inventario);
                wait(100ms);
                slotclick(%#slot%,l,false); //// clicar novamente no slot que possuia comida, com o objetivo de colocar o que estava no slot 44 aqui;
            endif;
           
            wait(500ms); //// aguardar meio segundo por garantia;
           
            gui(); ///// fechar o inventario;
           
           
            do;
                if(%HUNGER% <= 3);
                    log("&b[MACRO] &3Você está com fome, iniciando alimentação.");
                    set(#oldslot,%INVSLOT%);
                    pick(%#foodid%);
                    wait(200ms);
                    do;
                        key(use);
                    while(%HUNGER% != 20);
                    wait(200ms);
                    slot(%#oldslot%);
                endif;
                wait(100ms);
            while(@autocomer);
        endif;
    }$$
     
    SHORT curtiu isso.
Status do Tópico:
Não esta aberto para novas mensagens.