Moin Liebe Community ich brauch mal wieder ein wenig Hilfe da ich wieder aufm Schlauch stehe und da ich net jedesmal mit nem neuen Thread rumspammen will, mach ich jetzt einfach mal nen großen Thread für alle meine Fragen, falls das O.K ist.
So mein Problem ist diesmal das ich einen Nestlinge-Bot schreiben möchte der in Rata Sum anfängt und danach ins Portal läuft. So weit erstmal. Mein Problem ist nun das 1. Der Cha nie 100% genau an der selben Stelle steht ( z.b. beim neubetreten von Rata Sum)
2. Das wenn ich mit Hilfe der x/y +/- abfrage der Interval die er tolerieren soll zu groß ist. Damit meine ich zb. das ich die koords habe wenn ich auf der rechten Seite stehen würde und ich aber auf der Linken Seite stehe. So nun toleriert er zb. diese kp 1200 in dem x-Wert aber läuft jetzt als ob er auf der rechten Seite stehen würde = falsch.
Muss man net unbedingt verstehen xD.
Jetzt hatte ich die Idee das ich es so ca. mache
Das wäre die Berechnung der Toleranz des Checkpoints.
PHP Code:
Const $memx = IniRead("update.ini","SECTION D","-24272","Not found") ; position x
Const $memy = IniRead("update.ini","SECTION D","-5717","Not found") ; position y
Func CheckArea($xval, $yval)
$xval = 14452
$yval = 14949
$ret = False
$pX = _memoryread($memx,$hprocess,'float')
$pY = _memoryread($memy,$hprocess,'float')
if ($pX < $xval + 250) And ($pX > $xval - 250) And ($pY < $yval + 250) And ($pY > $yval - 250) Then
$ret = True
EndIf
Return $ret
Und dann alle 4 Spawnpunkte abfrage:
PHP Code:
Checkarea(14452, 14949) Then
Moveto
ElseIf Checkarea(16375, 19403) Then
Moveto
ElseIf Checkarea(17748, 14503) Then
Moveto
ElseIf Checkarea(16298, 19528) Then
Moveto
ElseIf Checkarea (14575, 14863)
EndIf
Jetzt müsste er ja den 1 Punkt abfragen gucken ob der Bereich innerhalb der Toleranz von +/- 250 liegt und geht dann da und da lang. Falls nicht Prüft er Punkt 2 ab, ob der Cha dort steht berücksichtig dort wieder die 250 geht gegebenfalls diese Strecke lang usw.
Jetzt weiß ich aber nicht genau, wie ich es schreibe das er bei jedem Checkarea diese Toleranz von 250 berücksichtig. Weil bei dem definieren der x/y Werte würde er ja nur 1 Punkt abchecken lassen.
Falls in meiner Theorie etwas falsch ist oder mir sonst irgendwie jemand helfen kann, ich bin für alles offen und hoffe auf Hilfe.
Ich hoffe man hat es so weit verstanden, wenn das nicht der Fall sein sollte einfach schreiben xD.
entferne die koordinaten aus der checkarea funktion, die haben dort nichts zu suchen. du übergibst die parameter doch mit dem funktionsaufruf. dann funktioniert das auch. btw wird dein letztes elseif so nicht funktionieren. außerdem solltest du noch drüber nachdenken was dein bot machen soll falls keine der koordinaten passen...else...
vielleicht solltest du erstmal mit etwas leichterem anfangen, wenn dass hier schon nichts wird dann aeg ich ehrlich gesagt bei der umfangreichen fight funktion schwarz.
Schon mal was von rezonen gehört damit kannste dir den ganzen kram sparen.
Lass den Cahrakter 1mal aus Ratasum aus dem richtigen Portale laufen und lauf wieder rein ... nu musst du nur noch nach jedem run resignen und er steht immer an der gleichen stelle.
K Kknb hat wahrscheinlich recht und ich lass es erstmal mit Nestlinge und bastel ein wenig an meinem Tore von Kryta-Bot weiter. Allerdings wollte ich gerne das von Nestlinge noch geklärt haben da ich da einfach net weiter weiß und mich das gerade tierisch wurmt.
Und ich gerade nicht wirklich weiß warum er mir anzeigt das er bei Func goout anzeigt das der passende EndFunc befehl fehlt. Das mein letztes ElseIf net gehen sollte, da weiß ich auch nicht genau warum. Über eine Erklärung wäre ich sehr dankbar.
Btw. Kknb hast du vllt Ideen wie ich einfacher in Sachen botten in bezug auf Gw anfangen kann =?
Einfacher als das wird wohl schwer werden :P
Wenn loadout und keepmoveto auch definiert sind, dann müsste es so gehen. Wenn du den Code in AutoIT offen hast dann drück mal strg + f5...und sag was für ein error angezeigt wird.
Btw als kleiner Tipp: Da die Spawnpoints variieren würde ich bei wayouts nach den verschiedenen Ifs und Elseifs immer ein Else changedis() oder so etwas machen. Also so:
PHP Code:
Func Goout ()
prepmoveto ()
If Checkarea (14505, 14827) Then ;
MoveTo(...
)
ElseIf Checkarea (17881, 14435) Then
MoveTo(...
)
ElseIf Checkarea (16280, 19519) Then
MoveTo(...
)
ElseIf Checkarea (16375, 19512) Then
MoveTo(...
)
Else changedis()
EndIf
keepmoveto()
loadout()
EndFunc
Changedis ist dann halt die Func zum Dis wechseln.
Deswegen: Send("(c)").
So wie du das gerne möchtest müsste es Send("c") heissen.
Tatsächlich geschrieben wird allerdings (c) und da "(" Shift+8 entspricht wird auch Shift+8 gesendet. Wenn du das mal in GW drückst wirst du sehen, dass Skill 8 aktiviert wird.
achso k danke dir vielmals. wie meinste das mit ungenau und welche möglichkeit gebe es dies genauer zu machen ? würde mich dann auch gleich dies bezüglich belesen.
Edit:
hab jetzt das Script so weot fertig das er erstmal ausm Portal laufen müsste aber er motzt ein bisschen bei prepmoveto und bei der keepmoveto weil ich net genau weiß wie ich keepmoveto definieren soll
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 sleep (2000) GoOut() loadout ()
EndSwitch WEnd
Func GoOut() prepmoveto()
Const $memx = IniRead("update.ini","SECTION D","POSX","Not found") ; position x Const $memy = IniRead("update.ini","SECTION D","POSY","Not found") ; position y