[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
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Sat, 1. Jan 11, 14:36

wieso verwendest du kein check Script ala "für welches Schiff ist das Kommando sichtbar" es gilt für verschiedene Waren aber auch für alles andere: Hangars, Größe, Schiffsklasse usw

das check scirpt löst vl n preload Script aus oder ne anderes mit ner local var das dann alles andere regelt bzw vorinstalliert. doof zu Scripten aber es wäre ne Möglichkeit.

User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz » Sat, 1. Jan 11, 14:58

ScRaT_GER wrote:Wenn das nicht geht, wäre wohl die normale Vorgehensweise ein Skript für alle Schiffsklassen zu registrieren und dann in diesem Skript die Unterscheidung zu machen, oder?
Mag nicht elegant sein aber ein Starter-Script ist wirklich die einfachste Möglichkeit und sogar recht übersichtlich.
Alle Argumente werden einfach an das "richtige" Script weitergereicht.

Kommandos sind für KI-Schiffe recht nützlich. z.B. werden für die turret scripts beim Sektorwechsel automatisch Kommandos gestartet und keine Scripts.

Was funktioniert und was nicht muß man aber im Einzelfall probieren.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.

Cpt.Falcon
Posts: 269
Joined: Fri, 24. Dec 10, 16:30
x3tc

Post by Cpt.Falcon » Sat, 1. Jan 11, 20:42

Über welches Logbook Command kann dem Spieler eine Frage stellen, auf die der Spieler dann per "Knopfdruck" antworten kann?
So wie bei den Plots: "Möchten Sie uns helfen" "Ja","Nein".

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

Post by Generalwest » Sat, 1. Jan 11, 21:18

spontan fällt mir nur "callback" (audio commands) ein. ja nein Argument ist auch möglich oder per Costume Menü

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

Post by ScRaT_GER » Sat, 1. Jan 11, 21:22

Mag nicht elegant sein aber ein Starter-Script ist wirklich die einfachste Möglichkeit und sogar recht übersichtlich.
Alle Argumente werden einfach an das "richtige" Script weitergereicht.

Kommandos sind für KI-Schiffe recht nützlich. z.B. werden für die turret scripts beim Sektorwechsel automatisch Kommandos gestartet und keine Scripts.

Was funktioniert und was nicht muß man aber im Einzelfall probieren.
Ja, ist etwas schade. aber was solls...
wieso verwendest du kein check Script ala "für welches Schiff ist das Kommando sichtbar" es gilt für verschiedene Waren aber auch für alles andere: Hangars, Größe, Schiffsklasse usw
Es geht im Hauptsächlichen um die KI, also nicht darum ein Kommando aus der Kommandokonsole des Schiffes zu starten. Ich hatte gehofft, man könnte für ein Kommando verschiedene Skripts für verschiedene Schiffsklassen registrieren und dann mit "start command" starten, sodass basierend auf den vorher registrierten Skripts das richtige ausgewählt wird.
Aber das geht ja anscheinend nicht so automatisch, weswegen man diese "Arbeit" eben selbst machen muss.
Über welches Logbook Command kann dem Spieler eine Frage stellen, auf die der Spieler dann per "Knopfdruck" antworten kann?
Einfach über "get user input: type={Var/Boolean}", wenn ich mich richtig erinnere.

MfG,
ScRaT

Striker304
Posts: 915
Joined: Fri, 26. Mar 10, 21:15
x3tc

Post by Striker304 » Sat, 1. Jan 11, 21:23

Ich meine folgender Befehl könnte da auch noch helfen:

Code: Select all

<RetVar/IF><RefObj> get user input without sector: type=<Script Reference Type>, title=<Var/String> 
Bei Script Reference type müsste Var/Boolean funktionieren, dann kriegst du meine ich ne Ja/Nein auswahl.

mfg
Striker

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

Post by Generalwest » Sat, 1. Jan 11, 22:10

Lucike wrote:
ScRaT_GER wrote:
Nun meene Question: Gibts das auch mit Docks? Ich mein es ist doof ne Station zu Basteln damit ich Erweiterungen kaufen kann per Script.

Code: Select all

038   |$factory = find station: product $ware with min. jumps: max.price=$maxPrice, amount=$amount, max.jumps=200, startsector=$startSec, trader=$refObject, exclude array=$exclude
039   |$dock = find station sells: resource $ware with min. jumps: max.price=$maxPrice, amount=$amount, max.jumps=200, startsector=$startSec, trader=$refObject, exclude array=$exclude
Ich benutze diesen Code. Irgendwann habe ich das mal getestet, also gehe mal davon aus, dass "find station sells" Docks findet, während das normale "find station" Fabriken findet.
ich nutze das ähnlich, wie hier beim SGS:

Code: Select all

$Station =  find station: product $Ware with best price:  max.price=$WarePrice, amount=$WareBuy, max.jumps=$HomeJumps, startsector=$HomeSector, trader=[THIS], exclude array=$Array.Sector.Closed
$Dock =  find station sells: resource $Ware with best price: max.price=$WarePrice, amount=$WareBuy, max.jumps=$HomeJumps, startsector=$HomeSector, trader=[THIS], exclude array=$Array.Sector.Closed
  
if $Station -> exists
|if $Dock -> exists
||$WarePriceStation = $Station -> get price of ware $Ware
||$WarePriceDock = $Dock -> get price of ware $Ware
||$WareCargoStation = $Station -> get amount of ware $Ware in cargo bay
||$WareCargoDock = $Dock -> get amount of ware $Ware in cargo bay
||if $WarePriceDock < $WarePriceStation AND $WareCargoDock > $WareCargoStation
|||$Station = $Dock
|||$Dock = null
||end
|end
else if $Dock -> exists
|$Station = $Dock
|$Dock = null
end
Gruß
Lucike
Hat Funktioniert. Allerdings verhält sich der Frachter seltsam ^^ macht nix

Bedachto
Posts: 1977
Joined: Fri, 17. Oct 08, 11:24
x3tc

Post by Bedachto » Sun, 2. Jan 11, 21:01

Ich spiele mit Patch 3.0 und bin der Meinung,Vanilla Spieler zu sein.
Ich habe aber ein modified bei mir entdeckt.
Isr das normal ?
Frieden?- oder Remis?

User avatar
Reacecor
Posts: 383
Joined: Mon, 22. Nov 10, 20:26
x3tc

Post by Reacecor » Sun, 2. Jan 11, 21:11

Welchen Spielstart hast du gewählt? Der Selbsterstellte ist nämlich automatisch ***modified***.

Gruß

Bedachto
Posts: 1977
Joined: Fri, 17. Oct 08, 11:24
x3tc

Post by Bedachto » Mon, 3. Jan 11, 04:31

Ich spiele als vreunreinigter Paranid.
Ich habe aber letztens 2 mal neu angefangen (Als Goner und verunreinigter Paranid) um kurz später doch wieder mit den alten Saves weiter zu machen.
Gespeichert hatte Ich unter demselben Profil...falls das eine Rolle spielt.
Frieden?- oder Remis?

User avatar
Wolf 1
Posts: 6126
Joined: Tue, 18. Mar 08, 23:17
x4

Post by Wolf 1 » Mon, 3. Jan 11, 09: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: 269
Joined: Fri, 24. Dec 10, 16:30
x3tc

Post by Cpt.Falcon » Mon, 3. Jan 11, 21: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: 24961
Joined: Sun, 2. Apr 06, 16:38
x4

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

Leere Zeilen gibt es mit der "Einfg"-Taste.
Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten

Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)

Neuauflage der fünf X-Romane als Taschenbuch

The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!

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

Post by Sapatus » Thu, 6. Jan 11, 15: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: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Thu, 6. Jan 11, 15: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: 915
Joined: Fri, 26. Mar 10, 21:15
x3tc

Post by Striker304 » Thu, 6. Jan 11, 15: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: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Thu, 6. Jan 11, 15: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, 16: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: 915
Joined: Fri, 26. Mar 10, 21:15
x3tc

Post by Striker304 » Thu, 6. Jan 11, 16: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, 20: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

Post Reply

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