unsichtbar
 

STNE Scripts

So, hier mal eine kleine Auswahl von Scripts, die ich geschrieben habe.

Warpkern und Reservebatterie aufladen von allen Schiffen im Orbit.

Function println(text As String) {
  WriteLine(text);
}


// BITTE ANPASSEN!!
Var SpielerID As Integer = DEINE_ID;
Var KolonieID As Integer = ID_DER_KOLONIE,_ÜBER_DER_DIE_SCHIFFE_STEHEN;

Var kolonie As New CMyKolonie(KolonieID);
Var schiffmanager As New CShipManager();
Var kolomanager As New CColonieManager();
kolomanager.BenutzeKolonie(KolonieID);

// Nur Schiffe im Orbit des Planeten durchgehen - andere koennten sowieso nicht beamen
Var stationsid As Integer = 0;
Var schiffe As IEnumerator;
Var schiff As CMyShip;
Var yourship As CShip;
Var ladungen As Integer;
Var lagerladungen As Integer;
Var schiffdef As CMyShipDefinition;
Var i As Integer;
Var jetztladung As Integer;
Var habschon As Boolean;
Var warAngedocktAn As Integer = 0;

// Basis heraussuchen, damit das docken und das Orbseil benutzt werden kann.
schiffe = kolonie.SRS.GetEnumerator();
While((schiffe.MoveNext()) And (stationsid = 0)) {
  yourship = schiffe.Current;
  If(yourship.Definition.IstRaumstation = True) {
    stationsid = yourship.ShipID;
  }
}


// Eben bescheidsagen, wo man am arbeiten ist
println("Starte meine Arbeit im Orbit von " & kolonie.Name);

// Alle Schiffe durchgehen und schauen, ob Handlungsbedarf besteht
schiffe.Reset(); // Spart die erneute Zuweisung
While(schiffe.MoveNext()) {
  yourship = schiffe.Current;
  If(yourship.UserID = SpielerID) {
    schiff = New CMyShip(yourship.ShipID);
    schiffdef = schiff.Definition; // Damit man herausfinden kann, ob der Schiffstyp nen WK hat
    habschon = False;
    
    // Erstmal eigene Waren erbrauchen - auf gut Glück aufladen
    If(schiffdef.Warpkern AND schiff.Warpkern < 951 AND genugWarenvorhanden(schiff)) {
      println(" -- " & schiff.Name & " --");
      habschon = True;
      println("Lade Warpkern...");
      println("... von schiffseigenen Ressourcen:");
      schiffmanager.BenutzeSchiff(schiff.ShipID);
      schiffmanager.WarpkernNachfüllen(40);
    }
    // Jetzt schauen, ob noch Handlungsbedarf besteht
    If(schiffdef.Warpkern AND (schiff.Warpkern < 951) AND (schiff.Lager.FreieKapazität > 4)) {
      // Berechnen, wieviel in den Kern rein muss
      ladungen = Math.Floor((1000 - schiff.Warpkern) / 50);
      lagerladungen = Math.Floor(schiff.Lager.FreieKapazität / 5);
      
      
      // Schiff hier abdocken und merken, an was es angedockt war
      warAngedocktAn = schiff.AngedocktAnID;
      schiffmanager.BenutzeSchiff(schiff.ShipID);
      If((schiff.Definition.IstTräger = False) OR (warAngedocktAn = stationsid)) {
        schiffmanager.Abdocken(); // Scheiss drauf, ob es angedockt war. Das hätte eh nur Zeit gefressen.
        schiffmanager.AndockenAn(stationsid); // Pauschal andocken. Wenns nicht klappt, nicht mein Problem.
      }
      
      If(habschon = False) {
        println(" -- " & schiff.Name & " --");
        println("Lade Warpkern...");
        habschon = True;
      }
      println("... vom Planeten:");
      println("Freie Kapazität: " & schiff.Lager.FreieKapazität & " - Warpkern: " & schiff.Warpkern);
      println("Ladungen: " & ladungen & " - Ladungen pro Schritt: " & lagerladungen);
      While(ladungen > 0) {
        jetztladung = Math.Min(ladungen, lagerladungen);
        // TODO hier die Berechnung, ob er einen weiteren Beamvorgang schaffen wird einbauen
        kolomanager.TransferiereZuSchiff(schiff.ShipID, jetztladung * 2, EBeamRessource.Antimaterie);
        kolomanager.TransferiereZuSchiff(schiff.ShipID, jetztladung * 2, EBeamRessource.Deuterium);
        kolomanager.TransferiereZuSchiff(schiff.ShipID, jetztladung, EBeamRessource.Dilithium);
        schiffmanager.WarpkernNachfüllen(40);
        ladungen = ladungen - jetztladung;
      }
      
      If(schiff.Definition.IstTräger = False) {
        schiffmanager.Abdocken();
        If(warAngedocktAn > - 1) {
          schiffmanager.AndockenAn(warAngedocktAn);
        }
      }
    }
    
    If(schiff.ReserveBatterie < schiffdef.Energie) {
      If(habschon = False) {
        println(" -- " & schiff.Name & " --");
      }
      println("Lade Reservebatterie um " & (schiffdef.Energie - schiff.ReserveBatterie));
      kolomanager.Werft_ReserveBatterieAufladen(schiff.ShipID, 60);
    }
  }
}

Function genugWarenvorhanden(schiff As CMyShip) As Boolean {
  If((schiff.Lager.Menge(EWarenTyp.Antimaterie) > 1) AND (schiff.Lager.Menge(EWarenTyp.Deuterium) > 1) AND (schiff.Lager.Menge(EWarenTyp.Dilithium) > 0)) {
    Return True;
  } Else {
    Return False;
  }
}

Energieausgleich als Webscript mit Auswahlfenster

#UseInterface Web;

Function println(text As String) {
  Response.Add(text);
  Response.Add(New CHtmlBreak());
}

// Events abarbeiten
If (Request.Form.ContainsKey("flotte")) {
  ausgleich(Request.Form.Item("flotte"));
}

// Formular ausgeben
Var form As New CHtmlForm(New CScriptUrl());
Response.Add(form);
Var table As New CTable(1);
Var row As CTableRow;
form.Add(table);
row = table.AddRow();
Var kasten As New CHtmlListBox("flotte");
row.Cells.Item(0).Add(kasten);

// Flottenliste auslesen
Var flotten As New CFlottenEnumerator();
Var flotte As CMyFlotte;
While(flotten.Next()) {
  flotte = flotten.CurrentFlotte;
  kasten.Add(flotte.Name, flotte.FlottenID);
}

row = table.AddRow();
row.Cells.Item(0).Add(New CHtmlSubmitButton("Ausgleichen!", "Bla"));


Function ausgleich(flottenid As Integer) {
  Var Flotte As New CMyFlotte(flottenid);
  
  Var j As Integer;
  Var transfer As Integer;
  Var sum As Integer;
  Var durchschnitt As Integer;
  Var Schiff As CMyShip;
  Var ZielSchiff As CMyShip;
  
  //Flotte.Aktion.SRS_Aktivieren( 1 );
  
  For (Each Schiff In Flotte.Ships){
    sum = (sum + Schiff.Energie);
  }
  
  durchschnitt = (sum / Flotte.Ships.Count);
  println("Durchschnitt: " & CStr(durchschnitt));
  
  For (Each Schiff In Flotte.Ships){
    If(Schiff.Energie > durchschnitt){
      j = 0;
      While((Schiff.Energie > durchschnitt) AND (j < Flotte.Ships.Count)){
        ZielSchiff = Flotte.Ships.Item(j);
        If((ZielSchiff.Energie < durchschnitt) AND (Schiff.ShipID <> ZielSchiff.ShipID)){
          transfer = (durchschnitt - ZielSchiff.Energie);
          If(transfer > (durchschnitt - ZielSchiff.Energie)){
            transfer = (durchschnitt - ZielSchiff.Energie);
          }
          If(transfer > 0) {
            println(Schiff.Name & " --( " & transfer & " )-->> " & ZielSchiff.Name);
            Schiff.Aktion.TransferiereZuSchiff(ZielSchiff.ShipID, transfer, EBeamRessource.Energie);
          }
        }
        j = j + 1;
      }
    }
  }
}

Antworten

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.