[DISKUSSION] Allgemeine S&M-Fragen III
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
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.
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.
Mag nicht elegant sein aber ein Starter-Script ist wirklich die einfachste Möglichkeit und sogar recht übersichtlich.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?
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.
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
-
- Posts: 269
- Joined: Fri, 24. Dec 10, 16:30
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
Ja, ist etwas schade. aber was solls...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.
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.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
Aber das geht ja anscheinend nicht so automatisch, weswegen man diese "Arbeit" eben selbst machen muss.
Einfach über "get user input: type={Var/Boolean}", wenn ich mich richtig erinnere.Über welches Logbook Command kann dem Spieler eine Frage stellen, auf die der Spieler dann per "Knopfdruck" antworten kann?
MfG,
ScRaT
-
- Posts: 915
- Joined: Fri, 26. Mar 10, 21:15
Ich meine folgender Befehl könnte da auch noch helfen:
Bei Script Reference type müsste Var/Boolean funktionieren, dann kriegst du meine ich ne Ja/Nein auswahl.
mfg
Striker
Code: Select all
<RetVar/IF><RefObj> get user input without sector: type=<Script Reference Type>, title=<Var/String>
mfg
Striker
- Generalwest
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
Hat Funktioniert. Allerdings verhält sich der Frachter seltsam ^^ macht nixLucike wrote:ich nutze das ähnlich, wie hier beim SGS: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.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.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
Gruß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
Lucike
@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.
http://forum.egosoft.com/viewtopic.php? ... d&start=60
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.
http://forum.egosoft.com/viewtopic.php? ... d&start=60
-
- Posts: 269
- Joined: Fri, 24. Dec 10, 16:30
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.
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.
- X2-Illuminatus
- Moderator (Deutsch)
- Posts: 24961
- Joined: Sun, 2. Apr 06, 16:38
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!
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!
Hallo,
ich möchte gerade mein erstes Skript programmieren und bin dabei auf ein Problem gestoßen. Der Code sieht so aus:
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
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
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
"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:
"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
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
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.Außerdem wurde das return null automatisch daruter geschrieben. Was bedeutet es?
"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
-
- Posts: 915
- Joined: Fri, 26. Mar 10, 21:15
Das Problem ist, dass du keine Zeitverzögerung drin hast.
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:
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
Code: Select all
001 $Heimatbasis = get player tracking aim
002
003 $Zielschiff = get player tracking aim
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
Aber es geht viel eleganter, das ist die Methode, die ScRaT dir beschrieben hat.
mfg
Striker
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)
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
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
-
- Posts: 915
- Joined: Fri, 26. Mar 10, 21:15
Code: Select all
<RetVar> = <RefObj> get ship array from sector/ship/station
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>]
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
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
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