Deutsches Simutransforum
Script-KI - Hafen auf flachem Ufer - Druckversion

+- Deutsches Simutransforum (https://simutrans-forum.de/mybb)
+-- Forum: Simutrans (https://simutrans-forum.de/mybb/forumdisplay.php?fid=3)
+--- Forum: Bugs und Probleme (https://simutrans-forum.de/mybb/forumdisplay.php?fid=11)
+--- Thema: Script-KI - Hafen auf flachem Ufer (/showthread.php?tid=9253)

Seiten: 1 2


Script-KI - Hafen auf flachem Ufer - Andarix - 20-04-2020

ship_connector.nut
Code:
   if (tile.get_slope()) {
     local slope = dir.to_slope(coord_to_dir(dif))
     // terraform ??
     if (tile.get_slope() != slope  &&  tile.get_slope() != 2*slope) {
       err = command_x.set_slope(our_player, tile, slope )
       if (err) {
         return err;
       }
     }
     err = command_x.build_station(our_player, tile, planned_station)
     if (err) gui.add_message_at(our_player, "Failed to harbour at " + coord_to_string(tile) +"\n" + err, tile)

     local size = planned_station.get_size(0)
     len = size.x*size.y
   }
   else {
     err = command_x.build_station(our_player, tile, planned_harbour_flat)
     if (err) gui.add_message_at(our_player, "Failed to flat harbour at " + coord_to_string(tile) +"\n" + err, tile)

     local size = planned_harbour_flat.get_size(0)
     len = size.x*size.y
   }

Da im ersten if keine Auswertung der Slopezahl stattfindet, wird nie der else-Zweig für flache Häfen aufgerufen.

Die folgende Änderung sollte das Problem beheben.

Code:
--- "a/ai/sqai/ship_connector.nut"
+++ "b/ai/sqai/ship_connector.nut"
@@ -269,7 +269,7 @@ class ship_connector_t extends manager_t
   local dif = { x=tile.x-water.x, y=tile.y-water.y}
   print("Place harbour at " + coord3d_to_string(tile) + " to access " + coord3d_to_string(water) )

-   if (tile.get_slope()) {
+   if (tile.get_slope() > 0) {

     local slope = dir.to_slope(coord_to_dir(dif))
     // terraform ??

Wobei ein Test auf flache Häfen noch angebracht ist, um doch ins if zu gehen und dort dann eine Aufschüttung zu machen und einen normalen Hafen bauen.
Wobei der Code zum Aufschütten nicht zu funktionieren scheint.


RE: Script-KI - Hafen auf flachem Ufer - Leartin - 20-04-2020

Flach wäre Null. Null ist False. Warum also sollte bei "If (False)" nicht das Else aufgerufen werden?


RE: Script-KI - Hafen auf flachem Ufer - Andarix - 20-04-2020

(20-04-2020, Monday-09:54:20 )Leartin schrieb: Flach wäre Null. Null ist False. Warum also sollte bei "If (False)" nicht das Else aufgerufen werden?

flach = 0

0 ist aber nicht unbedingt null

Aber da Du es ja scheinbar so genau weist, kannst Du bestimmt auch sagen warum an flachen Ufern keine Häfen gebaut werden.


RE: Script-KI - Hafen auf flachem Ufer - Leartin - 20-04-2020

Zitat:Squirrel has a boolean type(bool) however like C++ it considers null, 0(integer) and 0.0(float) as false, any other value is considered true.

Aber vielleicht gilt das ja nicht. Steht schließlich nicht im Wiki Angel


RE: Script-KI - Hafen auf flachem Ufer - Andarix - 20-04-2020

(20-04-2020, Monday-11:39:35 )Leartin schrieb:
Zitat:Squirrel has a boolean type(bool) however like C++ it considers null, 0(integer) and 0.0(float) as false, any other value is considered true.

Aber vielleicht gilt das ja nicht. Steht schließlich nicht im Wiki  Angel

im deutschem nicht

Aber Entschuldigung das ich versucht habe zu helfen.


RE: Script-KI - Hafen auf flachem Ufer - Leartin - 20-04-2020

Dafür brauchst dich doch nicht entschuldigen, ist doch super. Und jetzt, wo du weißt, dass es eigentlich nicht daran liegen kann, findest vielleicht das tatsächliche Problem. Win-Win?


RE: Script-KI - Hafen auf flachem Ufer - Dwachs2 - 20-04-2020

Danke, muss ich mir anschauen. In welchem pakset gibts solche Haefen die auf eine flache Kachel gebaut werden koennen?


RE: Script-KI - Hafen auf flachem Ufer - Andarix - 20-04-2020

(20-04-2020, Monday-12:58:17 )Dwachs2 schrieb: Danke, muss ich mir anschauen. In welchem pakset gibts solche Haefen die auf eine flache Kachel gebaut werden koennen?

pak64.german ab Version 0.120.4.1.1, glaube pak128 auch

Wenn beide Industrien am Wasser liegen dann werden Docks gebaut.
Wenn es keine Docks im Set gibt, dann wird nichts gebaut, weil die Verzweigung das nicht berücksichtigt. Flaches Feld geht es in die Docks und da wird dann nichts gefunden.

Wenn es in die Kombination geht, dann geht es auch nicht. Da fehlt der Code dazu noch komplett.

Das testen dauert halt immer eine ganze Weile, weil erst mal eine passende Karte generieren. Und dann warten bis die KI sich die Verbindung raus sucht.
Treten Fehler auf oder ändert man was, wieder Karte neu laden und warten.


RE: Script-KI - Hafen auf flachem Ufer - Andarix - 22-04-2020

Die Slope-Prüfung in combined_connections Funktion process_node verhindert Häfen auf flachen Ufern. Beides auskommentiert und es geht.

Zitat:else if (from_water) {
  // water -> land
  if (!from.is_water()  ||  !to.is_empty()  ||  dir.to_slope(d) != to.get_slope()
    ||  !finder.check_harbour_place(from, planned_harbour_len, dir.backward(d)))

Zitat:else {
// land -> water
  if (!to.is_water()  ||  !from.is_empty()  ||  dir.to_slope(dir.backward(d)) != from.get_slope()
    ||  (cnode.flag & 0x60)
    ||  !finder.check_harbour_place(to, planned_harbour_len, d))

Da Eckfelder keine klare Richtung für den automatischen Bau haben muss das Dock mit einer Orientierung gebaut werden.


RE: Script-KI - Hafen auf flachem Ufer - Andarix - 22-04-2020

Kann es sein, das es keine Error-Rückgabe gibt, wenn ein Dock auf einem Eckfeld nicht gebaut werden kann?