[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: 851
Joined: Fri, 21. Mar 14, 21:51

Post by JSDD » Sun, 4. Mar 18, 20: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: 851
Joined: Fri, 21. Mar 14, 21:51

Post by JSDD » Sun, 4. Mar 18, 20: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: 851
Joined: Fri, 21. Mar 14, 21:51

Post by JSDD » Sun, 4. Mar 18, 20: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: 851
Joined: Fri, 21. Mar 14, 21:51

Post by JSDD » Sun, 4. Mar 18, 21: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: 851
Joined: Fri, 21. Mar 14, 21:51

Post by JSDD » Sun, 4. Mar 18, 21: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

Post Reply

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