Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Script-KI - Linienmanagement
#11
Geht bei mir. Hast du ne Fehlermeldung?
Zitieren
#12
Nein keine Fehlermeldung.

Bei unverändertem Code wird das Fahrzeug nur nicht entfernt, was vorher funktionierte.

Dadurch kann nun die Linie nicht gelöscht werden, weil jetzt wirklich das Fahrzeug noch vorhanden ist.

Mal schauen ob es heute geht. Hatte ich ja schon öfters, das was nicht ging und dann doch noch funktionierte.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#13
https://simutrans-germany.com/files/uplo...load-3.sve ( 7 Tage Link )

Also Fahrzeugverkauf funktioniert bei mir nicht mit r9238. Sollte nach dem Laden der Karte die Linien 4, 5 und 6 von Spieler Dunkelblau ( 2 ) betreffen.

Plan war/ist, mit der Funktion destroy_line(line_obj) unvollständige Linien/Links zu löschen.

Für die Wegsuche ( road, rail ) ist der Start-/Endpunkt der Verbindung nötig.

Die Stationen müssen vor dem Entfernen auf andere Verbindungen geprüft werden. Alternativ im Nachgang über die Stationsliste löschen, wenn keine Linien/Fahrzeuge mehr mit der Station verknüpft sind.

In wie weit Strecken abgerissen werden ist noch die Frage. Bei Schienen eher sinnvoll und bei Straßen weniger. Ist halt auch eine Kapitalfrage.

Code ist auf Git aber ist fehlerhaft.

Die Funktion destroy_line(line_obj) ist noch wenig optimiert und bisher mehr auf Informationsbeschaffung angelegt. Die vielen Variablen haben den Grund, in der Fehlermeldung dann die Belegung zu sehen.

Aufgerufen wird sie in Zeile 201 bzw 211 von check_link_line() ( industry_manager.nut ) mit Spielerbezug.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#14
Nachdem cnv.destroy() muss sleep() aufgerufen werden: destroy markiert den Convoy zum loeschen, das wird aber erst gemacht, wenn das Skript unterbrochen wird und die Simulation weitergeht (aehnlich, wenn man im pause-Modus ein Fahrzeug verkauft: das wird erst verkauft, wenn Pause aufgehoben ist). Ohne sleep laeuft das Skript durch, der Convoy ist aber noch nicht geloescht -> Fehler.

Das war mir auch nicht klar Smile Habe einen Fix auf github gepusht.
Zitieren
#15
Scheinbar werden Linien nicht aus der internen Linienliste komplett gelöscht. Oder die Liste wird nicht direkt aktualisiert.

Selbst ein sleep() direkt nach dem löschen hilft nicht.

Code:
line_obj.destroy(our_player)
sleep()

Ich bekomme nach dem löschen von Linien ungültige Linien, deren interne ID ich aber nicht abfragen kann.

Nur wenn ich einen Scriptfehler provoziere bekomme ich die ID geliefert.

Ich hab eine Funktion hinzugefügt. Ist nur die Frage wie ich den Übergabewert ( key ) ermittele und die Funktion dann aufrufe.

Code:
    function remove_line(l)
    {
        lines.remove(l)
    }

Code auf Git hochgeladen.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#16
Hab eine Lösung gefunden ungültige Linien aus dem Array zu löschen.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#17
Wodurch kann es passieren, das eine Linie im Linienarray fehlt?
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#18
Im Array vom industry_manager? Sollte eigentlich nicht passieren. Vielleicht, wenn nach dem Erstellen der Linie in *-connector noch irgendwas schief laeuft und dort appen_line nicht aufgerufen wird. Ich muesste das live sehen.
Zitieren
#19
Es handelte sich um eine Eisenbahnlinie wo die Anschlußlinie Schiff nicht erstellt wurde. Dock konnte nicht gebaut werden, weil das Feld vom Bahnsteig belegt war.

Mir ist es dadurch aufgefallen, weil die Linie eigentlich abgerissen werden müsste, aber die Linienprüfung die nie Aufgerufen hat.

Ein generelles Problem ist, das die langen Docks genutzt werden im pak64 auf zu kleinen Wasserflächen.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren
#20
(20-09-2020, Sunday-21:32:34 )Andarix schrieb: Wodurch kann es passieren, das eine Linie im Linienarray fehlt?

(21-09-2020, Monday-08:51:55 )Dwachs2 schrieb: Im Array vom industry_manager? Sollte eigentlich nicht passieren. Vielleicht, wenn nach dem Erstellen der Linie in *-connector noch irgendwas schief laeuft und dort appen_line nicht aufgerufen wird. Ich muesste das live sehen.

Passiert dann, wenn man als Spieler eingreift.

Jetzt ist die Frage, was in den Key für die link_liste eingeht um fehlende Linien nachzutragen.

Im konkreten Fall geht es darum, das eine ungünstige Straßenlinie auf kombinierte Straße-/Schiffslinie umgebaut wurde. Die Schiffslinie fehlt jetzt in der link_liste.

In diesem Zusammenhang ist auch die Frage, ob der Spielertyp ermittelbar ist. Also ob es ein Script-KI-Spieler ist oder ein Mensch.
Script-KI für Simutrans r10894+ / Simutrans Nightly Builds
Zitieren


Gehe zu:


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