MW2 Bot in C# – Teil 7

Heute wird es um einen simplen Triggerbot gehen. Simple daher, weil eine extremst simple Technik verwendet wird. Um den Triggerbot “exakt” zu haben, müsste man man trigonometrischen Funktionen und Winkeln rechnen, aber wir machen es uns einfacher.

Wir berechnen, ob sich unsere Bildschirmmitte (Da wo wir hinschießen ;-) ) sich in einem Radius zur Mitte des Spielers befindet. Dieser Radius wird aus dem Mainroot-Bone und dem Neckbone gebildet und davon die Hälfte zu der Mainroot-Position in Y-Richtung dazu addiert.Das ganze klingt kompliziert, aber eine kleine Grafik sollte ein bisschen Klarheit schaffen:

Es wird die Distanz zwischen Mainroot und dem Neckboen errechnet (Blaue Linie), dann wird der Mainroot-Position in Y-Richtung die Hälfe von Distanz 1 verschoben, was uns zum Zentrum des Kreises bringt. Dabei ist zu erwähnen das Bildschirmkoordinaten bei 0|0 oben links anfangen, also in dem Fall muss D1/2 subtrahiert werden ;-)

Nun wird von unserer Screenmitte die Distanz zu dem eben errechneten Punkt berechnet, was dann Distanz 2 ergibt.

Wenn nun Distanz 1 < Distanz 2 ist, wird geschossen, da wir in dem roten Kreis sind ;-)

Ich werde den nötigen Sourcecode im kompletten Posten, die Kommentare sollen eigentlich selbsterklärend sein:

    public static class TriggerBot
    {
        // Der Enemy auf den geaimed wird. Dabei wird von der Bildschrimmitte ausgegangen.
        public static MW2Player ClosestEnemy;
        // Die Bildschrimmitte
        public static Vector2 vScreenCenter;
 
        // Das nicht sofort 60 mal pro Frame geschossen wird. Es müssen 20 Frames vergehen ( = ca. 2-3 Schüsse pro Sek)
        public static int iWaitTime;
        // Wird gesetzt wenn aktiviert
        public static bool bIsActive = false;
 
        // Die Distance 1 -> Mainroot zu Neck
        public static double fLengthBoneNeck;
        // Die Distance 2 -> Center zu errechnet 1
        public static double fLengthCenterBone;
 
        public static void Init()
        {
            // Ist statisch, kann aber über den Gamemanager ausgelesen werden.
            // Hab ich noch nicht dynamisch gemacht zu Debugzwecken ;-)
            vScreenCenter = new Vector2(640, 480);
        }
 
        // gibt einfach aus ob aktiv oder nicht.
        public static void Render()
        {
            if (bIsActive == true)
                TextManager.DrawString("TriggerBot is ACTIVE", 1000, 100, TextManager.Color.Green, TextManager.Font.Smalldevfont);
            else
                TextManager.DrawString("TriggerBot is NOT active", 1000, 100, TextManager.Color.Red, TextManager.Font.Smalldevfont);
        }
 
        // Wird ebenfalls jeden Frame aufgerufen
        public static void Update()
        {
            if (Main.GetKeyState(107) == Main.KeyState.PressedOnce) // wenn PLUS gedrückt
                bIsActive = true;
            if (Main.GetKeyState(109) == Main.KeyState.PressedOnce) // Wenn MINUS gedrückt
            {
                bIsActive = false;
            }
 
            if (bIsActive == false)
                return; // verlasse Update wenn der Triggerbot nicht aktiv ist
 
            ClosestEnemy = Aim.Aimbot.GetBestLookPlayer(); // Wir holen uns den besten Gegner
 
            if (iWaitTime &gt; 0) // wenn noch gewartet werden soll -> subtrahieren und Update verlassen
            {
                iWaitTime--;
                return;
            }
 
            if (ClosestEnemy == null)
            {
                return; // auch wenn kein Enemy gefunden wurde -> verlassen
            }
 
            // Wenn Mainroot sichtbar ist UND man eingezoomed ist (Sniper etc)
            if (ClosestEnemy.RegisteredBones[10].bIsVisable &amp;&amp; GameManager.PlayerManagerInz.arPlayers[GameManager.CGI.Instance.ClientNumber].Entity.Instance.Zoomed == 4) // 4 == ZOOMED
            {
                // Hier wird die Distanz 1 zwischen Mainroot und Nacken errechnet
                fLengthBoneNeck = ClosestEnemy.RegisteredBones[10].vPosOnScreen.Length(ClosestEnemy.RegisteredBones[2].vPosOnScreen); // 10 = Mainroot, 2 = Neck
                // Wir wird die Distanz 2 zwischen ScreenCenter und Mainroot - (Distanz 1) / 2
                fLengthCenterBone = vScreenCenter.Length(ClosestEnemy.RegisteredBones[10].vPosOnScreen - new Vector2(0,(float)fLengthBoneNeck / 2));
 
                // Wenn wir in dem Radius sind!
                if (fLengthCenterBone &lt; fLengthBoneNeck)
                {
                    // Taste Drücken und loslassen (geht auch eleganter -.-)
                    QuickscopeBot.mouse_event((int)MOUSEEVENTF.LEFT_DOWN, 0, 0, 0, 0);
                    QuickscopeBot.mouse_event((int)MOUSEEVENTF.LEFT_UP, 0, 0, 0, 0);
 
                    // 20 Frames warten
                    iWaitTime = 20;
                }
            }
        }
    }

Greez Easy

7 people like this post.

Andere Artikel zu dieser Serie

  1. MW2 Bot in C# – Teil 9
  2. MW2 Bot in C# – Teil 8
  3. MW2 Bot in C# – Teil 7 (This post)
  4. MW2 Bot in C# - Teil 6
  5. MW2 Bot in C# - Teil 5
  6. MW2 Bot in C# - Teil 4
  7. MW2 Bot in C# - Teil 3
  8. MW2 Bot in C# - Was will er eigentlich?
  9. MW2 Bot in C# - Teil 2
  10. MW2 Bot in C# - Teil 1
  11. MW2 Bot in C# - Teil 0
  1. Noch keine Kommentare vorhanden.

  1. 25. Jun. 2011
    TrackBack von: MW2 Bot in C# – Teil 7


vier − 1 =