Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Skripts fuer KI Spieler
#21
In der Spielerliste Skript-KI deaktivieren und aktivieren laedt das Skript neu. Kein Programmneustart erforderlich.
Zitieren
#22
(04-04-2020, Saturday-21:41:38 )Dwachs2 schrieb: veh.is_retired(world.get_time()) sollte zurueckgeben, ob das Ding veraltet ist.

das vereinfacht die Sache ungemein

hab weiter oben den Post noch etwas ergänzt
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#23
max_length ist die Laenge des Halts, max_vehicles ist die Anzahl der Einzelfahrzeuge pro Konvoi. Vielleicht geht das durcheinander? Letzteres muss <= get_max_rail_convoi_length sein, sonst haengt das Konvoi zusammenstellen.
Zitieren
#24
(05-04-2020, Sunday-11:24:02 )Dwachs2 schrieb: max_length ist die Laenge des Halts, max_vehicles ist die Anzahl der Einzelfahrzeuge pro Konvoi. Vielleicht geht das durcheinander? Letzteres muss <= get_max_rail_convoi_length sein, sonst haengt das Konvoi zusammenstellen.

mmh

industry_connection_planner.nut definiert
Code:
        prototyper.max_vehicles = get_max_convoi_length(wt)
        prototyper.max_length = 1
        if (wt == wt_water) {
            prototyper.max_length = 4
        }

prototyper.nut definiert
Code:
            // check constraints
            // .. length
            local l = (ind > 1 ?  cnv[ind-1].length : 0) + max( CARUNITS_PER_TILE/2, test.get_length());
            if (l > CARUNITS_PER_TILE*max_length) {
                continue;
            }
            // .. more ??

            // check if convoy finished

Ich verstehe die Zeile

local l = (ind > 1 ? cnv[ind-1].length : 0) + max( CARUNITS_PER_TILE/2, test.get_length());

nicht so richtig
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#25
Ich glaube der Stationsplaner/-bauer kann nur Stationen mit einem Feld bauen.

industry_connection_planner.nut
Code:
if (wt != wt_water) {
local station_list = building_desc_x.get_available_stations(building_desc_x.station, wt, good_desc_x(freight))
if ( wt == wt_rail ) {
       planned_station = select_station(station_list, 8, planned_convoy.capacity)
     }
     else {
       planned_station = select_station(station_list, planned_convoy.length, planned_convoy.capacity)
 }
   
   }
else {
local station_list = building_desc_x.get_available_stations(building_desc_x.harbour, wt, good_desc_x(freight))
planned_station = select_station(station_list, 1, planned_convoy.capacity)
}

Ich hab für wt_rail folgende Zeile eingefügt

Code:
       planned_station = select_station(station_list, 8, planned_convoy.capacity)

Egal was da bei 8 steht, es wird immer nur 1 Feld gebaut. Egal ob da 1, 2, 8, 16 oder 32 steht.

Irritierend ist hier, das planned_convoy.length die Summe der Fahrzeuglängen ist. Aber bei Häfen hier eine 1 steht.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#26
musste auch erstmal nachschauen, warum das so implementiert ist.

Dort wird geschaut, ob der Convoi hoechstens max_length Felder lang ist. Die verrueckte Rechnung mit dem max liegt daran, dass das die korrekte Laengenberechnung fuer den letzten Wagen ist, siehe convoi_t::get_tile_length(). Liegt am Simutrans-Code und der Tatsache, dass Zuege, die in NO/NW Richtung in einen Bahnhof fahren, aus historischen Gruenden nicht ganz vorfahren, sondern nur halb. Dann haengt
Zitieren
#27
Der Planer plant nur. Wenn Laenge >1 ist, sollte er eine durchfahrbare Station zurueckliefern. Das Bauen uebernimmt der _connector.
Zitieren
#28
(05-04-2020, Sunday-15:57:42 )Dwachs2 schrieb: Der Planer plant nur. Wenn Laenge >1 ist, sollte er eine durchfahrbare Station zurueckliefern. Das Bauen uebernimmt der _connector.

Da steht nicht viel drin. Es wird nur an den Simutranscode übergeben.

Code:
            case 2: // build station
                {
                    local err = command_x.build_station(pl, c_start, planned_station )
                    if (err) {
                        print("Failed to build station at " + coord_to_string(c_start))
                        gui.add_message_at(pl, "Failed to build rail station at  " + coord_to_string(c_start) + "\n" + err, c_start)
                        return error_handler()
                    }
                    local err = command_x.build_station(pl, c_end, planned_station )
                    if (err) {
                        gui.add_message_at(pl, "Failed to build rail station at  " + coord_to_string(c_end) + "\n" + err, c_end)
                        print("Failed to build station at " + coord_to_string(c_end))
                        return error_handler()
                    }
                    if (finalize) {
                        // store place of unload station for future use
                        local fs = ::station_manager.access_freight_station(fdest)
                        if (fs.rail_unload == null) {
                            fs.rail_unload = c_end

                            print( recursive_save({unload = c_end}, "\t\t\t", []) )
                        }
                    }
                    phase ++
                }

Allerdings stammt das unverändert aus der road_connector.nut.

Entweder geht schon die Platzsuche daneben oder der Bauer baut nicht richtig.
Muss mal raus finden ob die Platzsuche vor dem Planer kommt oder danach.

Der Wegbauer baut nämlich nur ein Feld ( zumindest teilweise ). Und auf dieses Start-/Zielfeld wird dann die Station gebaut. Das würde bedeuten das da schon die Berücksichtigung von längeren Stationen fehlt. Selbst wenn der Stationsbauer längere Stationen bauen möchte, hat der da nicht ausreichend Felder zur Verfügung.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#29
ja, das muesste alles noch implementiert werden: suche fuer Platz, die passende Routensuche, das Bauen etc
Zitieren
#30
(05-04-2020, Sunday-18:39:35 )Dwachs2 schrieb: ja, das muesste alles noch implementiert werden: suche fuer Platz, die passende Routensuche, das Bauen etc

mmh, prinzipiell gibt es das schon bei den alten KIs, die bauen ja auch längere Bahnstationen

Keine Ahnung ob man das mitbenutzen kann.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren


Gehe zu:


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