Frage zu: 6.038 <RetVar/IF> <RefObj> is docking

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

User avatar
StarTrekMarc
Posts: 2143
Joined: Sat, 3. Apr 04, 16:38
x4

Frage zu: 6.038 <RetVar/IF> <RefObj> is docking

Post by StarTrekMarc »

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
Deleted User

Post by Deleted User »

Kann ich auch nicht viel zu sagen aber versuch doch mal dir das in einer Var zu speichen und die dann im Logbuch ausgeben zu lassen.
User avatar
Keitaro
Posts: 44
Joined: Sun, 14. Nov 04, 21:24
x3

Post by Keitaro »

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!

Code: Select all

If *ship* -> is docking allowed at *Handelstation*
   send incomming message "ERLAUBT" diplay it:[TRUE]
end
ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Re: Frage zu: 6.038 <RetVar/IF> <RefObj> is doc

Post by ticaki »

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
Wie wäre es mit:

Code: Select all

If $STM is docking allowed at $Coladose
 $STM -> trinken
else
 $STM -> durstig bleiben
end;
Gruß ticaki :D
Zur Zeit nicht aktiv
User avatar
StarTrekMarc
Posts: 2143
Joined: Sat, 3. Apr 04, 16:38
x4

Post by StarTrekMarc »

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:

Code: Select all

entfernt
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
Last edited by StarTrekMarc on Wed, 24. Nov 04, 20:02, edited 1 time in total.
User avatar
Keitaro
Posts: 44
Joined: Sun, 14. Nov 04, 21:24
x3

Post by Keitaro »

HUH! Sorry, aber mit arrays habe ich mich noch nicht beschäftigt!
Iss auch n bissl weit gegriffen, arrays sind ne heftige nummer bei X2 find ICH!
User avatar
Nemomuc
Posts: 315
Joined: Tue, 23. Mar 04, 19:49
x2

Post by Nemomuc »

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.
User avatar
StarTrekMarc
Posts: 2143
Joined: Sat, 3. Apr 04, 16:38
x4

Post by StarTrekMarc »

Code: Select all

entfernt
So sieht der Script jetzt aus, aber es geht immer noch net, trotzdem danke ;-)

Warum geht das net?
Last edited by StarTrekMarc on Wed, 24. Nov 04, 20:02, edited 1 time in total.
User avatar
Nemomuc
Posts: 315
Joined: Tue, 23. Mar 04, 19:49
x2

Post by Nemomuc »

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
User avatar
hraban
Posts: 97
Joined: Tue, 23. Mar 04, 10:00
x3

Deine Schleife

Post by hraban »

Hallo StarTrekMarc,

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 
Na, gemerkt?

Du schreibst 'null' an das Array-Element $Schiff.i[Z]

Richtig wäre:

Code: Select all

009    $Schiff = $Schiff.i[$Z]
MfG
Handel ist Krieg, der Einsatz von Waffen ist Ressourcenverschwendung!
User avatar
StarTrekMarc
Posts: 2143
Joined: Sat, 3. Apr 04, 16:38
x4

Post by StarTrekMarc »

Danke, jetzt geht es ;-)
User avatar
Keitaro
Posts: 44
Joined: Sun, 14. Nov 04, 21:24
x3

Post by Keitaro »

Vorschlag:

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
User avatar
StarTrekMarc
Posts: 2143
Joined: Sat, 3. Apr 04, 16:38
x4

Post by StarTrekMarc »

Du weißt garnicht wofür ich das brauch ;-)

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