Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Skripts fuer KI Spieler
#51
(16-04-2020, Thursday-16:24:10 )Dwachs2 schrieb: Ja, das fehlt alles noch. Wenn Hangfelder da sind, und hinter dem Hang ein flaches Feld, dann wird auch gebaut (es sei denn, der Bau ist schon einmal frueher gescheitert, dann wird es erstmal nicht versucht)

mmh, also Stationen mit type=dock werden gefunden

Nur der Bau-Check funktioniert nicht wie es scheint.

ship_connector.nut
Code:
static function find_anchorage(factory, planned_station, planned_harbour_flat, c_harbour_tiles)
.....

local size = planned_harbour_flat.get_size(0)
ok = finder.check_harbour_place(tile, size.x*size.y, dir.backward(d))

......

Allerdings ist es schwierig die richtige Ausgabe zu erwischen.
Muss wohl sämtliche Wasserflächen entfernen bis auf die wo die Bohrinseln drauf sind.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#52
Es gibt ja coord3d_to_string um das Array der Koordinaten in einen String zu konvertieren.

Gibt es auch den umgekehrten Weg?

Bzw liefert object.get_pos() die Position als String. Gibt es auch die die Rückgabe als Array?

Geht darum, die Position der Depots aus der Depotliste zu verarbeiten.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#53
Die Koordinaten koennen mit object.x, object.y, object.z direkt abgefragt werden. get_pos() solte eine Tabelle mit x,y,z Eintraegen liefern.
Zitieren
#54
Danke

Ich blicke bei den Objekten und deren Schlüssel noch nicht so durch.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#55
Wie ersetzt man in c_depot die Koordinaten?

Alles was ich bisher versucht habe mit meinem begrenztem Wissen führt zu Fehlern.

search_field definiert in welchem Umkreis um die Start- und Endstation Depots ermittelt werden.
Code:
case 5: // build depot
        {

          if ( print_message_box == 3 ) {
            gui.add_message_at(our_player, "exists depots road", world.get_time())
          }
          local list_exists_depot = depot_x.get_depot_list(our_player, wt_road)
          local seach_field = 5
          local tile_min = [c_start.x - seach_field, c_start.y - seach_field, c_end.x - seach_field, c_end.y - seach_field]
          local tile_max = [c_start.x + seach_field, c_start.y + seach_field, c_end.x + seach_field, c_end.y + seach_field]
          local depot_found = false
          foreach(key in list_exists_depot) {

            if ( print_message_box == 3 ) {
              gui.add_message_at(our_player," ... depot pos: " + key.get_pos(), world.get_time())      
              gui.add_message_at(our_player," ... c_start pos: " + coord_to_string(c_start) + " : c_end pos: " + coord_to_string(c_end), world.get_time())      
            }

            if ( key.x >= tile_min[0] && key.y >= tile_min[1] && key.x <= tile_max[0] && key.y <= tile_max[1] ) {
              //c_depot.x = key.x
              //c_depot.y = key.y
              //c_depot.z = key.z
              if ( print_message_box == 3 ) {
                gui.add_message_at(our_player," ---> depot found c_start: " + key.get_pos(), world.get_time())      
              }
              break
            } else if ( key.x >= tile_min[2] && key.y >= tile_min[3] && key.x <= tile_max[2] && key.y <= tile_max[3] ) {
              //c_depot.x = key.x
              //c_depot.y = key.y
              //c_depot.z = key.z
              if ( print_message_box == 3 ) {
                gui.add_message_at(our_player," ---> depot found c_end: " + key.get_pos(), world.get_time())      
              }
              break
            } else {
              if ( print_message_box == 3 ) {
                gui.add_message_at(our_player," *** depot not found *** ", world.get_time())      
              }
            }
        
          }
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#56
hab es doch noch gefunden

Code:
c_depot = tile_x(key.x, key.y, key.z)

https://github.com/Andarix/simutrans-sce...er/ai/sqai

Straßendepots im Umkreis von 5 Feldern der Start- und Zielstation werden jetzt gefunden und benutzt.

Allerdings ist der Wegbauer noch nicht angepasst. Das heist, der Straßenstummel wird noch gebaut und zum gefundenen Depot wird noch keine Wegprüfung durchgeführt.

Ich widme mich erst mal den Eisenbahnstationen.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#57
Mehrteilige Eisenbahnstationen werden jetzt gebaut, sofern in gerader Verlängerung Schienen vorhanden sind.

Es fehlen noch diverse Feldprüfungen. Aktuell wird nur auf Schiene getestet.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#58
Wie kann ich die Ausrichtung eines Stationsfeldes abfragen?
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#59
Am besten wahrscheinlich mit way_x::get_dir fuer das darunterliegende Gleis
Zitieren
#60
mmh

Ich benutze im Moment

Code:
local t = tile_x(starts_field.x, starts_field.y, starts_field.z)
local d = t.get_way_dirs(wt_rail)

Also ich frage das Feld ab, wo vorher das Stationsfeld gebaut wurde.

Nur bekomme ich als Rückgabe 2, 4 oder 8.

erste Strecke
erster Aufruf Startstation ( Stationsteil ew ) = 2
zweiter Aufruf Zielstation ( Stationsteil ew ) = 8

zweite Strecke
erster Aufruf Startstation ( Stationsteil ew ) = 2
zweiter Aufruf Zielstation ( Stationsteil ns ) = 4

danach
Code:
if ( d == 2 || d == 4 ) {
 d1 = dir.eastwest
 d2 = dir.northsouth
}

liefert
d1 in beiden Fällen 10
d2 in beiden Fällen 5

Ich aktualisiere mal das Repo, dann hasste den Code komplett. Ist alles noch etwas konfus, weil mehr rumprobiert als echt programmiert.
Müsstest da auch Schreibzugriff haben, wenn ich das richtig eingestellt hab. Tuhe mich da etwas schwer, weil alles nur in Englisch.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren


Gehe zu:


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