[Skript][X3TC v.2.1] Sprungmenü v1.0 vom 22.09.2009

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
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER » Tue, 15. Sep 09, 17:59

Es könnte allerdings bei manchen Menüs schwierig werden, wenn man keinen "Beenden" Button zum Schließen des Menüs verwendet.
Dies ist der Fall bei Menüs die die neuen "Value Selections" verwenden.
Wenn man hier einen Button verwenden würde, bekäme man als Rückgabewert des Menüs ein Array, aus dem man dann die Auswahl auslesen kann.
Wenn man so ein Menü mit ESC schließt bekommt man nur ein -1 als Rückgabewert.
Von daher sollte man wissen wann man ihn weglassen kann und wann nicht.

MfG,
ScRaT

User avatar
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Tue, 15. Sep 09, 20:09

Lucike wrote:
Beeile dich, sonst bin ich schneller. Ein Gundgerüst dafür habe ich schon. ;)

http://forum.egosoft.com/viewtopic.php?t=217646

Gruß
Lucike
Ach nee, mach nur, ich komm mit dem Sprung nicht mehr weiter.

Wie beschrieben, ist das alles Mist, was ich gemacht hab. Wenn ich das Spielerschiff aus einem Tor rauskommen lasse, dann friert die Geschwindigkeit einbissl ein manchmal auch ewig oder bei Var/Sektor lande ich xyz = 0.
Ich hab dann noch put into environment bis zum abwinken getestet aber der kommt auch dort nur in 0,0,0 raus.
Dann kam ich auf folgende Idee, aber schützt auch nicht vor Kollision.

Code: Select all

$test = [SECTOR]->get user input: type={Var/Warpgate}, title='Wähle Position'
 
$tmp = $test->get position as array
$x = $tmp[0]
$y = $tmp[1]
$z = $tmp[2]
$sektor = $test->get sector
 
$sektAlt = [PLAYERSHIP]->get sector
[PLAYERSHIP]->put into environment $sektor
while $sektor != $sektAlt 
  $sektAlt = [PLAYERSHIP]->get sector
   
  = wait 1 ms
end
 
= wait 695 ms
 
[PLAYERSHIP]->set position: x=$x y=$y z=$z
 
return null
Jetzt fragt sich bestimmt jeder warum 695 Millisekunden warten. Weil bei mir, nach dem Sprung, der set positions Befehl erst nach Ablauf dieser Zeit funktioniert. Bei 690 ms wird kein set pos durchgeführt
[ external image ]

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

Post by UniTrader » Tue, 15. Sep 09, 20:39

Chandera wrote:Jetzt fragt sich bestimmt jeder warum 695 Millisekunden warten. Weil bei mir, nach dem Sprung, der set positions Befehl erst nach Ablauf dieser Zeit funktioniert. Bei 690 ms wird kein set pos durchgeführt
hast du es schon mit force position probiert?
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
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Tue, 15. Sep 09, 21:04

UniTrader wrote:
hast du es schon mit force position probiert?
Ja, gleich nachdem ich auf der gewünschten Position bin werde ich nach 0,0,0 geportet.

Manchmal sieht man das gar nicht weil das Bild noch läd.

Ich will doch eigentlich genauso springen, wie mit J

[ external image ]

User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike » Tue, 15. Sep 09, 21:16

Probiere es mal damit:

Code: Select all

001   = [THIS] -> use jump drive: target=Nebel des Elysiums
002   
003   while [SECTOR] != Nebel des Elysiums
004 @ |= wait 100 ms
005   end
006   
007   [THIS] -> set position: x=20000 y=20000 z=20000
008   
009   return null
Direkter Start auf dem Schiff.

Gruß
Lucike
Image

User avatar
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Tue, 15. Sep 09, 22:10

Das erzeugt bei mir eine Endlosschleife.
Also ich habe es getestet und nix ist passiert. dann habe ich unter wait ein write to player logbook 'Hallo' geschrieben.
Jo ich hab schon 3000 Nachrichten....

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

Post by UniTrader » Tue, 15. Sep 09, 22:12

hast du auch genügend EZ zum springen?
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
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Tue, 15. Sep 09, 22:17

Jup, ich bin im All frei schwebend und hab genug um jeden Sector 2 mal anzupeilen :-)

User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike » Tue, 15. Sep 09, 22:18

Chandera wrote:Das erzeugt bei mir eine Endlosschleife.
Also ich habe es getestet und nix ist passiert. dann habe ich unter wait ein write to player logbook 'Hallo' geschrieben.
Jo ich hab schon 3000 Nachrichten....
Hast du denn mal versucht die paar Skriptzeilen zu verstehen? "Use Jump Drive" sagt doch schon alles. Wie UniTrader schon fragte, sind EZ an Bord? Ist ein Sprungantrieb an Bord?

Das Skript läuft doch hoffentlich nicht global, sondern auf einem Schiff.

Das Skript ist ein Rohgerüst und es müssen natürlich noch Abfragen hinein, wie halt die Menge der EZ.

An Anfang sowas wie:

Code: Select all

016   if not [THIS] -> get amount of ware Sprungantrieb in cargo bay
017   |= speak text: page=17 id=3983 priority=0
018   |= speak text: page=13 id=24 priority=0
019   |return null
020   end
021   
022   if not [THIS] -> get amount of ware Navigationssoftware MK1 in cargo bay
023   |= speak text: page=17 id=5673 priority=0
024   |= speak text: page=13 id=24 priority=0
025   |return null
026   end

Code: Select all

038   $JumpEnergy = [THIS] -> get amount of ware Energiezellen in cargo bay
039   $JumpEnergyNeeded = [THIS] -> needed jump drive energy for jump to sector $Sector
040   if $JumpEnergy < $JumpEnergyNeeded
041   |= speak text: page=13 id=1100056 priority=0
042   |return null
043   end
Image

User avatar
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Tue, 15. Sep 09, 22:37

Das hab ich doch schon alles, wie ganz oben im ersten Post. Und das hab ich nirgendwo abgeschrieben sondern selber rausgefunden. Aber da sind halt Probleme drinn. Ich mach das ja auch erst seit einer knappen Woche.

Das einzigste was ich momenten will, dass nach dem Sprung durch ein Tor, das Spielerschiff voll einsatzbereit ist.

Nutze ich
Var/Warpgate...das führt dazu dass man auch die Terratore anwählen kann.
Problem (1)
Wenn man den Jump nutzt ist die Geschwindigkeit nach dem Jump für ein parr Sekunden eingefroren. Springe ich in die Terra Sektoren, bleibt das so bis zum nächsten Sprung oder andocken.

Problem (2)
tritt auf, wenn ich Var/Jumpdrive Gate nutze. Da kann man nicht im Setup die Tore einstellen, wenn man nicht genügend EZ an Bord hat. Hier ist der Sprungantrieb aber unrelevant, komisch. Auch hier ist die Geschwindigkeit ein paar Sekunden nicht änderbar.

Problem (3)
wäre Var/Sektor das Springt man automatisch in jeden Sektor zu 0,0,0 Aber hier kann man sofort jede gewünschte Geschwindigkeit einstellen. Wehe dem es gibt irgendwo Objekte auf 0,0,0 (Erde=tot zu 100%)
Nur mit dieser Einstellung kommt man nach Aldrin!!!



Danke für Hilfe



Edit:
Momomoment mal.....
Lucike wrote: ...
Das Skript läuft doch hoffentlich nicht global, sondern auf einem Schiff.
...
Heißt das mein Skript im ersten Post ist total falsch?

Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?

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

Post by ScRaT_GER » Tue, 15. Sep 09, 23:07

Problem (1)
Dazu kann ich leider nichts sagen.
Problem (2)
Dann wähle eben nicht Var/Jumpdrive, da es damit anscheinend nicht so funktioniert, wie du möchtest, sondern eine andere Var (bin mir gerade nicht sicher wie sie genau heißt), mit der du jedes Objekt im Sektor auswählen kannst.
Bei der Eingabe eines Sprungtores musst du nun über eine Schleife dafür sorgen, dass das Objekt nur gespeichert wird, wenn es ein Sprungtor, kein TOB, ist.
Heißt das mein Skript im ersten Post ist total falsch?
Es müsste eigentlich auch funktionieren, aber vielleicht ist das tatsächlich der Grund, wieso es es zu diesen Fehlern kommt.
Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?
Ich denke Lucike meint, dass du ein seperates Skript verwenden solltest, das die Sprungaktion ausführt. Z.B. so:

Code: Select all

Arguments
$gate, Var/Gate, Tor

001   = [THIS] -> use jump drive: target=$gate
002   $sector = $gate -> get sector
003   while [SECTOR] != $sector
004 @ |= wait 100 ms
005   end
006   
007   return null
Ich bin mir allerdings nicht sicher, ob man "use jumpdrive: target=" auch auf ein Tor anwenden kann - hab's noch nicht versucht.
Wenn nicht, musst du es so wie Lucike machen.

MfG,
ScRaT

User avatar
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Wed, 16. Sep 09, 18:48

ScRaT_GER wrote: Ich denke Lucike meint, dass du ein seperates Skript verwenden solltest, das die Sprungaktion ausführt. Z.B. so:

Code: Select all

Arguments
$gate, Var/Gate, Tor

001   = [THIS] -> use jump drive: target=$gate
002   $sector = $gate -> get sector
003   while [SECTOR] != $sector
004 @ |= wait 100 ms
005   end
006   
007   return null
Ich bin mir allerdings nicht sicher, ob man "use jumpdrive: target=" auch auf ein Tor anwenden kann - hab's noch nicht versucht.
Wenn nicht, musst du es so wie Lucike machen.

MfG,
ScRaT

Ok, ich kapier wohl so einiges nicht. :(

Wie wird denn in deiner Schleife jemals ein Ende gefunden wenn die Ungleichung wahr ist?



Ich habe nun ein zusätzliches Skript eingefügt (noch nicht online) bei dem wie der Sprung ausgeführt wird.

Von meinem Menüscript aus, wird der use jump drive Befehl durch call script ersetzt, mit den parametern $ziel und $schiff. Aus dem chan.sprungmenue script im Eingangsthema.
Ergebnis ist dasselbe, meine Cheatblossom fliegt für ein paar Sekunden 120 und ich kann weder rauf noch runter mit der Geschwindigkeit.

Wenn ich da keine Lösung finde werde ich das Skript wohl einstampfen müssen.

Irgendwas mache ich falsch, wenn ich den Vorschlag von Lucike ausprobiere. Egal wie ich es auch anstelle ich bekomm immer [SECTOR] = null ins Logbuch geschrieben.
Deshalb geht 003 while [SECTOR] != Nebel des Elysiums nicht.
Nehme ich allerdings $tmpTest = [PLAYERSHIP] ->get sector bekomm ich den Sektor und kann auch vergleichen. Das Ergebnis am Ende ist immer ungleich des originalen Sprungs. So soll es aber mal werden. Die selbe Auswahl der Ziele, also nur Tore in der Karte auswählbar und nach Aldrin geht es ab zur Sprungboje. Nun das ist nicht das Hauptproblem denn das würde Var/Jumpdrive Gate machen, sondern die Geschwindigkeit nach dem Torsprung soll nich eingefroren sein.

Deshalb dachte ich, einer der Positionsbefehle wäre nützlich, nachdem man entweder mit
$ziel = [THIS] ->get user input: type=Var/Sektor, title= 'Sprungtor wählen'
= $schiff ->use jump drive: target=$ziel
oder
$schiff->put into environment $ziel

Bei beiden kommt man ja auf x,y,z=0 raus.

Sorry Lucike aber scheinbar fehlt mir das Wissen, deinen Vorschlag umzusetzen und deshalb bekomm ich eine Endlosschleife.

Ich hoffe hier kann mir jemand raushelfen

Vielen Dank Chan

User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike » Wed, 16. Sep 09, 19:12

Chandera wrote:Edit:
Momomoment mal.....
Lucike wrote: ...
Das Skript läuft doch hoffentlich nicht global, sondern auf einem Schiff.
...
Heißt das mein Skript im ersten Post ist total falsch?

Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?
Total falsch ist es nicht. Ich persönlich hatte aber immer Probleme mit einem Punkt-zu-Punkt-Sprungskript, welches global betrieben wird.

So würde mein Skript aussehen, welches mit einem Hotkey aufgerufen werden kann. Eine Wait-Schleife nach dem Sprungbefehl ist nicht mal notwendig. Da das Skript global beginnt und dann auf dem Spielschiff gestartet wird.

http://www.lucike.info/x3_terran_confli ... .point.xml
(Anklicken -> ansehen / Ziel speichern unter -> herunterladen)

Vielleicht solltest du noch mal deine Ziele genau beschreiben, denn ich verstehe irgendwie deine Probleme nicht.

EDIT: Globale Skripte laufen nicht auf einem Objekt und darum ist [SECTOR] gleich "null". Läuft das Skript aber auf einem Objekt, dann ist [SECTOR] immer der Sektor, indem sich das Objekt gerade befindet. Es gibt Konstanste, wie z.B. [HOMEBASE], die nur dann einen Wert ausgeben, wenn das Skript dazu auf einem Objekt läuft.
ScRaT_GER wrote:Ich bin mir allerdings nicht sicher, ob man "use jumpdrive: target=" auch auf ein Tor anwenden kann - hab's noch nicht versucht.
Ja, kann man.

Gruß
Lucike
Image

User avatar
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Wed, 16. Sep 09, 19:50

Vielen Dank,


so ähnlich hatte ich das auch zum Test. Nur halt der Wahl Spielerschiff oder eines seiner Flotte und mit einem zugewiesenen Wert. Gesartet hab ich das immer mit r aus dem Editor herraus.
Aber das mag ich nicht, weil man erst in der Sektormitte rauskommt.

Ich habe nur ein Ziel.

Ein Schiff meiner Wahl oder mich mit use jump drive: target= Var/Jumpdrive Gate nutzen. (geht ja)

Sobald ich damit durch das Tor gereist bin. Soll das Schiff nicht mit 120m/s fliegen, sondern mit der Geschwindigkeit die ich möchte. Also z.B. die Springblossom mit 360.
Das geht bei mir leider nicht, mit obigen Sprung bleibt die Geschwindigkeit ein paar Sekunden bei 120m/s.

Und das ist pöhse ^^

Ich dacht mit pos to pos könnt ich dem Nutzer vorgaukeln, er sei aus dem richtigen Portal gekommen, weil es da keine Geschwindigkeitsbegrenzung gibt.
Aber erst in der Sektormitte zu landen ist unbrauchbar für mich.
Last edited by Quonox on Thu, 17. Sep 09, 00:25, edited 1 time in total.

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

Post by UniTrader » Wed, 16. Sep 09, 19:55

wenn du nur 1 Frame lang in der Sektormitte bist dann wird das der Spieler praktisch nicht bemerken.. oder kannst du ne 15tel sekunde (wäre es bei 15 fps) wahrnehmen?? - du müsstest lediglich jeden frame prüfen, ob das Schiff bereits den Sektor erreicht hat.. (und genau das wird in Lucikes Vorschlag gemacht..)
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
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Wed, 16. Sep 09, 20:29

Bei Lucikes Skript kann ich sobald, nach dem Sprung, das Bild da ist "zwanzig" sagen und bin bei g an der endgültigen Position.

Wobei ich natürlich auch sagen muss, so schnell war es noch nie.

Aber dennoch ich sehe den Wechsel, und was ist, wenn ein Objekt auf 0,0,0 steht dann kommt der Spieler mit 60% Schild an und hat reinzufällig noch ein paar Feinde vor der Nase.


Grüßle Chan

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

Post by UniTrader » Wed, 16. Sep 09, 20:40

Chandera wrote:Aber dennoch ich sehe den Wechsel, und was ist, wenn ein Objekt auf 0,0,0 steht dann kommt der Spieler mit 60% Schild an und hat reinzufällig noch ein paar Feinde vor der Nase.
in diesem extrem unwarscheinlichen fall landest du nicht bei 0/0/0 sondern wirst aus dem Kollisionsbereich weg versetzt (bzw. das Schiff das im weg ist..)
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
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Thu, 17. Sep 09, 17:30

Moin,
Lucike wrote:
Vielleicht solltest du noch mal deine Ziele genau beschreiben, denn ich verstehe irgendwie deine Probleme nicht.
3 Antworten weiter vorn ^^ Aber es hat sich erledigt...
Lucike wrote: EDIT: Globale Skripte laufen nicht auf einem Objekt und darum ist [SECTOR] gleich "null". Läuft das Skript aber auf einem Objekt, dann ist [SECTOR] immer der Sektor, indem sich das Objekt gerade befindet. Es gibt Konstanste, wie z.B. [HOMEBASE], die nur dann einen Wert ausgeben, wenn das Skript dazu auf einem Objekt läuft.
Ahja, so langsam wirds. Ich saß grad ein paar Stunden vor deinem Satz und deinem Skript. Auch wenn es jetzt noch nicht so ganz klar ist.

Also ich setz das mal um:
Wenn ich z.B. den Sprung einfach nur mit "= $schiff use jump drive: target= $meinTor" nehme dann führe ich die Zeile global aus. Das Schiff wird zwar angesprochen und Springt auch dahin, aber der Befehl ist nicht dem Schiff zugewiesen....richtig?

Nach umfangreicher Beobachtung sowie stundenlanges testen, stellte ich fest, dass der "folgen" Befehl über die Kommandokonsole des Schiffs, genauso ein Geschwindigkeits defizit hat, wie use jump drive. NUR mit der Ausnahme, dass man da im Automodus ist und dort wieder rauskommt. Ergo hat mein Skript falsche Zuweisungen.

Nun nahm ich mein alten Befehl/Skript und testete mit set follow mode = [FALSE], wie gedacht, damit kommt man auch nicht raus.
Also muss ich es wohl auf ein Objekt (<--richtig?) laufen lassen, dacht ich mir und stellte folgendes nach Lucikes Vorlage zusammen.

Code: Select all

Name: 
chan.sprung.start
Arguments:
1 ziel, Var/Jumpdrive Gate, 'Tor'
2 schiff, Var/Ship, 'Schiff'

skip if $ziel->exists
  return null
 
skip if $schiff->exists
  $schiff = [PLAYERSHIP] 
 
if not [THIS] == $schiff 
  START $schiff->call script 'chan.sprung.start' : ziel=$ziel  schiff=$schiff 
  return null
end
 
= [THIS]->use jump drive: target=$ziel
 
return null
Die Überprüfung für Energie und Sprungantrieb findet nachwievor im Menü statt und selbiges übergibt die Position des Tores & nun auch die Aldrinboje, habs aber noch nicht im ersten Post geändert, weil noch einiges verändert wird.

Danke erstmal hier an alle, für die Tips und die Geduld....

Um die Befehle auf ein Objekt zu legen kann man das nur so machen?
Wo kann ich noch mehr darüber lesen?


Danke für Antwort

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

Post by ScRaT_GER » Thu, 17. Sep 09, 17:49

So wie du das Skript geschrieben hast, macht es nicht wirklich Sinn.
Folgendermaßen könnte es aussehen:

Code: Select all

Name:
chan.sprung.start
Arguments:
1 ziel, Var/Jumpdrive Gate, 'Tor'

skip if $ziel->exists
  return null
 
= [THIS]->use jump drive: target=$ziel
 
return null
Mehr braucht es nicht. In deinem Menü startest du nun obiges Skript folgendermaßen auf dem Schiff:

Code: Select all

START $schiff -> call script 'chan.sprung.start': Tor=$ziel
START ist dabei wichtig, damit das aufrufende Skript nicht auf einen Rückgabewert wartet.

MfG,
ScRaT

User avatar
Quonox
Posts: 132
Joined: Wed, 16. Apr 08, 19:11
x4

Post by Quonox » Thu, 17. Sep 09, 18:24

ScRaT_GER wrote:

Code: Select all

START $schiff -> call script 'chan.sprung.start': Tor=$ziel
Ach siehste, ich hab START THIS --> als Aufruf gehabt, aber es ging.
So richtig versteh ich das noch nicht :(

deshalb die Fragen ^^
Chandera wrote: Um die Befehle auf ein Objekt zu legen kann man das nur so machen?
Wo kann ich noch mehr darüber lesen?

Edit..Ach.... START $meinObjekt.....startet auf dem Objekt!

Mehr nicht? Das war es worüber ihr geredet habt und ich nicht verstand, weil es da nie ein Hinweisschild gibt....

*Kopfschmerz* :P

Post Reply

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