(21-06-2021, Monday-02:54:27 )prissi schrieb: Ohne jetzt genau den Code zu kennen: Kann man das nicht mit einem zweiten Zaehler auch bein Linien machen? Wenn dann der x. Monatesreste fuer diesen Link ist, dann wird der Zaehler bei allen Linien um eins reduziert. Nur Linien mit Zaehler Null wuerden dann updateberechtigt sein.
Die Linien sind die Linienobjekte von Simutrans selber. Da kann ich schwerlich das Objekt einfach so erweitern.
Der Script-Code stammt von Dwachs. So richtig hab ich den auch noch nicht verstanden.
Es scheint aber so zu sein, das es ein Link-Objekt im Script gibt, das als Schlüssel die beiden Industrien beinhaltet die verbunden werden. Und in diesem Link-Objekt gibt es einen Eintrag Lines, der wiederum alle Linien als Array beinhaltet, die irgendwie diese beiden Industrien verbinden. Das können Direktverbindungen sein aber auch kombinierte Strecken.
Auf jeden Fall sind die Linien die Linen-Objekte von Simutrans selber. In wie weit man da was für die Script-KI ändern kann/will liegt nicht bei mir.
Das Management wäre jedenfalls etwas leichter, wenn die Anzahl der Ausweichstellen und ein Zeitstempel direkt bei den Linien abgespeichert werden könnten.
Aktuell sieht die Klassendefinition für link bei mir so aus.
Code:
/**
* A link is a connection between two factories.
* Save its state here.
*/
class industry_link_t
{
f_src = null // factory_x
f_dest = null // factory_x
freight = null // good_desc_x
state = 0
lines = null // array<line_x>
double_ways_count = 0 // count of double way build
double_ways_build = 0 // double way build: 0 = no ; 1 = yes
optimize_way_line = 0 // is way line optimize: 0 = no ; 1 = yes
destroy_line_month = null // test month save
line_way_speed = 0 // save way speed for line
build_line = 0 // create line
next_vehicle_check = 0 // save ticks for next vehicle check
// next check needed if ticks > next_check
// state == st_missing: check availability again
// state == st_build: check for possible upgrades
next_check = 0 // only set for st_missing, next time availability has to be checked
static st_free = 0 /// not registered
static st_planned = 1 /// link is planned
static st_failed = 2 /// construction failed, do not try again
static st_built = 3 /// connection successfully built
static st_missing = 4 /// missing infrastructure, try again later
constructor(s,d,f)
{
f_src = s
f_dest = d
freight = good_desc_x(f)
lines = []
}
function append_line(l)
{
lines.append(l)
}
function remove_line(l)
{
lines.remove(l)
}
function _save()
{
return ::saveinstance("industry_link_t", this)
}
}
Im Prinzip muss ich parallel zu lines[] ein Array speichern mit meinen eigenen Werten als Objekt für die Linie. Dadurch bin ich unabhängig vom Programmcode selber.
line_x
Was auf jeden Fall helfen würde wäre, wenn man beim Spieler-Objekt einen Eintrag abfragen kann der den Spielertyp (Mensch, C-KI, Script-KI) zurückgibt.
Das würde es erleichtern Strecken umzubauen.
Für den Streckenumbau/-abriss wäre es auch nützlich die Fahrzeugzahl abzufragen, die ein Streckenstück benutzt haben.
Dafür sind aber Code-Änderungen an Simutrans selber nötig.