Deutsches Simutransforum

Normale Version: Skripts fuer KI Spieler
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
Bekomme diese Meldung beim Laden eines Spielstandes.

Ich kann das aber nicht richtig zuordnen.

[edit]

Betrifft scheinbar nur neu gespeicherte Spielstände. Verwende aktuell r9183 Windows GDI von hier.

Liegt an der GDI-Version von mir. Die Windows-Datei von prissi zeigt dieses Verhalten nicht.
Hab Probleme den Eigentümer eines Weges abzufragen.

Bei beiden Varianten kommt der Fehler das es get_player nicht gibt im Index.

Code:
local test_way = tiles_r.find_object(mo_way)
test_way.get_player()

Code:
local test_way = tiles_r.find_object(mo_way).get_desc()
test_way.get_player()
Hat der WEg vielleicht keinen Eigentumer (weil Stadtstrasse)?
(23-08-2020, Sunday-17:53:36 )prissi schrieb: [ -> ]Hat der WEg vielleicht keinen Eigentumer (weil Stadtstrasse)?

Stadtstraße gehört doch der öffentlichen Hand und das ist Spieler Nr. 1.
Und genau darum geht es, keine öffentlichen Wege abzureißen.

Ich hab der Zeit keine Feldausgabe bei dem Fehler.
Stadtstrassen gehören niemanden, auch nicht Spieler 1. Der player-Zeiger ist NULL. Der Fenstertitel ist orange (kein Besitzer), aber öffentliche Hand wäre grau (Spieler 1). Alles, was niemanden gehört is orange (z.B. Bäume) während Fabriken grau sind (Spieler 1).
Fragt sich wie ich das jetzt abfangen kann.

Erklärt warum der Fehler so selten auftritt.
seltsam, irgendwas geht schief ( eventuell ist das Script zu schnell )

Weil die Station konnte nicht auf das Feld erweitert werden, weil vermutlich die Streckenführung darüber verlief.

[Bild: attachment.php?aid=17488]

Funktion dazu, die rote Zeile ist die in der Fehlermeldung angegebene ( Einrückungen hat das Forum gefressen )

Zitat:function remove_tile_to_empty(tiles, wt) {
local tool = command_x(tool_remover)
for ( local i = tiles.len(); i > 0; i-- ) {
gui.add_message_at(our_player, "remove tile " + coord3d_to_string(tiles[i-1]), tiles[i-1])
local tile_remove = 1

local tiles_r = square_x(tiles[i-1].x, tiles[i-1].y).get_ground_tile()
local test_way = tiles_r.find_object(mo_way) //.get_desc()
local tile_coord = coord3d_to_string(tiles_r)
if ( test_way != null ) {
if ( test_way.get_player() != our_player ) {
tile_remove = 0
}
}

if ( tile_remove == 1 ) {
while(true){
tool.work(our_player, tiles_r)
if (tiles_r.is_empty())
break
}
}
}

In die rote Zeile dürfte er gar nicht rein laufen, weil vorher abgefragt wird ob da ein Weg drauf ist. ( blaue Zeilen )
Bei diesem Fehler wünsche ich mir ein Auto-Pause bei Scriptfehlern.

Denn so schnell kann man nicht Pause drücken beim Auftreten des Fehlers. In der Zwischenzeit verändern sich die Werte bzw. die Karte.
Ich w@rde sagen da ist dann ein oeffentlicher Weg (get_player()==-1), also eine Stadtstrasse.
Wenn Du den Screen meinst, das fehlerhafte Feld ist das in Verlängerung des Bahnsteiges.

Dort war ( resultierend aus den Meldungen im Meldungsfenster ) vorher die Eisenbahn-Strecke.

Der Ablauf ist folgender.

1. Strecke wird gebaut
1a. geht da was schief, wird die Strecke umgehend wieder abgerissen

2. der Startbahnhof ( Ladebahnhof ) wird gebaut
2a. geht das schief, dann wird der Startbahnhof abgerissen
2b. die Strecke wird abgerissen

3. der Zielbahnhof ( Entladebahnhof ) wird gebaut
3a. geht das schief, wird der Zielbahnhof abgerissen
3b. die Strecke wird abgerissen
3c. der Startbahnhof wird abgerissen

Nun passiert es, das sich die Aktionen Streckenabriss und Stationsabriss überschneiden.

Beim obigen Bild konnte die Station nicht auf 4 Felder erweitert werden, weil zwischen Straße und Bahnsteig die Eisenbahnstrecke verlief. Deshalb konnte das Feld nicht auf die Höhe der Station abgesenkt werden.

In dem Bild steht in der Fehlermeldung die Feldkoordinate 185,414,0. Und das ist einfaches Land wie die Feld-Info am oberen Rand zeigt.

Das bedeutet, das zwischen Prüfung auf Weg und Prüfung auf Spieler das Feld abgerissen wurde.

Zitat:... dann ein oeffentlicher Weg (get_player()==-1) ...
Nur ist get_player() nicht vorhanden. Also wie soll es ausgewertet werden, wenn es gar nicht vorhanden ist?
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