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);