ENTREGUE Shambles OnChat

Discussão em 'Macro Entregue' iniciado por Shambles, 12 Dezembro 2020.

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

    Shambles Craftlandiano

    Afiliado:
    28 Dezembro 2017
    Mensagens:
    1,189
    Curtidas Recebidas:
    572
    Curtiu:
    54
    Sexo:
    Masculino
    Ocupação:
    Programador
    Localização:
    Minas Gerais
    Cubos:
    1,723.00
    Nick:
    Shambles
    Discord:
    Shambles#1158
    #1 Shambles, 12 Dezembro 2020
    Última edição: 16 Dezembro 2020
    Olá,gostaria de compartilhar com vocês a minha macro OnChat que fiz enquanto estudava algumas API do mod macro. Minha Onchat conta com:

    • Login Automático
    - Você pode colocar sua senha em um dos parâmetros na macro para fazer seu login automática, você também poderá escutar um efeito sonoro caso tenha logado com sucesso.​

    • Fps / Horarío do Mundo / Money na tela

    - Basta criar 2 Labels - "Label1" e "Label2", o nome deve ser igual estes para evitar problemas na macro
    Obs: Seu Fps será atualizado quando alguém envia uma mensagem no Chat, não achei nenhum evento mais rápido que esse e ainda não tenho conhecimento para criar uma void loop(). O money será atualizado quando digitar /money ou quando vender / comprar algo.

    • Aviso com efeito sonoro antes do PvP ser ativado

    Código da OnChat


    Código:
    $${
    
        //****************** [ COPYRIGHT ]  ******************
        //
        // OnChat feita por Shambles (Christopher_Andrade)
        //
        // Discord: Shambles#1158
        //
        //****************** [ COPYRIGHT ]  ******************
                                  
    
        SET(#player_senha, "0");
        //    Mude esse "0" ^ para sua senha
      
        IFMATCHES("%CHATCLEAN%","^»Bem vindo de volta. Por favor digite /login sua-senha.$");
    
            SET(&label_info, "");
            SET(&label_money, "");
    
            ECHO("/login %#player_senha%");
    
            WAIT(1000ms);
    
            ACHIEVEMENTGET("Logado com Sucesso!", 47);
    
            PLAYSOUND(random.levelup);
    
            ECHO("/money");
    
        ENDIF;
    
        IFMATCHES("%CHATCLEAN%","Seu saldo atual: (.*)");
          
            SET(&player_money, "%CHATCLEAN%");
            REPLACE(&player_money,"Seu saldo atual: ", "");
            SET(&label_money,"&6Money: &b%&player_money%");
            SETLABEL(Label2, %&label_money%);
      
            LOG("");
            LOG("&c[&6&oMoney atualizado!&o&c]");
            LOG("");
    
        ENDIF;
    
        IFMATCHES("%CHATCLEAN%","Você (comprou|vendeu)");
            ECHO("/money");
        ENDIF;
    
    
        IFMATCHES("%CHATCLEAN%","Ficará de dia em 30s e o PvP será Desativado");
            ACHIEVEMENTGET(Pvp será desativado!, 56);
    
            PLAYSOUND(tile.piston.out);
            WAIT(500ms);
            PLAYSOUND(tile.piston.in);
        ENDIF;
    
        IFMATCHES("%CHATCLEAN%","Ficará de noite em 30s e o PvP será Ativado);
            ACHIEVEMENTGET(Pvp será ativado!,56);
    
            PLAYSOUND(tile.piston.out);
            WAIT(500ms);
            PLAYSOUND(tile.piston.in);
          
        ENDIF;
    
        SETLABEL(Label1, "&cFPS: &9%FPS%\n&cX: &9%XPOS% &cY: &9%YPOS% &cZ: &9%ZPOS%\n&o&9Horas&o: &c%DAYTIME%");
        WAIT(10T);
        SETLABEL(Label1, "&cFPS: &9%FPS%\n&cX: &9%XPOS% &cY: &9%YPOS% &cZ: &9%ZPOS%\n&o&9Horas&o: &c%DAYTIME%");
    
    }$$
    
     
  2. GL_Master

    GL_Master Razoavel
    VIP

    Afiliado:
    1 Fevereiro 2016
    Mensagens:
    131
    Curtidas Recebidas:
    66
    Curtiu:
    96
    Sexo:
    Masculino
    Cubos:
    200.00
    Nick:
    GL_Master
    Discord:
    GL#0966
    Obrigado por seu apoio, toda ajuda é bem vinda.
     
    Shambles curtiu isso.
  3. Zozoooo

    Zozoooo Lendário
    VIP

    Afiliado:
    3 Março 2018
    Mensagens:
    9,060
    Curtidas Recebidas:
    4,536
    Curtiu:
    8,693
    Sexo:
    Feminino
    Localização:
    Santa Catarina
    Cubos:
    1,336.00
    Nick:
    Zozoooo
    Clan:
    ZoZ
    Booooa :3 cada vez melhorando kkkkkkk
     
    Shambles curtiu isso.
  4. Shambles

    Shambles Craftlandiano

    Afiliado:
    28 Dezembro 2017
    Mensagens:
    1,189
    Curtidas Recebidas:
    572
    Curtiu:
    54
    Sexo:
    Masculino
    Ocupação:
    Programador
    Localização:
    Minas Gerais
    Cubos:
    1,723.00
    Nick:
    Shambles
    Discord:
    Shambles#1158
    Aprendendo e evoluindo
     
    lomexicano e Zozoooo curtiram isso.
  5. lomexicano

    lomexicano Craftlandiano
    VIP

    Afiliado:
    20 Agosto 2013
    Mensagens:
    622
    Curtidas Recebidas:
    817
    Curtiu:
    743
    Sexo:
    Masculino
    Ocupação:
    Mestrando...
    Localização:
    Rio Grande...
    Cubos:
    2,382.00
    Nick:
    lomexicano
    Discord:
    lomexicano
    YouTube:
    LoMexicano
    #5 lomexicano, 13 Dezembro 2020
    Última edição: 13 Dezembro 2020
    Boa macro!

    Uma dica, irmão, sobre IFMATCHES.
    Nessa parte aqui:
    IFMATCHES("%CHATCLEAN%","Seu saldo atual: (.*)");
    Como você usou IFMATCHES, você pode salvar algum dos valores da mensagem. Se você não quer salvar nada, você poderia apagar aquele (.*) ali que funcionaria da mesma forma. Entretanto, se você quiser salvar o valor diretamente daí, sem precisar tirar o "Seu saldo atual: " com o comando REPLACE, na sequência, você pode fazer desta forma:

    IFMATCHES("%CHATCLEAN%","Seu saldo atual: (.*)$",&player_money,1);
    ( ) - Um grupo de parênteses serve para separar informações que podem ser salvas, se você quiser
    .* - o ponto é "qualquer caractere menos quebra de linha", e o asterisco significa que o valor anterior pode existir "zero ou mais vezes". Portanto, .* é basicamente qualquer coisa (ou nada kk)
    $ - denota que a mensagem termina ali. Coloquei o $ para garantir que o .* vai pegar tudo antes do final do conteúdo da mensagem.
    &player_money - onde o conteúdo de um dos grupos ficará salvo (nesse caso só tem um grupo kk)
    1 - esse número (no último parâmetro do ifmatches) indica qual grupo você quer salvar na variável (nesse caso, &player_money). Nesse caso aí, como só temos um par de parênteses, só temos um grupo, que é o número 1. Se tivessem mais grupos, você poderia escolher qual salvar (o segundo seria o número 2, etc.). Se você colocar 0 aí, a mensagem inteira será salva na variável.

    Dessa forma, o ifmatches já vai armazenar o valor dentro da variável, e você não precisa dos comandos SET e REPLACE que estão na sequência.

    Claro, funciona da mesma forma xD tô só tentando agregar informação mesmo xD
    o/

    Se você usasse desta forma:
    IFMATCHES("%CHATCLEAN%","(Seu) (saldo) (atual): (.*)$",&variavel_kkk,3);
    Logo depois da mensagem de saldo entrar, a variável &variavel_kkk vai ter o valor de "atual" pois ele é o terceiro grupo ali
     
    Morking, Shambles e israel000 curtiram isso.
  6. israel000

    israel000 Craftlandiano
    VIP

    Afiliado:
    22 Maio 2014
    Mensagens:
    9,995
    Curtidas Recebidas:
    1,899
    Curtiu:
    1,783
    Sexo:
    Masculino
    Ocupação:
    Focando na...
    Localização:
    Estudando...
    Cubos:
    2,946.00
    Nick:
    Zanarkand
    Clan:
    QZL
    YouTube:
    https://www.youtube.com/channel/UC6xV3QERf5qzJZ1JBahZR6Q?view_as=subscriber
    O código ficou bom mano, se quiser dar uma refatorada em relação ao IFMATCHES como o @lomexicano citou ali em cima seria uma boa, pense sempre nas boas práticas e no código limpo que tu voa!
     
    Shambles e lomexicano curtiram isso.
  7. Shambles

    Shambles Craftlandiano

    Afiliado:
    28 Dezembro 2017
    Mensagens:
    1,189
    Curtidas Recebidas:
    572
    Curtiu:
    54
    Sexo:
    Masculino
    Ocupação:
    Programador
    Localização:
    Minas Gerais
    Cubos:
    1,723.00
    Nick:
    Shambles
    Discord:
    Shambles#1158
    A sim, muito obrigado pela ajuda :), eu até tentei pesquisar como escanear o chat e colocar um valor dele numa variável e acabei usando a função MATCH(), porque queria fazer um sistema de mostrar o lucro caso o money aumentasse ou prejuízo caso diminuísse.

    No caso eu declarei a Variável do lucro como inteira, usando um # (#player_money), porém o valor sempre retornava 0 na função MATCH(), talvez seja a falta do parâmetro dos grupos. Outroproblema que tive era para multiplicar a quantidade de itens vendidos e o preço deles para saber o valor gastor, mas tive 2 problemas: 1) Não sabia como multiplicar 2 Variáveis sem utilizar uma função, parece que tudo na macro depende de uma função, além de que o preço é um float e não sei como declara um float nessa macro, mas no caso, creio que pra fazer isso tem que calcular utilizando uma string para cada casa numeral.
     
  8. Shambles

    Shambles Craftlandiano

    Afiliado:
    28 Dezembro 2017
    Mensagens:
    1,189
    Curtidas Recebidas:
    572
    Curtiu:
    54
    Sexo:
    Masculino
    Ocupação:
    Programador
    Localização:
    Minas Gerais
    Cubos:
    1,723.00
    Nick:
    Shambles
    Discord:
    Shambles#1158
    Blz vou seguir seguir sua dica, minha meta é fazer códigos cada vez mais compactos :)
     
    israel000 e lomexicano curtiram isso.
  9. lomexicano

    lomexicano Craftlandiano
    VIP

    Afiliado:
    20 Agosto 2013
    Mensagens:
    622
    Curtidas Recebidas:
    817
    Curtiu:
    743
    Sexo:
    Masculino
    Ocupação:
    Mestrando...
    Localização:
    Rio Grande...
    Cubos:
    2,382.00
    Nick:
    lomexicano
    Discord:
    lomexicano
    YouTube:
    LoMexicano
    #9 lomexicano, 14 Dezembro 2020
    Última edição: 14 Dezembro 2020
    Então, IFMATCHES pode salvar um valor só (e faz checagem, pois é um IF), enquanto MATCH pode salvar quantos quiser (ambos usam regex).
    Como o valor que você tá tentando juntar possui pontos e vírgulas, você nunca vai conseguir colocar em uma variável integer (#var), vai retornar 0 mesmo. Macromod não tem variáveis float, apenas números inteiros, texto, booleanas (verdadeiro/falso) e arrays (dos três tipos).

    Se quiser fazer operações com a grana, usando uma variável de números inteiros, você pode remover os pontos e vírgulas usando o comando REPLACE, ou via regex.
    Tipo,
    Código:
    IFMATCHES("%CHATCLEAN%","Seu saldo atual: (.*) Coins$",&player_money,1);
    replace(%&player_money%,",","");
    replace(%&player_money%,".","");
    set(#player_money,"%&player_money%"); //agora vai ter só números aqui
    E aqui você trabalharia com a #player_money, fazendo operações e tal.
    Digamos, se o player tem 123,765.22c, #player_money vai ser igual a 12376522

    Se quiser remover os decimais antes do ifmatches, por exemplo, poderia fazer algo assim:
    Código:
    IFMATCHES("%CHATCLEAN%","Seu saldo atual: (.*)\.\d\d Coins$",&player_money,1);
    replace(%&player_money%,",","");
    set(#player_money,"%&player_money%"); //agora vai ter só números aqui, e sem os decimais
    E aqui você trabalharia com a #player_money, fazendo operações e tal.
    Digamos, se o player tem 123,765.22c, #player_money vai ser igual a 123765

    breve explicação da regex aí:
    \. → significa o caractere de ponto mesmo (tem que usar a \ antes pq . sozinho significa "qualquer coisa menos quebra de linha", como eu falei no outro comentário);
    \d → significa um número, é o mesmo que digitar [0-9]
    portanto, \.\d\d ali vai ser a parte dos decimais, tipo .99 ou .12 ou .01 , etc.

    Dá uma olhadinha nesta macro, talvez te interesse xD (é super mal escrita mas funciona kkkkkkkkk)
    https://forum.craftlandia.com.br/xf/threads/1-5-2-e-1-8-money-e-lucro-na-tela-2020.976828/
     
    Shambles curtiu isso.
  10. Shambles

    Shambles Craftlandiano

    Afiliado:
    28 Dezembro 2017
    Mensagens:
    1,189
    Curtidas Recebidas:
    572
    Curtiu:
    54
    Sexo:
    Masculino
    Ocupação:
    Programador
    Localização:
    Minas Gerais
    Cubos:
    1,723.00
    Nick:
    Shambles
    Discord:
    Shambles#1158
    Blz, vou dar uma estudar e montar uma, muito obrigado pela ajuda :p
     
    lomexicano curtiu isso.
  11. Bisnago

    Bisnago Bom

    Afiliado:
    26 Maio 2017
    Mensagens:
    453
    Curtidas Recebidas:
    112
    Curtiu:
    131
    Sexo:
    Masculino
    Cubos:
    521.00
    Nick:
    MineClan
  12. Morking

    Morking Razoavel
    VIP

    Afiliado:
    27 Novembro 2013
    Mensagens:
    87
    Curtidas Recebidas:
    66
    Curtiu:
    88
    Sexo:
    Masculino
    Cubos:
    142.00
    Nick:
    Morking
    Discord:
    Morking#8952
    Boa macro, as dicas do @lomexicano são excelentes!! Também indico utilizar o ^ no início das regex pra evitar fake chat, tem muito engraçadinho que fica mando fake chat no global que pode acabar confundindo a macro.
    Outra coisa, a Label1 só será setada quando aparecer alguma mensagem no chat, então se a pessoa desativar o chat a label nunca irá atualizar.
    Continue assim ;)
     
    lomexicano curtiu isso.
  13. Viko

    Viko Craftlandiano
    VIP

    Afiliado:
    4 Julho 2015
    Mensagens:
    4,312
    Curtidas Recebidas:
    1,073
    Curtiu:
    814
    Sexo:
    Masculino
    Cubos:
    1,870.00
    Nick:
    Chocolatinhu
    essa macro vai ajudar muito, obrigado.
     
Status do Tópico:
Não esta aberto para novas mensagens.