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:
- 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;
}$$