Unterstüzung beim Scripten erbeten

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
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Unterstüzung beim Scripten erbeten

Post by ThalonMook »

Ich bräuchte Hilfe bei einem Script....

Es geht darum das ich ein Schiff clonen will und dann das Original zerstöre...

Ich hab das HRS Script von Holo_Doc abgeändert... Nur stürtz das Spiel nach Ausführen des Scriptes ab... jetzt hab ich ne Frage wo liegt mein Fehler....

Hier das Script

Code: Select all

Description
Schiff Erneuern
Arguments
1: schiff , Var/Ship , 'Schiff Auswaehlen' 
Source Text
  * Get wares aboard Current ship and type of ship
059 @      $shipwares = [THIS] -> call script 'HRS.Cargo.Gather' :  Ship or Station to Scan=[THIS]
060        
061        $shiptype = [THIS] -> get ware type code of object
062        $newship =  create ship: type=$shiptype owner=Player addto=$whereat x=null y=null z=null
063        
064   * Replicate wares onto new ship
065        $total.stuff.on.old.ship =  size of array $shipwares
066        
067        $counter = 0
068        
069        while $total.stuff.on.old.ship != $counter
070         $ware = $shipwares[$counter]
071         inc $counter = 
072         $this.much = $shipwares[$counter]
073         inc $counter = 
074         $dummy = $newship -> install $this.much units of $ware
075        end
       $name = [THIS] -> get name
088        [THIS] -> set name to 'Adiose Amego YAW AOTA HERE'
089        $homebase = [THIS] -> get homebase
090        $newship -> set name to $name
091        $newship -> set homebase to $homebase
092        
093 @      = [THIS] -> call script 'HRS.movepilot' :  From trader=[THIS]  to  new  ship=$newship
094        
095        [THIS] -> destruct: show no explosion=[TRUE]
096        
097        return null

Das Script 'HRS.Cargo.Gather' gehöhrt zum HRS dort funktioniert es problemlos....

Wo ist da mein Fehler ???

hab auch schon THIS mit $Schiff getauscht....

Ok ich hoffe mir kann jemand helfen....

Bis denn...

Thalon
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

Code: Select all

069        while $total.stuff.on.old.ship != $counter 
070         $ware = $shipwares[$counter] 
071         inc $counter = 
072         $this.much = $shipwares[$counter] 
073         inc $counter = 
074         $dummy = $newship -> install $this.much units of $ware 
075        end 
Das könnte ein Endlosschleifenkandidat werden.

Warum zweimal inc $counter = ?

Wenn nur eine Ware vorhanden ist hast Du vielleicht eine Endlosschleife. Reicht der Wink? ;)

Gruß
Lucike

PS: Man müsste mal einen Blick in das Script HRS.Cargo.Gather werfen. Wie sieht das Ergebnis aus? Ware/Menge? Installierte und geladene Waren?
Image
ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Post by ticaki »

Lucike FZ wrote:

Code: Select all

069        while $total.stuff.on.old.ship != $counter 
070         $ware = $shipwares[$counter] 
071         inc $counter = 
072         $this.much = $shipwares[$counter] 
073         inc $counter = 
074         $dummy = $newship -> install $this.much units of $ware 
075        end 
Das könnte ein Endlosschleifenkandidat werden.

Warum zweimal inc $counter = ?

Wenn nur eine Ware vorhanden ist hast Du vielleicht eine Endlosschleife. Reicht der Wink? ;)

Gruß
Lucike

PS: Man müsste mal einen Blick in das Script HRS.Cargo.Gather werfen. Wie sieht das Ergebnis aus? Ware/Menge? Installierte und geladene Waren?
Zustimmung... Jedoch kannst du die Endlosschleife durch das verändern der Zeile 069 verhindern.

Code: Select all

069        while $total.stuff.on.old.ship < $counter 
Gruß ticaki
Zur Zeit nicht aktiv
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Aber das sollte nicht das Problem sein.... Das Schiff hat so gut wie immer mindestens eine Ware an Bord.... Das 2. INC ist dafür weil in dem Array $shipwares als erstes die Ware und danach die Anzahl eingetragen sind..

Stimmt der aufruf THIS oder sollte ich dort die Variabe $schiff angeben ???

Beim HRS funktioniert es ja warum nicht bei mir ???

Ach ja den Absturz bekommen ich nur wenn ich nach ausführen des Scripts in die Besitzliste gehe ??


Bis denn Thalon...
Last edited by ThalonMook on Sun, 3. Oct 04, 11:29, edited 1 time in total.
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

Oder

Code: Select all

001   $While =  size of array $shipwares
002   while $While
003    dec $While = 
004    $this.much = $shipwares[$While]
005    dec $While = 
006    $ware = shipwares[$While]
007    = $newship -> install $this.much units of $ware
008   end
009   return null
Oder. Ich kenne das Ergebnis von HRS.Cargo.Gather nicht.

Code: Select all

002   while $While > 0
Last edited by Lucike on Sun, 3. Oct 04, 11:29, edited 1 time in total.
Image
ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Post by ticaki »

thalonMook wrote:Aber das sollte nicht das Problem sein.... Das Schiff hat so gut wie immer mindestens eine Ware an Bord.... Das 2. INC ist dafür weil in dem Array $shipwares als erstes die Ware und danach die Anzahl eingetragen sind..

Stimmt der aufruf THIS oder sollte ich dort die Variabe $schiff angeben ???

Beim HRS funktioniert es ja warum nicht bei mir ???


Bis denn Thalon...
$schiff ;) wenn du dich auf das alte Schiff beziehst.

Gruß ticaki
Zur Zeit nicht aktiv
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Also das heisst wenn ich mich auf das alte Schiff beziehe verwende ich $schiff und für das neue THIS. Ist das so ok ???

Ich glaub ich hab den Fehler gefunden das Script weis nicht wo es das neue Schiff erstellen soll die Var. $wereat hab ich nicht berücksichtigt.

Nun gut wie kann ich den Standort des Schiffes ermitteln ???

Ein bischen kenn ich mich langsam mit der Scriptsprache aus aber die Befehle kenn ich noch nicht alle ....

Bis denn Thalon
ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Post by ticaki »

[THIS] Ist das Objekt auf dem das Script läuft... und wenn du es auf null startest, was ich nicht erkennen kann, bezieht sich [this] immer auf null und nicht auf ein Object... und wenn whereat null ist... ja dann stürtzt dein Spiel beim aufruf der Besitztümerliste ab.

Gruß ticaki
Zur Zeit nicht aktiv
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Also wenn ich $wereat = $schiff-> get position as array benutze sollte es doch funktionieren....

Ich habs noch nicht ganz verstanden also ich starte das Script auf null .....
Das heisst die erste eingabe beim Start des Scriptes.......
Dann ist THIS = null und ich muss meine Var. $schiff anstatt THIS benutzen...

Also sollte es dann so richtig sein ????

Code: Select all

Description
Schiff Erneuern
Arguments
1: schiff , Var/Ship , 'Schiff Auswaehlen' 
Source Text

001   $whereat = $schiff -> get position as array
002   * Get wares aboard Current ship and type of ship
003 @ $shipwares = $schiff -> call script 'HRS.Cargo.Gather' :  Ship or Station to Scan=$schiff
004   
005   $shiptype = $schiff -> get ware type code of object
006   $newship =  create ship: type=$shiptype owner=Player addto=$whereat x=null y=null z=null
007   
008   * Replicate wares onto new ship
009   $total.stuff.on.old.ship =  size of array $shipwares
010   
011   $counter = 0
012   
013   while $total.stuff.on.old.ship != $counter
014    $ware = $shipwares[$counter]
015    inc $counter = 
016    $this.much = $shipwares[$counter]
017    inc $counter = 
018    $dummy = $newship -> install $this.much units of $ware
019   end
020   
021   $name = $schiff -> get name
022   $schiff -> set name to 'Adiose Amego YAW AOTA HERE'
023   $homebase = $schiff -> get homebase
024   $newship -> set name to $name
025   $newship -> set homebase to $homebase
026   
027 @ = $schiff -> call script 'HRS.movepilot' :  From trader=$schiff  to  new  ship=$newship
028   $schiff -> destruct: show no explosion=[TRUE]
029   
030   return null



Bis denn Thalon
ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Post by ticaki »

Ist noch nicht ganz richtig... Du kannst solange [this] zum Starten von Scripten benutzten solange die Unterscripte nicht erwarten das in [this] ein Objekt ist... Ich denke z.B. das z003 auf [this] gestartet werden muß.

Weiterhin ist $whereat = get pos.... falsch $whereat muß ein/e/en Station/BigShip/Sector enthalten... das beste ist du setzt das x,y und z bei create ship auf 0 und benutzt einen $whereat = $schiff -> get environment um festzustellen wo sich das betreffende Schiff befindet :)

Gruß ticaki
Zur Zeit nicht aktiv
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Also ich glaube jetzt hab ich es kappiert....


Dan muss es so aussehen:

Code: Select all

Description
Schiff Erneuern
Arguments
1: schiff , Var/Ship , 'Schiff Auswaehlen' 
Source Text

001   $whereat = $schiff -> get environment
002   *$whereat = $schiff -> get position as array
003   * Get wares aboard Current ship and type of ship
004 @ $shipwares = [THIS] -> call script 'HRS.Cargo.Gather' :  Ship or Station to Scan=$schiff
005   
006   $shiptype = $schiff -> get ware type code of object
007   $newship =  create ship: type=$shiptype owner=Player addto=$whereat x=null y=null z=null
008   
009   * Replicate wares onto new ship
010   $total.stuff.on.old.ship =  size of array $shipwares
011   
012   $counter = 0
013   
014   while $total.stuff.on.old.ship != $counter
015    $ware = $shipwares[$counter]
016    inc $counter = 
017    $this.much = $shipwares[$counter]
018    inc $counter = 
019    $dummy = $newship -> install $this.much units of $ware
020   end
021   
022   $name = $schiff -> get name
023   $schiff -> set name to 'Adiose Amego YAW AOTA HERE'
024   $homebase = $schiff -> get homebase
025   $newship -> set name to $name
026   $newship -> set homebase to $homebase
027   
028 @ = [THIS] -> call script 'HRS.movepilot' :  From trader=$schiff  to  new  ship=$newship
029   $schiff -> destruct: show no explosion=[TRUE]
030   
031   return null

Es funktioniert ....

Cool Danke für die Hilfe....


Bis denn Thalon...

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