Scripting:KolonieEnergie optimieren

Aus STNE-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(KolonieEnergie optimieren)
 
(Der Versionsvergleich bezieht 4 dazwischenliegende Versionen mit ein.)
Zeile 2: Zeile 2:
= KolonieEnergie optimieren =
= 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!
-
== Skriptcode ==
+
Achja, da es eine Funktion ist, kann man die auch sehr bequem für mehrere Kolonien ausführen lassen.
-
// 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) {
+
== Skriptcode ==
-
VAR colo AS NEW CMyKolonie(coloid);
+
// Arbeitsweise:
-
VAR coloman AS NEW CColonieManager();
+
// Schaut, in welchem Modus er operiert:
-
VAR hausenumerator AS IEnumerator;
+
// mehrenergie = True --> zu wenig Energie vorhanden, schalte so viele Satelliten an, bis >0 EnergieBilanz ist
-
VAR haus AS CGebäude;
+
// mehrenergie = False --> Deut wird verschwendet, schalte alle überflüssigen Satelliten ab, solange >0 EnergieBilanz bleibt
-
VAR mehrenergie AS Boolean;
+
// Dann geht er alle Gebäude der Kolonie durch und arbeitet die ab.
-
 
+
-
coloman.BenutzeKolonie(coloid);
+
function OptEnergie(BYREF coloid AS Integer) {
-
hausenumerator = colo.Gebäude.GetEnumerator(); // Hole die Häuser;
+
VAR colo AS NEW CMyKolonie(coloid);
-
 
+
VAR coloman AS NEW CColonieManager();
-
// Vorher
+
VAR hausenumerator AS IEnumerator;
-
WriteLine('Bearbeite: ' & colo.Name);
+
VAR haus AS CGebäude;
-
WriteLine('EnergieBilanz: ' & CStr(colo.EnergieBilanz));
+
VAR mehrenergie AS Boolean;
-
+
-
// Mehr oder weniger Energie benötigt?
+
coloman.BenutzeKolonie(coloid);
-
mehrenergie = (colo.EnergieBilanz < 0);
+
hausenumerator = colo.Gebäude.GetEnumerator(); // Hole die Häuser;
-
 
+
-
while(hausenumerator.MoveNext()) {
+
// Vorher
-
haus = hausenumerator.Current;
+
WriteLine('Bearbeite: ' & colo.Name);
-
If((haus.TypName = 'Solarsatellit') AND (haus.Aktiv = NOT mehrenergie)) { // Juhu, einen Satelliten gefunden
+
WriteLine('EnergieBilanz: ' & CStr(colo.EnergieBilanz));
-
VAR koords AS String = '@' & CStr(haus.Feld.Coords.X) & '|' & CStr(haus.Feld.Coords.Y);
+
-
coloman.GebäudeAktivieren(koords, mehrenergie);
+
// Mehr oder weniger Energie benötigt?
-
If(mehrenergie) {
+
mehrenergie = (colo.EnergieBilanz < 0);
-
WriteLine('Solarsatellit ' & koords & ' eingeschaltet.');
+
-
If((colo.EnergieBilanz >= 0)) { // Ziel erreicht, aus dem Negativen raus
+
while(hausenumerator.MoveNext()) {
-
exit while; // Damit ist es auch genug und wir können terminieren
+
haus = hausenumerator.Current;
-
}
+
If((haus.TypName = 'Solarsatellit') AND (haus.Aktiv = NOT mehrenergie)) { // Juhu, einen Satelliten gefunden
-
} else {
+
VAR koords AS String = '@' & CStr(haus.Feld.Coords.X) & '|' & CStr(haus.Feld.Coords.Y);
-
If((colo.EnergieBilanz < 0)) { // zu wenig Energie, Satelliten doch wieder anmachen
+
coloman.GebäudeAktivieren(koords, mehrenergie);
-
coloman.GebäudeAktivieren(koords, True);
+
If(mehrenergie) {
-
exit while; // Damit ist es auch genug und wir können terminieren
+
WriteLine('Solarsatellit ' & koords & ' eingeschaltet.');
-
} else {
+
If((colo.EnergieBilanz >= 0)) { // Ziel erreicht, aus dem Negativen raus
-
WriteLine('Solarsatellit ' & koords & ' ausgeschaltet.');
+
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
-
// Nachher
+
} else {
-
WriteLine('EnergieBilanz: ' & CStr(colo.EnergieBilanz));
+
WriteLine('Solarsatellit ' & koords & ' ausgeschaltet.');
-
}
+
}
-
 
+
}
-
OptEnergie(DEINE KOLONIEID);
+
}
 +
}
 +
 +
// Nachher
 +
WriteLine('EnergieBilanz: ' & CStr(colo.EnergieBilanz));
 +
}
 +
 +
OptEnergie(DEINEKOLONIEID);
== Bemerkungen ==
== Bemerkungen ==

Aktuelle Version vom 30. April 2007, 17:49 Uhr

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