X2: Khaak Respawn via Script abschalten

Hier ist der ideale Ort um über Scripts und Mods für X²: Die Bedrohung zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

Darth Moch
Posts: 30
Joined: Sun, 15. Jul 07, 12:25

Post by Darth Moch »

Ich dachte, dass genau das nicht der Fall wäre, sondern dass das spawnen nur stark reduziert werden würde (siehe vorherige Postings in diesem Topic)
Oder ist das ein Irrtum?

Und auch wenn es funktioniert: Ich würde gerne wissen, wie ich den Befehl
"find ship: sector [...]" auf das gesamte Universum beziehen kann.
Auf einen Sektor funktioniert das Bestens, aber ich habe es bisher noch nicht hingekommen, dass das ganze Universum abzufragen.
Muss ich dazu ein Array erstellen und alle Felder des Universums abfragen?
(In Java würde ich da wohl zumindest ein Array erstellen und dann mit ner for-schleife das durchgehen, aber for gibt es ja im script-editor nicht ... also vermutlich mit ner while) ... muss man das so machen oder geht's auch einfacher? (ich mag Arrays nicht so gerne, seit ich nen Quicksort programmieren musste :-/)
gruß und danke :)
User avatar
Chris Gi
Posts: 960
Joined: Wed, 20. Sep 06, 09:57
x3tc

Post by Chris Gi »

Ich dachte, dass genau das nicht der Fall wäre, sondern dass das spawnen nur stark reduziert werden würde
Wie gesagt, ich habe das irgendwo so gelesen, weiß aber nicht, ob das wirklich stimmt (ich selbst habe es nie probiert, weil ich die Khaak ganz gerne mag :oops: ).

Das mit den beiden Scripts habe ich jetzt nicht verstanden, was Du da wirklich machen wolltest. Ein Weg, der funktioniert, geht folgendermaßen:

Code: Select all

$Max.x = = get max sectors in x direction   
$Max.y = = get max sectors in y direction 
$x = 0
while $x < $Max.x
  $y = 0
  while $y < $Max.y
    $Sector = get sector from universe index: x=$x, y=$y
    if $Sector
         $Ships.Array = find ship: sector=$sector class or type=null race=Khaak flags=[Find.Multiple] refobj=null maxdist=null maxnum=99 refpos=null
         if $Ships.Array
            $Ships.Size = size of array $Ships.Array
            while $Ships.Size > 0
                 dec $Ships.Size
                 $Ship = $Ships.Array[$Ships.Size]
                 $Ship->destruct: show no explosion=[TRUE]
                 wait .... 
            end
         end
    end
    inc $y
    wait ....
  end
  inc $x
  wait ....
end

Das Ganze muss dann noch einmal in eine While-Schleife gepackt werden, um das permanent aufzurufen.

Die "find ship"-Anweisung findet nur Schiffe im angegebenen Sektor. Mit den passenden Wait-Werten ist das auch ziemlich performant.
--------------------------------

[ external image ]
Darth Moch
Posts: 30
Joined: Sun, 15. Jul 07, 12:25

Post by Darth Moch »

Danke erstmal. Also geht's scheinbar am besten mit dem Array - die Dinger verfolgen mich^^

Was ich mit den zwei Scripts meinte war einfach, dass ich die While-Schleife ohne Abbruchmöglichkeit durchlaufen lasse, solange eine globale Variable = 1 ist. (diese würde im Scirpt VOR der While-Schleife = 1 gesetzt werden, also bei jedem start des Scripts wieder den Wert 1 annehmen)
In zweites Script sollte dann diese globale Variable = 0 setzen und damit die programmierte "Endlosschleife" wieder zu beenden.

Es mag vielleicht merkwürdig erscheinen, aber mir widerstrebt es überhaupt eine Endlosschleife zu programmieren ... es gab Tutoren, die mich alleine für das Wort schon erschlagen hätten :D

Wie gesagt: Vielen Dank für die Hilfe. Werde ich gleich mal in eine While-Schleife packen und probieren (bin immer noch der Meinung es fehlt eine "For-Schleife" :D:D:D)

Return to “X²: Die Bedrohung - Scripts und Modding”