[FlashGame] Pokemon Planet - Charakter in einem bestimmten bereich laufen lassen

    [FlashGame] Pokemon Planet - Charakter in einem bestimmten bereich laufen lassen

    Guten Tag,
    ich habe mir einen kleinen Bot geschrieben für das Online Spiel -> Pokemon-Planet geschrieben, dieser macht auch das was er soll.
    Jetzt ist es natürlich nicht gerade "Anti Ban" effektiv wenn der Charakter Stunden lang immer die gleichen Positionswechsel (Links nach Rechts und von Rechts nach Links) durchführt.
    Ich möchte versuchen das der Bot in einem bestimmten Bereich auf der Karte sich bewegen kann wie er möchte. Aber er darf nicht aus diesem Bereich austreten.
    Ich bin jetzt schon sehr lange am überlegen, aber mir fällt kein Weg ein, wie ich dem Bot begreifbar machen kann, nur in diesem Bereich darfst du laufen. Eine Festgelegte Reihe von Tasten drücken fällt weg, da sobald mein Bot ein Pokemon gefunden hat in die nächste Funktion springt und wenn das Script am Ende angekommen ist wieder mit der ersten Taste anfängt, das heißt er würde nach ein paar mal laufen aus dem Feld wo die Pokemon kommen können austreten. Außer es wäre möglich dem Bot zu sagen das er mit dem Tasten drücken so weiter machen soll wie er aufgehört hat.

    Meine Akutelle Funktion:
    Spoiler anzeigen

    AutoIt Quelltext

    1. Func _KampfSuchen()
    2. ToolTip("Pokemon suchen.",100,100)
    3. do
    4. $KampfPhase = _ImageSearch(@ScriptDir & "\data\gefunden.bmp",1,$x1,$y1,0)
    5. Send("{a down}")
    6. Sleep(500)
    7. Send("{a up}")
    8. $KampfPhase = _ImageSearch(@ScriptDir & "\data\gefunden.bmp",1,$x1,$y1,0)
    9. Send("{d down}")
    10. Sleep(500)
    11. Send("{d up}")
    12. $KampfPhase = _ImageSearch(@ScriptDir & "\data\gefunden.bmp",1,$x1,$y1,0)
    13. until $KampfPhase = 1
    14. ToolTip("Pokemon gefunden.",100,100)
    15. Sleep(1000)
    16. EndFunc


    Zwischen drin sucht er nach dem Bild das kommt wenn man ein Pokemon gefunden hat.
    Danach geht er in die nächste Funktion

    So hier erstmal ein Bild von dem Bereich das er in Zukunft (hoffentlich) absuchen soll/darf.


    Meine Probleme
    1. Wie kann ich den Gras Bereich festlegen.
    2. Wie kann ich es so schreiben, das die Spielfigur sich nur im Gras bewegen darf.
    3. Wie kann ich eine Sicherung einbauen wenn die Spielfigur aus dem Gras bereich gelaufen ist, das der Spieler automatisch wieder zurück in den Bereich läuft.

    Ich hoffe ihr versteht was ich damit meine

    Hier noch ein Bild wo ich ein Raster eingezeichnet habe wo der Spieler sich entlang bewegt wenn man in das Gras läuft, man kann nicht schräg oder so laufen, es ist alles in Raster geteilt



    Hat jemand eine Idee, oder wie ich es anderst Lösen könnte?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blanke“ ()

    zuersteinmal, ich finde das du dein Problem gut aufbereitet hast, deswegen helfe ich auch gerne.

    zuersteinmal zu dem bewegen im festen Muster:
    das ist möglich, einfach vor jeder bewegung abfragen ob du ein Pokemon gefunden hast, hier einmal ein Pseuocode:

    AutoIt Quelltext

    1. While true ;Endlosschleife
    2. Send{up}
    3. if _Gefunden() then _MacheWasDuMachenSollst()
    4. Send{Down}
    5. if _Gefunden() then _MacheWasDuMachenSollst()
    6. .... und alle andren bewegungen
    7. wend


    aber nun zu deinen fragen ;)
    1) a)Du kannst den Bildschirmnach einer bestimmten Farbe absuchen, das dunkelgrün von dem bereich ist glaube ich einzigartig, so hast du die Position von den Büschen.
    b) Du kannst, wenn die sichtarea gleich bleibt einfach den bereich in Pixeln festlegen und dann immer schauen ob dein Spieler (Pixelfinden den nur der spieler hat) sich darin befindet.
    c) mischung aus beidem, du suchst anch büschen defenierst das ganze sichtfesnter als Array und dann findest du die Position deines Spielers und kannst ihn selber routen durch den array festlegen. (irgendwie viel zu kompliziert und unsinnig)
    zusammengefasst: entweder Pixel suchen oder du hast einen festen Sichtbereich.

    2) sihe b)
    Du kannst ein festes Muster wie vorher beschrieben nutzen oder immer eine abfrage ob da wo du hin gehen willst gras ist, indem du den bereich vor dir abfragst ob das ein gevbüsch ist(pixel oder bild)

    3) siehe b)
    siehe 2)
    Guten Tag,
    danke für deine Antwort. Ich habe jetzt lange rum überlegt und habe jetzt einfach für jeden Zustand im Gras ein Bild gemacht. Und ihm gesagt wenn dieses Bild kommt mache diese Bewegung. Das Funktioniert auch, leider läuft er mir zu langsam. Man er läuft meinen Weg richtig ab nur nicht in der Geschwindigkeit die ich gerne hätte. Leider werde ich diese auch nicht erhöhen können, denke ich mal. Da der Bot immer nach den Bildern sucht und er auch warten muss bis der Charakter sich nach vorne Bewegt bis das neue Feld kommt. Aber hier mal meine Lösung. Vielleicht hast du ja eine Idee dazu um die Abfragen effizienter zu gestalten. Aber mein Charakter bewegt sich. Zwar langsam und da ich von jeden möglichen Zustand eine Information hinterlegt habe welche Taste er drücken darf, funktioniert er auch weiterhin wenn ein Pokemon gefunden worden ist und der Kampf vorbei ist. Lg

    Spoiler anzeigen

    AutoIt Quelltext

    1. ​Func _KampfSuchenNeu()
    2. $KampfPhase = 0
    3. Do
    4. if _ImageSearch(@ScriptDir & "\data\test\1.bmp",1,$x1,$y1,5) = 1 Then
    5. Send("{w down}")
    6. Sleep(150)
    7. Send("{w up}")
    8. ElseIf _ImageSearch(@ScriptDir & "\data\test\2.bmp",1,$x1,$y1,5) = 1 Then
    9. Send("{w down}")
    10. Sleep(150)
    11. Send("{w up}")
    12. ElseIf _ImageSearch(@ScriptDir & "\data\test\3.bmp",1,$x1,$y1,5) = 1 Then
    13. Send("{d down}")
    14. Sleep(150)
    15. Send("{d up}")
    16. ElseIf _ImageSearch(@ScriptDir & "\data\test\4.bmp",1,$x1,$y1,5) = 1 Then
    17. Send("{d down}")
    18. Sleep(150)
    19. Send("{d up}")
    20. ElseIf _ImageSearch(@ScriptDir & "\data\test\5.bmp",1,$x1,$y1,5) = 1 Then
    21. Send("{d down}")
    22. Sleep(150)
    23. Send("{d up}")
    24. ElseIf _ImageSearch(@ScriptDir & "\data\test\6.bmp",1,$x1,$y1,55) = 1 Then
    25. Send("{s down}")
    26. Sleep(150)
    27. Send("{s up}")
    28. ElseIf _ImageSearch(@ScriptDir & "\data\test\7.bmp",1,$x1,$y1,5) = 1 Then
    29. Send("{d down}")
    30. Sleep(150)
    31. Send("{d up}")
    32. ElseIf _ImageSearch(@ScriptDir & "\data\test\8.bmp",1,$x1,$y1,5) = 1 Then
    33. Send("{d down}")
    34. Sleep(150)
    35. Send("{d up}")
    36. ElseIf _ImageSearch(@ScriptDir & "\data\test\9.bmp",1,$x1,$y1,5) = 1 Then
    37. Send("{d down}")
    38. Sleep(150)
    39. Send("{d up}")
    40. ElseIf _ImageSearch(@ScriptDir & "\data\test\10.bmp",1,$x1,$y1,5) = 1 Then
    41. Send("{d down}")
    42. Sleep(150)
    43. Send("{d up}")
    44. ElseIf _ImageSearch(@ScriptDir & "\data\test\11.bmp",1,$x1,$y1,5) = 1 Then
    45. Send("{s down}")
    46. Sleep(150)
    47. Send("{s up}")
    48. ElseIf _ImageSearch(@ScriptDir & "\data\test\12.bmp",1,$x1,$y1,5) = 1 Then
    49. Send("{a down}")
    50. Sleep(150)
    51. Send("{a up}")
    52. ElseIf _ImageSearch(@ScriptDir & "\data\test\13.bmp",1,$x1,$y1,5) = 1 Then
    53. Send("{a down}")
    54. Sleep(150)
    55. Send("{a up}")
    56. ElseIf _ImageSearch(@ScriptDir & "\data\test\14.bmp",1,$x1,$y1,5) = 1 Then
    57. Send("{a down}")
    58. Sleep(150)
    59. Send("{a up}")
    60. ElseIf _ImageSearch(@ScriptDir & "\data\test\15.bmp",1,$x1,$y1,5) = 1 Then
    61. Send("{a down}")
    62. Sleep(150)
    63. Send("{a up}")
    64. ElseIf _ImageSearch(@ScriptDir & "\data\test\16.bmp",1,$x1,$y1,5) = 1 Then
    65. Send("{a down}")
    66. Sleep(150)
    67. Send("{a up}")
    68. ElseIf _ImageSearch(@ScriptDir & "\data\test\17.bmp",1,$x1,$y1,5) = 1 Then
    69. Send("{a down}")
    70. Sleep(150)
    71. Send("{a up}")
    72. ElseIf _ImageSearch(@ScriptDir & "\data\test\18.bmp",1,$x1,$y1,5) = 1 Then
    73. Send("{a down}")
    74. Sleep(150)
    75. Send("{a up}")
    76. ElseIf _ImageSearch(@ScriptDir & "\data\test\19.bmp",1,$x1,$y1,5) = 1 Then
    77. Send("{w down}")
    78. Sleep(150)
    79. Send("{w up}")
    80. ElseIf _ImageSearch(@ScriptDir & "\data\test\20.bmp",1,$x1,$y1,5) = 1 Then
    81. Send("{w down}")
    82. Sleep(150)
    83. Send("{w up}")
    84. ElseIf _ImageSearch(@ScriptDir & "\data\test\21.bmp",1,$x1,$y1,5) = 1 Then
    85. Send("{d down}")
    86. Sleep(150)
    87. Send("{d up}")
    88. ElseIf _ImageSearch(@ScriptDir & "\data\test\22.bmp",1,$x1,$y1,5) = 1 Then
    89. Send("{w down}")
    90. Sleep(150)
    91. Send("{w up}")
    92. ElseIf _ImageSearch(@ScriptDir & "\data\test\23.bmp",1,$x1,$y1,55) = 1 Then
    93. Send("{d down}")
    94. Sleep(150)
    95. Send("{d up}")
    96. ElseIf _ImageSearch(@ScriptDir & "\data\test\24.bmp",1,$x1,$y1,55) = 1 Then
    97. Send("{d down}")
    98. Sleep(150)
    99. Send("{d up}")
    100. ElseIf _ImageSearch(@ScriptDir & "\data\test\25.bmp",1,$x1,$y1,55) = 1 Then
    101. Send("{d down}")
    102. Sleep(150)
    103. Send("{d up}")
    104. ElseIf _ImageSearch(@ScriptDir & "\data\test\26.bmp",1,$x1,$y1,55) = 1 Then
    105. Send("{s down}")
    106. Sleep(150)
    107. Send("{s up}")
    108. ElseIf _ImageSearch(@ScriptDir & "\data\test\27.bmp",1,$x1,$y1,5) = 1 Then
    109. Send("{s down}")
    110. Sleep(150)
    111. Send("{s up}")
    112. ElseIf _ImageSearch(@ScriptDir & "\data\test\28.bmp",1,$x1,$y1,5) = 1 Then
    113. Send("{d down}")
    114. Sleep(150)
    115. Send("{d up}")
    116. ElseIf _ImageSearch(@ScriptDir & "\data\gefunden.bmp",1,$x1,$y1,0) = 1 Then
    117. $KampfPhase = 1
    118. EndIf
    119. until $KampfPhase = 1
    120. ToolTip("Pokemon gefunden.",100,100)
    121. Sleep(1000)
    122. EndFunc​
    @Blanke wie genau sehen denn die 29 Unterschiedlichen Bilder aus ?

    Wenn die größe des Feldes immer gleich ist und auch der "Eintritt" könnte man sich die Position speichern

    AutoIt Quelltext

    1. $POS[4] = [0,0, 8, 4] //Eintritt X,Y | Max X,Y
    2. Do
    3. Switch Random(0, 3, 1)
    4. Case 0
    5. if($POS[0] > 0)
    6. ;Hochlaufen
    7. $POS[0] +=1
    8. EndSwitch
    9. //Bildsuche nach dem Kampf
    10. Until ..
    @Ingolf2142 Es wird ne zahl von 0-3 ausgewürfelt, je nach Gewürfelte Zahl wird eine Bewegung ausgeführt & um sicherzugehen das man nicht übers Feld hinausläuft wird dann nochmal überprüft ob man noch drinne ist.. Man könnte das auch an Anfang machen denn Random befehl sich so umschreiben das er zu jeder Position passt, aber warum Kompliziert wernns auch einfach geht ? Haste halt ne kleine Change das er sich nicht Bewegt. Dürfte Aber Deutlich schneller sein, als seine Version auch wenn er sich mal nicht Bewegt