Wie stoppt man ein sich wiederholendes Script mit Schleife?

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

Deleted User

Wie stoppt man ein sich wiederholendes Script mit Schleife?

Post by Deleted User »

Seitdem X2 draußen ist experimentiere ich von Zeit zu Zeit an einer Idee.
Eine Schiffswerft die mir TS erstellt, und die ich mir nach Bedarf abrufen kann. (kostenlos natürlich, logisch) :D

Jetzt bin ich endlich soweit das sich in einer eigenen Ausstellungshalle alle 5 Sekunden ein gelandetes TS-Schiff erstellt mit guter Ausstattung. Das Problem ist nur ich kann das Script nicht stoppen, d.h es erstellen sich unendlich viele TS. Ich weiß nicht wie weit das geht, da es scheinbar bei gelandeten Schiffen keine Grenze zu geben scheint.
Ich möchte auch so nicht weiterspielen, weil ich Angst habe das mir irgendwann mal der Rechner abraucht.

Es muß doch irgendwie eine Befehlszeile im SE geben, das man ein laufendes Script mit Schleife stoppen kann.
Am liebsten wäre mir, es würden sich 10 TS erstellen, dann sollte es ein Stop geben, dann bei Entnahme von 1-9 TS sollte sich das "Lager" wieder bis maximal 10 TS auffüllen.

Falls einer einen Tip hat, ich wäre sehr dankbar dafür.
mjs
Posts: 172
Joined: Sun, 30. Nov 03, 09:02
x3tc

Post by mjs »

Also, wenn das Script an die Schiffswerft gebunden ist, dann werden automatisch Schiffswerft-Scripte beendet, sobald die Schiffswerft zerstört wird.
Arguments
  1. targetobject , Var/Ship/Station , ''

Code: Select all

001   $targetobject -> destruct: show no explosion=[TRUE]
002   return null
Wenn es allerdings ein globales Script ist, dann kannst du das direkt über den Script-Editor beenden (Liste globaler Scripte + ENTF).

Eine andere Möglichkeit habe ich ad-hoc nicht gefunden. Sorry.

Gruß,
Mark
Deleted User

Post by Deleted User »

Nein das hast du völlig falsch verstanden. Ich will doch nicht die Station zerstören, bin doch froh das ich sie habe,tz.

Ich möchte das sich das Script selbst stoppt, das heißt die Schleife die mir alle 5 sekunden ein neues Schiff in die Station setzt soll gestoppt werden bei einer gewissen Anzahl an Schiffen, und erst dann wieder fortfahren wenn ich mir einige Schiffe aus dieser Station entnehme.
mjs
Posts: 172
Joined: Sun, 30. Nov 03, 09:02
x3tc

Post by mjs »

Ich habe dich schon verstanden, aber:

Wenn das Script an die Station gebunden ist, dann kannst du nur die Station zerstören um das dazu gehörige Script zu stoppen. AFAIK gibt es keinen anderen Weg.

Gruß,
Mark
Deleted User

Post by Deleted User »

Also ich poste jetzt mal den Code.

Code: Select all

Script Yogis.Transporterwerft
Version: 1
for Script Engine Version: 25

Description
Yogis-Transporterwerft
Arguments
1: setLoc , Var/Sector Position , 'Chose Position' 
Source Text

001   $x = $setLoc[0]
002   $y = $setLoc[1]
003   $z = $setLoc[2]
004   $sec = $setLoc[3]
005   
006   $neueStation =  create station: type=Teladi Teladi Ausstellungshalle owner=Player addto=$sec x=$x y=$y z=$z
007   $neueStation -> set name to 'X-Trans-Schiffswerft'
008   = $neueStation -> install 8 units of 125 MW Schild
009   $neueStation -> station trade and production tasks: on=[TRUE]
010   
011   check1:
012   $ship =  create ship: type=Thalon X-Trans owner=Player addto=$neueStation x=$x y=$y z=$z
013   $ship -> add default items to ship
014 @ = wait 5000 ms
015   goto label check1
016   return null
Wie man unschwer erkennen kann erstellt dieses Script alle 5 Sekunden einen gelandeten X-Trans in meiner Ausstellungshalle.
Ich möchte aber das bei 10 Stk Schluß ist mit dem respawn, und wenn ich Schiffe entnehme das dann erst der Respawn wieder losgeht, bzw wieder bei 10 Stk endet.
Mahijiru
Posts: 17
Joined: Mon, 24. Oct 05, 09:29
x3

Post by Mahijiru »

Hi,

landen in dieser Werft auch noch andere Schiffe (Spieler oder KI)?
Falls nicht könnte man u.U. den Befehl "get number of landed ships" verwenden.
Deleted User

Post by Deleted User »

Mahijiru wrote:Hi,

landen in dieser Werft auch noch andere Schiffe (Spieler oder KI)?
Falls nicht könnte man u.U. den Befehl "get number of landed ships" verwenden.
KI schiffe kommen nicht, da die Fab ja nichts herstellt, Spielerschiffe auch nicht. Werde deinen Tipp mal ausprobieren, danke. :wink:
User avatar
proggy3456
Posts: 2027
Joined: Sun, 6. Apr 03, 18:57
x3ap

Post by proggy3456 »

Meine persönliche Preferenz wäre eine while-Schleife mit einem Continue-Befehl. Das könnte dann so aussehen:

Code: Select all

while 1
    = wait 5000 ms
    * hier dann überprüfung, wieviele gelandete schiffe es gibt
    skip if $überprüfung < 10
        continue
    * hier dann der Rest des Skriptes
end
Resultat: Schleife wird kontinuierlich ausgeführt, wenn die Überprüfung aber die Skip-Bedingung erfüllt, wird keine Aktion ausgeführt, während das Skript weiter läuft und immer wieder aufs neue überprüft.
Bei mir klappt das sehr gut, man kann auch diesen Code in eine seperate Datei packen und eventuell noch eine Abbruch-Bedingung einbauen. So finde ich es sehr komfortabel, aber jeder nach seinem Geschmack. :)

MfG proggy
Deleted User

Post by Deleted User »

Und wo muss ich das jetzt genau einfügen? Aber Zeile 005?

Was man sich auch machen könnte um das ganze zu umgehen wäre ne normale Station die irgendwas herstellt (inkl.Geldabzugsscript damits kein Cheat ist) und zusätzlich eine x-beliebige Anzahl an gelandeten X-trans an Bord hat. Somit müsste man sich nicht mit der Schleife rumquälen.
Aber irgendwie ist das gerade der Reiz, etwas was nicht funktioniert ans laufen zu kriegen,hm? :wink:

Ich probiere Deinen Tipp auch mal aus, danke.
User avatar
Mændax
Posts: 2653
Joined: Sun, 16. Jan 05, 17:45
x3

Post by Mændax »

Wenn aber mal ein anderes Schiff landet, gibts bei dieser Variante ein Tohuwabohu

Du könntest aber alle Schiffe in einer lokalen Variable zählen und überprüfen lassen, ob sie zerstört worden sind
mjs
Posts: 172
Joined: Sun, 30. Nov 03, 09:02
x3tc

Post by mjs »

@Yogi: Stimmt, ich habe dich wirklich missverstanden - sorry. Ich dachte, du hättest das Endlos-Script bereits am laufen ... :oops:
User avatar
Mændax
Posts: 2653
Joined: Sun, 16. Jan 05, 17:45
x3

Post by Mændax »

-Yogi- wrote:und wenn ich Schiffe entnehme das dann erst der Respawn wieder losgeht, bzw wieder bei 10 Stk endet.
Hatte ich übersehen :oops:

Wenn das so ist, dann ist meine Lösung natürlich nicht anwendbar
User avatar
SpaceTycoon
Posts: 1190
Joined: Wed, 6. Nov 02, 20:31
x4

Re: Wie stoppt man ein sich wiederholendes Script mit Schleife?

Post by SpaceTycoon »

-Yogi- wrote:Es muß doch irgendwie eine Befehlszeile im SE geben, das man ein laufendes Script mit Schleife stoppen kann.
Am liebsten wäre mir, es würden sich 10 TS erstellen, dann sollte es ein Stop geben, dann bei Entnahme von 1-9 TS sollte sich das "Lager" wieder bis maximal 10 TS auffüllen.
Mit direktem Stoppen und dann weiterlaufen sieht's schlecht aus. Aber trotzdem kannst Du das realisieren.

Direkt nach 'check1':
Überprüfe zunächst eine lokale Variable auf der Werft, welche die Anzahl der Schiffe enthält.
Falls die Variable >=10, lege das Script mit wait 480000 für 8 Minuten schlafen. Dann wieder zu check 1.
Falls die Variable nicht existiert oder Inhalt kleiner 10, dann weiter mit dem normalen Code und erzeuge das erste (nächste) Schiff. Nach dem wait 5000 addierst Du in die lokale Variable den Wert 1 dazu bzw. beim ersten Mal wird sie erzeugt.
Deleted User

Re: Wie stoppt man ein sich wiederholendes Script mit Schleife?

Post by Deleted User »

SpaceTycoon wrote: Direkt nach 'check1':
Überprüfe zunächst eine lokale Variable auf der Werft, welche die Anzahl der Schiffe enthält.
Falls die Variable >=10, lege das Script mit wait 480000 für 8 Minuten schlafen. Dann wieder zu check 1.
Falls die Variable nicht existiert oder Inhalt kleiner 10, dann weiter mit dem normalen Code und erzeuge das erste (nächste) Schiff. Nach dem wait 5000 addierst Du in die lokale Variable den Wert 1 dazu bzw. beim ersten Mal wird sie erzeugt.
Erm, sorry aber das übersteigt dann doch schonmal leicht das Gehirn ein alten Rentners wie mich. :D

Ich hab das nun anders gemacht. Ein variables Stationsscript mit Geldabzug (und kein Bau wenn keine Geld vorhanden) inkl 100 gelandeten X-Trans mit Zufallsausstattung wobei Waffen und Schilde Maximum sind. Ich brauche lediglich die Fabriktyp und, je nachdem, den Preis zu ändern. So hab ich keine Schleifen und das klappt wunderbar.
Trotzdem danke für eure Hilfen. :wink:
Deleted User

Post by Deleted User »

Gerade habe ich durch Zufall gelesen das bei X3 in den Stationen nur eine maximale Anzahl an gelandeten Schiffen erlaubt ist.

Dort müßte eigentlich das o.g Script bestens funktionieren, da sich dadurch die Schleife automatisch stoppt.
Probiert es mal aus, so habt ihr eine eigene gängige Schiffswerft. Das Thalon X-Trans einfach mit nem X3 Schiff auswechseln.
Und gebt mal ein Feedback ob das klappt bitte.
Painkiller
Posts: 1546
Joined: Wed, 6. Nov 02, 20:31
x2

Post by Painkiller »

*hm* ich würde es so machen:

Es werden Schiffe erstellt: 10 Stück des einen Types. Sind 10 Stück erreicht, Pause für 10 Minuten. Dann schauen was los ist. Sind noch immer 10 da, dann wieder 10 min. warten, ansonsten bauen bis wieder 10 da sind.

Fertig.

Btw. Würde ich das noch anders machen *g*:

Für versch. Schiffstypen, und die in der Überprüfung miteinbeziehen. Dann kannste auch auswählen welche Schiffe.

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