Bei mir dreht sich alles nur noch im Kreis :D
Edit: OK einfach Camcourseb in Camcourse umschreiben
Edit: OK einfach Camcourseb in Camcourse umschreiben
TT6 V1.6 by Tonitush666 - kurze Einführung - Übersetzung von Read Me - 01.04.2009
---------------------------
Was ist die TT6?:
- Von größtem Interesse ist die MoveTo()-Engine, welche die Implementation von
vordefinierten Laufwegen in Bots vereinfacht.
- Sie enthält eine Sammlung von Funktionen wie Resign(),Collectloot() etc., welche
auch teils von ePvP-Mitlgiedern bereitgestellt wurden.
- Abstraktion von konfigurierbaren Maus -und Tastaturaktionen, welche ohne Veränderung
des gesamten Codes eingesetzt werden können
API:
* die MoveTo()-Engine:
Die Bewegung muss durch einen Aufruf von "PrepMoveTo()" vorbereitet werden.
Eines der folgenden API muss nach einer Bewegungssequenz aufgerufen werden:
- StopMoveTo()
- KeepMoveTo()
Der Unterschied zwischen "StopMoveTo()" und "KeepMoveTo()" ist, dass "StopMoveTo()"
die Bewegungssequenz richtig stoppt und "KeepMoveTo()" diese nur logisch anhält, aber
solange weiterläuft, bis der Wegpunkt erreicht ist.
"KeepMoveTo()" wird z.B. benutzt, wenn man durch ein Portal laufen will; dabei muss
der dazugehörige Wegpunkt kurz vor dem Portal liegen.
MoveTo($mode, $x, $y, $random = False, $dcheck = False)
MoveTo(...):
Ist das Herz der TT6; du definierst deine Wegpunkte durch die Riehenfolge der Aufrufe.
Es gibt eigentlich keine Werte zurück (return), solange es die gewünschte Position noch
nicht erreicht hat; allerdings gibt es einige Zusatzparameter, welche in speziellen
Sietuation genutzt werden können.
mode = 0 : - nur eine Bewegung zum Ziel + Rückgabewert
- der interne Aufrufintervall ist 10ms (Aufruf-10ms warten-Aufruf-10ms warten...)
- wenn eine Funktion keinen Rückgabewert gibt, kann man Folgendes tun:
InitDest(...)
"Irgendetwas, nachdem wir uns in Richtung Ziel gedreht haben."
While Not MoveTo(0,0,0)
Sleep(10)
"Wenn du irgendetwas überprüfen willst, kannst du das hier tun,
aber achte darauf, dass du dich an die 10ms hältst!"
WEnd
mode = 1 : "standard mode":
- Ziel initalisieren und hinlaufen
mode = 2 : "autorun mode":
Wenn ein Bewegungsstop(durch z.B. Knockdown, Wirken einer Fertigkeit) erkannt wird,
welchen du über "AdLibEnable()" parallel zur Bewegung ausgeführt hast, versucht die
MoveTo nach 500ms automatisch weiter zu laufen.
Um sicher zu stellen, dass das Wirken von Fertigkeiten nicht während dieses Prozesses
unterbrochen wird, musst du den Stopcheck vorübergehend abschalten, z.B.:
DisableStopCheck()
"wirke deine Schattenform"
"warte, solange du castest (+ etwas Extrazeit zu Sicherheit)"
EnableStopCheck()
mode = 3 : "block mode":
Manchmal kann es passieren, dass du während der Bewegung geblockt wirst.
Im "standard mode" würde deine Funktion nie einen Rückgabewert leifern und
"sich aufhängen". Um das zu vermeiden, kannst du den "block mode" bentuzen,
wenn nötig.
Wird ein Block erkannt, wird eine globale Flagge($gotBlocked = True) gesetzt und die MoveTo beendet.
Die Bewegung würde nicht fortgesetzt werden, wenn nicht:
- die Flagge auf "$blocked = False" gesetzt wird oder
- eine neue Bewegungssequenz mit "PrepMoveTo()" eingeleitet wird
Beispiel:
PrepMoveTo()
MoveTo(3,...)
MoveTo(3,...)
MoveTo(3,...)
if $gotBlocked Then
"wirke einen Schattenschritt"
;lauf' zu einem neuen Startpunkt und schließe zu dem Pfad wieder auf
MoveTo(3,...)
MoveTo(3,...)
MoveTo(3,...)
Endif
MoveTo(3,...)
MoveTo(3,...)
StopMoveTo()
if $gotBlocked Then
"Falls nichts geht, einfach Resign()."
Endif
.... weiter geht's ...
So kannst du einem Block über eine Exception (Ausnahmebehandlung) entgegenwirken.
Flags:
dcheck - Ermöglicht dir die Todesabfrage ein -oder auszuschalten.($dcheck = true/false).
Um herauszufinden, ob du noch lebst oder tot bist, musst du $isDead überprüfen.(True = tot, False = lebend)
Nachdem du über eine Exception den Tod deines Charakters erkannt hast, musst du $isDead wieder auf "False" setzen.
$isDead wird nicht durch "PrepMoveTo()" zurückgesetzt!
random - Fügt den Koordinaten der MoveTo Zufallswerte (+/- 100) hinzu, um die Bewegungen deines Bots
menschlicher wirken zu lasen. Trotzdem ist es keine 100%ige Garantie, dass dein Bot nie
entdeckt wird!
okdist - Definiert den Abstand zur gewünschten Position. Wird benötigt, wenn man GENAU an diese Position möchte.
Das Ganze kann natürlich starke Nebenwirkunge haben, da die MoveTo versuchen wird, sich immer neu auf
diese Position auszurichten, bis sie erreicht ist.
(teilweise permanentes "im Kreis laufen, weil ich mich nicht zum Ziel ausrichten kann").
InitDest($dx, $dy, $dcheck = False) - Wird intern verwendet und ist nur in Verbindung mit dem "standard mode" wichtig.
DisableStopCheck()
EnableStopCheck() - de-/aktiviert die Abfrage, ob wir ungewollt die Bewegung unterbrochen haben (Knockdown, Wirken v. Fertigk.)
Hinweis: Muss zum "beschützen" von Fertigkeitsanwendungen im "auto mode" benutzt werden.
* Funktionssammlung - nach Bedarf verwenden
; prüfen, ob wir uns an den angegeben Koordinaten befinden (500 by 500)
CheckArea($xval, $yval)
; zufällige Pausezeiten (+/- 5% von $val)
RndSleep($val)
; Gebiet aus nicht-einsammelbare Gegenstände prüfen (Truhen, Wegweiser etc.)
BuildCLBlackList()
; collect loot
; $max - max. Anzahl aufzuhebender Gegenstände
; $checkblack - aktiviert die Nutzung der ItemBlacklist, die mit "BuildCLBlackList()" erstellt wurde
; $retrytime - definiert die Zeit (in ms), nach der ein weiterer Versuch unternommen wird, einen Gegenstand zu erreichen
; $retrycount - definiert die Anzahl der Versuche, die utnernommen werden, um einen Gegenstand zu erreichen, bis dieser
; auf der Blacklist landet und somit nicht mehr aufgehoben wird (z.B.: Block durch Gegner)
CollectLoot($max, $checkblack = False, $retrytime = 200, $retrycount = 0)
; aufgeben
Resign()
; bis zum Tod und der anschließenden Wiederbelebung warten
WaitRezz()
; zur Gildenhalle -oder von ihr zurückreisen
TransferGH()
; zu einem anderen Gebiet reisen
; $toID - definiert das Gebiet, das wir betreten wollen
; $timeout - Zeit (in Sekunden), nach der das Script mit einem Fehler beendet wird
TransferArea($toID, $timeout = 20)
; alle Gegenstände von Zeile (0..8) identifizieren; Identifizierungs-Werkzeug row/col(0..4)
IdentItems($StartRow, $EndRow, $IdentCol, $IdentRow)
; Mausaktionen an ein inaktives Fenster senden
; button = left, right, none
; event = down, up, click, dclick, move
MouseSend($btn, $evt, $xpos, $ypos)
; eine einzelne Tastaturaktion an ein inaktives Fenster senden
; event = pressed, down, up
; Hinweis: unterstützt nur Kleisnchreibung, F(1-12), NUM(0-9) und einige spezielle Tasten:
; RETURN, SPACE, TAB, BACK, END, HOME, SNAPSHOT, INSERT, DELETE, LEFT, RIGHT, UP, DOWN, @
Hinweis: Auf manchen Tastatur-Layouts funktionieren einige Tasten nicht. Überprüft also
zuerst, ob die Tasten mit "Controlsend()" in Guild Wars funktionieren.
KeySend($inkey, $evt ="pressed")
Anmerkung:
Nützlich, um Tastaturaktionen an ein inaktives Fenster zu senden, ohne eine automatische
Groß-/Kleinumschaltung wie bei "Controlsend" zu haben.
Die aktuelle Version ist recht simpel und funktioniert nur mit einem kleinen Umfang an Tasten.
Wenn man etwas im Ingame-Chat schreiben möchte, so setzt man "Sleep(50)" zwischen
jedes "Keysend()".
Allgemeines:
Alle Eisntellungen und Variablen können in der tt6.au3 überschieben werden,
aber sei dir sicher, dass du verstehst, was du da tust.
Beispiele:
#include "tt6.au3"
; Ich möchte in meinem Bot ein anderes Koordinatensystem benutzen...
Opt("MouseCoordMode", 0)
; ...oder in einem anderen Guild Wars-Fenster botten...
$client = "Guild Wars1"
$PID = WinGetProcess($client)
Global $hprocess = _MemoryOpen($PID)
Global $hwnd = WinGetHandle($client)
; ...oder die Rotation verlangsamen/beschleunigen.
$accelmul = 0.9
Schaut euch doch die beigelegten, fertigen Beispiele an und startet erst einmal mit kleineren
Copy+Paste-Projekten, um sicher zu stellen, dass diese funktionieren.
abschließende Worte:
Die Engine wurde mit Quellcode veröffentlicht, um sie in Projekte jeglicher Art integrieren zu können und
um zu verstehen, wie die Mechanismen, die dahinter stecken,funktionieren.
Veränderungen und Hiwneise zur Verbesserung der TT6 sind willkommen.
Ich kann keine Garantie für zukünftigen Support -oder Verbesserungen geben.
Wie gewohnt ist die ePvP-Community sehr hilfreich für Leute, die ihre Software-projekte umsetzen.
So ist es eine gute Idee, dort nachzufragen.
Schlussendlich möchte ich der ePvP-Community für das Feedback und die Inspiration danken,
die tt6.au3 als mein kleines Fun-Projekt in meiner Freizeit umzusetzen.
Besucht und doch einmal!
www.epvp.de
Quote:
;check for teleport and collect all loot
BuildCLBlackList()
RndSleep(800)
CollectLoot(3,True)
RandomSleep(1000, 2000)
BuildCLBlackList()
RandomSleep(500, 1000)
CollectLoot(7, $checkblack = False)
RandomSleep(5000, 6000)