Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Script-KI - Stationsbau
#1
Was muss ich angeben, um auf einem Brücken-Startfeld eine Station zu bauen?

Code:
command_x.build_station(pl, fields[x], planned_station)

Das funktioniert nämlich nicht auf dem Startfeld. Auf dem Brückenfeld selber funktioniert es hingegen.

[Bild: attachment.php?aid=17422]

86,50 ist das Landfeld
85,50 ist der Brückenstart ( das auf dem Slopehang )
84,50 ist das Brückenfeld


Angehängte Dateien Thumbnail(s)
   
Script-KI für Simutrans r9112+
Zitieren
#2
build_station sollte eigentlich umstandslos funktionieren? Das macht denselben Aufruf wie ein Mausklick mit dem richtigen Werkzeug an der entsprechenden Stelle.

Fuer solche Brueckenfelder gibt get_slope den Slope des Gelaendes zurueck (nicht flach), obwohl der Weg auf der Bruecke flach ist. Vielleicht fangen deine Abfragen in check_station das mit ab, und erlauben das bauen nicht?
Zitieren
#3
(28-04-2020, Tuesday-15:07:27 )Dwachs2 schrieb: build_station sollte eigentlich umstandslos funktionieren? Das macht denselben Aufruf wie ein Mausklick mit dem richtigen Werkzeug an der entsprechenden Stelle.

Fuer solche Brueckenfelder gibt get_slope den Slope des Gelaendes zurueck (nicht flach), obwohl der Weg auf der Bruecke flach ist. Vielleicht fangen deine Abfragen in check_station das mit ab, und erlauben das bauen nicht?

Das Feld würde nicht im Array sein, wenn die Feldprüfung vorher fehl schlägt.

Beim Stationsbau selber erfolgt keine weiter Prüfung außer ob das Feld leer ist und einen Weg braucht. Da dürfte nicht rein gelaufen werden, es sei denn das Feld meldet leer statt Brücken-Start. vollständiger Code auf Github

Kann sein das ich err falsch auswerte. Da ich mal auf Fehler und dann wieder auf keinen Fehler prüfe verwechsel ich das öfters.

Allerdings steht die Ausgabe direkt beim Bauaufruf drin. Und die Station war auf dem Feld auch nicht vorhanden. Die Felder davor und danach allerdings schon.

Deshalb ist der Code der Zeit auch so umständlich ausführlich. Je kompakter um so schlechter blicke ich da durch. Hobbyist eben ohne jegliche Ausbildung in dieser Richtung. Deshalb komm ich auch mit der objektiven Programmierung nicht so richtig klar.



Code:
/**
* expand station
* pl = player
* fields = array fields
* wt = waytype
*/
function expand_station(pl, fields, wt) {

  local err = null
  local t = fields.len()
 

  // build way to tiles
  if ( t > 0 ) {
    for ( local x = 1; x < t; x++ ) {
      local f = tile_x(fields[x].x, fields[x].y, fields[x].z)
      if ( f.is_empty() ) {
        err = command_x.build_way(pl, fields[0], f, planned_way, true)
      }
      if ( err ) {
        return false
      }
    }
    if ( err == null ) {
      // build station to tile
      for ( local x = 0; x < t; x++ ) {
        err = command_x.build_station(pl, fields[x], planned_station)
        if ( err ) {
          gui.add_message_at(pl, " ---=> not build station tile at " + coord3d_to_string(fields[x]), world.get_time())
        } else {
          gui.add_message_at(pl, " ---=> build station tile at " + coord3d_to_string(fields[x]), world.get_time())
        }
      }
    }     
    if ( err ) {
      return false
    }
   
    return true
  }
}

Kann es sein, das es an der z-Koordinate liegt?

Ich versuche ja oben drauf zu bauen, aber bei den Brücken-Start-Feldern muss man unten auf den Grund bauen.
Script-KI für Simutrans r9112+
Zitieren
#4
Genau, dort oben ist nichts. Beim Brückenanfang muss es auf den Kartenboden.
Zitieren
#5
Ja, das mit Koordinate z abfragen hab ich auch noch nicht hin bekommen.
Script-KI für Simutrans r9112+
Zitieren
#6
(02-05-2020, Saturday-16:45:33 )Andarix schrieb:
(02-05-2020, Saturday-16:12:28 )Dwachs2 schrieb: Ja, da kamen tausend Fehlermeldungen im Chat, das Leerzeichen sollte nichts machen, das st ist null.

Das meiste sind Statusmeldungen was er beim Stationsbau macht.

Vermutlich frage ich aber die Station falsch ab. Ist seit dem Einbau nicht bei mir vorgekommen, das er eine Station so verlegt hat das das greift. Das kommt dann zum Zuge, wenn die Station um 90° gedreht an das Feld c_start angebaut wird und c_start dann kein Stationsfeld mehr ist sondern eine 90°-Kurve/oder Diagonale.

Code:
...
// check connect factory
local st = halt_x.get_halt(starts_field, pl)
local fl_st = st.get_factory_list()
...

Der Fehler ist, das die Station nicht existiert, also nicht gebaut wurde.

In diesem Fall sollte das dann gar nicht ausgeführt werden.

Und es besteht ein weiteres Problem an dieser Stelle. Wenn es sich um eine Kombi-Station ( Dock/Bahnsteig ) handelt geht die Abfrage auch ins leere. Wobei sich in diesem Fall ein Station-Merge machen lässt, sofern das per Script unterstützt wird.
Script-KI für Simutrans r9112+
Zitieren
#7
Hab noch einen Fehler drin.

Kommen Slopes zum Einsatz wird anschließend kein Gleis drauf gebaut.

Auch die Reihenfolge muss ich ändern. Aktuell wird Feld für Feld bearbeitet bei Slope. Das führt dazu, das Kapital verloren geht, wenn die Baurichtung nicht Ausreicht für die ganze Station.

EDIT

Manchmal ist man einfach blind.

Zum einen die Weg gar nicht bis zum Endpunkt gebaut.
Zum anderen die Station geprüft bevor die überhaupt gebaut wurde.

Bleibt das Problem bei Bahnsteig mit Dock. Und eben der Bau einer Erweiterung bei Industrien die nicht mehr im Einzugsgebiet liegen.

EDIT 2

Wird eine längere Geschichte.
Script-KI für Simutrans r9112+
Zitieren
#8
scheint erst mal wieder zu funktionieren der Stationsbau

Allerdings fehlt die Prüfung der Verbindung Fabrik/Dock noch.
Script-KI für Simutrans r9112+
Zitieren
#9
Wie viele Stationen passen an eine Industrie?

Wäre das Bahndepot nicht an dieser Stelle, dann wäre dort Wabern Neben H als Bahnsteig. So hat der Platz nicht gereicht, weil über das Depot eine Brücke gebaut wurde. Ein Grund warum ich die Depots weiter weg von den Stationen haben möchte.

Alles von den Script-KIs gebaut. Ich hab nur die Eisenbahn wieder abgerissen.

[Bild: attachment.php?aid=17425]


Angehängte Dateien Thumbnail(s)
   
Script-KI für Simutrans r9112+
Zitieren
#10
Wenn die KI jetzt noch in den Untergrund geht... also da ist noch Luft.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste