Frage zu: 6.038 <RetVar/IF> <RefObj> is docking
Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum
-
- Posts: 2143
- Joined: Sat, 3. Apr 04, 16:38
Frage zu: 6.038 <RetVar/IF> <RefObj> is docking
Hi Leute, ich hab ne Frage zu dem Scriptbefehl hier...
6.038 <RetVar/IF> <RefObj> is docking allowed at <Var/Ship/Station>
Was wird denn als <RetVar/IF> zurückgegeben, denn ich möchte von dem Befehl etwas abhängig machen, also wenn das andocken erlaubt ist soll...
und wenn es net erlaubt ist was anderes, aber wie?
Gruß
StarTrekMarc
6.038 <RetVar/IF> <RefObj> is docking allowed at <Var/Ship/Station>
Was wird denn als <RetVar/IF> zurückgegeben, denn ich möchte von dem Befehl etwas abhängig machen, also wenn das andocken erlaubt ist soll...
und wenn es net erlaubt ist was anderes, aber wie?
Gruß
StarTrekMarc
-
- Posts: 44
- Joined: Sun, 14. Nov 04, 21:24
z.B.
RetVar/IF kann eine Ergebnisvariable sein oder direkt mit IF oder WHILE oder was auch immer als Schleife oder eben Wahrheitsabfrage "IF" geschrieben werden!
RetVar/IF kann eine Ergebnisvariable sein oder direkt mit IF oder WHILE oder was auch immer als Schleife oder eben Wahrheitsabfrage "IF" geschrieben werden!
Code: Select all
If *ship* -> is docking allowed at *Handelstation*
send incomming message "ERLAUBT" diplay it:[TRUE]
end
-
- Posts: 4861
- Joined: Wed, 6. Nov 02, 20:31
Re: Frage zu: 6.038 <RetVar/IF> <RefObj> is doc
Wie wäre es mit:StarTrekMarc[USF] wrote:Hi Leute, ich hab ne Frage zu dem Scriptbefehl hier...
6.038 <RetVar/IF> <RefObj> is docking allowed at <Var/Ship/Station>
Was wird denn als <RetVar/IF> zurückgegeben, denn ich möchte von dem Befehl etwas abhängig machen, also wenn das andocken erlaubt ist soll...
und wenn es net erlaubt ist was anderes, aber wie?
Gruß
StarTrekMarc
Code: Select all
If $STM is docking allowed at $Coladose
$STM -> trinken
else
$STM -> durstig bleiben
end;

Zur Zeit nicht aktiv
-
- Posts: 2143
- Joined: Sat, 3. Apr 04, 16:38
Guter Witz und danke für die Hilfe, ich brauchs jetzt doch noch net, jetzt is dieser Script erstmal ein Prototyp, der aber irgendwie net geht:
Also er soll allen Schiffen im Sektor, die den gleichen Typ haben wie das, auf dem das Script gestartet wird, eine Heimatbasis zuweisen.
Warum geht das nicht?
Gruß
StarTrekMarc
Code: Select all
entfernt
Warum geht das nicht?
Gruß
StarTrekMarc
Last edited by StarTrekMarc on Wed, 24. Nov 04, 20:02, edited 1 time in total.
-
- Posts: 44
- Joined: Sun, 14. Nov 04, 21:24
-
- Posts: 315
- Joined: Tue, 23. Mar 04, 19:49
Bei der While Schleife ab 008 müßte bei 013 ein Inc $sZ rein sonst läuft die Schleife nicht
das Sz=SZ+1 geht M.E nur wenn anschließend mit Goto label wieder zu 008 gesprungen würde. und vor dem Goto ein Abbruchskriterium definiert wird. Duie While Schleife + Inc ist hierzu besser. Aber dann bei 007 Den Schleifenzälher vorher auf 0 setzen oder von der letzten Arrayposition bis 0 herunterarbeiten lassen , dann mit Dec $Z.
Außerdem ist 013 im If Block mit der Schiffklassenbestimmung und kommt nur zum Tragen wenn die Schiffsklasse der abgefragten Schiffes mit dem aktuellen Schiff übereinstimmt, die zeile müßte aber generell abgefragt werden.
Und ich würde nach Erstellen des Schiffsarray den Umfang mit get size of Array $Schiff.i feststellen und dann den Schleifenzähler statt auf 1000 fix nur auf den Arrayumfang begrenzen sonst prüft die Schleife irgendwann nur noch nicht vorhandene Schiffe und steigt entweder aus oder korrigiert über NULL (was sehr rechenintensiv und nicht empfehlenswert ist , siehe generelle Kommentare von ticaki zu diesem Thema).
Außerdem wird die Schiffklasse über das aktuelle Schiff bestimmt. Wäre da nicht eine Vorgabe per Script oder per manuelle Dateneingabe besser ?
Außerdem $Schiff.i[$i] prüft nur ein Schiff, nämlich das Schiff an der Indexposition 0 wenn $i bei 005 als 0 definiert wird und anschließend unverändert bleibt. 015 nach dem Schluß des While blocks nützt nichts da der Block ohne Inc oder Dec Befehl nicht wiederholt wird solange ein Abbruchskriterium im While Befehl vorhanden ist.
Besser:
$ Schiff.i[$Z] = $Schiff
Dann wird das gesamte Array per While Schleife mit dem Schleifenzähler als Zeiger der Indexposition des Arrays abgearbeitet.
das Sz=SZ+1 geht M.E nur wenn anschließend mit Goto label wieder zu 008 gesprungen würde. und vor dem Goto ein Abbruchskriterium definiert wird. Duie While Schleife + Inc ist hierzu besser. Aber dann bei 007 Den Schleifenzälher vorher auf 0 setzen oder von der letzten Arrayposition bis 0 herunterarbeiten lassen , dann mit Dec $Z.
Außerdem ist 013 im If Block mit der Schiffklassenbestimmung und kommt nur zum Tragen wenn die Schiffsklasse der abgefragten Schiffes mit dem aktuellen Schiff übereinstimmt, die zeile müßte aber generell abgefragt werden.
Und ich würde nach Erstellen des Schiffsarray den Umfang mit get size of Array $Schiff.i feststellen und dann den Schleifenzähler statt auf 1000 fix nur auf den Arrayumfang begrenzen sonst prüft die Schleife irgendwann nur noch nicht vorhandene Schiffe und steigt entweder aus oder korrigiert über NULL (was sehr rechenintensiv und nicht empfehlenswert ist , siehe generelle Kommentare von ticaki zu diesem Thema).
Außerdem wird die Schiffklasse über das aktuelle Schiff bestimmt. Wäre da nicht eine Vorgabe per Script oder per manuelle Dateneingabe besser ?
Außerdem $Schiff.i[$i] prüft nur ein Schiff, nämlich das Schiff an der Indexposition 0 wenn $i bei 005 als 0 definiert wird und anschließend unverändert bleibt. 015 nach dem Schluß des While blocks nützt nichts da der Block ohne Inc oder Dec Befehl nicht wiederholt wird solange ein Abbruchskriterium im While Befehl vorhanden ist.
Besser:
$ Schiff.i[$Z] = $Schiff
Dann wird das gesamte Array per While Schleife mit dem Schleifenzähler als Zeiger der Indexposition des Arrays abgearbeitet.
-
- Posts: 2143
- Joined: Sat, 3. Apr 04, 16:38
Code: Select all
entfernt

Warum geht das net?
Last edited by StarTrekMarc on Wed, 24. Nov 04, 20:02, edited 1 time in total.
-
- Posts: 315
- Joined: Tue, 23. Mar 04, 19:49
Weil das INC nicht auf 13 sondern NACH dem IF Block auf 014 und VOR dem END des While Blocks gehört.
Ansonsten läuft die Schleife nicht wenn auf Indexposition 0 des Arrays die Schiffsklasse nicht identisch ist. Und der Zähler wird dann auch nicht bei jedem Durchlauf erhöht, d.h. die Schleife steht irgendwann
Tipp: auf Zeile 0 : Enable infinite loop detection = TRUE
Ansonsten läuft die Schleife nicht wenn auf Indexposition 0 des Arrays die Schiffsklasse nicht identisch ist. Und der Zähler wird dann auch nicht bei jedem Durchlauf erhöht, d.h. die Schleife steht irgendwann
Tipp: auf Zeile 0 : Enable infinite loop detection = TRUE
-
- Posts: 97
- Joined: Tue, 23. Mar 04, 10:00
Deine Schleife
Hallo StarTrekMarc,
schau dir dein Script mal genau an und überlege was du mit dem Array $Schiff.i machst
Na, gemerkt?
Du schreibst 'null' an das Array-Element $Schiff.i[Z]
Richtig wäre:
MfG
schau dir dein Script mal genau an und überlege was du mit dem Array $Schiff.i machst

Code: Select all
009 $Schiff.i[$Z] = $Schiff
Du schreibst 'null' an das Array-Element $Schiff.i[Z]
Richtig wäre:
Code: Select all
009 $Schiff = $Schiff.i[$Z]
Handel ist Krieg, der Einsatz von Waffen ist Ressourcenverschwendung!
-
- Posts: 44
- Joined: Sun, 14. Nov 04, 21:24
Vorschlag:
Hab selber probiert, wäre DAS nich einfacher?
Hab selber probiert, wäre DAS nich einfacher?
Code: Select all
001 infinite loop detection enabled=[TRUE]
002 $Ship = [THIS]
003 $Ship.Class = $Ship -> get object class
004 $Ship.array = [SECTOR] -> get player owned ship array from sector
005 $count = size of array $Ship.array
006 while $count
007 dec $count =
008 $Akt.Ship = $Ship.array[$count]
009 $Akt.Ship.Class = $Akt.Ship -> get object class
010 if $Akt.Ship.Class == $Ship.Class
011 $Akt.Ship -> set homebase to $Homebase
012 end
013 @ = wait 1 ms
014 end
015 return null