Frage zur Umsetzung in Java

th3flood

Mitglied
Hallo Allerseits 🙂

Erst einmal ein paar Informationen zum Problem:

Ich schreibe im Moment einen Bot für ein Spiel. Ich erwarte später von diesem Bot, dass er einer mir mir festgelegten Route folgt und versucht, alle Rohstoffkisten auf dem Weg einzusammeln.
Grundsätzlich soll die Routine dann so aussehen (erstmal nur Pseudocode):

Code:
Wenn eingeloggt und wenn nicht getötet:
	Route berechnen
		Für jeden Wegpunkt auf Route:
			Bewege zu nächstem Wegpunkt
			
			Wenn neue Rohstoffkisten in Reichweite:
			Bis keine neuen Rohstoffkisten mehr vorhanden:
				Bewege zu nächster Rohstoffkiste
				Nehme Rohstoffkiste auf
					Wenn Erfolg:
						Gib aus, was und wieviel gesammelt wurde
						kisten_gesammelt ++
					Wenn kein Erfolg:
						Gib aus, dass Kiste nicht gesammelt werden konnte

Viele Informationen, wie Koordinaten oder ID dieser Kisten werden mir vom Gameserver gesendet, sobald ich meine Spielfigur in die Sichtweite der Rohstoffkisten bewege. Er verhält sich auch bei Angriffen so: Wenn ich angegriffen werde, meldet der Gameserver es. Befehle, wie Bewegungen oder Angriffe sende ich über einen Socket an den Server.

Nun zum eigentlichen Problem:

Im Moment würde ich es mithilfe von XSocket realisieren. Damit würde ich dann mit der Funktion readStringByDelimiter() in einem eigenen Handler die jeweiligen Befehle des Servers lesen und parallel dazu die oben gezeigte Schleife laufen lassen. Dabei ist es für mich gerade nur problematisch, dass meine Spielfigur während der Bewegung zu Koordinate X oder während des Aufnahme der Kiste beispielsweise angegriffen werden könnte, auf dem Weg zur Koordinate X bereits neue Kisten auftauchen, die auch aufgesammelt werden können oder die Routine wegen etwas anderem unterbrochen und möglicherweise dort wieder fortgeführt werden muss.

Hätte jemand ein paar Ansätze dazu? Ich wäre dankbar.

Mit freundlichen Grüßen,
th3flood
 
wenn ich es richtig verstehe hast du sorgen, dass dein bot eine kiste aufsammelt, wenn du angegriffen wirs und dabei draufgehst?

setze dir einen status: wirdAngegeriffen

und jedesmal wenn eine kiste in reichweite kommt fragst du, bevor du deine schleife durchlaufen lässt, ab, ob du angegriffen wirst.
wenn ja, mach mob platt, wenn nein sammel kiste

btw: welches game ist betroffen?
 
Hallo nochmal,

also das Problem (vielleicht ist es auch nur ein Denkfehler von mir ???:L) ist diese Stelle im Ablauf meines Pseudocodes:

Bewege zu nächstem Wegpunkt // 1.

Wenn neue Rohstoffkisten in Reichweite: // 2.
Bis keine neuen Rohstoffkisten mehr vorhanden: // 3.

1. Hier würde das Programm dann quasi den "MoveTo"-Befehl an den Server senden
und "zeitgleich" läuft ja der Handler im Hintergrund, der auf die "NeueKisteInSichtweite"-Pakete reagiert und diese dann in eine Liste/Array/Stack/etc. schreibt

2./3. Hier würde nun am Anfang überprüft werden, ob überhaupt was gefunden wurde und wenn ja, würde er in die Schleife an den Punkt "Bis keine neuen..." springen und diese doch nur für die aktuell in der Liste enthaltenen Kisten durchlaufen. Falls nun aber neue Kisten (wie ich dieses Wort mittlerweile hasse, weil ich es andauernd schreiben muss ;P) sichtbar werden, dann würden diese doch nicht mit in die Abbruchbedingung der Schleife kommen und einfach ignoriert werden, da sich der Bot dann schon zum nächsten Wegpunkt bewegt oder?
 
starte doch 2 threads,
der eine prüft kisten und der andere macht das andere zeugs.
der prüf-thread schreibt dir kisten in deine arraylist und der andere thread prüft die ganze zeit ob kisten vorhanden sind, wenn ja macht er seine aufgabe, wenn nein soll wieder geprüft werden.
 

Zurück
Oben