Undock erzwingen?

Hier ist der ideale Ort um über Scripts und Mods für X³: Terran Conflict und X³: Albion Prelude zu diskutieren.

Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Undock erzwingen?

Post by Faelnirv » Thu, 9. Apr 09, 15:55

Ich war mir nich sicher ob das ins Scriptforum oder ins Forum für technische Unterstützung gehört....ich packs erstmal hier hinein^^

Ich hab folgendes Problem:

Hub-Plot --> ich sollte den komischen Boronen einsammeln, hatter aber kein Lebenserhaltungssystem an Bord. Also kurzerhand zur nächsten PiriBase geflogen, das Teil eingebaut und zurück. Wo war der Borone? Er war an der nächsten Station angedockt. Ok...nicht weiterschlimm....Leitsystem hat die Station markiert...also angedockt an die Station. Aber nix passiert...kann niemanden anfunken, abdocken und wieder andocken bringt auch nix. Ich hatte vorher ne ewigkeit nich gespeichert, deswegen hätte mir neuladen auch nichts gebracht.

Wie kann ich den Boronen zum abdocken zwingen? Ich könnte wetten dafür gibts nen Befehl, nur bin ich leider blutiger Anfänger was das scripten angeht.


pls help :oops:

greetZ Faelnirv
let's smoke a bong or play ping pong

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Post by Faelnirv » Sat, 11. Apr 09, 09:56

keiner der mir hilft....O.o

ich möchte die Story weiterspielen.... :cry:
let's smoke a bong or play ping pong

User avatar
Saetan
Posts: 3223
Joined: Wed, 1. Feb 06, 19:26
x4

Post by Saetan » Sat, 11. Apr 09, 10:08

Ich habs mir einfach gemacht, und mal einfach einen Teil des Quelltextes eines meiner Scripte kopiert:

Code: Select all

073 ||while $Station.Outdated -> get number of landed ships
074 @ |||= wait 10 ms
075 |||$Array.DockedShips = $Station.Outdated -> get ship array from sector/ship/station
076 |||$Array.DockedShips.Size = size of array $Array.DockedShips
077 |||
078 |||$k = -1
079 |||while $k < ( $Array.DockedShips.Size - 1 )
080 @ ||||= wait 10 ms
081 ||||inc $k =
082 ||||
083 ||||$Ship = $Array.DockedShips[$k]
084 @ ||||= $Ship -> fly to sector $Station.Sector
085 ||||
086 |||end
087 ||end
Du dürftest hier allerdings einfacher davon kommen, da du nur ein spezielles "Schiff" (Astronaut) abdocken lassen willst ... ich gugg mal schnell.


--- edit ---
Mhmm, ne, über eine Benutzereingabe kann man scheinbar doch kein angedocktes Schiff wählen ... jedenfalls hätte ich das auf die Schnelle nicht gefunden.

In diesem Fall könntest du aber obigen Code nachbauen ... das einzige was du davor noch benötigst ist die Auswahl der Station (=> get user input) welche, in obigem Fall, die erhaltene Eingabe als $Station.Outdated speichern würde. Auch beim Befehl fly to sector müsstest du natürlich den Sektor auswählen, in welcher die Station steht (oder diese per Script ermitteln lassen)

ganner
Posts: 36
Joined: Fri, 19. Dec 08, 21:29
x4

Post by ganner » Sat, 11. Apr 09, 10:51

hast du auch genug laderaum übrig? So ein problem hatte ich auch mahl.

User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Sat, 11. Apr 09, 12:26

get number of landet ships anschließend arry size? findest du das nicht sehr umständlich?

Ich meine das Array ermittelt alle Schiffe die gedockt sind, und size übergibt die grösse des Arrays womit man praktisch in dem Fall get number of landet ships überflüssig gemacht hat.

zudem könnte man eine if abfrage einbaun ala if $ship class of Astronaut (global objekt commands) und es mit einem scriptcall versehen ala START $ship -> call script !move.undock

ich stell mir das so viel einfacher vor.

Code: Select all

$array.ship.docked (Var/If) $station (RefObj) -> get ship array from sector/ship/station*
$size.ship.dock get size of array $array.ship.docked
wihle $size.ship.dock
 dec $size =
 $ship = $array.ship.docked [$size.ship.dock]
 skip if $ship class/or type Astronaut
  START $ship -> call script !move.undock
end
*aus dem Kopf befehle und Vars können abweichen
wenn man ein npc schiff erwischen sollte, dann führt dieser seinen job nicht weiter und man muss dem schiff erneut den befehl (<RefObj> start job) geben damit er diesen wieder aufnimmt.

die var $k schnall ich auch nicht so ganz. liest sich fast so als wäre $k beginnend von -1 nach oben vorausgesetzt k ist kleiner als size wobei dann k = size ignoriert wird oO sprich ein schiff wird so fehlen.

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Post by Faelnirv » Fri, 17. Apr 09, 19:33

Generalwest wrote: ich stell mir das so viel einfacher vor.

Code: Select all

$array.ship.docked (Var/If) $station (RefObj) -> get ship array from sector/ship/station*
$size.ship.dock get size of array $array.ship.docked
wihle $size.ship.dock
 dec $size =
 $ship = $array.ship.docked [$size.ship.dock]
 skip if $ship class/or type Astronaut
  START $ship -> call script !move.undock
end
*aus dem Kopf befehle und Vars können abweichen
wenn man ein npc schiff erwischen sollte, dann führt dieser seinen job nicht weiter und man muss dem schiff erneut den befehl (<RefObj> start job) geben damit er diesen wieder aufnimmt.
what?

so ganz erschlieißen sich mir die Variablen nich^^

wofür steht (Var/If) ?

(RefObj) ist sicherlich die Station wo der Astronaut angedockt ist (also das was ich mir als Referenzobjekt vorstelle)

und was muss ich bei sector/ship/station angeben?


achso...und noch was... in dem Scripteditor find ich mich irgendwie überhaupt nich zurecht^^

wär cool wenn mir jemand von euch das script zusammenbauen könnte und ich nur noch über den Scripteditor die Station angebe (soweit bekomm ich noch klar^^...aber die ganzen Befehle zusammensuchen...O.o)
let's smoke a bong or play ping pong

User avatar
Saetan
Posts: 3223
Joined: Wed, 1. Feb 06, 19:26
x4

Post by Saetan » Fri, 17. Apr 09, 19:44

Generalwest wrote:get number of landet ships anschließend arry size? findest du das nicht sehr umständlich?
Ja, gut ... der Code ließe sich optimieren, wenn ich mir das gerade so durchseh. Man könnte das auch doppelte Sicherheit nennen.

Wegen den KI Schiffen, berechtigter Einwand ... das muss ich mal nachprüfen.

Generalwest wrote:die var $k schnall ich auch nicht so ganz. liest sich fast so als wäre $k beginnend von -1 nach oben vorausgesetzt k ist kleiner als size wobei dann k = size ignoriert wird oO sprich ein schiff wird so fehlen.
Dies liest sich merkwürdig, kann sein ... aber es wird keines ausgelassen ... keine Sorge. Statt bei 0 beginnt es bei -1, dafür endet es statt bei "size" bei "size-1".
Die Kunst liegt darin, dass die Variable k um eins erhöht wird, bevor irgendwas anderes gemacht wird. Warum ich diese Variante gewählt habe?
Da es so einfacher zu handhaben ist, wenn in einer Schleife ein "skip if ... -> continue" vorkommt. Dann ginge das Variablen erhöhen am Ende der Schleife verloren.

User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Fri, 17. Apr 09, 21:01

ich war zu dem leicht verwirrt über deine Arbeitsweise. Sagen wir so sie ist ungewohnt für mich mehr nicht. Zudem sehe ich das so das man so mehr Verwirrung schaft unter den Anfängern (würde mir so gehen).

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Post by Faelnirv » Fri, 17. Apr 09, 21:32

pls leute...helft mir da mal weiter....ich lad euch auch das savegame hoch wenns sein muss....ich will da endlich die story weiterspieln :cry:
let's smoke a bong or play ping pong

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Post by Faelnirv » Thu, 30. Apr 09, 19:01

hmmm...also ich hab die letzten 1,5 h damit verbracht eure Scripte nachzubauen und zum laufen zu bringen. Ich bin mir ziemlich sicher dass ich eure Scripte richtig nach gebaut habe. Wenn ich jetzt im Scripteditor das Script auswähle und "r" drücke komm ich zu ner Auswahl. Da wähle ich natürlich "select Station" (oder so ähnlich) und wähle die Station aus wo der Astronaut angedockt ist. Danach zeigt mir der Scripteditor wieder was an (sieht aus wie eine Zusammenfassung oder so^^) und ich drücke ENTER .

so...der Astronaut ist immer noch angedockt...O.o

nichts passiert....mittlerweile waren auch noch andere Schiffe angedockt aber die haben genauso wenig reagiert wie der Astronaut. :?

(ich kann immer noch savegame hochladen wenns nötig ist)

pls help :cry:
let's smoke a bong or play ping pong

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Thu, 30. Apr 09, 19:05

poste mal den Quelltext von deinem Script (gehe dafür in den scripts-unterordner deines X3TC-Verzeichnisses und öffne dein Script über einen Doppelklick darauf im Browser und kopiere das was du siehst in einen neuen Post hier rein..


PS die bisher geposteten vorschläge sind übrigens aus einem umfangreicheren Script, was man an den Zeilennummern sieht.. ich hab jetzt nicht genauer nachgesehen ob die gezeigten abschnitte auch für sich ohne den rest funktionieren...
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)

User avatar
Saetan
Posts: 3223
Joined: Wed, 1. Feb 06, 19:26
x4

Post by Saetan » Thu, 30. Apr 09, 19:15

Generalwest wrote:

Code: Select all

$array.ship.docked (Var/If) $station (RefObj) -> get ship array from sector/ship/station*
$size.ship.dock get size of array $array.ship.docked
wihle $size.ship.dock
 dec $size =
 $ship = $array.ship.docked [$size.ship.dock]
 skip if $ship class/or type Astronaut
  START $ship -> call script !move.undock
end
*aus dem Kopf befehle und Vars können abweichen
$array.ship.docked (Var/If) $station (RefObj) -> get ship array from sector/ship/station* --> $array.ship.docked [THIS] -> get ship array ...

skip if $ship class/or type Astronaut --> skip if not $ship class/or type Astronaut

... wobei, beim !move.undock kann ich mir vorstellen, dass der Astronaut gleich danach wieder andocken will. Also entweder schnell genug sein, oder:

START $ship -> call script !move.undock --> $ship -> fly to sector $Station.Sector

... dadurch bliebe der Astronaut evtl. im leeren Raum dann einfach stehen, ganz nach Generalwest's Anmerkung weiter oben.

Wenn du diese Änderungen vornimmst, musst du nach starten des Scripts nur noch die betroffene Station (jene, an der der Astonaut angedockt ist) auswählen und dann alle Dialoge noch mit ENTER bestätigen. Dann sollte der Astronaut eigentlich abdocken ...

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Post by Faelnirv » Thu, 30. Apr 09, 19:26

Code: Select all

001   $array.ship.docked = $station -> get ship array from sector/ship/station
002   $size.ship.dock =  size of array $array
003   while $size.ship.dock
004   |dec $size.ship.dock = 
005   |$ship = $array.ship.docked[$size.ship.dock]
006   |skip if not $ship -> is of class Astronaut
007 @ ||START $ship -> call script '!move.undock' : 
008   end
009   return null

sry...ich hab nich gecheckt wie ich in Zeile 1 noch ein THIS reinbekommen soll...

aber stimmt das sonst so? ...
let's smoke a bong or play ping pong

User avatar
Saetan
Posts: 3223
Joined: Wed, 1. Feb 06, 19:26
x4

Post by Saetan » Thu, 30. Apr 09, 19:31

Wähle die Variable an, und drücke Enter ... dadurch kommst du wieder in die Auswahl kommen, in welcher das THIS zu finden sein sollte.

Sollte dem nicht so sein, setze mit dem RetVar/If-"Befehl"

$station = [THIS]

... in die erste Zeile, und lasse (in der jetzt zweiten Zeile) die $station so stehen.

Neue Zeilen einfügen, kannst du mit der Taste EINFG (also "einfügen", evtl ist die bei dir anders abgekürzt).

$size.ship.dock = size of array $array --> $size.ship.dock = size of array $array.ship.docked

User avatar
Faelnirv
Posts: 197
Joined: Wed, 29. Nov 06, 20:57
x3tc

Post by Faelnirv » Thu, 30. Apr 09, 19:35

Wenn ich die Variable auswähle dann Enter...dann THIS

dann ist die Variable mit THIS ersetzt worden...sprich es steht nur noch THIS da....der Name der Variable währe flöten gegangen....soll das so sein?...oder soll da "Varname [THIS]" stehen?

EDIT: ahhh...ich soll $station durch THIS ersetzen
Last edited by Faelnirv on Thu, 30. Apr 09, 19:40, edited 1 time in total.
let's smoke a bong or play ping pong

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Thu, 30. Apr 09, 19:37

nö, nur [THIS] anstatt von $Station passt, die Zeile sollte im endeffekt also so aussehen:

001 $array.ship.docked = [THIS] -> get ship array from sector/ship/station

;)
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)

User avatar
Saetan
Posts: 3223
Joined: Wed, 1. Feb 06, 19:26
x4

Post by Saetan » Thu, 30. Apr 09, 19:37

Nein, das soll so sein.

THIS ist immer das Objekt, auf welchem ein Skript ausgeführt wird. Es ersetzt also die Variable $station, welche ansonsten zuvor mit der Station belegt werden müsste.

Wichtig beim starten des Scriptes ist dabei nur, dass du im erscheinenden Dialog auch die betreffende Station auswählst.
Last edited by Saetan on Thu, 30. Apr 09, 19:37, edited 1 time in total.

User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Thu, 30. Apr 09, 19:37

Die var $station bezieht sich auf das (RefObj) das hab ich dazu geschrieben also das Referenc Objekt. Ich weiß ja nicht wie er sich die Station sich ins Script holen will daher hab ich das (RefObj) dazugeschrieben :!:

wobei du mit skip if not recht hast. eig lass ich meistens Astronauten skipen :sceptic:

!move.undock idR macht das objekt dann ild nach Beendigung des !move.undock.

Eigentlich war das nur ein Sinnbeispiel Beispiel für dich Saetan da ich eigentlich damit gerechnet habe das wäre so schon abgeschlossen da du eben dein Scriptvorschlag gepostet hast.

User avatar
Saetan
Posts: 3223
Joined: Wed, 1. Feb 06, 19:26
x4

Post by Saetan » Thu, 30. Apr 09, 19:40

Generalwest wrote:Eigentlich war das nur ein Beispiel für dich Saetan
Ja, danke ... einen Teil davon hab ich eh umgesetzt. Die betreffenden Code-Zeilen besitzen zwischenzeitlich das "!move.undock" und kein "fly to sector" mehr.

User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Thu, 30. Apr 09, 19:43

Saetan wrote:
Generalwest wrote:Eigentlich war das nur ein Beispiel für dich Saetan
Ja, danke ... einen Teil davon hab ich eh umgesetzt. Die betreffenden Code-Zeilen besitzen zwischenzeitlich das "!move.undock" und kein "fly to sector" mehr.
Das ist deine Sache ob du was übernimmst weil du dir mit leichter tust. Aber freut mich das du so besser zurecht kommst.

Sorry ich hab den Topic erst gerade blinken sehen..

Post Reply

Return to “X³: Terran Conflict / Albion Prelude - Scripts und Modding”