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.
Quelle : http://easysurfer.back2hack.cc/wordpress/?p=177#more-177
[spoiler]
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 > 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 && 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 < 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
[/spoiler]