C++ pixelbot schreiben



  • Ah, OK.

    Wenn es (nur) um so einfache Sachen geht wie die Länge eines Elements mit bekannter Position und Farbe (Energieanzeige) zu ermitteln, DAS sollte auch für nen Anfänger schaffbar sein.

    Das Grundgerüst hat dir gdfgdfg ja schon skizziert. Bloss "Stichwort Event" verstehe ich überhaupt nicht - ich hätte da statt dessen einfach mal "SendInput" gesagt.

    Den Rest kannst du dir ergoogeln. Auf Stackoverflow etc. solltest du zu den einzelnen Themen genügend Infos finden.
    Und wenn du irgendwo anstehst, dann frag nochmal nach. Je konkreter und je besser beschrieben die Frage, desto eher bekommst du schnell brauchbare Antworten.



  • Was der Bot im grunde machen soll.

    Benutzung der Maus kontinuierlich.

    -Abchecken der Hitpoints(grün)-Schildanzeige(blau) und reagieren,falls eines der beiden sich verändert-basierend auf die Farben

    -auf die npc´s klicken die im Radius befinden(nur 4 arten von npcs)

    Ich bin lernwillig,aber es ist nicht einfach spezifische Wissenslektüren zu finden für mein Ziel.Hier werde ich von manchen eher angegriffen ,als Hilfe zu erhalten.



  • kingaze schrieb:

    Ich bin lernwillig,aber es ist nicht einfach spezifische Wissenslektüren zu finden für mein Ziel.Hier werde ich von manchen eher angegriffen ,als Hilfe zu erhalten.

    Er.
    Meinst du meinen 1. Beitrag hier?
    Wenn ja, vielleicht solltest du ihn dann nochmal lesen und versuchen zu verstehen was ich damit meine.

    Ansonsten sehe ich in deinem letzten Beitrag keine Frage mehr.
    => Thema abgeschlossen.



  • Wenn du so viel Ahnung hast ,kannst du mir ruhig paar. Links geben passend zu meinem Thema, womit ich gut bedient bin.
    Jeder fängt mal klein an.

    Was muss ich mir genau anschauen um an mein Zeil zu erreichen ein Pixelbot zu programmieren.



  • kingaze schrieb:

    Wenn du so viel Ahnung hast ,kannst du mir ruhig paar. Links geben passend zu meinem Thema, womit ich gut bedient bin.
    Jeder fängt mal klein an.

    Was muss ich mir genau anschauen um an mein Zeil zu erreichen ein Pixelbot zu programmieren.

    na aber genau das ist die falsche Einstellung fürs Programmieren. Du kannst nicht immer drauf hoffen dass dich wer bei der Hand nimmt.
    Schau dir die gegebenen Stichworte in dem Thread an, und arbeite damit.

    Screenshot unter Windows machen, in OpenCV Datentyp cv::Mat umwandeln:
    http://stackoverflow.com/questions/14148758/how-to-capture-the-desktop-in-opencv-ie-turn-a-bitmap-into-a-mat

    Grundlagen Bildverarbeitung und OpenCV:
    http://docs.opencv.org/doc/tutorials/tutorials.html
    http://shervinemami.info/blobs.html
    https://www.youtube.com/watch?v=bSeFrPrqZ2A

    Maus simulieren:
    http://stackoverflow.com/questions/5164774/how-can-i-simulate-mouse-events-from-code

    Und GANZ WICHTIG: solide Programmierkenntnisse in C oder C++. Davor hat es wenig Sinn sich mit komplexen Dingen wie Bildverarbeitung zu beschäftigen.



  • kingaze schrieb:

    Wenn du so viel Ahnung hast ,kannst du mir ruhig paar. Links geben passend zu meinem Thema, womit ich gut bedient bin.

    Ganz tief durchatmen, und dann nochmal lesen was ich dir geschrieben habe.

    Den wichtigsten Link geb' ich dir aber gerne: https://www.google.com



  • Mich würde mal interessieren wie groß deine Programmiererfahrung ist...



  • Meine oder die von kingaze?

    Meine is ca. 20 Jahre C++, davon > 15 Jahre professionell.
    Dazu noch diverse Assembler (früher, schon ewig nimmer angegriffen), natürlich C (auch schon ewig nimmer angegriffen) und seit > 5 Jahren auch immer mehr C#.



  • die von kingaze natürlich... deine kann man bei über 20.000 Beiträgen ein wenig besser einschätzen 😉



  • Ach so 🙂 War (mir) nur nicht klar weil direkt unter meinem Beitrag und ohne @ - da ist nicht unüblich anzunehmen dass es an mich gerichtet ist.



  • Meine Erfahrung(en) noch ein Anfänger.

    Danke für die Zahlreichen Links,alle natürlich angeschaut und versucht so gut wie möglich zu verstehen mit meinem Wissensstand.

    Hier mal ein kleines 3minütiges Video was mein ungefähres Ziel ist.

    https://www.youtube.com/watch?v=C0JXrCTy6pc

    Der wurde in AutoIt geschrieben.

    Ich versuche mal diesen hustbaer zu ingorieren.



  • Du hast nichts von dem was ich dir vermitteln wollte verstanden.

    @dfsdfsfs
    Du weisst schon was passiert wenn man jmd. schreibt dass er sich nicht erwarten soll dass ihn jmd. bei der Hand nimmt ... und ihn dann gleich darauf bei der Hand nimmt? 😉



  • @dfsdfsfs
    Du weisst schon was passiert wenn man jmd. schreibt dass er sich nicht erwarten soll dass ihn jmd. bei der Hand nimmt ... und ihn dann gleich darauf bei der Hand nimmt? 😉

    naja, ich hab ihm ein paar Links gegeben, damit er überhaupt mal weiß nach welchen Begriffen er in Google suchen muss.
    Wirklich lernen muss er es selbst, da ists dann komplett aus mit dem Händchenhalten 😉

    Wobei ich immer skeptisch bin wenn jemand gleich sowas großes vorhat. Ich hatte anfangs Spaß daran meine kleinen Hello World Programme immer weiter auszubauen, aber auch zu analysieren, was welche Zeile nun tatsächlich tut.
    Dinge wie WinAPI, OpenCV oder ähnliches hab ich erst viel später gelernt. Ich wäre anfangs auch überfordert gewesen. Da müssen einfach die Basics sitzen. Da hantiert man ganz selbstverständlich mit Datenstrukturen wie Bäumen oder ähnlichem. Kein Problem wenn man die Basics kennt. Kann aber zum Scheitern führen wenn man nicht weiß, wie man damit umzugehen hat.



  • kingaze schrieb:

    Meine Erfahrung(en) noch ein Anfänger.

    Ich hoffe dir ist klar, dass ein Anfänger niemals so ein Programm auf die Beine stellen kann. Du solltest dich erst mal mit MFC an sich befassen und ein bisschen spielen. Danach mit den WinAPIs usw...

    kingaze schrieb:

    Ich versuche mal diesen hustbaer zu ingorieren.

    Ich hoffe dir ist auch klar, dass dieser hustbaer es eigentlich nur gut meint?!



  • Hi,

    da nimmst Du AutoIt, man muss nicht alles neu erfinden, dort kannst Du Pixel aus den verschiedneen Sourfaces dx/Gl usw. abrufen:

    http://de.wikipedia.org/wiki/AutoIt

    Gruß Karsten



  • Ich haben erwähnt ,dass es mein Ziel ist ein solches Programm wie im Link zu sehen zu programmieren.
    Ich setze mich jetzt auch nicht hin und erwarte Meilensteine innerhalb paar Tagen?
    Ich denke ein paar Monate und kleine Erfolge sollten mir gelingen.Tutorials auf YT schaue ich mir auch an und versucher "step by step" mein Wissen zu erweitern.

    c++ habe ich genommen ,da dies eine Multi task lang. ist und AutoIt dem leider unterlegen ist ,da keine Multi Task Lang. ist.
    Und ich will ein stabiles,performance starkes programm als Endprodukt.



  • Naja dann mach das so,

    Hier wird in OnPaint nach einem Client Wnd gesucht, und das wird dann
    Pixelig untersucht: wird gesuchtes gefunden sendet es einen
    Hardcore MouseEvent und Key press, daraus kannst Du das alles herleiten:
    (Damit fuhr ein "Wot" -Panzer die ganze Nacht ^^)

    Pseudoverbrechen:

    COLORREF TestRegion(int x, int y,int w, int h,int linew, void *pbBits)
    {
        RGBTRIPLE *pRgb = (RGBTRIPLE *)pbBits;
    	DWORD red(0),green(0),blue(0);
    	for( int yy = y; yy < y+h; yy++ )
    	{
    		for( int xx = x; xx < x+w; xx++ )
    		{
    			red   += pRgb[xx].rgbtRed;
    			green += pRgb[xx].rgbtGreen;
    		    blue  += pRgb[xx].rgbtBlue;
    		}
    
    		pRgb = (RGBTRIPLE *)((LPBYTE)pRgb + (sizeof(RGBTRIPLE) * linew));
    	}
    
    	return RGB(red/(h*w),green/(h*w),blue/(h*w));
    }
    
    void CWotBotDlg::OnPaint()
    {
        CPaintDC dc(this);
    
    	CWnd* pClientWnd=(FindWindow("App","WoT-Client"));
    	if(!pClientWnd) return;
    
    	CDC*  pDC(pClientWnd->GetWindowDC()); 
    	CRect rcClient;pClientWnd->GetClientRect(&rcClient);
    	CRect rc;GetClientRect(&rc);
    
    	int     th        = ::GetSystemMetrics(SM_CYCAPTION); //titelbar
    	int     mh        = ::GetSystemMetrics(SM_CYMENU); //menubar
    	int     bw        = ::GetSystemMetrics(SM_CXFIXEDFRAME)<<1;//border
    	int     nWidth    = rc.Width();//GetSystemMetrics(SM_CXFULLSCREEN);
    	int     nHeight   = rc.Height();//GetSystemMetrics(SM_CYFULLSCREEN);
    	HDC     hdcMem    = ::CreateCompatibleDC(pDC->m_hDC);
    	HBITMAP hbm       = ::CreateCompatibleBitmap(pDC->m_hDC, nWidth, nHeight);
    	HBITMAP hbmOld    = (HBITMAP)::SelectObject(hdcMem, hbm);
    
    	::SetStretchBltMode(dc.m_hDC,STRETCH_DELETESCANS);//stretch with highquality
    	::StretchBlt(/*m_dib.GetDC()*/dc.m_hDC, 0,0, rc.Width(), rc.Height(),pDC->m_hDC , bw, th+bw,rcClient.Width()-bw,rcClient.Height(),SRCCOPY);
    	//BitBlt(hdcMem, 0, 0, nWidth, nHeight, pDC->m_hDC, 0, 0, SRCCOPY);
    	::SetStretchBltMode(hdcMem,STRETCH_DELETESCANS);//stretch with highquality
    	::StretchBlt(hdcMem, 0,0, rc.Width(), rc.Height(),pDC->m_hDC , bw, th+bw,rcClient.Width()-bw,rcClient.Height(),SRCCOPY);
    
    	BITMAPINFO bmi;ZeroMemory(&bmi, sizeof(bmi));
    	bmi.bmiHeader.biSize         = sizeof(BITMAPINFOHEADER);
    	bmi.bmiHeader.biWidth        = nWidth;
    	bmi.bmiHeader.biHeight       = -nHeight;
    	bmi.bmiHeader.biBitCount     = 24;
    	bmi.bmiHeader.biPlanes       = 1;
    	bmi.bmiHeader.biCompression  = BI_RGB;
    	bmi.bmiHeader.biSizeImage    = nWidth * nHeight * 3;
    
    	BYTE *pbBits = new BYTE[bmi.bmiHeader.biSizeImage];
    	::GetDIBits( hdcMem, hbm,0,abs(bmi.bmiHeader.biHeight),pbBits,&bmi,DIB_RGB_COLORS );
    
    	    BYTE red1;
    		BYTE green1;
    		BYTE blue1;
    		COLORREF rgb = TestRegion(266, 17, 96 ,22, nWidth, pbBits);
    		//garage
    		red1   = GetRValue(rgb);
    		green1 = GetGValue(rgb);
    		blue1  = GetBValue(rgb);
    		TRACE("(A) %d:%d:%d\r\n",red1,green1,blue1);
    
    		/*
                     //hier primitiv wird ein Mouse/Key event systemweit gesendet
                     //um eine Usereingabe zu simulieren wenn bestimmte Farben gefunden werden
    
    		if(red1 > 77 && red1 < 83 && green1 > 33 && green1 < 41 &&  blue1 > 22 && blue1 < 29 && g_state == 0)//oben ja
    		{
    		   int x(511),y(76);
    		   SetCursorPos(x,y);Sleep(10);
    
    		   mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);Sleep(10);
    		   mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0);Sleep(10);
    		   keybd_event(VK_ESCAPE ,0x041,0 , 0);
    		   g_state = 1;
    		}
    		*/
    
    	//CString str; str.Format("%d.bmp",n++);
    	//m_dib.Save(str.GetBuffer(),pbBits);//dc.SelectObject(pOldBmp);
    
        delete [] pbBits;
    
    	::SelectObject(hdcMem, hbmOld);
    	::ReleaseDC(0, pDC->m_hDC);
    	::ReleaseDC(0, hdcMem);
    }
    

    Viel Spass damit 🙂

    Gruß
    Karsten


Anmelden zum Antworten