Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
performance is_scenario_completed
#1
Ausgangssituation: NYC - Scenario

Im script frage ich ab,
Code:
... && last_month != world.get_time().month ...
ob der neue Monat angefangen hat, um die entsprechenden Zusatzziele nur einmal im Monat aufrufen zu müssen. Falls das Ziel erreicht wird z.B. bei den SFC-stores dann die Einwohnerzahl der Stadt angehoben, dies kostet etwas mehr Zeit.

Leider kann ich keine weitere Unterteilung in Tage, Minuten, Simloops vornehmen.
Code:
local zeit = "LENGTH:" + world.get_time().len() + "<br>"
  foreach (key, value in world.get_time() )
          { zeit+= key + ":" + value + "<br>" }
  return zeit
Gibt mir nur Jahr und Monat aus.

Nun ist es leider so, dass die vielen Abfragen alle genau zum Monatsanfang abgearbeitet werden und so das Spiel dort etwas stockt. Wie verteile ich die Abfragen auf unterschiedliche Zeitpunkte? Wie kann ich es erreichen das einige Funktionen erst X simloops später ausgeführt werden?
Zitieren
#2
Du kannst doch in is_scenario_completed in jedem Aufruf einen Zaehler hochsetzen und je nach Wert des Zaehlers dies oder jenes auswerten, und das dann merken.

Kannst du mal so ein Savegame hochladen (+ aktuellen Skript)? Dann koennte ich das mal testen und schauen, wo so die Engpaesse sind.
Zitieren
#3
Zitat:in jedem Aufruf einen Zähler hoch setzen
8o Oh ja, da hätte ich selbst drauf kommen müssen.

NYC-Script only Version 0.4 (beta) , nightly r6261 and pak128 2.2.0 r1135
http://simutrans-germany.com/files/uploa...k_city.zip
und Savegame
http://simutrans-germany.com/files/uploa...est_04.sve

Habe die "bonus_stuff" Aufrufe durch den Zähler zeitlich leicht getrennt (ab Zeile 647), was auch klappt und einen guten Effekt zeigt. Da aber das Szenario Fenster nicht in jedem Aufruf aktualisiert wird, fehlt mir nun der Befehl dieses zeitnah neu aufzubauen. Simutrans selber berechnet die Finanzdaten für den letzten Monat wohl nicht in den ersten Zählerrunden, sondern deutlich später. Oder?

Und dann habe ich noch den Eindruck, das es einen Unterschied bei den Ergebnissen gibt, je nachdem wann die Funktionen aufgerufen werden.

function bonus_jfk
Warum auch immer muss die Abfrage für den letzten Monat
'...get_departed()[0]' lauten und darf nicht 1 im Zähler haben.

function bonus_cfk
Hier muss es aber '...get_consumed()[1]' lauten. Warum?
Oder besser: Wo habe ich den Logikfehler?

Um einige "Bonus stuff" Funktionen besser testen zu können, einfach im script die Zielwerte reduzieren.
Zitieren
#4
Simutrans berechnet die finanzdaten eigentlich nur wenn notwendig (update_finance_history oder so ähnlich). Macht allerdings das Finanzfenster bei jedem Neuzeichnen.
Zitieren
#5
Das Szenario-Fenster wird alle 10s neu erstellt.

Wenn ein Monat rum ist, werden direkt auch alle Statistiken aktualisiert.

Es kann sein, dass bei world.get_bla()[0] und player_x(pl).get_bla()[0] teilweise keine aktuellen Werte stehen.
Zitieren
#6
Zitat:Das Szenario-Fenster wird alle 10s neu erstellt.
Das ist gut und ist auch viel besser als zuvor, nur entsteht so eventuell eine Fehlinformation für den Spieler. Hat er das Finanzfenster ebenfalls offen, führt dies zu nicht vergleichbaren Informationen.

Zitat:Das Szenario-Fenster wird alle 10s neu erstellt.
Besteht die Möglichkeit einen "Neu erstellen" Befehl für das Script bereitzustellen? Dann kann man gezielt das Fenster neu aufbauen, wenn neue Informationen berechnet wurden.
Zitieren


Gehe zu:


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