[DISKUSSION] Allgemeine MD-Fragen

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

Post Reply
User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sun, 4. Mar 18, 19:25

Beispiel 5: Missionsanweisung

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <cues>

    <cue name="beispiel5_cue001">

      <action>
        <do_all>
          <!--finde ne station und setze marker drauf-->
          <find_station name="beispiel5_cue001.gefundene_station" nearest="1"/>
          <!--ne IF ELSE abfrage-->
          <do_choose>
            <!--abfrage, ob die station nicht existiert-->
            <do_when value="{object.exists@beispiel5_cue001.gefundene_station}" exact="0">
              <incoming_message text="... keine station gefunden ..."/>
              <cancel_cue cue="beispiel5_cue001"/>
            </do_when>
            <!--anderenfalls-->
            <do_otherwise>
              <!--erstelle missionsanweisung-->
              <create_briefing cue="beispiel5_cue001">
                <objectives>
                  <objective step="1">
                    <flyto object="beispiel5_cue001.gefundene_station"/>
                  </objective>
                  <objective step="2">
                    <custom action="... tue dies ..."/>
                  </objective>
                  <objective step="3">
                    <custom action="... tue das in bezug auf ..." text="{object.name@beispiel5_cue001.gefundene_station}"/>
                  </objective>
                </objectives>
              </create_briefing>
              <!--setze marker FLIEGE ZUR STATION-->
              <set_objective cue="beispiel5_cue001">
                <!--verbinde missionsanweisung + missionsschritt mit marker-->
                <briefing cue="beispiel5_cue001" step="1"/>
                <flyto object="beispiel5_cue001.gefundene_station"/>
              </set_objective>
            </do_otherwise>
          </do_choose>
        </do_all>
      </action>

      <cues>
        
        <!--reagiert auf annaeherung-->
        <cue name="beispiel5_cue002" delay="3s">

          <condition>
            <check_all>
              <cue_is_complete cue="beispiel5_cue001"/>
              <object_exists object="beispiel5_cue001.gefundene_station"/>
              <!--distanz zwischen spieler und station unter 2km-->
              <object_position object="{player.ship}" max="2km">
                <position object="beispiel5_cue001.gefundene_station"/>
              </object_position>
            </check_all>
          </condition>

          <action>
            <do_all>
              <incoming_message text="...bist unter 2km an der station ran."/>
              <!--setze marker auf schritt 2 der missionsanweisung-->
              <set_objective cue="beispiel5_cue001">
                <briefing cue="beispiel5_cue001" step="2"/>
                <custom action="... tue dies ..."/>
              </set_objective>
            </do_all>
          </action>
          
        </cue>

        <!--reagiert auf abbruch-->
        <cue name="beispiel5_cue003">

          <condition>
            <check_all>
              <objective_cancelled cue="beispiel5_cue001"/>
            </check_all>
          </condition>

          <action>
            <do_all>
              <!--zeige an, dass mission abgebrochen wurde-->
              <remove_objective cue="beispiel5_cue001" status="aborted"/>
              <!--stoppe alle cues-->
              <cancel_cue cue="beispiel5_cue001"/>
            </do_all>
          </action>

        </cue>
        
      </cues>

    </cue>
    
  </cues>
  
</director>
Hier wird dem Missionmarker mit einer Missionsanweisung (Beschreibung), die 3 Schritte beinhaltet, versorgt.
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sun, 4. Mar 18, 19:25

Beispiel 6: Frage stellen, Antwort prüfen

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <cues>

    <cue name="beispiel6_cue001">

      <action>
        <do_all>
          <!--stell dem spieler eine frage-->
          <ask_question name="beispiel6_cue001.gestellte_frage" popup="1" 
                        text="... irgendeine frage ? 
                        \n[select value='antwort1']yepp[/select]
                        \n[select value='antwort2']weiss nicht[/select]
                        \n[select value='antwort3']nope[/select]"/>
        </do_all>
      </action>

      <cues>
        
        <!--antwort reaktion-->
        <cue name="beispiel6_cue002">

          <condition>
            <check_all>
              <cue_is_complete cue="beispiel6_cue001"/>
              <question_answered question="beispiel6_cue001.gestellte_frage"/>
            </check_all>
          </condition>

          <action>
            <do_all>
              <incoming_message text="hast mit {question.answer@beispiel6_cue001.gestellte_frage} geantwortet"/>
            </do_all>
          </action>
          
        </cue>

      </cues>

    </cue>
    
  </cues>
  
</director>
Hier wird eine Frage gestellt, in der es 3 Antwort-Möglichkeiten gibt. Um diese unterscheiden zu können, versieht man sie mit unterschiedlichen (beliebig gewählten) Werten ("antwort1" "antwort2" "antwort3"). Mit <question_answered> checkt man, ob sie beantwortet wurde. Man muss nicht (aber kann) die konkrete Antwort checken. Die gewählte Antwort wird als Nachricht ausgegeben ({question.answer@...} = gewählte Antwort).
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sun, 4. Mar 18, 19:26

Beispiel 7: Schiff erstellen und Person mit Missionsangebot hinzufügen

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <cues>

    <cue name="beispiel7_cue001">

      <action>
        <do_all>
          <!--schiff erstellen-->
          <create_ship name="beispiel7_cue001.das_schiff" race="argon" typename="SS_SH_A_M6M">
            <equipment loadout="default"/>
            <command command="idle"/>
          </create_ship>
          <!--person auf schiff als crew erstellen-->
          <create_actor name="beispiel7_cue001.die_person" character="...JSDD" face="158" voice="102" 
                        object="beispiel7_cue001.das_schiff" location="crew"/>
          <!--ein missionsangebot (plot) fuer die person erstellen-->
          <create_offer actor="beispiel7_cue001.die_person" conversation="L2OfferBuyCustom2" discipline="XXXXP">
            <!--parameter speziell fuer diese conversation: eine verkaufsliste mit 2 optionen, siehe t/conversations.xml-->
            <params>
              <!--der name OfferText stammt aus der text-datei {3800,...}-->
              <param name="OfferText" value="willste was kaufen?"/>
              <!--diese 2 namen (Option1 Option2) stehen in der text-datei {3800,...}-->
              <param name="Option1" value="erste option"/>
              <param name="Option2" value="zweite option"/>
              <!--diese 2 namen (Price1 Price2) stehen in der text-datei {3800,...}-->
              <param name="Price1" value="1234"/>
              <param name="Price2" value="5678"/>
            </params>
          </create_offer>
        </do_all>
      </action>

      <cues>

        <!--kommunikations-reaktion: gekauft-->
        <cue name="beispiel7_cue002">

          <condition>
            <check_all>
              <!--eine diese bedingungen muss zutreffen-->
              <check_any>
                <!--diese 2 rueckgabe-werte der conversation sind incht frei waehlbar, sondern in t/conversations.xml festgelegt-->
                <conversation_completed actor="beispiel7_cue001.die_person" conversation="L2OfferBuyCustom2" answer="accept1"/>
                <conversation_completed actor="beispiel7_cue001.die_person" conversation="L2OfferBuyCustom2" answer="accept2"/>
              </check_any>
            </check_all>
          </condition>

          <action>
            <do_all>
              <incoming_message author="{actor.name@beispiel7_cue001.die_person}" text="... du hast etwas gekauft."/>
            </do_all>
          </action>

        </cue>

        <!--kommunikations-reaktion: gecancelt-->
        <cue name="beispiel7_cue002">

          <condition>
            <check_all>
              <!--eine diese bedingungen muss zutreffen-->
              <check_any>
                <conversation_completed actor="beispiel7_cue001.die_person" conversation="L2OfferBuyCustom2" answer="cancel"/>
              </check_any>
            </check_all>
          </condition>

          <action>
            <do_all>
              <!--zerstoere schiff und die darauf befindliche personen-->
              <destroy_object object="beispiel7_cue001.das_schiff" warp="1"/>
              <cancel_cue cue="beispiel7_cue001"/>
            </do_all>
          </action>

        </cue>
        
      </cues>

    </cue>
    
  </cues>
  
</director>
Hier wird eine Person auf einem Schiff erstellt, die ein Missionsangebot (vom Typ Plot) hat.
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sun, 4. Mar 18, 20:08

Beispiel 8: Eine Gruppe von Schiffen erstellen

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <cues>

    <cue name="beispiel8_cue001">

      <action>
        <do_all>
          <!--schiffe erstellen-->
          <do_all min="3" max="10">
            <create_ship group="beispiel8_cue001.gruppe_von_schiffen" race="argon" typename="SS_SH_A_M4">
              <position object="{player.ship}" min="3km" max="4km"/>
              <equipment loadout="default"/>
              <command command="idle"/>
            </create_ship>
          </do_all>
          <incoming_message text="... {group.object.count@beispiel8_cue001.gruppe_von_schiffen} schiffe sind in der gruppe zusammengefasst"/>
        </do_all>
      </action>

      <cues>
        
        <!--checkt distanz vom spieler zu allen schiffen der gruppe-->
        <cue name="beispiel8_cue002">

          <condition>
            <check_all>
              <!--beim unterschreiten der distanz von 2km zwischen spieler und irgendein objekt der gruppe-->
              <any_object_position group="beispiel8_cue001.gruppe_von_schiffen" max="2km">
                <position object="{player.ship}"/>
              </any_object_position>
            </check_all>
          </condition>

          <action>
            <do_all>
              <!--setze visier auf naechstes objekt in der gruppe-->
              <set_target object="{group.nearest@beispiel8_cue001.gruppe_von_schiffen}"/>
            </do_all>
          </action>
          
        </cue>
        
      </cues>
        
    </cue>
    
  </cues>
  
</director>
Hier wird eine <do_all> Schleife ausgeführt, um mehrere Schiffe zu erstellen und sie der gleichen Gruppe hinzuzufügen. Anschließend wird beim unterschreiten von der Mindest-Distanz von 2km das nächste Objekt der Gruppe automatisch anvisiert. Dafür wird <any_object_position> (für Gruppen) statt <object_position> (für einzelne Objekte) verwendet.
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Sun, 4. Mar 18, 20:46

Beispiel 10: Loop Counter verwenden

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <cues>

    <cue name="beispiel10_cue001">

      <action>
        <do_all>
          <do_all exact="10" counter="laufindex">
            <incoming_message text="das ist die {counter@laufindex}. Nachricht"/>
          </do_all>
        </do_all>
      </action>
        
    </cue>
    
  </cues>
  
</director>
Hier werden 10 indexierte Nachrichten versendet.
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Fri, 16. Nov 18, 08:50

Guten Morgen,

drei Fragen:

1. um immer wiederkehrende Missionsstränge zu etablieren, ist es sicherer a. instantiation, oder b. <reset_cue> zu nutzen?
2. wo exakt liegt der Unterschied zwischen movie, cutscene, cinematic und (spoken) text?
3. was der vier obrigen, muss ich benutzen, damit mir bei Kommunikation mit NPC's die Leute auf meinem Schiffsbildschirm angezeigt werden? Ein Link zu einem entsprechenden Tutorial wäre sehr geil... :thumb_up:

Danke

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by JSDD » Fri, 16. Nov 18, 10:31

creatoxx wrote:
Fri, 16. Nov 18, 08:50
1. um immer wiederkehrende Missionsstränge zu etablieren, ist es sicherer a. instantiation, oder b. <reset_cue> zu nutzen?
... "sicherer" ist keines, beide "funktionieren"

creatoxx wrote:
Fri, 16. Nov 18, 08:50
2. wo exakt liegt der Unterschied zwischen movie, cutscene, cinematic und (spoken) text?
ausprobieren

creatoxx wrote:
Fri, 16. Nov 18, 08:50
3. was der vier obrigen, muss ich benutzen, damit mir bei Kommunikation mit NPC's die Leute auf meinem Schiffsbildschirm angezeigt werden?
beispiel 7 zeigt, wie du auf einem schiff (object, könnt auch station sein), eine person (actor) erstellst. diese person hat ein gesicht (face) und einen ton (voice), welche du beide separat einstellen kannst (im <create_actor/> befehl). du kannst so einen mann mit frauenstimme erzeugen und umgekehrt. allerdings tut der <create_actor/> befehl nicht mehr, d.h. die person kann nur das übliche optionen:
1. wo ist die nächste schiffswerft?
2. wo ist das nächste ausrüstungsdock?
3. gib auf!
um die person ne zusätzliche option (offer) zu geben, benutzt man <create_offer/>. das anklicken dieser option führt erstmal zu keiner antwort. die antwort-logik musst du selber hinterlegen, dazu fragst du das ereignis (event) <conversation_completed/> ab. je nach zugehörigen antwort (deine gewählte comms-option) spielst du andere texte ab ...

willst du "anlasslos" nen actor was sprechen lassen, tut es der befehl:

Code: Select all

<!--"glad to be of assistance"-->
<play_text priority="99" actor="dein_actor" textid="51"/>
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Fri, 16. Nov 18, 10:52

JSDD wrote:
Fri, 16. Nov 18, 10:31
...
Ahhh, sehr geil. Durch die create_actor-Instanzen bin ich bereits, somit ist im Prinzip alles andere"create"-bare abgedeckt. Das mit den auswählbaren Kommunikationssträngen war mir nur noch nicht bewusst. Auf create_offer bin ich erst gestern gestoßen. Dein Hinweis auf play_text ist auch extrem brauchbar, da ich damit bereits experimentiert habe, aber kein nutzbares Ergebnis erzielte. Wäre natürlich sinnvoll gewesen vorher zu wissen, dass play_text nur für "small talk" genutzt wird. play_text erzeugt dann aber auch eine Videoübertragung, oder wird wirklich nur der Text als eingehende Nachricht bzw. Untertitel gezeigt?

Mein create_offer cue sieht so aus...ich hoffe da nichts vergeigt zu haben...:)
Aufklappschalter
Show

Code: Select all

		<cue name="TeraX_MMC02">
			<condition>
				<question_answered question="TeraX_Q1" answer="yes"/>							
			</condition>
			<action>
				<do_all>
					<set_value name="TeraX_MMST01" exact="1"/>
					<create_actor name="TeraX_Actor01" character="{11001,2}" race="terran" gender="male" face="1138" voice="1138" object="TeraX_Station01" location="crew" invincible="1"/>
					<!--play_text actor="TeraX_Actor01" face="1138" textid="{11003,1}"/-->
					<!--show_help force="1" text="Cue MMC01 completed, James Gunn created!"/-->
					<create_offer actor="TeraX_Actor01" conversation="TeraX_MMCO01" discipline="XXXXP"/>
					<create_briefing cue="TeraX_MMC02" story="{11004,1}" text="{11005,1}" title="{11006,1}" background="sector_terran_eq.tga">
						<mission level="easy"/>
						<objectives>
							<objective step="{value@TeraX_MMST01}">
								<talkto actor="TeraX_Actor01"/>
							</objective>
						</objectives>
					</create_briefing>
					<set_objective cue="TeraX_MMC02" story="{11004,1}" text="{11005,1}" noabort="1" title="{11006,1}">
						<briefing cue="TeraX_MMC02" step="{value@TeraX_MMST01}"/>
						<mission level="easy"/>
						<talkto actor="TeraX_Actor01"/>
					</set_objective>
					<set_value name="TeraX_MMST01" operation="add"/>
					<complete_cue cue="TeraX_MMC02"/>
				</do_all>		
			</action>
		</cue>
Edit: Wenn wir gerade dabei sind... :mrgreen:

Wäre dieser cue in groben Zügen brauchbar, um einen "Loop"-Check zu kreieren, ob der Spieler bereits einen Sektor erkundet hat oder nicht? Oder wäre es generell sinnvoller bzw. "eleganter", dies mit einem Script zu lösen? Was belastet die Engine mehr, im Bezug auf threading, MD oder Script?
Aufklappschalter
Show

Code: Select all

		<cue name="TeraX_MMC03" delay="1s">
			<condition>
				<check_all>
					<cue_is_complete cue="TeraX_MMC02"/>
					<object_changed_sector object="{player}"/>					
					<sector_is_known negate="1" sector="{player.sector}"/>
				</check_all>
			</condition>
			<timing>
				<time min="1s"/>			
			</timing>
			<action>
				<do_all>
					<reward_player>
						<money exact="1000"/>
					</reward_player>
					<reset_cue cue="TeraX_MMC03"/>
				</do_all>
			</action>			
		</cue>
Edit2: Im Event <create_briefing> kann man story, text, title definieren. Leider finde ich auch hierzu keine exakte Beschreibung. title ist selbsterklärend. story ist dann der Text des Briefings und text, der Text der auf dem Kommunikationsbildschirm abgespult wird, oder umgekehrt?

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by JSDD » Fri, 16. Nov 18, 13:37

hast du beispiel 1 bis 10 durch? es ist besser zu sehen, was der code genau macht, statt sich auf worte/beschreibungen zu achten ...
in beispiel 1 hab ich versucht zu erklären, dass es 2 arten von conditions gibt, welche die nur event-weise triggern, andere nicht (triggern also zustandsbedingt). mit "delay" kann man keine events checken.

creatoxx wrote:
Fri, 16. Nov 18, 10:52
... einen "Loop"-Check zu kreieren, ob der Spieler bereits einen Sektor erkundet hat oder nicht?
entweder hat player "den sektor erkundet" oder nicht, dafür gibts ne variable
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Fri, 16. Nov 18, 18:16

JSDD wrote:
Fri, 16. Nov 18, 13:37
hast du beispiel 1 bis 10 durch? es ist besser zu sehen, was der code genau macht, statt sich auf worte/beschreibungen zu achten ...
in beispiel 1 hab ich versucht zu erklären, dass es 2 arten von conditions gibt, welche die nur event-weise triggern, andere nicht (triggern also zustandsbedingt). mit "delay" kann man keine events checken.

creatoxx wrote:
Fri, 16. Nov 18, 10:52
... einen "Loop"-Check zu kreieren, ob der Spieler bereits einen Sektor erkundet hat oder nicht?
entweder hat player "den sektor erkundet" oder nicht, dafür gibts ne variable
Ach, deine Signatur...sorry, vollkommen übersehen. Der Abend ist noch jung, mal sehen was ich heute so zusammen friemeln kann... :mrgreen:

Wie auch immer, auch da bin ich schon ein bisschen weiter als heute Morgen. Habe mittlerweile spitz gekriegt, dass <create_offer> nur die "Anfrage" auf dem actor generiert, die dann in der t-file und der conversations.txt mit Text gefüllt wird. Der danach folgende Codestring ist ja dann nur für das Missionslogbuch relevant. Habe mittlerweile den actor wie gewünscht auf dem Bildschirm... :wink:

Ein weiteres Problem war, dass der actor nur als crew erschien, bis ich gerafft habe, andocken zu müssen, um mit passengers zu sprechen. Dabei wusste ich das ja aus dem Spiel raus... :headbang:

Trotzdem hab ich auch hier wieder eine Frage, mit dem Risiko, dass ich sie mir als bald wieder eigenständig beantworte, insofern Google mir aktuelle Informationen auftischt. Ist die Information, dass die conversations.xml nur einmal exisitieren darf noch aktuell, oder wurde das bereits gepatched? Funktioniert z.B. so was wie conversations_myOwn.txt?

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by JSDD » Fri, 16. Nov 18, 19:16

creatoxx wrote:
Fri, 16. Nov 18, 18:16
Funktioniert z.B. so was wie conversations_myOwn.txt?
nicht dass ich wüsste. brauchst oft auch nicht die "t/conversations.xyl" zu ändern, bestehende kann man nutzen, es sei denn du willst unbedingt "plot-style" mit ja, ja, weiter, ja usw kommunizieren ... besser ist meiner meinung nach, erst n plan zu entwerfen, wass GENAU passieren soll, hinterher den "info-austausch" regeln mit allen mitteln der ku.. ähh des MD, also simple <play_text>, <questions>, info-logs, ... dem spieler selbst rausfinden lassen was zutun ist und entsprechend zu leiten ... usw

langweilig is halt, immer alles vorgeschrieben zu bekommen, kreativität ist besser ;)
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Sat, 17. Nov 18, 09:56

JSDD wrote:
Fri, 16. Nov 18, 19:16
creatoxx wrote:
Fri, 16. Nov 18, 18:16
Funktioniert z.B. so was wie conversations_myOwn.txt?
nicht dass ich wüsste. brauchst oft auch nicht die "t/conversations.xyl" zu ändern, bestehende kann man nutzen, es sei denn du willst unbedingt "plot-style" mit ja, ja, weiter, ja usw kommunizieren ... besser ist meiner meinung nach, erst n plan zu entwerfen, wass GENAU passieren soll, hinterher den "info-austausch" regeln mit allen mitteln der ku.. ähh des MD, also simple <play_text>, <questions>, info-logs, ... dem spieler selbst rausfinden lassen was zutun ist und entsprechend zu leiten ... usw

langweilig is halt, immer alles vorgeschrieben zu bekommen, kreativität ist besser ;)
Hilfreich...wirklich sehr hilfreich deine Posts. Ich danke dir herzlich. Ich denke den MD hab ich so weit "geknackt", bezüglich des Verstehens. Um ihn zu beherrschen brauch es nunmehr nur noch Zeit.

Wichtig wäre mitzuteilen, dass für <play_text>, für bestimmte actor-typen, nur ganz bestimmt Phrasen zur Verfügung stehen, die überhaupt gesprochen werden können. In meinem Fall war für den Terraner (face="1138"/voice="110"), nur die pageid="380117" nutzbar. Eventuell noch mehr, sich aber durch alle ids zu wühlen hätte ewig gedauert. Eine Liste scheint nirgendwo vorhanden. Auch wichtig, die pageid findet man in der Datei 0001-L044.pck, respektive -L049. Wo die Text ids versteckt waren, hat gut eine Stunde gedauert, weil Google nicht mit allen Suchbgriffen freundlich ist, insbesondere wenn die Prime Time eines modbaren Spiels schon fast 10 Jahre her ist...:)

Wie auch immer. Ich hab ein wenig mit <show_help> und <play_sound> experimentiert. Das timing ist aber äußerst kompliziert, zudem nicht alle Rechner über die selbe Geschwindigkeit verfügen und das unweigerlich zu Bugs führt. Deshalb muss ich hier wohl ein Teil der Kreativität opfern und, wie von dir vorgeschlagen, stärker <messages> und <questions> nutzen. <offers> bzw. <play(sound)> macht wohl nur unterstützend Sinn. Eine "Text-zu-Sprache-Engine", die auch Mimik konstruiert, wie z.B. in der Half-Life 2 Engine, gibt es wohl nicht? Ich hoffe inständig das X4 dahingehend erweitert wird. Für RPG'ler ist Lesen zwar schön, aber selbst ich als altbackener "Menüwühler" finde das nur noch bedingt zeitgemäß.

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by JSDD » Sat, 17. Nov 18, 11:53

creatoxx wrote:
Sat, 17. Nov 18, 09:56
Hilfreich...wirklich sehr hilfreich deine Posts. Ich danke dir herzlich. Ich denke den MD hab ich so weit "geknackt", bezüglich des Verstehens. Um ihn zu beherrschen brauch es nunmehr nur noch Zeit.
ich helfe gern! vor allem denen, die sich wirklich damit beschäftigen und trotzdem offene fragen haben ...

creatoxx wrote:
Sat, 17. Nov 18, 09:56
In meinem Fall war für den Terraner (face="1138"/voice="110"), nur die pageid="380117" nutzbar. Eventuell noch mehr, sich aber durch alle ids zu wühlen hätte ewig gedauert. Eine Liste scheint nirgendwo vorhanden.
hast du dir mal überlegt, den X3Editor2 zu benutzen? der hat nen text editor ... mit dem hat mal alle texte von jedem und alles schön übersichtlich sortiert, man kann sogar damit STRG+F dinge suchen usw ... hast du dir außerdem mal die director.xsd (oder .htm?) im webbrowser angesehen? da findet man auch viele dinge bezüglich sprache, töne, usw incl beschreibung ... und ketraar seine tutorials auf youtube auch alle gesehen?

creatoxx wrote:
Sat, 17. Nov 18, 09:56
Ich hab ein wenig mit <show_help> und <play_sound> experimentiert. Das timing ist aber äußerst kompliziert, zudem nicht alle Rechner über die selbe Geschwindigkeit verfügen und das unweigerlich zu Bugs führt.
nicht, wenn du es kontrollierst.
timing kannst du auf verschiedene weise kontrollieren, z.B. via <condition> check und <check_age ...> oder <check_value value="{player.age}" min="wasweisich"/> ... oder als subcue welches checkt, ob parent-cue complete ist, welches n <timing> besitzt
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Sat, 17. Nov 18, 18:12

JSDD wrote:
Sat, 17. Nov 18, 11:53
...
Jup, nutze die gesamte Palette. Director.htm und .xsd-files(für z.B. spezifische Suche nach Objektnamen), der XMD_Guide ist auch immer noch nebenbei geöffnet und natürlich der X3Editor, da man ja auch ab und an was entpacken, bzw. innerhalb der .cat/.dat begutachten muss. Im Browser hab ich dann meistens noch 2-3 Tutorial-Threads geöffnet und für spezifische Suche ist auf Google weitestgehend verlass.

Hatte nebenbei auf YT ein Let's Play X3 laufen. Danke für den Tipp mit Ketrar, gleich mal suchen. Ich befürchte scripts sind eine etwas härtere Nuss als MD und simples modden... :gruebel:

Subcue...ja...hab mir da 1-2 Stunden die Haare ausgerissen, dann hab ich einfach einen subcue gebastelt, obwohl, wenn ich kann, vermeide den code zu sehr aufzublähen und jedes mal einen cue aufmachen kompliziert das natürlich.
Aufklappgedöns
Show

Code: Select all

			<cues>
				<cue name="TX_MD01_cue03A">
					<condition>
						<question_answered question="TX_MD01_question02" answer="yes"/>
					</condition>
					<action>
						<show_help textid="TX_MD01_HT01" force="1" text="An offer has been made!" duration="2000"/>
					</action>
				</cue>
				<cue name="TX_MD01_cue03B">
					<condition>
						<question_answered question="TX_MD01_question02" answer="no"/>
					</condition>
					<action>
						<do_all>
							<cancel_cue cue="TX_MD01_cue04"/>
							<play_text priority="99" actor="TX_MD01_actor01" face="1138" textid="23"/>				
						</do_all>
					</action>
					<cues>
						<cue name="TX_MD01_cue03C">
							<condition>
								<cue_completed cue="TX_MD01_cue03B"/>
								<check_value value="{player.menu.speech}" exact="0"/>
							</condition>
							<action>
								<incoming_message author="{11001,3}" text="{11002,3}"/>
								<!--run_script script="script_um_artificial_life_menu_zu_aktivieren" object="auf_welchem_objekt_oder_global" taskid="auf_welcher_task?"/-->									
							</action>
						</cue>
					</cues>
				</cue>				
			</cues>
Ziel war es die message und das script erst zu starten, nachdem actor sein Videotext zum Besten gab. Das wollte mit timing nicht ganz reibungsfrei funktionieren.

Edit: Richtig geil ist natürlich, dass du direkt im Spiel Veränderungen testen kannst, mit MD-Reset etc..

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Sat, 17. Nov 18, 20:40

Sodelle,

erst mal tschuldigung für den Doppelpost. Die folgende Sache ist mir aber wichtig. Es wäre nett wenn einer von euch Veteranen mal drüber schaut und eventuell korrigiert, Tipps gibt, oder von mir aus auch schonungslos drauf los lästert, was ich denn für'n Müll gebastelt habe. Die Grundidee ist:

1. Spieler hat Familie und mit 42 wird im plötzlich langweilig, was zu dummen Fehlern führt, die ihn ziemlich viel Geld kostet
2. Spieler erwirbt daraufhin ein Schrott-M5, um sein Glück im Weltraum zu suchen
3. Frau schreibt Brief wie doof sie das findet und erzählt ihm über eine Person die Spieler sehen will
4. Daraufhin kommt eine incoming message, mit der man auswählen kann ob man die missionen machen will oder nicht
5. Für näheres muss man dann an der Torus andocken und durch verschiedene Schrift- und Medienwechsel, führt das MD zum offer in cue04, der bis jetzt noch nicht weiter geführt wird, da hier das eigtl. Plot beginnt
6. währenddessen soll im Hintergrund ein AL-Script aktiviert werden, das dem Spieler credits für das Erkunden der Sektoren generiert, die er bei der company erhält, die somit auch als "Bank" fungiert

MD-File:
Ausklappgedöns
Show

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>

<director name="TX_MD01_name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

	<documentation>	
		<author name="CrEaToXx" alias="M.Adam" contact="creatorx42@gmail.com"/>
		<content name="Terran explorer missions" description="Terran Explorer Service"/>
		<version number="0.0.1" date="15.11.2018" status="development"/>
	</documentation>
	
	<cues>
	
		<cue name="TX_MD01_cue01" delay="3s">
			<condition>
				<check_all>
					<check_value value="{player.sector.name}" exact="Earth"/>
				</check_all>
			</condition>
			<timing>
				<time min="3s" max="5s"/>
			</timing>
			<action>
				<do_all>
					<load_text fileid="9561"/>
					<incoming_message author="[yellow]{11001,1}[/yellow]" text="{11002,1}"/>
					<find_station name="TX_MD01_station01" class="dock" dockingallowed="1" findobject="{player.ship}" max="1" typename="SS_DOCK_TORUS"/>					
				</do_all>
			</action>								
		</cue>
		
		<cue name="TX_MD01_cue02" delay="3s">
			<condition>
				<check_all>
					<cue_is_complete cue="TX_MD01_cue01"/>				
					<check_value value="{player.menu.exists}" exact="0"/>
				    <object_position object="TX_MD01_station01" max="25km">
				    	<position object="{player.ship}"/>
				    </object_position>
				</check_all>
			</condition>
			<timing>
				<time min="1s" max="3s"/>
			</timing>
			<action>			
				<do_all>
					<ask_question name="TX_MD01_question01" author="{11001,3}" text="{11002,2}"/>
				</do_all>
			</action>
			<cues>
				<cue name="TX_MD01_cue02A">
					<condition>
						<question_answered question="TX_MD01_question01" answer="yes"/>
					</condition>
					<timing>
						<time min="1s" max="2s"/>
					</timing>
					<action>
						<do_all>
							<create_actor name="TX_MD01_actor01" character="{11001,2}" race="terran" gender="male" face="1138" voice="110" object="TX_MD01_station01" location="passenger" invincible="1"/>					
							<play_text priority="99" actor="TX_MD01_actor01" face="1138" textid="942"/>						
						</do_all>
					</action>
				</cue>
				<cue name="TX_MD01_cue02B">
					<condition>
						<question_answered question="TX_MD01_question01" answer="no"/>
					</condition>
					<timing>
						<time min="1s"/>
					</timing>
					<action>
						<do_all>
							<cancel_cue cue="TX_MD01_cue03"/>
							<incoming_message author="{11001,3}" text="{11002,3}"/>
							<!--run_script script="script_um_artificial_life_menu_zu_aktivieren" object="auf_welchem_objekt_oder_global" taskid="auf_welcher_task?"/-->						
						</do_all>												
					</action>
				</cue>	
			</cues>			
		</cue>
		
		<cue name="TX_MD01_cue03">
			<condition>
				<check_all>
					<cue_is_complete cue="TX_MD01_cue02A"/>					
					<object_is_docked dockobject="TX_MD01_station01"/>						
				</check_all>	
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<do_all>
					<set_actor_location actor="TX_MD01_actor01" object="TX_MD01_station01" location="crew"/>				
					<ask_question name="TX_MD01_question02" author="[yellow]{11001,2}[/yellow]" text="{11002,4}"/>
					<play_text priority="99" actor="TX_MD01_actor01" face="1138" textid="825"/>					
				</do_all>				
			</action>
			<cues>
				<cue name="TX_MD01_cue03A">
					<condition>
						<question_answered question="TX_MD01_question02" answer="yes"/>
					</condition>
					<action>
						<show_help textid="TX_MD01_HT01" force="1" text="An offer has been made!" duration="2000"/>
					</action>
				</cue>
				<cue name="TX_MD01_cue03B">
					<condition>
						<question_answered question="TX_MD01_question02" answer="no"/>
					</condition>
					<action>
						<do_all>
							<cancel_cue cue="TX_MD01_cue04"/>						
							<play_text priority="99" actor="TX_MD01_actor01" face="1138" textid="23"/>				
						</do_all>
					</action>
					<cues>
						<cue name="TX_MD01_cue03C">
							<condition>
								<cue_is_complete cue="TX_MD01_cue03B"/>
								<check_value value="{player.menu.speech}" exact="0"/>
							</condition>
							<action>
								<incoming_message author="{11001,3}" text="{11002,3}"/>
								<!--run_script script="script_um_artificial_life_menu_zu_aktivieren" object="auf_welchem_objekt_oder_global" taskid="auf_welcher_task?"/-->									
							</action>
						</cue>
					</cues>
				</cue>				
			</cues>
		</cue>
		
		<cue name="TX_MD01_cue04">
			<condition>
				<cue_completed cue="TX_MD01_cue03A"/>
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<create_offer actor="TX_MD01_actor01" conversation="TX_MD01_offer01" discipline="XXXXP"/>				
			</action>
			<cues>
				<cue name="TX_MD01_cue04A">
					<condition>
						<conversation_completed actor="TX_MD01_actor01" conversation="TX_MD01_offer01" answer="yes"/>
					</condition>
				</cue>
				<cue name="TX_MD01_cue04B">
					<condition>
						<conversation_completed actor="TX_MD01_actor01" conversation="TX_MD01_offer01" answer="no"/>
					</condition>
				</cue>
			</cues>
		</cue>			
		
	</cues>

</director>
t-file:
Ausklappgedöns
Show

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<language id="44">

	<page id="11001" title="TX_names" descr="actor names" voice="no">
		<t id="1">Mirinda Void</t>
		<t id="2">James Gunn</t>
		<t id="3">Ship Computer</t>	
	</page>
	
	<page id="11002" title="TX_messages" descr="incomming messages" voice="no">
		<t id="1">Dear [yellow]James[/yellow],\n\nI'm still confused why you left us. Please, we love you, and we need you, you'll need to return.\n\nHowever, that is not the reason why I've contacted you. Someone called last night, asking me to send you a message. The person said he wants you to contact him at Torus dock, orbiting Earth.\n\nI love you James. I miss you! Please return. [yellow]Mirinda[/yellow]</t>
		<t id="2">[yellow]{player.name}[/yellow],\n\ndo you want to investigate your wife's proposal?\n\n[center][select value="yes"][green]Yes, I will![/green][/select]\n\n[/center][center][select value="no"][red]No, I don't![/red][/select][/center]</t>	
		<t id="3">OK,\n\nyou're allowed to activate the [yellow]Explorer Script[/yellow] anytime via artificial life menu. Just make sure to linger around sector Earth!</t>
		<t id="4">[yellow]{player.name}[/yellow],\n\nmy name is [yellow]James Gunn[/yellow]. I am a member of a company with great interest in exploring the known space around us. I heard you could be someone interested in such scouting missions? What do you think? \n\n[center][select value="yes"][green]I'm interested![/green][/select]\n\n[/center][center][select value="no"][red]No, that's boring![/red][/select][/center]</t>
		</page>	

</language>
Das Grundgerüst zu meiner "Terraner-Explorer-Mod/Plot" steht so weit. Für weitere Missionen lasse ich mir Zeit, da ich dafür erst in Gänze Litcube's Universe daddeln möchte. Ich werde dann nach und nach einen Plot-Strang basteln. Fokus liegt darauf extrem schweres Anfangsszenario zu produzieren. So startet Spieler z.B. mit Schulden...aber dazu dann in einem hoffentlich baldigem Modthread mehr.

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Checken ob Object im Sektor vorhanden oder nicht!

Post by creatoxx » Mon, 19. Nov 18, 22:20

Guten Abend... :evil:

Aufgabe: Feststellen ob ein Sektor bekannt ist, oder nicht, nach dem man ihn das erste mal durch ein Tor erreicht hat!

Lösung: <sector_is_known>, <object.sector@object> etc.

Ergebnis: Gute Idee, schlechte Ausführung, da ein Sektor in der Sekunde des Ereichens ja "known" ist.

Eine Evaluierung mittels einer Array-Liste wie beim scripten gibt es für MD nicht, oder doch? Also quasi bei Spielstart alle Sektoren außer dem, in dem mann sich befindet in eine "Liste/Gruppe" einfügen und dann jeweils den einzelnen Sektor aus der Gruppe/Liste entfernen, wenn der Sektor "known" ist? Wie auch immer, ich habe es nicht hinbekommen.

Lösung02: Ein unsichtbares Dummyobjekt in alle besuchten Sektoren einfügen, um es als existierenedes Objekt referenzieren zu können.

Ergebnis: auch ne gute Idee...ich kill hier gleich mein Keyboard... :evil:

Der aktuelle Code sieht so oder so ähnlich aus:
Spoiler
Show

Code: Select all

		<cue name="TX_MD02_cue01">
			<!--condition>
				<check_all>
					<cue_is_complete cue="TX_MD01_cue04"/>
				</check_all>
			</condition-->
			<action>
				<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
					<position object="{player.ship}" min="1000km"/>
				</create_debris>
			</action>
		</cue>
	
		<cue name="TX_MD02_cue02">
			<condition>
				<check_all>
					<object_changed_sector/>
					<object_sector negate="1" object="TX_MD02_sector_dummy">
			    		<position object="{player.ship}"/>
			    		<sector sector="{player.sector}"/>
		  			</object_sector>				
				</check_all>
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<do_all>
					<incoming_message text="Hat geklappt!"/>
					<reward_player>
						<money exact="1000"/>
					</reward_player>
					<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
						<position object="{player.ship}" min="1000km"/>
					</create_debris>																			
					<reset_cue cue="TX_MD02_cue02"/>								
				</do_all>	
			</action>
		</cue>
...ich probier das jetzt seit 5 Tagen. Bis hier hin hat alles gut geklappt, aber jetzt mag mich die Engine offensichtlich nicht mehr. Ich habe sämtliche Variablen durch. Wirklich sämtliche Variablen innerhalb der director.htm. Den letzten Versuch habe ich zuvor mit <object_position> probiert. Dann fing die Engine auf einmal an die condition-><object_changed_sector/> als positiv zu bewerten, nachdem ich neu ins Spiel einsteige...was vorher nie passiert ist. Ich hab jetzt auch grad mal kein Bock mehr... :evil:

Warum kann ich nicht einfach Fragen: Ist das Objekt in diesem Sektor=ja, oder nein? Warum muss ich fragen Ist das Objekt im Sektor ja/nein UND in 100km Entfernung, oder ja/nein UND minimum 1 Sektor entfernt? Einfach ja, es ist hier, oder nein es ist nicht hier...einfach nur ein schnöder Boolean ohne Zusatzbedingung. Bei <object_position> war es egal ob verneint oder nicht, egal ob min oder max, egal welche Distanz, egal was auch immer. Er hat einfach entweder immer positiv die action gestartet, oder immer negativ, je nach dem was verändert wurde. Die action aber nur dann durchzuführen, wenn sich das Objekt noch nicht im Sektor befunden hat, wollte die doofe Engine einfach nicht machen. Und jetzt hab ich halt grad mal eine Stressblockade...da geht eh nix mehr... :rant:

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by JSDD » Mon, 19. Nov 18, 23:39

wenn du probleme hast, das zu verstehen, versuch mal plot scripts nachzuvollziehen (von plots die du kennst).

benutz vorerst einfach <check_value .../> mit {object.sector@...}, den du zum anderen sektor {player.sector} vergleichst
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Tue, 20. Nov 18, 15:22

JSDD wrote:
Mon, 19. Nov 18, 23:39
wenn du probleme hast, das zu verstehen, versuch mal plot scripts nachzuvollziehen (von plots die du kennst).

benutz vorerst einfach <check_value .../> mit {object.sector@...}, den du zum anderen sektor {player.sector} vergleichst
Ich will doch nur den Dummy platzieren, wenn der Dummy nicht im Sektor ist. Das muss doch irgendwie unkompliziert, mit ganz wenig Code möglich sein?

Höö?... :gruebel:

Du meinst jetzt so?

Code: Select all

<cue name="CheckerCue">
	<condition>
		<object_changed_sector/>
		<check_value negate="0" value="{object.sector@Trümmerlotte}" exact="{player.sector}">
		<action>
			<do_all>
				Mach mal lieber die Mörchen... :rant: 
			</do_all>
		</action>		
	</condition>
</cue>
Ich bin mir sicher, dass ich das schon probiert habe. Nur zum Verständnis, mit der Variante sage ich sinngemäß...

1. wenn du(Spieler) den Sektor erreichst
2. und check=das Objekt Trümmerlotte befindet sich nicht in diesem gerade erreichten Sektor
3. Mach mal lieber die Mörchen

...richtig? Unter condition kann ich aber kein <find_debris> einfügen und eine entsprechende Variable für den condition Bereich gibt es nicht, bzw. funzt nicht, da ja der tag "name" fehlt. Ich muss das Objekt Trümmerlotte ja erst mal gefunden haben und einen Namen verpassen. Natürlich könnte man das über zwei cues laufen lassen, wo der eine als condition nur den sector change enthält und dann in action find initiiert, während der zweite dann nach Trümmerlotte checked, und die weiteren actions ausführt...das hab ich auch bereits probiert...;)

Edit:

So! Würde dann so aussehen...

Code: Select all

	<cues>
	
		<cue name="TX_MD02_cue01">
			<condition>
				<object_changed_sector/>
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<find_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH"/>
			</action>
			<cues>
			
				<cue name="TX_MD02_cue02">
					<condition>
						<check_all>
							<cue_is_complete cue="TX_MD02_cue01"/>
							<check_value negate="0" value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}"/>
						</check_all>		
					</condition>
					<timing>
						<time min="1s"/>
					</timing>
					<action>
						<do_all>
							<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
								<position object="{player.ship}" min="1000km"/>
							</create_debris>
							<incoming_message text="Hat geklappt!"/>
							<reward_player>
								<money exact="1000"/>
							</reward_player>																			
							<reset_cue cue="TX_MD02_cue02"/>
						</do_all>									
					</action>
				</cue>
				
			</cues>		
		</cue>
		
	</cues>
...kann ich erst heut spät Abend testen... :gruebel:

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Thu, 22. Nov 18, 13:43

Trau mich schon gar nicht mehr zu fragen, aber sei es drum...
Aufklappen
Show

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>

<director name="TX_MD02_name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

	<documentation>	
		<author name="CrEaToXx" alias="M.Adam" contact="creatorx42@gmail.com"/>
		<content name="Exploring Auto Credits" description="Terran Explorer Service"/>
		<version number="0.0.1" date="15.11.2018" status="development"/>
	</documentation>
	
	<cues>
	
		<cue name="TX_MD02_cue01">
			<condition>
				<check_all>
					<check_age value="{player.age}" min="3s"/>
				</check_all>	
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<do_all>
					<find_debris findobject="{player.ship}" name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" silent="1">
						<sector sector="{player.sector}"/>
					</find_debris>
					<do_if negate="1" value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
						<show_help force="1" text="{TX_MD02_sector_dummy} is not in {player.sector}, creating!"/>
						<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
							<position object="{player.ship}" min="1000km"/>
						</create_debris>
					</do_if>
					<do_if value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
						<show_help force="1" text="{TX_MD02_sector_dummy} is in {player.sector}!"/>
					</do_if>
				</do_all>	
			</action>					
			<cues>	
				<cue name="TX_MD02_cue02">
					<condition>
						<check_all>
							<cue_is_complete cue="TX_MD02_cue02"/>
							<object_changed_sector/>
						</check_all>	
					</condition>
					<timing>
						<time min="1s"/>
					</timing>
					<action>
						<do_all>
							<find_debris findobject="{player.ship}" name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" silent="1">
								<sector sector="{player.sector}"/>
							</find_debris>
							<do_if negate="1" value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
								<show_help force="1" text="{TX_MD02_sector_dummy} is not in {player.sector}, but in{object.sector@TX_MD02_sector_dummy},  creating!"/>
								<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
									<position object="{player.ship}" min="1000km"/>
								</create_debris>
								<reward_player>
									<money exact="1000"/>
								</reward_player>																			
								<reset_cue cue="TX_MD02_cue02"/>
							</do_if>
							<do_if value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
								<show_help force="1" text="{TX_MD02_sector_dummy} is in {player.sector}, resetting!"/>
								<reset_cue cue="TX_MD02_cue02"/>
							</do_if>
						</do_all>	
					</action>				
				</cue>
			</cues>		
		</cue>
					
	</cues>		

</director>
Es scheitert, so denke ich, generell daran, dass die Engine die Verneinung dahingehend interpretiert, dass das gesuchte Objekt zwar nicht im player.sector vorhanden ist, dafür aber in jedem anderen wo ich zuvor den dummy platziert habe.

Gibt es wirklich keine Möglichkeit eine Sektorinterene Suche nur auf diesen einen Sektor zu beschränken? Wenn doch, dann bitte, bitte, bitte, posted einen Codeschnipsel. Ich bin offensichtlich zu doof... :cry:

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

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by Ketraar » Fri, 23. Nov 18, 00:13

Code: Select all

<check_value negate="0" value="{object.sector@Trümmerlotte}" exact="{player.sector}">
negate=0 ist default muss man also nicht extra schreiben

{object.sector@Trümmerlotte} was ist trümerlotte und ist es eine global value, da kein cue prefix. auch fehlt der closing dash vor dem > würde angezeigt werden wenn man zB den Web Developer in Zusammenhang mir der director.xsd nutzen würde.

Code: Select all

<check_value value="{object.sector@Trümmerlotte}" exact="{player.sector}"/>
Um ein Objekt standort als conditon zu nutzen wäre es besser diesen check zu nutzen

Code: Select all

<object_sector object="this.ship" exact="0">
 <sector sector="{player.sector}"/>
</object_sector>
action komm nach conditions, und um mehrere conditions zu nutzen braucht es ein check all. In diesem sinne müsste das in etwa so aussehen.

Code: Select all

    <cue name="mycue">
      <condition>
        <check_all>
          <object_changed_sector/>
          <object_sector object="{object@myobject}" exact="0">
            <sector sector="{player.sector}"/>
          </object_sector>
        </check_all>
        </condition>
      <action>
        <do_all>
          <set_value name="this.value" exact="1"/>
        </do_all>
      </action>
    </cue>

Code: Select all

{object.sector@Trümmerlotte}
Auch werden umlaute in variablen und so nicht funktionieren, zumindest mein mein xml editor das die xsd dies nicht mag.

Es gibt ein paar tutorials hier iwo verlinkt mit den Basis Info wie man MD coded, auch habe ich auf youtube paar Videos gemacht (auf englisch) um zu erklären wie MD funktioniert. Würde sich lohnen in diese erste Schritte zu investieren um erst ein Gefühl zu kriegen wie MD "denkt" und strukturiert ist.

MFG

Ketraar
Image

Post Reply

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