[Diskussion] X Rebirth Tools

Hier ist der ideale Ort um über Scripts und Mods für X Rebirth zu diskutieren.

Moderators: Moderators for English X Forum, Scripting / Modding Moderators

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11841
Joined: Fri, 21. May 04, 17:15
x4

[Diskussion] X Rebirth Tools

Post by Ketraar » Fri, 6. Dec 13, 23:30

Dieses Thema dient dazu, die hier gelisteten X Rebirth Tools zu diskutieren

Stellt Fragen oder teilt eure Erfahrungen in Bezug auf die Tools, auch Feedback kann hier gepostet werden. Das Thema wird aktualisiert, sobald weitere Tools hinzugefügt werden.

MFG

Ketraar
Last edited by Ketraar on Fri, 28. Feb 14, 15:37, edited 4 times in total.

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Mon, 23. Dec 13, 08:58

Nach links schau, nach rechts schau, mhh na dann mach ich eben mal den Anfang.

Ich habe absolut keinen Plan von Programmieren (habe es mit dem alten Scripteditor mit würgen hinbekommen, was zu "Erklicken").

Um so lustiger, das ausgerechnet so jemand eine Anleitung schreiben möchte.
Andererseits, wenn Leute die es schon können, Anleitungen schreiben, vergessen sie meist, dass sie immer viel zu kompliziert schreiben und Dinge (nicht aus Boshaftigkeit, sondern, weil sie es schon ganz automatisch machen und es selbstverständlich für sie ist) einfach nicht erklären und weg lassen.

Ich fange also wirklich von Null an und wollte euch bitten, mal über das bisher geschriebene drüber zu gehen, ob da irgendwelche falschen Dinge drinnen stehen oder ob das so alles richtig ist, was ich da verzapft habe.

http://bodenseejugend.de/sonstiges/XR1/ ... rungen.htm

Vielen Dank.
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

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

Post by UniTrader » Wed, 25. Dec 13, 22:49

Code: Select all

name"" ?

description="" ?

author="" ?
diese 3 Felder im content-Node werden meinem verständnis nach benutzt, wenn kein Eintrag für die aktuelle Sprache im <text>-Node gefunden wurde ;)

du solltest zudem unbedingt das save-attribut und wenn du eh dabei bist gleich noch das enabled-Attribut im content-Node erwähnen ;)


und gleich eine Frage von meiner seite, auch wenn es momentan eher ein AIScript betrifft (sind ja zum glück ähnlich): wie setze ich eine Globale Variable? ich müsste nämlich eine Gruppe von Schiffen global speichern, um von einer art "manager"-AIScript Schiffe darin einfügen zu können bzw. welche daraus entfernen. dieses AIScript läuft allerdings nicht permanent sondern wird bei bedarf aufgerufen, aber die Liste/Gruppe muss im Spielstand erhalten bleiben.

Hintergrund der sache: ich will die move.die so umbiegen, dass die Schiffe nicht einfach despawnt werden sondern ne zeit lang im Uni verweilen und währenddessen von anderen Scripts/Missionen zur verwendung angefordert werden können, statt für den jeweiligen zweck extra Schiffe zu Spawnen und zu Despawnen
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 ;)

Guest

Post by Guest » Thu, 26. Dec 13, 02:02

UniTrader wrote:wie setze ich eine Globale Variable?
... die ´´terran-conflict-logik´´ würde sagen: "einfach keine punke im namen der variablen verwenden"
// scheint aber unter XR nicht mehr so zu sein ^^

... hab´ mal über den guide geskippt, wenn ich´s korrekt einschätze, geht das über "libraries"
--> die variable also nicht im ´eigentlichen´ cue erstellen, sondern "wo anders" (in ´ner library eben)
(bezieh´ mich auf abschnitt "libraries" seite 10, interessant erscheint mir auch noch die letzte seite abschnitt "namespace")

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

Post by UniTrader » Thu, 26. Dec 13, 19:35

JonfersonSDD wrote:... die ´´terran-conflict-logik´´ würde sagen: "einfach keine punke im namen der variablen verwenden"
// scheint aber unter XR nicht mehr so zu sein ^^
für MDScripts trifft das wohl zu, da ich aber mit AIScripts arbeiten will ist diese methode nur das ansprechen einer stinknormalen Var. zumindest wenn man das Savegame analysiert -> die Vars ist im entitiy/script/vars-Node drin, also an den ausführenden NPC bzw. das ausführende Script gebunden.
JonfersonSDD wrote:... hab´ mal über den guide geskippt, wenn ich´s korrekt einschätze, geht das über "libraries"
--> die variable also nicht im ´eigentlichen´ cue erstellen, sondern "wo anders" (in ´ner library eben)
(bezieh´ mich auf abschnitt "libraries" seite 10, interessant erscheint mir auch noch die letzte seite abschnitt "namespace")
bringt mir denke ich nicht allzuviel, ich arbeite nicht mit cues.

P.S.: und ich habs grad raus.. ne suche nach "global" in den aiscripts hätte mir das fragen sparen können.. global.$<Variable> heisst die lösung :)[/code]
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 ;)

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Fri, 27. Dec 13, 08:14

Hu, hu

1. Gibt’s eine Möglichkeit im Spiel die Erweiterungen zu aktualisieren oder muss ich bei jeder Teständerung das Spiel schließen und neustarten? (da war der alte Editor tatsächlich von Vorteil)

2. Ich habe vergebens versucht ein „Hallo Welt“-Menü Unterpunkt zu erstellen. Dazu habe ich mir die MainMenue.xml und von dem „ManualCommandExtension“ Mod die „Orders.xml“ aber irgendwie bin ich total und absolut überfordert damit.

Kann mir einer ein mindestens notwendigen Code als Beispiel geben, ohne jeglichen Schnickschnack, also wirklich nur das, was im Spiel einen neuen Untermenüpunkt erzeugt.

Code: Select all

<?xml version="1.0" encoding="iso-8859-1" ?>
<mdscript name="ConversationsPatchConstructor" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="md.xsd">
    <cues>
        <cue name="Test" instantiate="true" namespace="this">
            <actions>
                <add_player_choice_sub text="{9999,1}" section="gOrders_Test" position="top_right" comment="test" selectable="(event.object.command.value != command.support)" />
            </actions>
        </cue>
    </cues>
    <add sel="/mdscript[@name='Orders']/cues/cue[@name='SectionHandler']/actions">
        <do_if value="event.param == 'gOrders_Test'">
            <do_if value="event.name == 'event_conversation_returned_to_section'">
                <add_conversation_view view="facecopilot" />
            </do_if>
            <add_player_choice_sub text="{9999,1}" section="gMainUniverse_main" position="bottom_left" choiceparam="event.object.ship" comment="test"/>
    </add>
</mdscript>
(Ich hab bei den meisten Sachen keinen Plan wofür sie sind und was sie machen)

Was ich machen wollte:
Im Hauptmenü unter dem "Menüordner/Reiter/Instanz oder wie immer das heißen mag" "Universum" soll unter dem "Enzyclopedi" Punkt ein neuer "Menüordner" mit "Hallo Welt" stehen, wenn man dort drauf Klickt, soll sich dam Menü öffnen und ein Untermenü "Test" stehen.
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

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

Post by UniTrader » Fri, 27. Dec 13, 13:40

1. vielleicht gibts ein InGame-Kommando in der Kommandokonsole.. ich hab das nicht gross weiter verfolgt..

2. versuchst du es über neue Dateien oder willst du bestehende Dateien verändern? in zweiterem fall musst du mit xml-diffs arbeiten, da bestehende xmls nicht ersetzt sondern ergänzt werden)
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 ;)

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Fri, 27. Dec 13, 20:17

Gibt es irgendwo eine Liste mit den ganzen "<>" cues, cue, action, add, diff und was es da noch alles gibt, wofür sie gut sind, was ich wann brauche, was sie machen, wie sie Verschachtelt sein müssen usw.?
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

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

Post by UniTrader » Fri, 27. Dec 13, 20:49

diese Dateien sind im Spiel mitgeliefert, beinhalten die entsprechende Dokumentation und enden auf .xsd - ich hab vor längerer Zeit nen paket mit allen verfügbaren angelegt, zu finden hier: http://ubuntuone.com/23zTOAse4OkgAjk2ZPIcLL
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 ;)

FritzHugo3
Posts: 4664
Joined: Mon, 6. Sep 04, 17:24
x4

Post by FritzHugo3 » Fri, 27. Dec 13, 22:57

Danke dir, da versteh ich leider auch nicht mehr ;-)
Ich fordere mehr und vorallem gerechtere Verteilung von Keksen und Süßkram für die "Magischen 20"! Daher wählen Sie jetzt die DPFGKV, die Deutsche Partei für gerechtere Keks - Verteilung!

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

Post by UniTrader » Fri, 27. Dec 13, 23:16

am besten geht das ganze auch mit nem geeigneten Editor, ich verwende derzeit xmlcopyedit (unterstützt auto-vervollständigung), Notepad++ geht auch, Eclipse ist in der hinsicht luxus pur, aber für meinen geschmack ein wenig zu bloated, hier nen tuto zur einrichtung (allerdings auf Englisch): http://forum.egosoft.com/viewtopic.php?t=355986 - wichtig ist für alle Programme nur, dass du in der 2. Zeile die richtige xsd angibst (z.B. <aiscript xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="infobroker.ai" xsi:noNamespaceSchemaLocation="aiscripts.xsd"> ) damit das jeweilige Programm weiss, welche es verwenden muss..
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 ;)

iforgotmysocks
Posts: 1244
Joined: Fri, 8. Nov 13, 22:35
x4

Post by iforgotmysocks » Mon, 13. Jan 14, 19:23

Ich verwende instanzierte cues nur sehr selten und sicher.
Aber was würde hier passieren?

Frage 1:

Wird davon nur eine Instanz angelegt, wenn die condition erfüllt ist oder floode ich den md alle 0,2 Sekunden mit neuen Instanzen?

Code: Select all

<cue name="A" instantiate="true" checkintervall="0.2s">
  <conditions>
    <check_value value="true"/>
  </conditions>
</cue>
___________________________________________
Frage 2:

Was passiert wenn man das Ganze am Ende auch noch resettet?

Code: Select all

<cue name="A" instantiate="true" checkintervall="0.2s">
  <conditions>
    <check_value value="true"/>
  </conditions>
  <actions>
    <reset_cue cue="this"/>
  </actions>
</cue>

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11841
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Mon, 13. Jan 14, 19:42

Frage 1: Intance wird IMMER erstellt sofern conditions erfüllt sind, in diesem Fall ad infinitum mit evtl. CTD.

Frage 2: Das gibt nen komischen loop was nicht gewollt sein kann (auch hier womöglich ein CTD), eine instace resetten get aber nicht, den diese "existiert" in diesem Sinne gar nicht, da es "nur" eine Kopie (instance) ist.
Ein reset ist nur dann "logisch" wenn man den reset manuell erzwingen will.

MFG

Ketraar
Image

Guest

Post by Guest » Mon, 13. Jan 14, 21:59

... hat zwar nicht direkt ´was mit XR zutun (eher mit TC), aber kann´s sein, dass man am "besten" die instantiate-funktion nur bei events nutzt ?? (& zwar dann ohne delay)
// z.B. wenn etwas zerstört / gekapert wird, dann führt man etwas code für´s {event.object} aus & das war´s dann ...

... alles andere würd´ ich mit anderweitig konstruierten loops (nämlich per <reset_cue cue="{cuename}"/> in ´nem zeitverzögertem sub-cue) umsetzen (imho)

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11841
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Tue, 14. Jan 14, 01:36

Kommt darauf an, geht eigentlich gut mit allem. Beispiel in der Schatzsuche, da wo man zufällig die Bojen anfliegen muss ist besser mit instance geregelt als mit reset. Kostet viel weniger Code und ist mit ner simplen Variable geregelt.

Bei instance ist nur wichtig zu merken das die nicht enden, also conditions setzten die endlich oder restriktiv sind. Beispiel eine bestimmte Anzahl Objekte in einer Gruppe abzählen oder Sektorwechsel.

Klar sind event conditions recht gut, aber auch hier gibts welche die oft zutreffen, da also auch aufpassen. Manchmal ist aber nicht ein event "zur Hand" oder geeignet.

Manuelles reset ist gut für einfach Sachen, die sich wiederholen, speziell bei einem Objekt oder Gruppe. Aber für komplexere Dinge, wie mehrere Optionen und/oder variablen ist instace viel simpler und besser geeignet als quer durch die ganzen checks und filtern zu müssen, das kann schnell mal unübersichtlich werden.

Es empfiehlt sich hier mal die Plotcodes (auch von TC) nach solchen Beispielen zu suchen und analysieren wie das in den Fällen gehandhabt wird um ein besseres Bild zu erhalten.

MFG

Ketraar

PS.: auch wenn viel in Rebirth anders ist im MD als in TC/AP, die Logik wie es funktioniert ist im großen die Selbe, kann also viel von da interpretiert werden.
Image

IRaven
Posts: 254
Joined: Wed, 21. Mar 12, 19:49
x4

Post by IRaven » Tue, 14. Jan 14, 08:22

UniTrader wrote:

Code: Select all

name"" ?

description="" ?

author="" ?
diese 3 Felder im content-Node werden meinem verständnis nach benutzt, wenn kein Eintrag für die aktuelle Sprache im <text>-Node gefunden wurde ;)

du solltest zudem unbedingt das save-attribut und wenn du eh dabei bist gleich noch das enabled-Attribut im content-Node erwähnen ;)


und gleich eine Frage von meiner seite, auch wenn es momentan eher ein AIScript betrifft (sind ja zum glück ähnlich): wie setze ich eine Globale Variable? ich müsste nämlich eine Gruppe von Schiffen global speichern, um von einer art "manager"-AIScript Schiffe darin einfügen zu können bzw. welche daraus entfernen. dieses AIScript läuft allerdings nicht permanent sondern wird bei bedarf aufgerufen, aber die Liste/Gruppe muss im Spielstand erhalten bleiben.

Hintergrund der sache: ich will die move.die so umbiegen, dass die Schiffe nicht einfach despawnt werden sondern ne zeit lang im Uni verweilen und währenddessen von anderen Scripts/Missionen zur verwendung angefordert werden können, statt für den jeweiligen zweck extra Schiffe zu Spawnen und zu Despawnen
Bin gerade an dem selben Versuch dran.
Versuche move.die Schiffe dazu zu bringen sich in Twilight Sentinel gegenseitig zu verkloppen um so etwas wie eine Art Krieg zwischen Plutarch, DeVries und Omicron zu erzeugen.
Habe das ganze (nachdem ich den UFO code studiert habe) so gelöst bekommen.

Code: Select all

<do_if value="$byjump or $bydock or $byhighway or $byhostile or $byidle">
					<debug_text text="'MoveDie just sent ' + this.ship + ' to the War Zone'" chance="$debugoutputchance" />
					<run_script name="'move.undock'" />
					<signal_objects object="player.primaryship" param="'move_die_ship_found'" param2="this.ship" />
				</do_if>
Im md sieht das ganze dann so aus:

Code: Select all

<cue name="SendShipsToWar" instantiate="true" namespace="this">
							<conditions>
								<check_all>
									<event_object_signalled object="player.primaryship" param="'move_die_ship_found'" />
								</check_all>
							</conditions>
							<actions>
							<set_value name="$oWarShip" exact="event.param2" />
Wenn das ganze jetzt noch funktionieren würde wäre ich glücklich xD
(Die Abfrage funktioniert aber beim ausführen des scripts um die Schiffe nach Twilight Sentinel zu schicken funktioniert immernoch irgendwas nicht.) Bleibt nur Code ändern, Spiel neu starten, Debug Log, test (hab ne NPC Arawn in nem save im Bau, sprich jeder test dauert ~10-20 minuten ._.)

Zumindest die Schiffs abfrage funktioniert, da er mir nen einfachen show_help befehl ausgibt bei jedem erstellten move.die ship :)
Auf diese Weise wird halt jedes Schiff direkt angesprochen, allerdings gespeichert werden Sie dann doch nicht.

Guest

Post by Guest » Tue, 14. Jan 14, 11:46

... kann es sein, dass du im unteren code ein <do_all>...</do_all> vergessen hast ??
// falls da noch weitere zeilen code im <action/>-block kommen

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11841
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Tue, 14. Jan 14, 12:47

Codeschinpsel zu überprüfen ist recht schwierig, da der Fehler iwo sein kann. Generell würde ich so vorgehen, sicherstellen alle variablen werden richtig erkannt und ergeben das was sie sollen. Wenn das alles passt schauen was ausgeführt wird, hier mal nur vereinzelt teile nutzen und schauen welche funktionieren.

Schreibfehler oder xml Fehler suchen (arbeitest mit Schema, dann werden diese angezeigt).

Sonst halt mal den ganzen relevanten code bereit stellen. (wenn länger bitte Datei verlinken)

MFG

Ketraar
Image

IRaven
Posts: 254
Joined: Wed, 21. Mar 12, 19:49
x4

Post by IRaven » Tue, 14. Jan 14, 12:53

JonfersonSDD wrote:... kann es sein, dass du im unteren code ein <do_all>...</do_all> vergessen hast ??
// falls da noch weitere zeilen code im <action/>-block kommen
Nein nein da kommt noch viel mehr :)

das letzte problem war, dass ich das <set_value> im do_if hatte, dass noch gar nicht geschaltet wurde, so wusste mein md natürlich nicht auf welches Objekt das Script im do_else gestartet werden kann. Hatte aber dann auch keine Lust nochmal zu testen. Heute Abend vielleicht.

Viel mehr würde mich interessieren was für conditions man setzen könnte um zu prüfen ob der Plot bereits abgeschlossen ist.
<event_cue_completed cue="md.Plot_ep1_ch3.Part8" /> hat auf jedenfall nicht funktioniert (bzw. funktioniert wohl nur wenn der Plot noch aktiv ist und dann zu irgendeinem Zeitpunkt in dem der Cue schon auf seine conditions wartet abgeschlossen wird.)

[Das ist meine erste Modifikation für ein X Spiel und meine gesammelten Kenntnisse beziehen sich bis jetzt auf das studieren von anderen Mods, bereits vorhandenen Skripten in den .cats + .dats und natürlich den Dokumentationen hier im Forum.
Im Prinzip klau ich also meinen gesammten Code hier und da zusammen xD]


Edit: Solved

Sao t'Lp
Posts: 135
Joined: Tue, 17. Nov 09, 21:18
x4

Post by Sao t'Lp » Fri, 24. Jan 14, 13:09

Ich hab eine Frage zu den delays:

Ich möchte, dass 2 Nachrichten hintereinander auf dem Bildschirm ausgegeben werden. Ich hab mir dazu Yorricks Sensor Sweep gekrallt und das so modifiziert:

Code: Select all

<actions>
     [Stuff...]
      <show_notification caption="'Sensor Report'" details="'Keine herrenlosen Schiffe gefunden'" timeout="5s"/>
     [more Stuff...]
</actions>
<delay exact="7s"/>
<actions>
    [even more Stuff]
    <show_notification caption="'Handelscomputer'" details="'Angebote wurden aktualisiert'" timeout="5s"/>
    [Stuff]
</actions>
Allerdings funktioniert das so nicht... Muss ich bei der Syntax nochwas beachten oder mit: <event_cue_completed cue="parent"/> arbeiten?
You want Split? :split:

Post Reply

Return to “X Rebirth - Scripts und Modding”