[Skript][X3TC v.2.1] Sprungmenü v1.0 vom 22.09.2009
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
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
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
Ach nee, mach nur, ich komm mit dem Sprung nicht mehr weiter.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
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
[ external image ]
hast du es schon mit force position probiert?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
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
Ja, gleich nachdem ich auf der gewünschten Position bin werde ich nach 0,0,0 geportet.UniTrader wrote:
hast du es schon mit force position probiert?
Manchmal sieht man das gar nicht weil das Bild noch läd.
Ich will doch eigentlich genauso springen, wie mit J
[ external image ]
Probiere es mal damit:
Direkter Start auf dem Schiff.
Gruß
Lucike
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
Gruß
Lucike
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
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
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?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....
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
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.....
Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?
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.....
Heißt das mein Skript im ersten Post ist total falsch?Lucike wrote: ...
Das Skript läuft doch hoffentlich nicht global, sondern auf einem Schiff.
...
Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?
Dazu kann ich leider nichts sagen.Problem (1)
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.Problem (2)
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.
Es müsste eigentlich auch funktionieren, aber vielleicht ist das tatsächlich der Grund, wieso es es zu diesen Fehlern kommt.Heißt das mein Skript im ersten Post ist total falsch?
Ich denke Lucike meint, dass du ein seperates Skript verwenden solltest, das die Sprungaktion ausführt. Z.B. so:Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?
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
Wenn nicht, musst du es so wie Lucike machen.
MfG,
ScRaT
ScRaT_GER wrote: Ich denke Lucike meint, dass du ein seperates Skript verwenden solltest, das die Sprungaktion ausführt. Z.B. so:
Ich bin mir allerdings nicht sicher, ob man "use jumpdrive: target=" auch auf ein Tor anwenden kann - hab's noch nicht versucht.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
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
Total falsch ist es nicht. Ich persönlich hatte aber immer Probleme mit einem Punkt-zu-Punkt-Sprungskript, welches global betrieben wird.Chandera wrote:Edit:
Momomoment mal.....
Heißt das mein Skript im ersten Post ist total falsch?Lucike wrote: ...
Das Skript läuft doch hoffentlich nicht global, sondern auf einem Schiff.
...
Was meinst du damit? Wie soll ich es auf mein Schiff laufen lassen?
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.
Ja, kann man.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.
Gruß
Lucike
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.
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.
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
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
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
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
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..)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.
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
Moin,
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.
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
3 Antworten weiter vorn ^^ Aber es hat sich erledigt...Lucike wrote:
Vielleicht solltest du noch mal deine Ziele genau beschreiben, denn ich verstehe irgendwie deine Probleme nicht.
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.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.
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
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
So wie du das Skript geschrieben hast, macht es nicht wirklich Sinn.
Folgendermaßen könnte es aussehen:
Mehr braucht es nicht. In deinem Menü startest du nun obiges Skript folgendermaßen auf dem Schiff:
START ist dabei wichtig, damit das aufrufende Skript nicht auf einen Rückgabewert wartet.
MfG,
ScRaT
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
Code: Select all
START $schiff -> call script 'chan.sprung.start': Tor=$ziel
MfG,
ScRaT
Ach siehste, ich hab START THIS --> als Aufruf gehabt, aber es ging.ScRaT_GER wrote:Code: Select all
START $schiff -> call script 'chan.sprung.start': Tor=$ziel
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*