Scripting:KolonieEnergie optimieren
Aus STNE-Wiki
(Unterschied zwischen Versionen)
(→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 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); | |
| - | OptEnergie( | + | |
== 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);