Hi,
ich wollte mal fragen, wie eigentlich der Ablauf eines Bots aufgebaut ist. Normal dachte ich es mir so, Pseudo-Code:
[cs]
//Start bot:
Do
SelectMob()
AttackMob()
Loop
[/cs]
Es wird also in einer endlosen Schleife ein Mob ausgewählt und angegriffen. In der SelectMob-Funktion wird als erstes geprüft, ob man bereits eine MobID als Ziel hat, wenn nicht, dann wird jedes Mob, welches in der MobList vorhanden ist, durchlaufen und die ID des z.B. am wenigsten entfernten Mobs als Ziel gesetzt. Hierbei habe ich eig. auch keine Probleme, eher bei der AttackMob-Funktion: Hier wird ein Packet mit dem Inhalt des Skills und der MobID gesendet. Meine Frage ist, wie oft soll ich dieses Packet senden? Wenn ich es einmal sende (also ohne Loop-Schleife), dann versucht der Char zwar anzugreifen, aber sobald man dabei mal auf den Boden klickt oder sonst irgendwas, wird ja nicht mehr weiter angegriffen und mein Char steht dumm da. Wenn ich es jedoch in einer Loop-Schleife mache, dann wird es quasi 100x in der Sekunde gesendet und irgendwann stürtzt der Client ab..Hab die Loop-Schleife also stehen gelassen und dazwischen wird nun immer eine Pause von 500ms gemacht, ist das geeignet oder ein völlig blöder Aufbau? Noch eine Frage hätte ich zum Auswählen der Skills. Wenn man ja einen Skill ausführt, dann kann man den nicht sofort wieder ausführen (Cooldown). Um zu prüfen ob die Cooldown-Zeit vorbei ist, speichere ich mir also die Zeit, wann der Skill ausgeführt wird, ziehe von der vergangenen Zeit die Cooldown-Zeit ab und wenn das Ergebnis größer als 0 ist, dann kann man den Skill wieder ausführen. Aber wann ist die richtige Zeit, wann der Skill ausgeführt wird? Normal ja eig. wenn ich das Packet sende um das Mob mit dem Skill anzugreifen, aber wenn das Mob nun mal weiterweg ist, muss mein Char erstmal zu ihm hinlaufen und führt erst dann den Skill aus..hoffe ich konnte mein Problem einigermaßen erklären und dass mir jemand dabei helfen könnte!
Silkroad - Ablauf eines simplen Bots
-
- [Sonstige]
- Fisticuff
-
-
-
Zu deiner 1. Frage:
Ein Loop ist nicht nötig. Wie du schon gesagt hast können andere Aktionen das Ausführen des Skills abbrechen. Also überprüfe einfach ob ein Packet das zum Abbruch führen könnte gesendet wurde und wiederhole falls nötig das ausführen des skills.
Zu 2.
Du solltest ein Packet bekommen das die Animation und gleichzeitig den Cooldown startet. -
Danke für die Antwort! Werde es dann also mal ohne die Loop-Schleife versuchen.
Zu 2: Hab bis jetzt nur ein S->C Packet gesehen, welches kommt, wenn ich das Attack-Packet sende, egal ob der Char den Skill schon ausführt oder erstmal zum Mob hinlaufen muss..werde dann also nochmal genauer im Analyzer nachschauen... -