TT6 MoveTo engine public

01/05/2009 22:32 tonitusch666#76
@j199207

beendet sich alles ist absicht :) ,dann schau mal was für ne Fehlermeldung in der console steht (wenn man aus dem editor raus startet), weil dann wars nen bad call oder zu früh nach dem instanz wechsel oder so in der Art...

Es gibt dazu mehrer Philosophien, man machts so robust dass man den eigentlichen Fehler nie findet es aber irgendwie weiterläuft oder man legt nen Totalstop hin und der Anwedner hat ne Chance die eigentliche Ursache zu finden, beide haben Vor- und Nachteile ;)
01/06/2009 11:24 i4mSoH34Vy#77
Wollt mich erstmal für die schönen Beispiele bedanken.
01/06/2009 14:24 Dunham#78
Quote:
Originally Posted by tonitusch666 View Post
Also wenn das rennen durch nen cast, gegner oder sonst was gestoppt wird, dann muss man nur $running = false setzen(an der stelle wenn mans weis oder in ner adlib funktion die während der situation enabled wird), dann rennt er automatisch weiter, wird im glint und im wintertags dungeon beispiel benutzt. vlcht sollte man mal ne kleine faq zusammenstellen oder ich ne richtige doku :rolleyes:
kannst du mir das mal etwas genauer erklären?
01/06/2009 14:35 NBA#79
Also da gibt es noch ein klitzekleines problem. Kann man das mit den kreis fuer eine weile ausschlaten?

Mein problem ist wie folgt:
Ich gehe zum spaeher fuer die belohnungen. Dann will ich mich umdrehen und auf einen waypoint gehen. Nun , er geht aber in einem kreis(der viell zu gross ist) und haengt bei einer ecke des rezzschreins fest.
01/06/2009 16:10 tonitusch666#80
Also zu dem casting Thema:
Code:
MoveTo(1, -19019, 6805)
ControlSend($client, "", "", "{6}")
$running = False
MoveTo(1, -18985, 4892)
da ich weiss, dass skill 6 das rennen abgebrochen hat, setze ich auf False
dadurch startet der nächste MoveTo() Aufruf das neu (kann auch "r" selber schicken in der Siutation). Wenn das aber asynchron in einer adlib-Funktion läuft, weis ich ja nich ob ich gerannt bin, daher setze ich zu bestimmten Zeiten das auf false und wenn zB Obsi-Fleisch das rennen abgebrochen hat
Code:
If Mod($tick -2, 24) = 0 Then
	ControlSend($client, "", "", "{2}")	;obsi
EndIf

If $tick = 56 OR $tick = 30 Then
	$running = false ;retrigger moveto in case it was stopped by cast
EndIf
Zu dem Kreise Thema:
Also das kann ich so einfach nicht "abschalten", weil das ein Problem mit der Tastatursteuerung ist. In Deiner Situation würde ich mit das rennen stoppen und mit InitDest() mich erst in die Richtung drehen lassen und dann weiter laufen:
Code:
MoveTo()
StopMoveTo()
machwas()
InitDest(x,y)
RndSleep(1000)
While Not MoveTo(0,0,0)
	Sleep(10)
WEnd
MoveTo()
wenn das nicht hilft, dann liegen Deine waypoints ungeschickt oder Du musst die Situation anderst lösen...

EDIT3: Also für die, die selber gerne an Parametern experimentieren:
$accelmul = 1.0, d.h. die Werte aus der Tabelle werden unverändert übernommen (btw die Tabelle wurde durch Drehungen einfach erzeugt), >1 würde zu stärkeren Bewegungen führen, <1 dementsprechend zu gedämpften, mehr als +-20% würde ich aber nicht machen.
Hab mal die Abbruchschwelle in Abhängigkeit der Distanz definiert und paar Tests laufen lassen, damit sollte das Kreise-Laufen nicht mehr auftreten, jedoch kann es sein, dass dadurch öfter mal gestoppt wird, das kann man aber durch geschickte waypoints vermeiden...
[testversion siehe paar posts weiter]
mfg
01/06/2009 16:53 | Moep |#81
Kleiner Tipp:

um
PHP Code:
Const $pi 3.14159265358979 
noch genauer zu machen, nutze einfach

PHP Code:
Const $pi ATan(1
Ist zwar nur minimal anders.. aber manchmal können kleine Rundungen großes bewirken ;)

Ansonsten, eine Sehr Schöne Arbeit :handsdown:
01/06/2009 19:09 Dunham#82
[QUOTE=tonitusch666;1755488]Also zu dem casting Thema:
Code:
MoveTo(1, -19019, 6805)
ControlSend($client, "", "", "{6}")
$running = False
MoveTo(1, -18985, 4892)
da ich weiss, dass skill 6 das rennen abgebrochen hat, setze ich auf False
dadurch startet der nächste MoveTo() Aufruf das neu (kann auch "r" selber schicken in der Siutation). Wenn das aber asynchron in einer adlib-Funktion läuft, weis ich ja nich ob ich gerannt bin, daher setze ich zu bestimmten Zeiten das auf false und wenn zB Obsi-Fleisch das rennen abgebrochen hat
Code:
If Mod($tick -2, 24) = 0 Then
	ControlSend($client, "", "", "{2}")	;obsi
EndIf

If $tick = 56 OR $tick = 30 Then
	$running = false ;retrigger moveto in case it was stopped by cast
EndIf
mein problem is das er nicht durchs casten unterbrochen Wird sondern bodyblock sobald das passiert stirbt er weil er nich ne andere func startet...
01/06/2009 20:28 tonitusch666#83
Ah ok verstanden, ja so was ähnliches passiert ja auch wenn man einen knock down bekommt. Also meine Idee dazu ist, dass ich die Bewegung (Distanzen) in einem buffer ableg und wenn x zeiteinheiten diese nicht kleiner geworden ist, dann "was passiert".
Bei Knock down würde ich einfach nen "r" reinhaun, in deinem Fall würde ich nen globalen blocked status setzen (muss man nicht bei allen moveto den return code prüfen) und rausspringen...

EDIT:
Also hab jetzt den autorun mode und block mode integriert, jedoch noch nicht selber verwendet, daher gibts da kein Beispiel dafür. Damit casts nicht abgebrochen werden muss man diese mit
DisableStopCheck()
do some casting
sleep(finish cast)
EnableStopCheck()
einklammern, der blocked status kann über $gotBlocked abgefragt werden und wenn man Gegenmassnahmen ergriffen hat muss er wieder auf false gesetzt werden bzw. wird das beim nächsten PrepMoveTo() gemacht.
Da hier auch die Änderungen gg. das "Kreise laufen" drin sind hab ich das zip aus dem anderen Beitrag rausgenommen...

mfg

PS: werd wohl erst am wochenende wieder zeit haben auf fragen zu antworten...
PPS: noch mehr Varianten bau ich nicht mehr ein, weil sonst wirds echt unübersichtlich ;)
PPPS: die random positionen sind jetzt kein mode mehr sondern ein extra parameter mit default = false
01/06/2009 22:45 Read Me#84
Ich hab nochn Problem+ne Vermutung:
Hab mir nen kleinen Background-Bot geschrieben,der mit deiner MoveTo arbeitet.
Das ganze funktioniert komplett ohne Probleme.
Mein Problem liegt eher darin, dass wenn ich nen 2tes GW öffne, sich das Teil einfach beendet QQ.
Liegt das evtl daran,dass die MoveTo mit Gw.exe arbeitet und durcheinander kommt whatever,wenn 2xGw.exe ausgeführt wird?
01/06/2009 22:55 Hokler#85
das 2te gw fenster wo du öffnen willst muss dan z.b. Guild wars 2 oder so heisen
01/06/2009 22:57 i4mSoH34Vy#86
Quote:
Originally Posted by Weruda View Post
Ich hab nochn Problem+ne Vermutung:
Hab mir nen kleinen Background-Bot geschrieben,der mit deiner MoveTo arbeitet.
Das ganze funktioniert komplett ohne Probleme.
Mein Problem liegt eher darin, dass wenn ich nen 2tes GW öffne, sich das Teil einfach beendet QQ.
Liegt das evtl daran,dass die MoveTo mit Gw.exe arbeitet und durcheinander kommt whatever,wenn 2xGw.exe ausgeführt wird?
einfach die Gw.exe im script durch Wingetprocess("Guild Wars") ersetzen
01/07/2009 08:14 Read Me#87
Muss ich mal testen^^
Kanns hier grad nich live testen, da ich auf Arbeit bin QQ

edit:passt, ty
01/09/2009 15:10 Painful Pete#88
Quote:
Originally Posted by j199207 View Post
einfach die Gw.exe im script durch Wingetprocess("Guild Wars") ersetzen
Könntest du mir das an nem kleinen Beispiel erklären?

Bzw in welcher Datei muss ich das machen?
Würde gern bei meinem 5er bot den Hauptläufer damit steuern während die andern folgen.
Muss ich das in der tt6.au3 oder in dem Script das ich da hab iwie reinbringen?
01/09/2009 16:26 Read Me#89
Entweder in deinem Script oder in der tt6 und diese inlcuden(macht man ja eig immer, wenn man MoveTo nutzt^^).

bei mir zb:
Global $client0 = IniRead("tt6.ini","ids","windowName1","Guild Wars")
Global $client1 = IniRead("tt6.ini","ids","windowName2","Guild Wars1")
Global $client2 = IniRead("tt6.ini","ids","windowName3","Guild Wars2")
Global $client3 = IniRead("tt6.ini","ids","windowName4","Guild Wars3")

und dann die Befehle an jeweils die Handles($clientx) senden.
01/09/2009 16:38 Painful Pete#90
Quote:
Originally Posted by Weruda View Post
Entweder in deinem Script oder in der tt6 und diese inlcuden(macht man ja eig immer, wenn man MoveTo nutzt^^).

bei mir zb:
Global $client0 = IniRead("tt6.ini","ids","windowName1","Guild Wars")
Global $client1 = IniRead("tt6.ini","ids","windowName2","Guild Wars1")
Global $client2 = IniRead("tt6.ini","ids","windowName3","Guild Wars2")
Global $client3 = IniRead("tt6.ini","ids","windowName4","Guild Wars3")

und dann die Befehle an jeweils die Handles($clientx) senden.
Also einfach das alles iwo in die tt6 reinkopieren und wenn ich jetz z.B: das erste GW laufen lassen will dann:

PrepMoveTo($client0)
Moveto(1, -6061, -1281)
Moveto(1, -6061, -606)
.
.
.
StopMoveTo($client0)

Ich benutze zum mehrfache starten den Multiclient.. also meine Fenster heißen auch Guild Wars, Guild Wars 1, usw.... muss ich dann da wo ich rot markiert hab jeweils Guild Wars, Guild Wars 2 etc einsetzen oder gehört das so?^^

EDIT: Wo muss ich dann das Wingetprocess("Guild Wars") noch unterbringen? oder brauch ich das dann gar nicht?

danke schonmal für die Antwort

EDIT2: ach muss ich da in der .ini statt dem bisherigen:

[ids]
processName = Gw.exe
windowName = Guild Wars

dann

[ids]
Wingetprocess("Guild Wars")
windowName1 = Guild Wars
windowName2 = Guild Wars1
windowName3 = Guild Wars2
windowName4 = Guild Wars3
windowName5 = Guild Wars4

einfügen und dann das von dir geschickte iwo im script unterbringen?
stimmt das so?
Hab grad keine Möglichkeit das zu testen. :D