[BOT] Problème en C/C++

A

Anonymous

Invité
#1
Bonjour à tous, tout d’abord je me présente. Je suis Fire (pas pour feu, c'est juste le diminutif de Firefly ^^)
J'ai 16 ans et je débute un peu dans le langage "C" (les pointeurs font mal aux fesses, ce qui m'a un peu freiner dans mon apprentissage xD)

Donc mon soucis c'est que j'ai créée un bot dofus pour mineur, mais vraiment primaire c'est à dire qu'il ne gère pas les agros et il teste tous les filons en cliquant dessus et il récolte à la méthode force brute (ça pose un problème de conscience x)

alors voici mon code C :

Code:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void Action();

int main(int argc, char *argv[])
{


    Sleep(3000);

    int p = 0;
    POINT pt;
    while (p < 1)
    {
        int i = 0, o = 0;
        while (i < 3)
    {
    GetCursorPos(&pt);
    pt.x = 360;
    pt.y = 400;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 390;
    pt.y = 370;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 440;
    pt.y = 400;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 740;
    pt.y = 300;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 805;
    pt.y = 270;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 860;
    pt.y = 280;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);

    i++;
    }
    Sleep(10000);
    GetCursorPos(&pt);
    pt.x = 850;
    pt.y = 430;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(5000);

    while (o < 3)
    {

    GetCursorPos(&pt);
    pt.x = 290;
    pt.y = 470;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 320;
    pt.y = 460;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 490;
    pt.y = 400;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 640;
    pt.y = 350;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 660;
    pt.y = 350;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    o ++;
    }
    Sleep(10000);
    GetCursorPos(&pt);
    pt.x = 480;
    pt.y = 480;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(3000);
    GetCursorPos(&pt);
    pt.x = 380;
    pt.y = 460;
    SetCursorPos(pt.x,pt.y);
    Action();
    Sleep(5000);

    }
    return 0;
}

void Action()
    {
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
     Sleep(500);
    keybd_event(VK_RETURN,0,0,0);
     keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
     return 0;
    }
Alors ce que j'aimerais c'est savoir comment faire pour que le prog' détecte lorsqu'un filons est prêt à être miner et qu'il puisse gérer les agros (aussi virer les focus mais en cherchant un peu je suis sur que je peux trouver).
je ne sais pas non plus comment lui dire "tiens tu t'es fait agro, arrête de récolter et passe en mode combat"

Merci d'avance, et si cela gêne de me donner le code tout cuit (car pas très créatif) j'aime bien me casser la tête donc des pistes ou des morceaux de codes me conviendront aussi.
Bonne journée.
Firefly
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#2
Yo !

Déjà, tu n'as pas posté au bon endroit. Il y a une section C/C++, pense y la prochaine fois (;. Enfin, ce n'est pas très grave. Déjà, pense à refondre ton code, là, il est barbare ! Pour savoir si un minerai existe ou si une aggro c'est produite, je ne vois qu'une solution : la recherche de pixel.

En gros, au lieu de de définir la position de ton curseur à chaque fois, tu regardes si un pixel (Pour être franc, une liste de pixel est plus approprié. Vus que la version 2.0 les couleurs ont tendances à changer. Légèrement mais, suffise ment pour mettre en déroute les bots pixels comme on les faisait à la 1.29.) propre au filon existe. En gros tu recherches tout tes pixels jusqu'à ce que l'un d'entre-eux soit trouvé. Dès que c'est fait, tu récupères la position du pixel et tu cliques à cet endroit :

Code:
Boucle Continuer = Vrai
      Resultat = RechercheDeRessource(TonPixel)
      Si Resultat = Vrai
            RechercheDeCombat()
            Attendre(TempsDeMinage + Durée aléatoire) // La durée aléatoire est pour contourner l'antibot.
      Fin Si
Fin de boucle

Fonction RechercheDeRessource(TonPixel)
      Ressource = RechercheDePixel(TonPixel)  // Utilise une deuxième boucle pour tester tout tes pixels. Là, c'est juste un exemple.
      Si Ressource 
          SourisClick(Bouton, position etc...)
          Retourne Vrai
      Fin Si
     Retoure Faux
Fin Fonction
Pour regarder si tu subis une agression ou si une boite de dialogue est affichée, c'est la même chose. Juste que là tu regardes à un endroit précis si un pixel orange (La couleur du la petite croix pour les boites de dialogues, ou du bouton "Prêt" pour les combats.) existe, si oui, tu développe de quoi régler le problème. Donc, une fonction de combat pour ton bot et de quoi fermer la fenêtre de dialogue ! L'algorithme que je t'ai donné est très simplifié mais, ça devrait te mettre sur la bonne voie. :)
 
A

Anonymous

Invité
#3
D'accord, je te remercie beaucoup pour ton algorithme qui va vraiment m'aider ^^

Mon seul soucis est la recherche de pixels je ne sais vraiment pas comment faire, je pense qu'il y a un rapport avec le code couleur #FFFFFF (par exemple) j'ignore aussi comment récupérer la position de mon pixel, je vais faire ma recherche en attendant une réponse et vous tenir au courant. Et pour ce qui est de la section C/C++ je l'ai bien vu avant de m'inscrire mais je n'ai vu que la section "général" dans un premier temps, merci de l'info ^^ et pour ta réponse rapide !

Ps : Par curiosité et par confort j'aimerais savoir comment faire pour que lorsque j’appuie sur une touche ("Z" par exemple) le bot se met en pause ou se ferme ? et inversement qu'en je rappuie qu'il se remet en route

ps2 : décidément... comment programme-t-on un switch sur la page dofus au démarrage du programme ? :p
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#4
Alors déjà pour voir les autres sections, suis ce lien : https://cadernis.fr/index.php?threads/pour-voir-les-sections-tutos.73/

Ensuite pour tes autres questions, je ne programme malheureusement pas en C/C++ donc je ne pourrais pas t'aider.

Je peux juste t'apporter une réponse à ton premier "PS" : Grâce aux événements ! Il faut que tu places un "écouteur" d'événements claviers, en gros quand tu appuies sur une touche, tu vérifies le code ASCII de la touche pressée, si il correspond à la bonne lettre tu effectues une action. Je ne peux pas t'aider plus que chercher du coté des événements vus que je ne touche pas du tout à ce langage /:
 
A

Anonymous

Invité
#5
D'accord merci grandement pour ton aide, malgré le fait que tu ne programmes pas en C ça m'apporte beaucoup ^^
Je vais chercher de mon côté :p
Bonne nuit.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
salut , pour ps tu peux essayer ca mais c'est pas optimisé du tout , je pense que ca vas aller tellement vite que ca va repeter 200 fois la touche :
Code:
#include <windows.h>
#include <stdio.h>

main()
{
while(1){
 if(GetAsyncKeyState(90)==-32767)
    printf("Z majuscule\n");

 for(short character=8;character<=255;character++)
    {
     if(GetAsyncKeyState(character)==-32767)
        printf("%d : %c\n",character,character);
    };
}
le 90 est trouvé avec cette table : http://www.asciitable.com/
 
A

Anonymous

Invité
#7
Coucou, du nouveau en fait je crois qu'il va falloir que je me mette au SDL car apparemment c'est la méthode la plus simple pour créée un événement... Bon et bin go sur le Site du Zéro, si quelqu'un a une astuce ou une tite idée pour m'aider je suis preneur.
Merci à toi ToOns je n'ai pas bien compris ton code je vais étudier ça de près !
Bonne soirée.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#8
c'est simplement une boucle infinie qui regarde si tu appuis sur Z :
if(GetAsyncKeyState(90)==-32767)
puis qui fait defiler tout les caracteres au cas ou tu appuis sur autre chose :
for(short character=8;character<=255;character++)
{
if(GetAsyncKeyState(character)==-32767)
printf("%d : %c\n",character,character);
};
 
A

Anonymous

Invité
#9
D'accord, je vois mais c'est vrai que c'est un petit peu barbare comme technique x) je pense qu'il serait plus facile de le faire avec des événements :
un événement pour l'agro ---> cet endroit est orange donc aller dans la boucle de l'agro
un autre pour le focus ------> sinon si la croix orange d'un focus existe alors cliquer dessus et retourner dans la boucle de minage
et un autre pour fermer le logiciel ----> si la touche Z est pressée fermer le programme.

Mon seul soucis c'est que je n'ai vu cette possibilité qu'avec la SDL et je n'ai pas encore vu cette bibliothèque...
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#10
SDL est une librairie surtout utilisée dans le domaine de l'affichage en deux dimensions, sa gestion simpliste des événements & l'audio numérique. En fait, elle est idéal pour développer un jeu ! Seulement, je doute que ce soit la meilleur solution pour un bot. Tu devrais peut-être plutôt de tourner vers Qt. La bibliothèque est très complète et ça devrait certainement t'ouvrir pas mal de portes. Une deuxième chose, pour la recherche de pixel est que tu peux utiliser AutoIT en C/C++ ! Si ça t'intéresse, un petit lien qui pourra t'aiguiller : Utiliser AutoIT en C/C++.
 
A

Anonymous

Invité
#11
Merci ! vraiment c'est génial, je vais m'y mettre très prochainement je vous tiendrais au courant de mon évolution et des éventuels problèmes (j'en aurais c'est certain xD) .
 
A

Anonymous

Invité
#12
Bonjour,

J'aimerais savoir comment programmer un BOT mais je ne comprend rien a vos commentaires
Pourriez vous expliquer plus clairement les différentes étapes pour la fabrication d'un bot et pour sa programmation ( métiers, combats )
Merci d'avance
 
A

Anonymous

Invité
#13
Il faut tout d'abord que tu choisisse ton langage, le C j'imagine.
Une fois choisi apprend les bases de la programmation, le site du zero pourra t'aider.
 
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#14
@Fire : si tu comptes faire sérieusement un bot Pixel en C/C++, je te conseille d'utiliser la dll que j'ai développé: FastFind.
http://www.autoitscript.com/forum/topic ... h-library/

Certes, il va te falloir trouver comment utiliser une DLL en C (c'est facile, mais je te laisse chercher), mais tu disposeras ainsi de puissantes fonction de recherche à l'écran.
[defil]En bonus exclu pour Cadernis[/defil]
le fichier header pour attaquer la dll dans n'importe quel langage
 
A

Anonymous

Invité
#15
Hello, désolé d'avoir été absent pendant tout ce temps mais j'ai malheureusement arrêté dofus et je travail sur mon TPE maintenant ^^
j'ai réalisé un morpion en C il ne me manque plus qu'à coder l'IA et j'aurais finis, si je rencontre un quelconque soucis je n'hésiterais pas à faire appel à vous dans la rubrique C/C++.
encore une fois merci pour les renseignement, je vais quand même aller voir tout ce que tu m'as donné par curiosité et ça va surement me servir par la suite.
Bonne soirée.
 
Haut Bas