Deutsches Simutransforum

Normale Version: Skripts fuer KI Spieler
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
Im Aufruf zu search_route muessen Start und Ende Arrays sein, das sind sie hier nicht. Danach werden sie in construct_rail auf die konkret gebauten Felder gesetzt. (Nicht sehr elegant.)

Die Zeilennummern hier passen nicht zu dem Code auf github.

Hast du die Fehlermeldung zu get_way_dirs gepostet?
(02-09-2020, Wednesday-10:49:23 )Dwachs2 schrieb: [ -> ]Im Aufruf zu search_route  muessen Start und Ende Arrays sein, das sind sie hier nicht. Danach werden sie in construct_rail auf die konkret gebauten Felder gesetzt. (Nicht sehr elegant.)
....


Bin mir nicht bewussst da was geändert zu haben. Zumindest nicht in den letzten Tagen.
Und die ganze Zeit hat es auch funktioniert.

Zitat:....
Die Zeilennummern hier passen nicht zu dem Code auf github.

Hast du die Fehlermeldung zu get_way_dirs gepostet?

nein

die beiden geänderten Dateien angehängt
Zeile 78 in rail_connector sollte statt
Code:
local err = construct_rail(pl, c_start[0], c_end[0], planned_way )
so aussehen:
Code:
local err = construct_rail(pl, c_start, c_end, planned_way )
(dann wird von allen Startfeldern zu allen Zielfeldern gesucht) oder wenn nur von c_start[0] nach c_en[0] gesucht werden soll dann
Code:
local err = construct_rail(pl, [ c_start[0] ], [ c_end[0] ], planned_way )
Ja schon, da hatte ich aber am Anfang schon mal Probleme, falls Du Dich errinnerst.

Es gab da einen Unterschied, ob es eine Normale Station ist oder eine kombinierte Station.

Bei normalen Stationen war es ein einfaches Array ( x, y, z ) und bei kombinierten war es ein geschachteltes Array ( [0] - x, y, z ; [1] - x, y, z ).
(02-09-2020, Wednesday-13:27:21 )Dwachs2 schrieb: [ -> ]...
so aussehen:
Code:
local err = construct_rail(pl, c_start, c_end, planned_way )
(dann wird von allen Startfeldern zu allen Zielfeldern gesucht) ...

funktioniert auch nicht

Was ich nicht verstehe ist, das es die ganze Zeit funktioniert hat und jetzt plötzlich nicht mehr.
Kannst du mal deinen ganzen Code auf github schieben? Dann koennte ich mir das anschauen.
(03-09-2020, Thursday-09:24:24 )Dwachs2 schrieb: [ -> ]Kannst du mal deinen ganzen Code auf github schieben? Dann koennte ich mir das anschauen.

Bis auf die 2 Dateien oben ist der aktuell. Hab es hochgeladen.

Und die Platzsuche für die Stationen hab ich nicht angefasst soweit ich mich errinnere. Das sollte unveränderter Code von Dir sein.

siehe https://www.simutrans-forum.de/mybb/show...#pid117601 und folgende
Die Ursache könnte sein, das phase ++ nicht ausgeführt wird.

Es wird scheinbar ein 2. mal bei case 1: angefangen. Oder ich hab mir irgendwo einen doppelten Aufruf eingebaut.
Hab dir mal 2 fixes ins github gepusht.

Das Problem mit get_way_dirs ist, dass check_station nur true/false zurueckgibt, aber die Abfragen in rail_connector Zeilen 151ff so tun, als waere s_src ein Array mit Weg-Objekten. Am besten waere doch den Rueckgabe-Wert von check_station anzupassen: null statt false und ein Array mit Wegen statt true.
Dachte eigentlich das ich da ein Array zurückgebe. Sonst würde ja der Stationsabriss nicht funktionieren.
Statt true sollte das Stations-Array zurückgegeben werden.

Aber ich hab inzwischen auch etwas den Überblick verloren.

check_station gibt true zurück, wenn es mit build = 0 aufgerufen wird. Was aber aktuell nicht passiert, da es in der Funktion selber auf 1 gesetzt wird und in rail_connector nicht angegeben ist. Das war ein Vorgriff für eine Prüfung bei der Planung.

Code:
function check_station(pl, starts_field, st_lenght, wt, select_station, build = 1) {

Code:
// check place and build station to c_start
local s_src = check_station(pl, c_start, count, wt_rail, planned_station)

Ansonsten gibt check_station  das Ergebnis von expand_station zurück. Und das ist entweder false oder das Array fields.

Allerdings wird ggf c_start und c_end bereits in check_station neu gesetzt. Nämlich dann, wenn die Station quer ( mit anderer Ausrichtung ) gebaut wurde.

Code:
// build station
if ( b_tile.len() == st_lenght && build == 1) {
   st_build = expand_station(pl, b_tile, wt, select_station, starts_field)
   if ( starts_field.x != b_tile[0].x || starts_field.y != b_tile[0].y ) {
     err = command_x.build_way(pl, starts_field, b_tile[0], planned_way, true)
     // station move then set c_start/c_end new
     if ( starts_field.x == c_start.x && starts_field.y == c_start.y ) {
       c_start = tile_x(b_tile[0].x, b_tile[0].y, b_tile[0].z)
     }
     if ( starts_field.x == c_end.x && starts_field.y == c_end.y ) {
       c_end = tile_x(b_tile[0].x, b_tile[0].y, b_tile[0].z)
     }
   }
  } else if ( b_tile.len() == st_lenght && build == 0 ) {
    st_build = true
  } else {
    b_tile.clear()
  }
}

Aktuell wohl nicht sehr elegant gelöst, hat sich aber so ergeben.

Funktioniert nur teilweise Dein Patch. Fehler _nexti kommt nicht mehr. way_get_dirs kommt noch.

Und die Änderung in astar.nut ist in einer unbenutzten Funktion.

function set_marker(pos) war als Reservierung gedacht. Nur Marker lassen sich überbauen auch von fremden Spielern.

Aber ich hab einen Verdacht, das expand_station ein leeres Array zurück gibt statt false.
Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38