Undock erzwingen?
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
Undock erzwingen?
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
greetZ Faelnirv
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
greetZ Faelnirv
let's smoke a bong or play ping pong
Ich habs mir einfach gemacht, und mal einfach einen Teil des Quelltextes eines meiner Scripte kopiert:
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)
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
--- 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)
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
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.
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.
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
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.
what?Generalwest wrote: ich stell mir das so viel einfacher vor.
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.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
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
Ja, gut ... der Code ließe sich optimieren, wenn ich mir das gerade so durchseh. Man könnte das auch doppelte Sicherheit nennen.Generalwest wrote:get number of landet ships anschließend arry size? findest du das nicht sehr umständlich?
Wegen den KI Schiffen, berechtigter Einwand ... das muss ich mal nachprüfen.
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".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.
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.
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
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
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
let's smoke a bong or play ping pong
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...
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
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
$array.ship.docked (Var/If) $station (RefObj) -> get ship array from sector/ship/station* --> $array.ship.docked [THIS] -> get ship array ...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
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 ...
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
aber stimmt das sonst so? ...
let's smoke a bong or play ping pong
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
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
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
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
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
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
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
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.
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.
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
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
!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.
wobei du mit skip if not recht hast. eig lass ich meistens Astronauten skipen
!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.
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
Das ist deine Sache ob du was übernimmst weil du dir mit leichter tust. Aber freut mich das du so besser zurecht kommst.Saetan wrote:Ja, danke ... einen Teil davon hab ich eh umgesetzt. Die betreffenden Code-Zeilen besitzen zwischenzeitlich das "!move.undock" und kein "fly to sector" mehr.Generalwest wrote:Eigentlich war das nur ein Beispiel für dich Saetan
Sorry ich hab den Topic erst gerade blinken sehen..