Dimitrios wrote:Ich suche immernoch vergeblich die Stellen wo man einen beliebigen Schiff eine beliebige Anzahl Marines zuordnen kann........
... anscheinend verschließt du die augen vor dem, was ubuntufreak & ich eben gepostet haben, denn darin findest du die antwort auf die frage
...
das hier ist ein "array", zu deutsch: "liste" (sagen wir einfach regal mit schubladen)
in deinem fall hat jede schublade des regals einen marine
es gibt sogenannte
"schleifen", mit denen es möglich ist, bestimmte code-zeilen beliebig oft auszuführen
die schreibweise:
Code: Select all
while (bedingung)
... zeile 1
... zeile 2
...
... zeile x
end
... solange die bedingung stimmt (oder: logisch "wahr" ist), werden zeile 1 - x immer wieder ausgeführt
wenn das script bei "end" ankommt, springt es wieder hoch zu while, prüft die bedingung erneut, & wenn "wahr", dann wird zeile 1 - x wieder ausgeführt
wenn das script wieder bei "end" ankommt, springt es wieder hoch zu while, prüft die bedingung erneut, & wenn "wahr", dann wird zeile 1 - x schon wieder ausgeführt, wenn das script bei "end" ankommt, springt es wieder hoch zu while, prüft die bedingung erneut, & wenn "wahr", dann wird zeile 1 - x wieder ausgeführt usw.
nun zum code:
Code: Select all
$length=size of array: $array.marines
speichert unter der variable $length die anzahl der schubladen des regals
setzt die variable $schublade (die man auch "laufindex" nennen könnte) auf 0
siehe bild
konkret heißt das beim ersten durchlaufen der schleife:
"solange: 0 < 30"
das ist logisch "wahr", deshalb wird der nachfolgende schleifen-rumpf bis zu "end" ausgeführt
Code: Select all
$Marine = $Array.Marines[$schublade]
$Marine->set marine skill: fighting=100
$Marine->set marine skill: hacking=100
$Marine->set marine skill: mechanical=100
$Marine->set marine skill: engineering=100
$schublade = $schublade + 1
die letzte zeile verwirrt mathematiker, liegt daran, dass es kein vergleich ist, sondern ne
"zuweisung"
im klartext: der linken variable wird das, was rechts rauskommt, zugewiesen
hier bei uns: $schublade wird 0 + 1 zugewiesen (also 1)
das ist der trick an der geschichte: die schleife wird also so oft ausgeführt, wie das regal lang ist !!
denn wenn das zeug zwischen while & end 30 mal ausgeführt wurde, wird ja der variable $schublade der wert 29 + 1 zugewiesen
dann stimmt die while-bedingung oben nicht mehr & die schleife wird abgebrochen
wenn du dich fragst, wie man while $schublade < $length ins script bekommt:
--> script editor --> general commands --> retvar/if expression
dann popt ein menü auf --> auf while klicken
dann klickste auf das fragezeichen & wählst $schublade aus der variablenliste aus
dann rechts auf die pünktchen klicken & in dieser aufpopenden zeichenliste "<" anklicken
dann rechts auf die pünktchen klicken & nun die variable $length (oder wie auch immer du sie benannt hast) anklicken
fertig !! ... lass dich nich von den rechts überstehenden 3 pünktchen irritieren, die werden vom script ignoriert
dieses "end" findest du unter:
script editor --> general commands --> flow control
dort findest du z.B. auch dieses suspekte "return ..." wieder, das jedem script am ende automatisch zugefügt wird
(return gibt einen wert/variable zurück, hat nur was bei scripts, die andere scripts aufrufen, etwas zu bedeuten ...)
kleiner hinweis: ... dieses inc= $schublade bedeutet nix anderes als $schublade = $schublade + 1, wird auch
"inkrementieren" genannt
ps: ... den code, den ich gepostet hab tut nix anderes, nur beginnt der von der vom anderen ende des regals ^^
========================================
nun zum thema "beliebiges schiff":
wenn du ein script ausführst, wirst du IMMER gefragt, auf welchen objekt du es starten willst
wo du früher einfach --> R --> ENTER --> ENTER gedrückt hast, musst du nun --> R drücken, dann auf <select ship or station>, nun wählst du das begehrte schiff aus, und drückst nochmal ENTER
=> schon wird das script auf dem begehrten schiff ausgeführt
was bedeutet das ???
--> der scriptinterne konstante [THIS] hat nun ne bedeutung, es ist das schiff, auf welchem das script läuft
--> der scriptinterne konstante [SECTOR] hat nun auch ne bedeutung, es ist der sector des schiffs, auf welchem das script läuft
--> der scriptinterne konstante [DOCKEDAT] hat nun auch ne bedeutung, es ist das schiff bzw. die station, an welchem jenes schiff angedockt ist, auf welchem das script läuft
--> der scriptinterne konstante [ENVIRONMENT] hat nun auch ne bedeutung, es ist die umgebung des schiffs, auf welchem das script läuft
(umgebung heißt angedocktes schiff/station oder wenn nich angedockt, dann der sektor des schiffs)
verwendest du nun statt der konstanten [PLAYERSHIP] die konstante [THIS], dann wird das schiff nach der marines-liste gefragt, auf welchem das script läuft
soweit, sogut.
ich habe fertig !!