Schiff scripten nach bestimmter Zeit
Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum
-
- Posts: 180
- Joined: Wed, 20. Aug 08, 16:14
Schiff scripten nach bestimmter Zeit
Hi leuts,
wollte ma wissen ob man ein script schreiben kann bei dessen aktivierung ein schiff nach ca 5 Ingame Tagen gespawnt wird und wenn ja wie... also ich bräuchte nur die commandozeile(weiß net ob des die rcihtige ebschreibung dafür is)in der man die zeit einstellt
gruß Anubis
wollte ma wissen ob man ein script schreiben kann bei dessen aktivierung ein schiff nach ca 5 Ingame Tagen gespawnt wird und wenn ja wie... also ich bräuchte nur die commandozeile(weiß net ob des die rcihtige ebschreibung dafür is)in der man die zeit einstellt
gruß Anubis
Gazz wrote:Piloten von Khaak Kleinschiffen steigen genauso aus wie die anderer Rassen.
Ihr Schleudersitz ist nur schlechter konstruiert.
Gazz wrote:Weder in Reunion noch in TC gibts ein M0.
Planeten zu zerstören ist offenbar aus der Mode gekommen.
-
- Posts: 5285
- Joined: Mon, 11. Apr 05, 21:11
Ja, kann man. Zum Beispiel:
Das geht natürlich auch mit Stunden als input (dann $minutes = 60 * $stunden), oder auch mit Stunden oder Minuten als Argument (also nicht den Spieler fragen, sondern Zeit direkt ans Script übergeben).
Die ganzen while-Schleifen (statt eines einzelnen langen waits) sind sinnvoll, weil unter bestimmten Bedingungen ein Wait auch mal abgebrochen wird, und dann ist es besser wenn dabei nur eine Sekunde übersprungen wird, und nicht gleich die gesamte Wartezeit.
Code: Select all
$minutes = get user input: type=Integer title="Bitte Zeit in Minuten eingeben"
while $minutes > 0
dec $minutes
$seconds = 60
while $seconds > 0
dec $seconds
@ =wait 1000 ms
end
end
$ship = create ship: type=Argon Buster sector=Argon Prime x=0 y=0 z=0 owner=Player
$ship : add default wares to ship
$ship : install 2 units of 5MJ shield
return null
Die ganzen while-Schleifen (statt eines einzelnen langen waits) sind sinnvoll, weil unter bestimmten Bedingungen ein Wait auch mal abgebrochen wird, und dann ist es besser wenn dabei nur eine Sekunde übersprungen wird, und nicht gleich die gesamte Wartezeit.
-
- Posts: 691
- Joined: Thu, 10. May 07, 17:45


-
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07
ist eigentlich ganz simpel.SymTec ltd. wrote:Code: Select all
$minutes = get user input: type=Integer title="Bitte Zeit in Minuten eingeben" while $minutes > 0 dec $minutes $seconds = 60 while $seconds > 0 dec $seconds @ =wait 1000 ms end end $ship = create ship: type=Argon Buster sector=Argon Prime x=0 y=0 z=0 owner=Player $ship : add default wares to ship $ship : install 2 units of 5MJ shield return null
die schleife in Zeile 2 wird eingeleitet mit der Variablen $minutes die mit Zeile 1 Definiert wird. Ersetzt man das ganze dann durch 40 waitet das script 40 Minuten (pro Schleifendurchlauf 1 Min.)
Zeile 2: ist der Schleifen befehl + eine Abfrage ob Variable $minutes grösser als 0 ist. Lässt man das weg verlängert sich das wait um 1 Minute da 0 für die X Engien 1 ist (angefangen wird hier immer bei 0)
Zeile 3: dec Verringert den Variablenwert $minutes um eins
Zeile 4 definiert den Wert für die Variable $seconds (60 Sec = 1 Minute)
Zeile 5: Gleiche Schleife wie in Zeile 2 mit der selben Prüfung aber diesmal var = $second
Zeile 6: veringert den Var.-wert $seconds um 1
Zeile 7 wait 1000 ms (= 1 Sec)
Zeile 8 + 9: schliest die schleife ab.
Die Schleife die immer 1 Sekunde Wartet pro Durchlauf hat die Sekunden ($second) als Variable die 60 mal durchlaufen wird bevor die Variable $minutes um eins verringert wird. also entspricht 1 Sekunde wait * 60 Sekunden (ist eine Minute) * $minutes (das was der Spieler warten lassen will)
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
ich hab mal 2 Kommentare und unterteilungen eingefügt 
hier übrigens die Variante, die ich zum Warten einer festen, langen Zeit nehmen würde:

Code: Select all
$minutes = get user input: type=Integer title="Bitte Zeit in Minuten eingeben"
* $minutes-mal unten genannte 60 sekunden abwarten (um auf die eingegebene Zeit zu kommen)
while $minutes > 0
dec $minutes
* -------
* 60mal eine Sekunde lang abwarten (gibt bekanntermassen eine Minute)
$seconds = 60
while $seconds > 0
dec $seconds
@ =wait 1000 ms
end
* ----------
end
hier übrigens die Variante, die ich zum Warten einer festen, langen Zeit nehmen würde:
Code: Select all
$wartezeit = get user input: type=Integer title="Bitte Zeit in Minuten eingeben"
* rechne $wartezeit in sekunden um
$wartezeit = $wartezeit * 60
* erhalte aktuelle Spielzeit in Sekunden
$istzeit = playing time
* errechne daraus Zeit, wenn das Warten vorbei ist
$sollzeit = $istzeit + $wartezeit
while $istzeit < $sollzeit
|
*errechne Zeit, die noch gewartet werden muss (funktion von $wartezeit geändert)
| $wartezeit = ( $sollzeit - $istzeit ) * 1000
| @ =wait $wartezeit ms
|
| * erhalte aktuelle Spielzeit in Sekunden
| $istzeit = playing time
end
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: 691
- Joined: Thu, 10. May 07, 17:45
-
- Posts: 691
- Joined: Thu, 10. May 07, 17:45
-
- Posts: 5285
- Joined: Mon, 11. Apr 05, 21:11
Vielleicht war das Problem eher mit dem Sound als mit der Schleife. Allerdings ist die Playing time gelegentlich schon verwirrend - die kommt in Sekunden, wenn ich mich recht entsinne, während waits in ms sind.Generalwest wrote:das mit dem playing time hab ich nie so wirklich hin bekommen. ka wieso. vielleicht hab ichs doch und habs nur nich gemerkt allerdings ein play sound in ner endlosschleife sollte man eig fast hören.
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
genau so ist es.. aber sei froh, sonst wäre die Spielzeit nicht wirklich eindeutig, weil sie sonst nach spätestens 3 Tagen wieder von vorne beginnt ^^ sorum beginnt die Zählung spätestens nach knapp 3.000 Tagen erst wieder von vorneSymTec ltd. wrote:Vielleicht war das Problem eher mit dem Sound als mit der Schleife. Allerdings ist die Playing time gelegentlich schon verwirrend - die kommt in Sekunden, wenn ich mich recht entsinne, während waits in ms sind.


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: 2764
- Joined: Thu, 31. May 07, 18:07
das mit dem playingtime wollt ich eigentlich schon unter r probiert haben, allerdings war mir wichtiger al, bbs usw scripten zu können, also war das playingtime das erste was ich in tc versucht habe. als sound verwende ich immer beim scripten 1118 weil er sehr leich zu merken istSymTec ltd. wrote:Vielleicht war das Problem eher mit dem Sound als mit der Schleife. Allerdings ist die Playing time gelegentlich schon verwirrend - die kommt in Sekunden, wenn ich mich recht entsinne, während waits in ms sind.Generalwest wrote:das mit dem playing time hab ich nie so wirklich hin bekommen. ka wieso. vielleicht hab ichs doch und habs nur nich gemerkt allerdings ein play sound in ner endlosschleife sollte man eig fast hören.

entweder hab ich wirklich zu kurz gewartet / verträgt sich nicht mit sinza, oder ka....~schulternzuckt~ nun weis ich ja wie es funzen muss.
aprpo schiffe. was mir unter x3r schon auffiel und in tc wieder auftaucht.
Folgende Situation:
Ich erstelle einen TS / TL mit Hombase mit der Rassenzuordnung Freund oder Neutral. Installiert sind /wurden unterschiedliche waren. HombaseStationen sind mit der selben Rassenkennung erzeugt worden. nun trat dann meist folgende Situation ein: Schiff wurde zerstört / angegriffen. Reaktion von X³(R und TC) in einem zufälligen Sektor rings rum (max 5 - 8 jumps) werden Novas erzeugt die dann auf der Hombase des zerstörten schiff landen / wollen. schießt man eine Nova ab, wird einfach eine neue erzeugt. Die Rassenkennung ist auch der Homebase entsprechend. Der Sektor wo das Passiert ist war unterschiedlich (momentan Hatikvas Glaube und aktuell Titan). Ist das "normal"

kann man ausser mit einer exist Prüfung in einer fly to schleife checken ob das Schiff x noch lebt und auf dem weg zur Station xyz ist? oO ich habs jetzt mit ner kleinen lib versucht die das schiff checkt obs noch da ist und fals nicht das schiff dementsprechend ausrüstet und nochmal auf die reise schickt.
aus folgendem Grund will ich dafür keine exist Prüfung benutzen: zu ungenau und unflexibel. Ich will das in folgender schleife unterbringen:
051 ~~~ while [TRUE]
052 ~~~~ @ = wait 60000 ms
053 ~~~~ @ $trader = $stat.check -> call script 'a34' : Hombase=$stat.check erstausrüstung=null Anzahl=null Schifstype=Baldric owner=$owner varsting=$ship.name
054 ~~~~ @ = $trader -> call script '!move.movetostation' : station=$stat.check
055 ~~~~ if $trader -> is docked
056 ~~~~~ break
057 ~~~~ end
058 ~~~ end
Das Problem momentan ist, wenn die schleife aktiv ist, wird zwar a34.xml ausgeführt, allerdings kein neues schiff erzeugt und dementsprechend ausgerüstet. (schiff wurde in der geposteten Schleife manuell von mir als Player abgeschossen)
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
du willst also prüfen, ob ein Schiff noch existent ist UND darauf ein bestimmtes Kommando läuft?? um <RetVar/IF> <RefObj> exist wirst du warscheinlich nicht herum kommen, und ob ein bestimmtes Kommando noch aktiv ist kannst du mit <RetVar/IF> <RefObj> is script <ScriptName> on stack of task=<Var/Number> prüfen.. (ggf. noch das Ziel mit <RetVar/IF> <RefObj> get destination abfragen, aber das sollte denke ich nicht nötig sein..)
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: 2764
- Joined: Thu, 31. May 07, 18:07
hmm mir ist aufgefallen das das script auf die noreturn value wartet ich probier das noch aus, bevor ich wirklich das if exist mach. damit fällt allerdings die lib nicht aus, und ich prüf doppelt. eigentlich wollt ich den teil später in einem externen script unterbringen deswegen die lib die die schiffe der Rasse prüft, dann den namen checkt und falls kein spezielles gefunden wird, eins erzeugt. -.- ich mach mal n Demo script vielleicht kann ich so mir n besseren überblick verschaffen. da such ich schon seit dem svs eine vernünftige Lösung für das, also zu prüfen ob´s das schiff das hin und her schippert noch gibt oder nicht.
Edit: mit ner Kombi aus skip if not exist & Prafix Start tut es was es soll. Mit dem Hombase Phänomän
weis ich auch nicht wie ich erneut drauf reagieren soll.
Edit: mit ner Kombi aus skip if not exist & Prafix Start tut es was es soll. Mit dem Hombase Phänomän

-
- Posts: 13244
- Joined: Fri, 13. Jan 06, 16:39
Wenn du deine Spezialschiffe in einem globalen array speicherst dann kannst du doch auch ohne Suche ganz fix fragen
"seid ihr alle daaaaa?"
Strings (Namen) und Tasks und Rassen durchsuchen... tut das Not?
Ob es existiert ist doch recht interessant wenn du wissen willst ob es noch existiert.
"seid ihr alle daaaaa?"
Strings (Namen) und Tasks und Rassen durchsuchen... tut das Not?
Das meinst du jetzt aber nicht ernst?Generalwest wrote:aus folgendem Grund will ich dafür keine exist Prüfung benutzen: zu ungenau und unflexibel.
Ob es existiert ist doch recht interessant wenn du wissen willst ob es noch existiert.
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: 2764
- Joined: Thu, 31. May 07, 18:07
ich will kein global arry, wenn irgendwas mit der tfile nicht hinhaut dann steht das ding da. unbekanntes objekt ist beispielsweise auch ein schiff und resize arry ist eine Sache für sich. zudem -> ich will das jedes meiner scripte sicher auf jedes erzeugte schiff zugreifen kann. zu der exist Prüfung will ich jedes schiff erstellen könnenGazz wrote:Wenn du deine Spezialschiffe in einem globalen array speicherst dann kannst du doch auch ohne Suche ganz fix fragen
"seid ihr alle daaaaa?"
Strings (Namen) und Tasks und Rassen durchsuchen... tut das Not?
Das meinst du jetzt aber nicht ernst?Generalwest wrote:aus folgendem Grund will ich dafür keine exist Prüfung benutzen: zu ungenau und unflexibel.
Ob es existiert ist doch recht interessant wenn du wissen willst ob es noch existiert.

und nein ich will das alles nicht von Hand mehr editieren und kopieren und global & local setz ich nur im Notfall ein solange nicht alle Versionen Einträge in der tfile für global haben...nicht auszudenken was passiert wenn jemand die neue eate Version nutzt ohne die neue tfile (sprich nen TFile Downgred)

ja es tut not wenn man kein GL Arry verwenden will...hab zwar schon eins definiert, noch konnte ich´s allerdings auskommentiert lassen.
Und da immer vieeeele Schiffe des gleichen Typs umherkreisen will ich ja nicht irgendeins sondern das zudem will ich gleich von Anfang an ein Zumüllschutz einbauen und nicht so enden wie mit dem Remote NavSat Version 0.1 (in 0.2 ist es auch gefixt)
Ich mach mir hier n Lesezeichen rein damit ichs wiederfinde wenn ich diese Version Online geht und Poste dann den Quelltext damit jeder sieht wieso ich das so machen möchte.

ach ja. was ich noch sagen wollte. Ich wollte eine unabhängig Prüfen ob das Schiff da ist oder nicht, ob jetzt der Scriptteil aktiv ist oder ein anderer. irwas hab ich vergessen....ka es war zwar wichtig fällt mir dennoch nicht mehr ein.
axo Namensvergleich mehr wie
Übergebene ner Name = $name.ship
get name of Objekt = ship.name
und dann if ship.name == name.ship um von dem String of Plattern wegzukommen.
jetzt weis ich wieder was ich schreiben wollt:
wenn ich if exist verwende kann es sein das es das schiff physikalisch nicht mehr gibt weil´s nicht aktualisiert wurde. Gibt´s das Schiff nicht kann die Endlosschleife nicht mehr unterbrochen werden (da if exist true aber das schiff nur unbekanntes objekt ist) und die Schleife stört unter Umständen die nachfolgende instands, von dem Save schaden mal abzusehen. mach ich´s so wird das schiff an sich als physikalisches objekt aktualisiert und geprüft und genau das will ich eigentlich damit erreichen weil ich oft schon den Fall hatte das das schiff das ich mit if exist abgefragt hatte am ende ein unknow objekt war das nur noch als Leiche existiert. also ähnlich wie beim arry.
Last edited by Generalwest on Tue, 3. Feb 09, 01:37, edited 1 time in total.
-
- EGOSOFT
- Posts: 12166
- Joined: Fri, 21. May 04, 17:15
Dan verbereite ich mal das Wort des Herrn.. ähm des MD.
Wie man sehen kann ist das eigentlich selbst erklärend. Als Wert für die zeit geht auch s (sekunden) m (Minuten) h (Stunden) und wie oben d (Tage).
Der MD kann auch für anderes als Missionen miss-/gebraucht werden.
Der MD sei mit euch.
MFG
Ketraar
Code: Select all
<cue name="Ships_spawn">
<condition>
<check_all>
<check_age value="{player.age}" min="5d"/>
</check_all>
</condition>
<action>
<do_all>
<create_ship class="m1" name="this.debugM1_1" race="player" typename="SS_SH_A_M1">
<position x="0" y="0" z="0"/>
<sector x="8" y="8"/>
<equipment loadout="maximum" loadoutmask="all"/>
<command command="idle"/>
<pilot shipname="My New M1"/>
</create_ship>
</do_all>
</action>
</cue>
Der MD kann auch für anderes als Missionen miss-/gebraucht werden.

Der MD sei mit euch.
MFG
Ketraar

-
- Posts: 468
- Joined: Thu, 18. Jan 07, 15:32
Amen
Da hier auch Schleifen in Diskussion stehen mal was kurzes dazu auf Ketraars Code aufbauend.
Um das Schiff zu ersetzen.
und damit dem Schiff nicht die Raketen aus gehen noch diese Kleinigkeit.
Das kann man natürlich auch mit anderen Raketen typen machen und mehrer zusammen checken.
Da mit wäre dann eine Sektor wache oder ähnliches geschaffen!
MfG
Jens Ka

Da hier auch Schleifen in Diskussion stehen mal was kurzes dazu auf Ketraars Code aufbauend.
Um das Schiff zu ersetzen.
Code: Select all
<cue name="Ships_spawn_checkexists" delay="500">
<condition>
<object_exists object="Ships_spawn.debugM1_1" negate="1"/>
</condition>
<action>
<reset_cue cue="Ships_spawn"/>
</action>
</cue>
Code: Select all
<cue name="Ships_spawn_checkmissile" delay="500">
<condition>
<check_value value="{object.cargo.SS_MISSILE_A.exists@Ships_spawn.debugM1_1}" exact="0"/>
</condition>
<action>
<add_cargo object="Ships_spawn.debugM1_1">
<ware typename="SS_MISSILE_A" exact="100"/>
</add_cargo>
</action>
<cues>
<cue name="Ships_spawn_checkmissile">
<condition>
<cue_is_complete cue="Ships_spawn_checkmissile"/>
</condition>
<timing>
<time exact="10s"/>
</timing>
<action>
<reset_cue cue="Ships_spawn_checkmissile"/>
</action>
</cue>
</cues>
</cue>
Da mit wäre dann eine Sektor wache oder ähnliches geschaffen!
MfG
Jens Ka
MD IST NICHT MSCI!!!!
MD ist Eventdriven. Es passiert etwas - du reagierst darauf.
Bin nicht für weitere Mod Projekte zu haben.
ND VSM XTC
Allgemeine MD-Fragen
MD ist Eventdriven. Es passiert etwas - du reagierst darauf.
Bin nicht für weitere Mod Projekte zu haben.
ND VSM XTC
Allgemeine MD-Fragen
-
- Posts: 2764
- Joined: Thu, 31. May 07, 18:07

Un nein ich will nicht ein Schiff alle X Sec erstellen um es dann neu auszurüsten und auf die reise quer durchs uni schicken. Ich mach´s doch glaub per !move.jumptostation und zwar allgemei den !move.flytosectorposition macht alles ausser dahin zu fliegen. !move.flytosecotr bekommt TC grad noch hin bevor flytosectorposition eingeleitet wird und das Schiff nach Uranus fliegt obwohl´s schon im Zielsektor ist.
NPC Steuerung ist mehr als mist momentan. Eigene Schiffe zu Kontrollieren ist ja einfach oder mal nen TS per Script zu sagen "Docke hier, docke dort" macht das mal mit nem TL oO obwohl das Bergbaubasis Schiff gute Referencen in KI Steuerung bekommen hat.

Ich hoffe etwas Ablenkung wird mir gut tun und mal die neue Version von eate und x5/1 zum betatest freigeben.
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
kleine Frage: hast du der KI ausdrücklich verboten den TL zu verwenden?? wenn nein macht so ziemlich jedes Schiff nach ner weile was es will...
PS und ja, es ist möglich per MD ein Script laufen zu lassen.. ( run_script oder so...)
PS und ja, es ist möglich per MD ein Script laufen zu lassen.. ( run_script oder so...)
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
