Schiff soll zu position fliegen..tuts aber nicht....

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
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Schiff soll zu position fliegen..tuts aber nicht....

Post by Moonraven »

Howdy,

tja...wie einige vor mir stehe ich vor dem Problem ein Nicht-Spielerschiff zu einer gegebenen Position in einem Sektor fliegen zu lassen....aber ich kriegs nicht hin. Egal was ich tue (ich denk ich hab alle tips hier im Forum ausprobiert).....wenn ich im Sektor bin fliegt das Teil wild durch die Gegend unter strengster Vermeidung der gegebenen Position.

Hier mal das Script:

Code: Select all

001   $ship -> set race logic control enabled to [FALSE]
002   $dx = $Zielpos[0]
003   $dy = $Zielpos[1]
004   $dz = $Zielpos[2]
005   $dstsector = $Zielpos[3]
006 @ $gate = $ship -> call script 'lib.ur.SIS.GetNearestGate' :  sector=$dstsector  x-position=$dx  y-position=$dy  z-position=$dz
007   * Ein Sektor ohne Tor
008   skip if $gate != null
009    return [FALSE]
010   $ship -> set destination to $dstsector
011   $jumperg = $ship -> use jump drive: target=$gate
012   skip if $jumperg
013    return [FALSE]
014 @ = wait randomly from 30000 to 50000 ms
015   $ship -> set destination to $dstsector
016   *= $ship -> call script !ship.cmd.moveposition.std :  array    x, y, z, sector=$Zielpos
017 @ = $ship -> move to position: x=$dx y=$dy z=$dz with precision $prezession m
018   $ship -> set destination to null
019   return [TRUE]

Bis einschließlich Zeile 13 scheint alles zu funktionieren...das Schiff kommt aus dem richtigen Tor raus.......und macht dann was es will.

Ich hoffe jemand kann mir weiterhelfen.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Ich hab mal weitergetestet....selbst das FlyTo-Script von Xai, statt move.movetoposition, funktioniert nicht.

Ich bin ehrlich mit meinem Latein am ende. :(
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,

das gleiche Problem hatte ich in meinem WP Lieferscript....

sieht genau so aus wie mein 'move.tl' Script. :-)

Du musst ne Pause setzen nach dem Sprung.
Ausserdem musst Du den Wert 'precision' richtig berechnen wegen der Kollisionserkennung.

Hier mein Script das funzt auch wenn Du im Sektor bist....

Code: Select all

infinite loop detection enabled=[TRUE]
002   $schiff -> set race logic control enabled to [FALSE]
003   * Position bestimmen
004   $x = $target -> get x position
005   $y = $target -> get y position
006   $z = $target -> get z position
007   $sec = $target -> get environment
008   $size = $target -> get size of object
009   $homebase = $schiff -> get homebase
010   $homesec = $schiff -> get environment
011   $size = $size / 222 + 2500
012   $x = $x + $size
013   $y = $y + $size
014   $z = $z + $size
015   * Zum Ziel springen
016   if $homesec != $sec
017 @  $tor = $schiff -> call script 'Xai.lib.find.nearest.gate' :  target=$target
018    $schiff -> set destination to $target
019 @  = wait 10000 ms
020    $jmp.status = $schiff -> use jump drive: target=$tor
021    if not $jmp.status
022     send incoming message 'Sprung fehlgeschlagen' to player: display it=[TRUE]
023 @   = wait 100 ms
024     return null
025    end
026   end
027 @ = wait randomly from 1000 to 3000 ms
028   $schiff -> set destination to $target
029   START $schiff -> command COMMAND_MOVE_POS : arg1=$sec, arg2=$x, arg3=$y, arg4=$z
030 @ = $schiff -> call script '!move.movetoposition' :  sector=$sec  position x=$x  position y=$y  position z=$z  precision=$size
031   $schiff -> set destination to null
032   return null
Bis denn Thalon
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Das hab ich schon...siehe Zeile 14 :) Was aber nix hilft.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Also bei mir funzt es einwandfrei. Du musst nur aufpassen wie du das Script aufrufst. Am besten mit START....

Auch wenn das Schiff schon da war gabs Probleme. Am besten ein neues Schiff erzeugen und gleich '$schiff -> set race logic control enabled to [FALSE]' setzen. Bevor es dir KI in die Finger bekommt....

Bis denn Thalon
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

Ich werd mal ausprobieren ob sich was ändert wenn ich das Schiff per Script erzeuge (bisher isses in der Map drinn). Vielleicht hilfts was.

Ich habe btw. auch schon dein Script (leicht modifiziert, so das es einen beliebigen Sector/position nimmt) verwendet.....ohne erfolg.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]
User avatar
Moonraven
Posts: 968
Joined: Wed, 27. Aug 03, 11:13
x3

Post by Moonraven »

So..nach langem morgentlichen Kampf, hab ich, glaub ich zumindest, die Lösung.

Das Problem an und für sich war nicht das Move.Movetoposition sondern der Sprung. Beim abchecken verschiedener anderer Scripte bin ich dann auf den Sprungbefehl von Xai gekommen und hab ihn adaptiert.

Das sieht jetzt wie folgt aus:

Code: Select all

001   $ship -> set race logic control enabled to [FALSE]
002   $dx = $Zielpos[0]
003   $dy = $Zielpos[1]
004   $dz = $Zielpos[2]
005   $dstsector = $Zielpos[3]
006 @ $gate = $ship -> call script 'lib.ur.SIS.GetNearestGate' :  sector=$dstsector  x-position=$dx  y-position=$dy  z-position=$dz
007   * Ein Sektor ohne Tor
008   skip if $gate != null
009    return [FALSE]
010   $ship -> set command: COMMAND_MOVE_SECTOR  target=$dstsector target2=null par1=null par2=null
011   set script command: COMMAND_TYPE_NAV_18
012   $ship -> set destination to $dstsector
013   $ship -> set tactical to [ACTION_ENTER_GATE]
014   $jumperg = $ship -> use jump drive: target=$gate
015   skip if $jumperg
016    return [FALSE]
017 @ = $ship -> move around 6000 ms
018   $ship -> set destination to $dstsector
019   START $ship -> command COMMAND_MOVE_POS : arg1=$dstsector, arg2=$dx, arg3=$dy, arg4=$dz
020 @ $ship = $ship -> move to position: x=$dx y=$dy z=$dz with precision $prezession m
021   $ship -> set destination to null
022   return [TRUE]
Ich habe es ein paar mal ausproiert und es funktioniert wunderbar.

Was ich ebenfalls geändert habe ist, das das betreffende Schiff nun per Script erzeugt wird und dabei gleich die racelogic ausgeschalten wird.
Gruß Moonraven
Wer lesen kann, ist ganz klar im Vorteil.
[ external image ]

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