Hab die Read Me der tt6 v1.6 mal in Deutsch gefasst:
Code:
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
Hi all, I'm not too sure how to use the buildblacklist and collectloot funcs. All it does is pass from one item to the next including the teleports and chests.
Here's how I've used it:
Quote:
;check for teleport and collect all loot
BuildCLBlackList()
RndSleep(800)
CollectLoot(3,True)
Das von NBA? Das kann man ja nicht Deutsch nennen^^
Außerdem waren da paar Übersetzungsfehler und es fehlten noch die Flags sowie
der andere Kram, der noch dazu kam.
Das von NBA? Das kann man ja nicht Deutsch nennen^^
Außerdem waren da paar Übersetzungsfehler und es fehlten noch die Flags sowie
der andere Kram, der noch dazu kam.
Hab ich auch gedacht.. aber ich les es einfach auf englisch; viel bessere ausdrucksweise
tritt auf, wenn man nach gebietswechsel zu schnell loslaufen will, da ist eine zeit lang der course wert noch "unendlich", entweder länger warten oder prüfen, dass der wert <= 2*pi ist, so wie in TransferArea...
tritt auf, wenn man nach gebietswechsel zu schnell loslaufen will, da ist eine zeit lang der course wert noch "unendlich", entweder länger warten oder prüfen, dass der wert <= 2*pi ist, so wie in TransferArea...
Hi,
super ding was du hier gescriptet hast.
Aber ich habe da mal ein Problem und wüsste gerne eine Lösung.
Also ich habe Probleme mit der CollectLoot Funktion.
Normal "CollectLoot(7)" klapp eigentloch ohne Probleme
aber wenn ich die Blacklist einbeziehen will geht es irgendwie nicht.
ich habe das so in meinem Script gepackt
Nein nein natürlich will ich es auf True stehen haben
Habe es ebedn nur schnell aus der tt6 rauskopiert und garnicht wirklich drauf geachtet.
Aber auch wenn ich True da stehen habe funktioniert es nicht weil er mir sagt die variabel ist nicht dekladiert.
Aber warum macht er das nicht ?
MoveTo Engine gibt keine Charakterkoordinaten aus 05/27/2010 - AutoIt - 2 Replies Hallo, habe mir tt6 1.7 geladen und wollte gleich die koordinaten vom charakter in Guild Wars rausfinden.
Aber mir wurden lediglich die koordinaten meiner maus angezeigt.
Kann mir jemand helfen?
MoveTo Engine funktioniert nicht 04/01/2010 - GW Bots - 16 Replies Nachdem ich heute mehrere Stunden damit verbracht habe die MoveTo Engine bei mir ans Laufen zu bringen habe ich mich entschlossen mein Problem zu posten.
Ich benutze die MoveTo Engine von tonitusch666 mit dem dazugehörigen Dumper. Ich habe die Update.ini auf den neuesten Stand gebracht (copy&paste aus diesem Thread) und selbst mit CE überprüft.
Das seltsame ist, das die Funktion CheckArea() aus der tt6.au3 einwandfrei funktioniert! Das heißt die Mems sind OK, jedoch funktioniert dieser...
Moveto 01/13/2010 - GW Bots - 3 Replies Ich habe eine Frage, wie macht blauwiggle seine moveto das sie so menschlich aussieht ? weil meine wirken immer so abgehackt wenn ich das mit Moveto (x,y) mache, bzw. weiß jemand wie man es besser macht?
MoveTo Engine Problem. 10/13/2009 - GW Bots - 10 Replies Hallo Jungs..
Kan mir mal jemand sagen was ich falsche mache und warum meine Move To Engine nich funktioniert?
Hier mein bisheriger Source.. Nich wundern wenn noch Sinnloses Zeug drinsteht, ist für später.. :D
#RequireAdmin
#include "tt6.au3"
#include <NomadMemory.au3>