Hey Leute, Ich habe gerade eben angefangen einen Bot zu schreiben bzw erstmal geguckt ob die Funktionen funktionieren die ich benötigen werde. Nun ist aber das Problem das die Funktionen MouseClick, Send, ControlClick und ControlSend auf dem offiziellen Servern und Clienten funktionieren jedoch leider nicht auf dem Privaten Server. Gibt es da irgendeine alternative zu den Funktionen ? Packetbot wäre auch eine Möglichkeit aber leider habe ich komplett 0 Ahnung von sowas -__- Habe bis jetzt nur sehr kleine Bots mit den Funktionen geschrieben und Image/Pixelsearch etc. Mag mir da wer helfen?
Doch die haben einen eigenen Client und so... Die haben irgendeinen Schutz dagegen da man für den PServer auch deren Client runterladen muss den kompletten. Wird ein eigenständiger Client benutzt nicht der Offizielle von NosTale mit nur einer anderen IP / Exe.
hat der pserver client n anti cheat? wenn ja. welchen? normalerweise sollte es funktioneren. wüsste ned wie man keysend etc. blocken sollte. weil eig simuliert er ja deine tastatur eingaben.
War mein Fehler er hat kein nur er hat es nicht gemacht weil AutoIT Admin Rechte brauchte Jetzt funktioniert es soweit und ich bin auch schon gut weit, meine Frage lautet nun: Er muss sich für ca 6-8 Minuten auf einer Map aufhalten, die Monster die immer spawnen töten und deren Loot aufsammeln - Wenn er genug Monster getötet hat kommt automatisch nen Belohnungsscreen den ich vor habe mit Image Search zu suchen und dann die Do Until Funktion zu verwenden, nun ist meine Frage ob es eine elegenatere Lösung gibt als ganze zeit Leertaste zu drücken (Ziel suchen + Angreifen) und ganze zeit x zu drücken um die Items aufzuheben. Kann man nicht irgendwie prüfen ob Items auf dem Boden liegen und ob Monster auf der Map sind die er dann angreift wenn er welche findet ? Edit: Meine erste richtige Codefrage nun Code (Text): Local $result = 0 While $result = 0 $ColorEnemy = PixelSearch (873, 58, 1018, 193, 0xCC0000, 0) $ColorItem = PixelSearch (873, 58, 1018, 193, 0x1F3939, 0) $ColorMana = PixelSearch (117, 74, 150,85, 0x090909, 0) $result = _ImageSearch ( $chest, 1, $x, $y, 0 ) If IsArray ($ColorEnemy) Then MouseClick ( "left", $ColorEnemy[0], $ColorEnemy[1], 1 ) Sleep ( 2000 ) Send ( " " ) EndIf If IsArray ($ColorItem) Then MouseClick ( "left", $ColorItem[0], $ColorItem[1], 1 ) Sleep ( 2000 ) Send ( "xxxxx" ) EndIf If IsArray ($ColorMana) Then Send ( "555" ) EndIf WEnd Das ist mein Code nur habe ich nun zwei Probleme: 1. Mein Charakter macht garnichts wenn ich das $result = _ImageSearch ( $chest, 1, $x, $y, 0 ) drinne stehen habe... Nehme ich es raus funktioniert es aber ich wollte damit eigentlich erreichen das er die Schleife solange ausführt BIS er das Bild gefunden hat (den Belohnungsbildschirm). 2. Er macht alle If Abfragen durcheinander... Ich möchte das er zum beispiel solange die Leerzeichen sendet bis er kein $ColorEnemy mehr findet, dann solange $ColorItem bis er keins mehr findet - das $ColorMana muss er aber konstant durchmachen. ODER es soll so sein, das wenn ein Item ganz im Norden liegt und er gerade im Süden ein mob tötet er nicht während er den Mob tötet nach Norden läuft, dann wieder unterbricht den mob angreift etc. Aber ambesten wäre es würde er den Enemy töten und dann direkt seine Items aufheben die er droppt, dann den nächsten Enemy und so weiter. Könnte mir da wer helfen :C?
also in c# hätte ich es wie du mit ner while schleife gelöst. kann das sein das $result = _ImageSearch ( $chest, 1, $x, $y, 0 ) immer true ausgibt? das er sofort die while schleife beendet wenn der code ausgeführt wird?
Kann sein, wie kann ich das prüfen? Aber eigentlich kanns kein true ausgeben, weil er das bild noch nicht mal gefunden haben kann. Edit: Okay habs hinbekommen, mein einzigstes Problem is nun nur noch die 2te Frage: 2. Er macht alle If Abfragen durcheinander... Ich möchte das er zum beispiel solange die Leerzeichen sendet bis er kein $ColorEnemy mehr findet, dann solange $ColorItem bis er keins mehr findet - das $ColorMana muss er aber konstant durchmachen. ODER es soll so sein, das wenn ein Item ganz im Norden liegt und er gerade im Süden ein mob tötet er nicht während er den Mob tötet nach Norden läuft, dann wieder unterbricht den mob angreift etc. Aber ambesten wäre es würde er den Enemy töten und dann direkt seine Items aufheben die er droppt, dann den nächsten Enemy und so weiter.
Edit: Habe das nun auch hinbekommen Meine einzigste Frage bishierhin wäre, code ich es, dass er die Sachen direkt aufhebt die die Monster droppen, also direkt nach einem Kill.
So wie es klingt musst du dann halt nachdem du angegriffen hast erst nach items schauen und nicht die ganze zeit? also in etwa so: Code (Text): if ememyAvailable(){ attack(); while (itemsAvailable()){ pickupItems() } } if( manaEmpty()){ useManaPotion(); } Solange du während des aufsammelns der items kein mana brauchst wär das so ok. Ich würde dir generell auch noch log Ausgaben empfehlen. So kannst du besser nachverfolgen was passiert. Ich habe mir da als Hilfe diese kleine Funktion erstellt Code (Text): Func _log($message) ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & @TAB & $message & @CRLF) EndFunc ;==>_log dann kannst du einfach per _log("Attacking"); rausloggen
Klingt gut, nur wie schlägst du vor soll ich die Funktionen machen ? Es spawnen soviele Monster, das er eigentlich direkt nach dem Tod ein Monster (Er steht sowieso direkt vor den Drops) die aufheben muss, sonst geht ihm zuviel flöten.
So wie du deinen code schon hast quasi, nur die pickup funktion in die angriffs-if reinpacken Code (Text): Local $result = 0 While $result = 0 $result = _ImageSearch ( $chest, 1, $x, $y, 0 ) $ColorEnemy = PixelSearch (873, 58, 1018, 193, 0xCC0000, 0) If IsArray ($ColorEnemy) Then MouseClick ( "left", $ColorEnemy[0], $ColorEnemy[1], 1 ) Sleep ( 2000 ) Send ( " " ) Sleep(1000) // sleep for how long the attack lasts // attack is finished, are there items to pick up? While 1 $ColorItem = PixelSearch (873, 58, 1018, 193, 0x1F3939, 0) If IsArray ($ColorItem) Then MouseClick ( "left", $ColorItem[0], $ColorItem[1], 1 ) Sleep ( 2000 ) Send ( "xxxxx" ) Else ExitLoop // No (more) items to pick up EndIf WEnd EndIf $ColorMana = PixelSearch (117, 74, 150,85, 0x090909, 0) If IsArray ($ColorMana) Then Send ( "555" ) EndIf WEnd und die teile am besten in funktionen auslagern und log ausgaben dazu
Sieht gut aus nur funktionierts leider nicht Liegt daran, dass es seeeeehr viele Mobs sind so ca 300-400 ^^ Eigentlich müsste ich was intelligentes haben was die Gegner drumherum alle scannt, dann den am nähsten angreift, sobald er tot ist gucken ob er was gedropped hat und dann aufhaben bzw nächsten Gegner, aber das ist mir zu kompliziert ist mein erster Bot
solltest wohl eher was mit memory bot oder packet bot machen. glaube für sowas wird der pixelbot schon überfordert. (also so wie es sich anhört passiert da viel ingame )
Jap er ist überfordert XD Es funktioniert halbwegs aber er hängt sich so oft auf das er es nicht schafft das Script sozusagen zweimal auszuführen, versuche es immer wieder zu beheben aber es ist immer wieder was neues... Kannst du mir ein Tutorial oder so zu MemoryBots empfehlen? Denke aber mal das es zu schwer ist für mich und ich jemanden beauftragen werde mir das zu schreiben ^^. Ist glaube ich doch eine Nummer zu schwer für mich gewesen.
Dann ging es davor aber auch nicht besser? Wenn du ein Mob angreifst, musst du ab dort wohl schauen ob er noch lebt (hp anzeige). Und solange angreifen bis tot ist und dann items aufheben und dann erst nach einem nächsten mob suchen
Naja aber ich hab jetzt auch noch andere Problem wie wenn der einmal angegriffen wird beim suchen ist der komplette Bot rip oder das er ausversehen mal an eine falsche Position läuft oder während des Gegner suchn ausversehen aufs Portal klickt anstatt auf dem Gegner und und und.... Ist nicht sehr gut dafür geeignet wenn ich ihn nachts laufen lassen möchte