[DISKUSSION] Allgemeine S&M-Fragen III

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

Post Reply
User avatar
Wolf 1
Posts: 5624
Joined: Wed, 19. Mar 08, 00:17
x3tc

Post by Wolf 1 » Mon, 3. Jan 11, 10:55

@Bedachto:

Zu deinem Problem mit plötzlich modifizierten Spielständen gibt's bereits einen Sammelthread im TU Forum. Ich denke, da wärst du mit deinem Anliegen besser aufgehoben. :wink:

http://forum.egosoft.com/viewtopic.php? ... d&start=60

Cpt.Falcon
Posts: 251
Joined: Fri, 24. Dec 10, 17:30
x3tc

Post by Cpt.Falcon » Mon, 3. Jan 11, 22:58

Wie kriege ich eine leere Zeile ins Script?
Mir fällt immer im Nach hinein etwas ein, dass vor etwas Anderes gehört hätte und dann bleibt mir nichts anderes übrig als mühselig nochmal von vorn anzufangen.
Hab mir dann Scripts angeschaut, und da sind teilweise 5 leere Zeilen einfach so.
New Line fordert aber immer gleich eine Aktion(?), z.B. Create Station.

User avatar
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 21106
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus » Mon, 3. Jan 11, 23:05

Leere Zeilen gibt es mit der "Einfg"-Taste.
Besteht Interesse an einem Nopileos-Hörbuch?

Farnhams Legende und Nopileos als E-Books!

"People who think they know everything are a great annoyance to those of us who do." - Isaac Asimov

"If it's not impossible, there must be a way to do it." - Sir Nicholas Winton

Sapatus
Posts: 67
Joined: Sun, 1. Aug 10, 12:02
x3tc

Post by Sapatus » Thu, 6. Jan 11, 16:08

Hallo,

ich möchte gerade mein erstes Skript programmieren und bin dabei auf ein Problem gestoßen. Der Code sieht so aus:

Code: Select all


001  $Heimatbasis = get player tracking aim
002 
003  $Zielschiff = get player tracking aim
004
005  $Zielschiff -> set homebase to $Heimatbasis
006  return null

Das Skript soll den Spieler zwei Schiffe auswählen lassen. Das erste Schiff mit der Variable Heimatbasis soll im ersten Befehl ausgewählt werden, dass zweite mit der Variable Zielschiff danach. Dann soll das erste Schiff dem zweiten als Heimatbasis zugeteilt werden.

Nun lässt das Programm mich aber nur einmal ein Schiff auswählen und danach passiert nichts mehr.

Außerdem wurde das return null automatisch daruter geschrieben. Was bedeutet es?

mfg
Man möchte immer einen Credit mehr haben

User avatar
ScRaT_GER
Posts: 1958
Joined: Tue, 8. Jan 08, 19:19
x3tc

Post by ScRaT_GER » Thu, 6. Jan 11, 16:20

"get player tracking aim" liest das aktuelle Ziel des Spielerschiffs aus (also angewählte Ziel, das meistens in einem seitlichen Bildschirme gezeigt wird). Es wartet also nicht auf eine Benutzereingabe, sonder schreibt direkt das momentan ausgewählte Schiff in die zurückgegebene Variable.
Deswegen sind bei dir $Heimatbasis und $Zielschiff die gleichen Objekte.

Du möchtest allerdings eine Benutzereingabe, weswegen du auch den entsprechenden Befehl verwenden musst:

Code: Select all

$homebase = get user input: type={Var/Station} title='Wähle eine Heimatbasis aus'
$ship = get user input: type={Var/Ship} title='Wähle ein Zielschiff aus'
$ship -> set homebase to $homebase
return null
Außerdem wurde das return null automatisch daruter geschrieben. Was bedeutet es?
Mit einem "return" Befehl, sagst du dem SE, dass das aktuelle Skript beendet ist. Der Wert hinter dem "return" (hier: null) wird dann als Rückgabewert an ein aufrufendes Skript weitergegeben.

"return null" gibt die Konstante "null" zurück (also keinen besonderen Wert). Da jedes Skript mindestens einen Endpunkt haben muss (also mindestens einen "return" Befehl), wird "return null" automatisch ergänzt, wenn es fehlt.

MfG,
ScRaT

Striker304
Posts: 890
Joined: Fri, 26. Mar 10, 22:15
x3tc

Post by Striker304 » Thu, 6. Jan 11, 16:23

Das Problem ist, dass du keine Zeitverzögerung drin hast.

Code: Select all

001  $Heimatbasis = get player tracking aim
002
003  $Zielschiff = get player tracking aim 
Diese beiden Zeilen werden ohne Zeitverzögerung ausgeführt. Das Script braucht insgesamt nicht einmal eine hundertstel Sekunde bis es fertig ist.

Ich würde folgendes empfehlen:

Code: Select all

001  $Heimatbasis = get player tracking aim
002
003 $Zielschiff = get player tracking aim
004 while $Zielschiff == $Heimatbasis
005 $Zielschiff = get player tracking aim
006 =wait 200 ms
007 end
008
009  $Zielschiff -> set homebase to $Heimatbasis
010  return null 
Das wäre die Variante mit "get player tracking aim". In zeile 4 wird geschaut, ob du immer noch dasselbe Ziel anvisiert hast. Die while-Schleife wird dabei so lange wiederholt, bis du ein anderes Ziel anvisierst.

Aber es geht viel eleganter, das ist die Methode, die ScRaT dir beschrieben hat.

mfg
Striker

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

Post by UniTrader » Thu, 6. Jan 11, 16:40

Man kann daran noch viel verbessern, hier nen paar Beispiele (um nen Code zu tippen bin ich atm zu müde..):

a) bei der Heimatbasis prüfen, ob das Schiff überhaupt daran docken kann (dafür muss zuerst das Schiff ausgewählt werden, da die Abfrage sonst eher störend wäre)

b) im falle von null-einträgen den Wert so lange abfragen, bis er was sinnvollles zurück gibt (also im prinzip ne existenzprüfung)

c) eine Bestätigung an den Spieler dass ein Wert akzeptiert wurde (z.B. per Untertiteleinblendung)
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 ;)

Sapatus
Posts: 67
Joined: Sun, 1. Aug 10, 12:02
x3tc

Post by Sapatus » Thu, 6. Jan 11, 17:00

Vielen Dank für die Antworten. Ich habe noch eine Frage: Gibt es einen Befehl mit dem man die Schiffe die an einer Station gedockt sind auswählen kann?

mfg
Man möchte immer einen Credit mehr haben

Striker304
Posts: 890
Joined: Fri, 26. Mar 10, 22:15
x3tc

Post by Striker304 » Thu, 6. Jan 11, 17:34

Code: Select all

<RetVar> = <RefObj> get ship array from sector/ship/station 
Dieser Befehl macht das, wenn du bei <RefObj> eine Station auswählst. Dieser Befehl gibt ein Array von Schiffen zurück.
Nur schon mal im Voraus, ein Array enthält durchaus auch mehrere Objekte.
Ein einzelnes Schiff daraus nimmst du mit dem Befehl

Code: Select all

<RetVar>=<Var/Array>[<Var/Number>] 
Bei <Var/Array> kommt das Array hin und bei <Var/Number> der Index.
Die Indizes beginnen mit 0 (also ist $Array[0] das erste, was im Array gespeichert ist).

Vielleicht kennst du das schon mit den Arrays, da ich aber am Anfang eben dies mit den Arrays nicht kannte und mein damaliger Code auch falsch war, erwähne ich es hier mal vorsichtshalber ;)

mfg
Striker

Sapatus
Posts: 67
Joined: Sun, 1. Aug 10, 12:02
x3tc

Post by Sapatus » Fri, 7. Jan 11, 21:44

Vielen Dank für die Hilfe. Ich bin auf aber auf ein neues Problem gestoßen: Ich möchte denn Schiffen in dem Array eine Heimatbasis zuweisen, aber das funktioniert nicht. Ich kann den Schiffen nur einzeln einen Befehl geben indem ich sie aus dem Array in eine Variable schreibe. Wie kann ich nun die benötigten Schiffe aus dem Array hollen und dem neuen Array einen Befehl geben?

Wenn ich mein Skript wähle muss ich als erstes ein Schiff oder eine Station auswählen (ich glaube damit dort das Skript ausgeführt werden kann) und danach kommt ein Fenster wo der Name des Skripts gezeigt wird. Wie kann ich das verhindern und dem Skript einen Ausführort zuweisen.

mfg
Man möchte immer einen Credit mehr haben

User avatar
ScRaT_GER
Posts: 1958
Joined: Tue, 8. Jan 08, 19:19
x3tc

Post by ScRaT_GER » Fri, 7. Jan 11, 21:52

Schau dir mal diesen Thread und die Antworten an (die Frage ist lustigerweise die gleiche wie bei dir).
Wenn ich mein Skript wähle muss ich als erstes ein Schiff oder eine Station auswählen (ich glaube damit dort das Skript ausgeführt werden kann) und danach kommt ein Fenster wo der Name des Skripts gezeigt wird. Wie kann ich das verhindern und dem Skript einen Ausführort zuweisen.
Wenn du das Skript über die Skript-Oberfläche startest (also Skript markieren und dann {R}), lässt sich die Abfrage des Ausführungsortes nicht verhinden.

Dafür müsstest du das Skript entweder als Kommando über die Kommandokonsole eines Objektes (Schiff/Station) starten, oder über einen Hotkey.
Zu beidem gibt es meines Wissens Tutorials - ansonsten wie immer: Code von anderen lesen.

MfG,
ScRaT

Sapatus
Posts: 67
Joined: Sun, 1. Aug 10, 12:02
x3tc

Post by Sapatus » Sun, 9. Jan 11, 20:04

Hallo, ich finde es echt toll das ihr euch die Mühe macht mir die Fragen zu beantworten und vielen dank dafür.

Ich habe aber ein Problem mit den if- funktionen. Ich kann zwar auch Schleifen in die if-Funktion einbauen, aber keinen zweiten Befehl, weil dieser nicht ausgeführt wird, während der erste Befehl reibungslos funktioniert.

Bsp.

Code: Select all

if §Variable.1 == 1
  Befehl 1
  Befehl 2
else ....



mfg
Man möchte immer einen Credit mehr haben

User avatar
ScRaT_GER
Posts: 1958
Joined: Tue, 8. Jan 08, 19:19
x3tc

Post by ScRaT_GER » Sun, 9. Jan 11, 20:17

Doch, genauso wie du es geschrieben hast funktioniert es. Zeig am besten mal Code bei dem das Problem auftritt.

MfG,
ScRaT

Sapatus
Posts: 67
Joined: Sun, 1. Aug 10, 12:02
x3tc

Post by Sapatus » Sun, 9. Jan 11, 21:10

Ich habe den Fehler selbst gefunden, ich habe ein THIS zuviel eingesetzt. :headbang:

mfg
Man möchte immer einen Credit mehr haben

CWUulf
Posts: 3
Joined: Mon, 10. Jan 11, 06:23

Post by CWUulf » Mon, 10. Jan 11, 06:51

Hallo.
Ich bin neu hier im forum kenne die X serie aber schon sehr lange und bin auch schon ewig damit beschäftigt zu modden. ich hab die [url=http://forum.egosoft.com/search.php][b]Su[/b]ch[b]Fu[/b]nktion[/url] benutz und mir die augäpfel wund gelesen und auch einige sehr sehr gurt tut gefunden die mir sehr weit geholfen haben. leider musste ich immer wieder fetstellen das manche dinge entweder nicht erwähnt erden uoder ich einfach zu doof dazu bin s richtig umzusetzen....

Also mein projekt fing damit an dass erstmal nur eon appr schiffe gegen selbstcreierte austauschen wollte. dabei kam mir beim basteln schon oft das problem unter das 3dsmax meine texturen nicht richtig schlucken wollte deshalb wollte ich mal fragen ob sich da jemand mit uskennt oder aobs hier irgendwo ein texturen tut für den 3dsmax gibt... zur not aus gmax obwohl ich den weniger mag. ich hab da immer wier so meine problemchen die texturen in den mateditor zu bekommen wenn dann klappts nur per zufall.

und meine zweite frage wäre ob jemand nen plan hat obs irgendwie die möglichkeit gäbe eine weiter fraktion einzufügen... ich denke da hängt viel mit scripten zusammen und davon hab ich wirklich keinen plan aber ich würds lernen wenn ich nen ansatz und ein entsprechendes tut hätte.

am rande möchte ich noch erwähnen dass ich den ganzen krempel alleine mache neben meinem job als Informatik lehrling... also die früchte meiner arbet erden noch auf sich warten lassen ich würd aber gerne mal n paar screenshots hochladen aber dazu mössten die moddels erstmal fehlerfrei sein^^ ... also schonmal dake für die hilfe und ich vergebt mir mein unwissen^^

Post Reply

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