04-04-2020, Saturday-21:52:16
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
04-04-2020, Saturday-22:14:27
(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
05-04-2020, Sunday-11:24:02
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.
05-04-2020, Sunday-14:13:55
(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
05-04-2020, Sunday-15:39:56
Ich glaube der Stationsplaner/-bauer kann nur Stationen mit einem Feld bauen.
industry_connection_planner.nut
Ich hab für wt_rail folgende Zeile eingefügt
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.
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.
05-04-2020, Sunday-15:51:03
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
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
05-04-2020, Sunday-15:57:42
Der Planer plant nur. Wenn Laenge >1 ist, sollte er eine durchfahrbare Station zurueckliefern. Das Bauen uebernimmt der _connector.
05-04-2020, Sunday-17:47:16
(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.
05-04-2020, Sunday-18:39:35
ja, das muesste alles noch implementiert werden: suche fuer Platz, die passende Routensuche, das Bauen etc
05-04-2020, Sunday-18:50:38
(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.