TT6 MoveTo engine public

03/31/2009 22:22 i4mSoH34Vy#661
Bei mir dreht sich alles nur noch im Kreis :D
Edit: OK einfach Camcourseb in Camcourse umschreiben
04/02/2009 13:06 Read Me#662
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
Hoffe, dass sie vielleicht jemandem Hilft.
04/02/2009 17:37 Deagles#663
mühe umsonst, es gibt nämlich schon eine deutsche übersetzung..
04/02/2009 19:45 sweetlady#664
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)
04/03/2009 07:30 Read Me#665
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.
04/03/2009 11:41 Moppel123#666
Quote:
Originally Posted by Read Me View Post
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
04/03/2009 19:10 NBA#667
I have warned you....

Wie gesagt, bei mir wuerde(n) einige Lehrer ne 6 druf geben :D
04/04/2009 20:16 N.E.O.#668
Irgendwie kommt bei der Funktion:

Func GetCourse($val)

Immer der Error, woran liegt das?
04/04/2009 22:04 tonitusch666#669
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...

mfg
04/05/2009 11:25 N.E.O.#670
Quote:
Originally Posted by tonitusch666 View Post
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...

mfg
OK, danke =)
04/05/2009 19:49 cab_killer#671
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

PHP Code:
RandomSleep(1000, 2000)
    
BuildCLBlackList()
    
RandomSleep(500, 1000)
    
CollectLoot(7, $checkblack = False)
    
RandomSleep(5000, 6000) 
Aber er sagt mir das $ceckblack nicht definiert ist.
Er ruft doch alles in der tt6 auf warum erkennt er da dann nix ?

Danke euch schonmal

MFG
04/05/2009 19:52 kknb#672
dann lass es weg wenn du es eh auf false stehen lassen willst o_O

btw nur false sollte reichen.
04/05/2009 19:56 cab_killer#673
Nein nein natürlich will ich es auf True stehen haben :D
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 ?

Danke

MFG
04/05/2009 20:00 kknb#674
CollectLoot(7, true,200, 2) oder
CollectLoot(7, true)

funktioniert bei mir tadellos
04/06/2009 00:31 sweetlady#675
Quote:
Originally Posted by kknb View Post
CollectLoot(7, true,200, 2) oder
CollectLoot(7, true)

funktioniert bei mir tadellos
Ich werde versuchen Danke. Muss ich BuildCLBlackList() vor wie:

BuildCLBlackList()
CollectLoot(7, True)