Scripting:KolonieEnergie optimieren

Aus STNE-Wiki

Wechseln zu: Navigation, Suche
fertige Scripte | Anleitungen und FAQ | Überblick über die Scripting-Sektion | Hilfen zum Arbeiten im Wiki

KolonieEnergie optimieren

Dieser Script eigent sich gut um den Deut-Verbrauch auf Kolonien zu optimieren, indem nur genau soviel Energie produziert wird, wie mindestens benötigt wird. Überflüssige Satelliten werden abgestellt bzw. benötigte angestellt, falls zu wenig Energie vorherrschen sollte. Der Script funktioniert unabhängig vom Kolonietyp und eigentlich sollte er es gut tun. Bei Fragen, Fehlern oder Verbesserungen gerne eine IGM an [FWD]Faldrian (36705). Viel Spaß mit dem Script!

Achja, da es eine Funktion ist, kann man die auch sehr bequem für mehrere Kolonien ausführen lassen.


Skriptcode

// Arbeitsweise:
// Schaut, in welchem Modus er operiert:
// mehrenergie = True --> zu wenig Energie vorhanden, schalte so viele Satelliten an, bis >0 EnergieBilanz ist
// mehrenergie = False --> Deut wird verschwendet, schalte alle überflüssigen Satelliten ab, solange >0 EnergieBilanz bleibt
// Dann geht er alle Gebäude der Kolonie durch und arbeitet die ab.

function OptEnergie(BYREF coloid AS Integer) {
	VAR colo			AS NEW CMyKolonie(coloid);
	VAR coloman			AS NEW CColonieManager();
	VAR hausenumerator	AS IEnumerator;
	VAR haus			AS CGebäude;
	VAR mehrenergie		AS Boolean;

	coloman.BenutzeKolonie(coloid);
	hausenumerator = colo.Gebäude.GetEnumerator(); // Hole die Häuser;

	// Vorher
	WriteLine('Bearbeite: ' & colo.Name);
	WriteLine('EnergieBilanz: ' & CStr(colo.EnergieBilanz));

	// Mehr oder weniger Energie benötigt?
	mehrenergie = (colo.EnergieBilanz < 0);

	while(hausenumerator.MoveNext()) {
		haus = hausenumerator.Current;
		If((haus.TypName = 'Solarsatellit') AND (haus.Aktiv = NOT mehrenergie)) { // Juhu, einen Satelliten gefunden
			VAR koords AS String = '@' & CStr(haus.Feld.Coords.X) & '|' & CStr(haus.Feld.Coords.Y);
			coloman.GebäudeAktivieren(koords, mehrenergie);
			If(mehrenergie) {
				WriteLine('Solarsatellit ' & koords & ' eingeschaltet.');
				If((colo.EnergieBilanz >= 0)) { // Ziel erreicht, aus dem Negativen raus
					exit while; // Damit ist es auch genug und wir können terminieren
				}
			} else {
				If((colo.EnergieBilanz < 0)) { // zu wenig Energie, Satelliten doch wieder anmachen
					coloman.GebäudeAktivieren(koords, True);
					exit while; // Damit ist es auch genug und wir können terminieren
				} else {
					WriteLine('Solarsatellit ' & koords & ' ausgeschaltet.');
				}
			}
		}
	}

	// Nachher
	WriteLine('EnergieBilanz: ' & CStr(colo.EnergieBilanz));
}

OptEnergie(DEINEKOLONIEID);

Bemerkungen

Persönliche Werkzeuge