Scripting:KolonieEnergie optimieren

Aus STNE-Wiki

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

Version vom 30. April 2007, 17:37 Uhr

fertige Scripte | Anleitungen und FAQ | Überblick über die Scripting-Sektion | Hilfen zum Arbeiten im Wiki

KolonieEnergie optimieren

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