Scripting:Torpedoausgleich

Aus STNE-Wiki

Wechseln zu: Navigation, Suche

--Moax 15:33, 28. Apr 2008 (W. Europe Daylight Time)=Torpedoausgleich in der Flotte =

Das Skript

// Hier die FlottenID, max. Torpedoanzahl und Art der Torpedos eintragen.
// (Achtung auf die Rechtschreibung achten! Möglich sind: PhotonenTorpedos, PhlasmaTorpedos oder QuantenTorpedos)
Var flotte As New CMyFlotte(74152); 
Var maxTorp As Integer = 10;
Var torpArt As String = 'PlasmaTorpedos';

// Ab hier nichts mehr verändern!
Var shipCount As Integer = flotte.Ships.Count;
Var schiffIDArray[shipCount] As Integer;
Var schiffTorpArray[shipCount] As Integer;
Var i As Integer = 0;
Var j As Integer = 0;
Var sum As Integer = 0;
Var d As Integer = 0;
Var mySchiff As CMyShip;

flotte.Aktion.SRS_Aktivieren(true);

For (Each mySchiff In flotte.Ships) {
  schiffIDArray[i] = mySchiff.ShipID;
  If (torpArt = 'PhotonenTorpedos') {
    schiffTorpArray[i] = mySchiff.Lager.Menge(EWarenTyp.PhotonenTorpedos);
  } Elseif (torpArt = 'PlasmaTorpedos') {
    schiffTorpArray[i] = mySchiff.Lager.Menge(EWarenTyp.PlasmaTorpedos);
  } Elseif (torpArt = 'QuantenTorpedos') {
    schiffTorpArray[i] = mySchiff.Lager.Menge(EWarenTyp.QuantenTorpedos);
  } Else {
    WriteLine('Fehler in der Torpedo Art! Es wird von Photonentorpedos ausgeganngen.');
    schiffTorpArray[i] = mySchiff.Lager.Menge(EWarenTyp.PhotonenTorpedos);
  }
  sum = sum + schiffTorpArray[i];
  i++;
}

d = Math.Ceiling((sum / shipCount);
If (torpArt = 'PhotonenTorpedos') {
  WriteLine('Durchschnitt: ' & d & ' Photonentorpedos');
} Elseif (torpArt = 'PlasmaTorpedos') {
  WriteLine('Durchschnitt: ' & d & ' Plasmatorpedos');
} Elseif (torpArt = 'QuantenTorpedos') {
  WriteLine('Durchschnitt: ' & d & ' Quantentorpedos');
} Else {
  WriteLine('Durchschnitt: ' & d & ' Photonentorpedos');
}


i = 0;
Var somethingDone As Boolean = true;
Var differenz As Integer = 0;
Var transferMenge As Integer = 0;
Var geberSchiffIndex As Integer = 0;
Var counter As Integer = 0;
Var torpsGeberSchiff As Integer = 0;

Do {
  Array.Sort(schiffTorpArray, schiffIDArray);
  somethingDone = false;
  mySchiff = New CMyShip(schiffIDArray[0]);
  If (maxTorp > schiffTorpArray[0]) {
    differenz = d - schiffTorpArray[0];
    If (differenz > 0) {
      geberSchiffIndex = findPerfectMatch(differenz);
      If (geberSchiffIndex > 0) {
        mySchiff = New CMyShip(schiffIDArray[geberSchiffIndex]);
        torpsGeberSchiff = schiffTorpArray[geberSchiffIndex];
        If (torpArt = 'PhotonenTorpedos') {
          mySchiff.Aktion.TransferiereZuSchiff(schiffIDArray[0], differenz, EBeamRessource.PhotonenTorpedos);
        } Elseif (torpArt = 'PlasmaTorpedos') {
          mySchiff.Aktion.TransferiereZuSchiff(schiffIDArray[0], differenz, EBeamRessource.PlasmaTorpedos);
         } Elseif (torpArt = 'QuantenTorpedos') {
          mySchiff.Aktion.TransferiereZuSchiff(schiffIDArray[0], differenz, EBeamRessource.QuantenTorpedos);
        } Else {
          WriteLine('Fehler in der Torpedo Art! Es wird von Photonentorpedos ausgeganngen.');
          mySchiff.Aktion.TransferiereZuSchiff(schiffIDArray[0], differenz, EBeamRessource.PhotonenTorpedos);
        }
        If (torpArt = 'PhotonenTorpedos') {
          transferMenge = torpsGeberSchiff - mySchiff.Lager.Menge(EWarenTyp.PhotonenTorpedos);
        } Elseif (torpArt = 'PlasmaTorpedos') {
          transferMenge = torpsGeberSchiff - mySchiff.Lager.Menge(EWarenTyp.PlasmaTorpedos);
        } Elseif (torpArt = 'QuantenTorpedos') {
          transferMenge = torpsGeberSchiff - mySchiff.Lager.Menge(EWarenTyp.QuantenTorpedos);
        } Else {
          WriteLine('Fehler in der Torpedo Art! Es wird von Photonentorpedos ausgeganngen.');
          transferMenge = torpsGeberSchiff - mySchiff.Lager.Menge(EWarenTyp.PhotonenTorpedos);
        }
        schiffTorpArray[0] = schiffTorpArray[0] + transferMenge;
        schiffTorpArray[geberSchiffIndex] = schiffTorpArray[geberSchiffIndex] - transferMenge;
        somethingDone = true;
        counter++;
      }
    }
  }
}
While (somethingDone and counter < shipCount);

Function findPerfectMatch(differenzValue As Integer) As Integer {
  Var returnValue As Integer = 0;
  If (differenzValue > schiffTorpArray[shipCount - 1] - d) {
    differenz = schiffTorpArray[shipCount - 1] - d;
    returnValue = (shipCount - 1);
  } Else {
    For (i = shipCount - 1 To 1 Step - 1) {
      If (differenzValue <= schiffTorpArray[i] - d) {
        returnValue = i;
      }
    }
  }
  Return returnValue;
} 

Kommentar

Bei diesem Script muss das SRS on sein. Wenn man unter Var Flotte As New CMyFlotte(xxxxx) die Flotten ID einstellt und die richtige Art der Torpedo werden dann die Torpedo gleichmäßig auf die gesamte Flotte verteilt. Wenn man einen Angriff planen sollte man auf alle Schiffe die gleiche Art der Torpedos haben.

Persönliche Werkzeuge