Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Skripts fuer KI Spieler
Hab ich so drin.

Bisher hat er noch nicht gemeckert.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
Code:
list = way_desc_x.get_available_ways(wt, st_flat)

Das gibt die Liste der verfügbaren Wege zurück.

[Bild: attachment.php?aid=17599]

Die Liste ist aber unsortiert. Lässt die sich auch nach Geschwindigkeit sortiert abrufen?


Angehängte Dateien Thumbnail(s)
   
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
Die nachträgliche Routensuche hat definitiv ein Problem, wenn Kreuzungen oder Straßenbahnen ins Spiel kommen.

Also dann, wenn 2 Wege auf einem Feld sind.

[Bild: attachment.php?aid=17600]

Spielstand von hier im späteren Verlauf

EDIT

Oder auch nicht. Hab bei der einen Eisenbahnstrecke den Bahnübergang durch eine Brücke ersetzt und es geht trotzdem nicht.

Bin im Moment ratlos was schief geht.


Angehängte Dateien Thumbnail(s)
   
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
Liste sortieren: nein, geht nicht.

Routensuche: Wo ist der Aufruf fuer die gescheiterte Routensuche in deinem Code?
Zitieren
industry_manager.nut ab Zeile 323
Code:
        // find route
        local nexttile = []
        if (cnv.get_waytype() != wt_water && cnv.get_waytype() != wt_air) {
            local entries = cnv.get_schedule().entries
            local start = null
            local end = null
            if ( entries.len() >= 2 ) {
                start = tile_x(entries[0].x, entries[0].y, entries[0].z)
                end = tile_x(entries[entries.len()-1].x, entries[entries.len()-1].y, entries[entries.len()-1].z)
            }



            local asf = astar_route_finder(cnv.get_waytype())
            local result = asf.search_route([start], [end])
            // result is contains routes-array or error message
            // route is backward from end to start

            if ("err" in result) {
                gui.add_message_at(our_player, " ### no route found: " + result.err, start)
                gui.add_message_at(our_player, " ### line: " + line.get_name(), world.get_time())
                gui.add_message_at(our_player, " ### start: " + coord_to_string(start) + " ### end: " + coord_to_string(end), start)
                return nexttile
            }
            else {
                //gui.add_message_at(our_player, " ### route found: length =  " +  result.routes.len(), start)
                // route found, mark tiles
                foreach(node in result.routes) {
                    local tile = tile_x(node.x, node.y, node.z)
                    nexttile.append(tile)
                }
                sleep()
            }
        }

1906_768x640-testnew6.sve ~ 2 MByte (bis 26.04.2021)

Simutrans r9641
pak64.german 0.122.0.0.3
sqai_rail Git Code
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
sind denn start und end tatsaechlich vernuenftige Koordinaten zu Feldern mit entsprechenden Wegen?
Zitieren
(25-02-2021, Thursday-15:37:23 )Dwachs2 schrieb: sind denn start und end tatsaechlich vernuenftige Koordinaten zu Feldern mit entsprechenden Wegen?

Im aktuellen Code gebe ich die Start- und Zielkoordinaten mit aus.

Diese existieren und es sind auch die von der Strecke. Die Suche hat auch vorher schon funktioniert. Nur jetzt funktioniert sie halt nicht mehr.

Andere Routen funktionieren nach wie vor.

Auffällig war eben nur, das bei den gescheiterten Routen Bahnübergänge vorhanden waren.
Bei einer sind auf der Straße Straßenbahnschienen. Und dann sind wiederum Brücken vorhanden.

Und der Code ist schon länger unverändert vorhanden.

Keine Ahnung ob es mit Ausführung/Einführung von Objekten zu tun hat. Mein Verdacht fällt auf die Änderungen bei den Kreuzungen. Aber da selbst das ersetzen eines Bahnüberganges durch eine Brücke nicht geholfen hat kann es das scheinbar nicht sein.

Erklärt auch nicht, warum einzelne Strecken scheitern und andere nicht.

Die Geschwindigkeit les ich schon mal falsch aus bei Kreuzungen.

Im Bild die 40 sind von der Straße und nicht von der Schiene. Feld 64,575

[edit] scheinbar ist das nicht die Geschwindigkeit von der Kreuzung sondern vom Zug[/edit]

[Bild: attachment.php?aid=17601]

Und das hier sind 2 Linien die die gleichen Fabriken verbinden. Die eine wird ausgebaut, heist die Routensuche war erfolgreich. Die andere schlägt fehl.

[Bild: attachment.php?aid=17602]


Nachtrag

Diese Eisenbahnstrecke hat keine Kreuzungen. Das Wegtile liefert aber 45 statt 90 Geschwindigkeit.

[Bild: attachment.php?aid=17603]

code dazu

Zitat:local way_speed = 500
local upgrade_tiles = 0
for ( local i = 0; i < nexttile.len(); i++ ) {
local tile_way = tile_x(nexttile[i].x, nexttile[i].y, nexttile[i].z).find_object(mo_way)
if ( (tile_way.get_owner().nr == our_player_nr || tile_way.get_owner().nr == 1) ) {
upgrade_tiles++
if ( tile_way.get_desc().get_topspeed() < way_speed ) {
way_speed = tile_way.get_desc().get_topspeed()
}
}

}
link.line_way_speed = way_speed
gui.add_message_at(our_player, way_speed + " way speed line " + line.get_name(), world.get_time())
gui.add_message_at(our_player, upgrade_tiles + " possible tiles for upgrading ", world.get_time())
//gui.add_message_at(our_player, " cnv max speed " + cnv_max_speed, world.get_time())

Irgendwie mache ich was falsch oder was geht schief.


Angehängte Dateien Thumbnail(s)
           
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
Also die 45 km/h bei der Zuglinie kommen von drei der sechs Brückenrampen.

[Bild: attachment.php?aid=17604]

Das ist die Hälfte der 90 km/h des Gleises was unter dem Brückenteil mal gebaut wurde.


Angehängte Dateien Thumbnail(s)
   
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
(26-02-2021, Friday-01:01:41 )Andarix schrieb: ...
Das ist die Hälfte der 90 km/h des Gleises was unter dem Brückenteil mal gebaut wurde.

Analog dürfte das dann für Kreuzungen gelten. Da wird dann der Weg abgefragt, der als erstes da war. Weswegen dann bei einem 90 km/h Gleis 40 km/h ermittelt werden.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
Da fehlt auf alle Faelle eine Funktion, die max-speed vom Weg direkt abfragt. Der Umweg ueber das desc bringt falsche Zahlen fuer Kreuzungen und Bruecken.

Das hat aber mit der Wegsuche nichts zu tun. Da muss ich mal sehen, wann ich das anschauen kann. Je kleiner ein Savegame ist, wo das auftritt, um so besser.

Edit: kannst du mal probieren, ob das eine Route gefunden wird, wenn in astar.nut, Zeile 252
Code:
local weight = cost
statt 'local weight = cost+dist' steht? Und was passiert, wenn du im Constructor oben drueber (Zeile ~225) die Zeile
Code:
cost_curve = cost_straight
einfuegst?
Zitieren


Gehe zu:


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