Deutsches Simutransforum
Script-KI - get_halt(our_player).get_tile_list() - Druckversion

+- Deutsches Simutransforum (https://simutrans-forum.de/mybb)
+-- Forum: Simutrans (https://simutrans-forum.de/mybb/forumdisplay.php?fid=3)
+--- Forum: Programmierung und Patches (https://simutrans-forum.de/mybb/forumdisplay.php?fid=38)
+--- Thema: Script-KI - get_halt(our_player).get_tile_list() (/showthread.php?tid=9293)

Seiten: 1 2


Script-KI - get_halt(our_player).get_tile_list() - Andarix - 22-06-2020

Code:
local entries = cnv.get_schedule().entries
  if ( entries.len() >= 2 ) {
    start_l = entries[0].get_halt(our_player).get_tile_list()
    end_l = entries[entries.len()-1].get_halt(our_player).get_tile_list()
  }

Ich frage die Stationsfelder des im Fahrplan stehenden Haltes ab. start_l[0] liefert bei einzelnen Bahnsteigen das Fahrplanfeld.

Nun hab ich das Problem, das bei einer kombinierten Station das Dock-Feld zurückgegeben wird für einen Zug statt dem Fahrplanfeld des Zuges.
Frage ich nur get_halt(our_player) ab, dann habe ich keine Koordinaten ( start_l.x usw. ).

[Bild: script_ki_lineerr.jpg]


RE: Script-KI - get_halt(our_player).get_tile_list() - prissi - 22-06-2020

Das tile(0) ist das Tile, dass am mittigtsten liegt. Das kann alles sein, auch ein Stationsgebaeude. Ausserdem wird obiger Code mit Wegpunkten wohl absemmeln.

Meinem Gefuehl nach sollte sowas wie "entries[0].get_tile()" die bessere Wahl sein, um den Bahnsteig herauszufinden. (Leider kann per Choosesignal immer noch ein anderer werden.)

Was willst du denn genau erreichen?


RE: Script-KI - get_halt(our_player).get_tile_list() - Andarix - 22-06-2020

(22-06-2020, Monday-04:08:27 )prissi schrieb: Das tile(0) ist das Tile, dass am mittigtsten liegt. Das kann alles sein, auch ein Stationsgebaeude. Ausserdem wird obiger Code mit Wegpunkten wohl absemmeln.
...

Nein, Tile[0] ist das Tile was als erstes gebaut wurde von der Station. Zumindest nach dem Bau solange die Karte nicht neu geladen wird. Wie es nach dem Laden aus sieht hab ich noch nicht ermittelt.

EDIT
Selbst wenn es ein mittiges Teil sein soll, dann stimmt das nicht für obige Station. Da ist es das obere Eckfeld.


Bei den Bahnsteigen ist es das was als c_start und c_end als erstes bebaut wird. Bei der kombinierten Station wurde zuerst das Dock gebaut und dann der Bahnsteig dazu. Deshalb liefert es eben das Dock und nicht den Bahnsteig.

Wegpunkte sind vorläufig kein Problem, weil es sich um die Script-KI handelt, die keine Wegpunkte bisher beherrscht.

(22-06-2020, Monday-04:08:27 )prissi schrieb: ....
Was willst du denn genau erreichen?

Zur Ermittlung des Streckenverlaufes brauche ich den Start- und Endpunkt der Linie.

astar.nut ganz unten
Code:
/*
* start = start field line
* end  = end field line
* wt    = waytype
* c      = count of double ways
*
*/
function check_way_line(start, end, wt, l, c) {



RE: Script-KI - get_halt(our_player).get_tile_list() - prissi - 22-06-2020

Für Ausweichen usw. reicht aber ein beliebes Bahnsteigstück. Ansosnten muss man einen Convoi loschicken und sich dessen Route ansehen.


RE: Script-KI - get_halt(our_player).get_tile_list() - Andarix - 22-06-2020

(22-06-2020, Monday-17:24:48 )prissi schrieb: Für Ausweichen usw. reicht aber ein beliebes Bahnsteigstück. Ansosnten muss man einen Convoi loschicken und sich dessen Route ansehen.

Ja schon, und genau das wird ja gemacht aber eben ohne dem Zug Feld für Feld zu folgen.

Bis eben auf diese eine Station funktioniert die aktuelle Umsetzung ganz gut. Auch wenn noch viel Luft für Optimierungen ist. Nur bevor optimiert werden kann müssen alle Varianten sicher funktionieren.

Aktuell werden nämlich nur auf geraden Streckenabschnitten Ausweichstellen gebaut. Was aber bei einer Mindestlänge von 8 Feldern zu zu wenigen Bauplätzen führen kann. Nämlich dann, wenn kurvenreich oder viel diagonaler Streckenanteil vorhanden ist.

Auch die Positionsbestimmung ist noch Verbesserungswürdig.

Ich muss also nur das Feld vom Fahrplanhalt direkt ermitteln ohne die Teileliste des Halt-Objektes. Ich weis halt nur nicht, wie das beim Fahrplanfenster gemacht wird. Auf jeden Fall scheint es keinen Zugriff darauf bisher von der Script-KI aus zu geben.

Und bevor ich stundenlang suche warte ich halt auf Dwachs und teste lieber in der Zwischenzeit.


RE: Script-KI - get_halt(our_player).get_tile_list() - prissi - 23-06-2020

Ein Bahnhof kann nur zwei Enden haben, da Boegen nicht erlaubt. Der Routensucher sucht erst bis zur Fahrplankoordinate und dann weiter bis zum Bahnsteigende in die Richtung, in die nicht gefahren wurde. Ein Funktion, ein Bahnsteigende unabhaengig von einer Routensuche zu ermittlen, gibt es in Simutrans bisher nicht. Fuer Ausweichstellen braucht es das aber auch nicht, ist do wurst wo im Bahnhof der Zug endet.

Ich fuerchte, wir reden gerade aneinander vorbei.


RE: Script-KI - get_halt(our_player).get_tile_list() - Dwachs2 - 23-06-2020

Ich verstehe das Problem auch nicht. Die Koordinaten von Start/Ende kannst du direkt aus dem Fahrplan auslesen:
Code:
local entries = cnv.get_schedule().entries
start = entry[0] // hat x,y,z Datenfelder/Koordinaten
Oder haettest du gerne die Koordinaten vom Bahnsteigende? Die Zuege fahren immer so weit wie moeglich vor. Dann muesste man die Zug-Route noch zur Verfuegung stellen.


RE: Script-KI - get_halt(our_player).get_tile_list() - Andarix - 23-06-2020

(23-06-2020, Tuesday-08:31:00 )Dwachs2 schrieb: ... Die Koordinaten von Start/Ende kannst du direkt aus dem Fahrplan auslesen:
Code:
local entries = cnv.get_schedule().entries
start = entry[0] // hat x,y,z Datenfelder/Koordinaten
....

Das ist das was ich suchte.

Ich habe da immer noch Verständnisprobleme was die Doku angeht.


RE: Script-KI - get_halt(our_player).get_tile_list() - Andarix - 12-09-2020

Fahrplanhalte von Schiffen liegen für gewöhnlich im Wasser.

Wie ermittele ich die zugehörigen Stationsfelder ( meist Dock )?


RE: Script-KI - get_halt(our_player).get_tile_list() - Dwachs2 - 12-09-2020

Kann mit halt_x::get_halt(pos, player) abgefragt werden. Alternativ ueber den Fahrplan: schedule[i].get_halt(player)