[X3TC / AP] [Script] Sektor Hintergrund-Musik ändern

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

[X3TC / AP] [Script] Sektor Hintergrund-Musik ändern

Post by JSDD » Sat, 9. Sep 17, 16:18

hey, ;)

ich post mal hier den code, um zuvallsbasiert die hintergrundmusik jeden sektors ändert.

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">
  
  <!--... changes sector background music ...-->
  
  <cues>

    <cue name="bgmusic" version="1">

      <action>
        <do_all>
          <incoming_message text="... bgmusic installed"/>
          <!--firstly save all 'vanilla' background music ids for each sector and create list of possible track ids-->
          <set_value name="bgmusic.trackcount" exact="0"/>
          <!--note: a counter begins with 1-->
          <do_all exact="24" counter="cx">
            <do_all exact="20" counter="cy">
              <find_sector name="bgmusic.sector" x="({counter@cx}-1)" y="({counter@cy}-1)" exact="0"/>
              <do_choose>
                <!--... variable sector.exists does not function ...-->
                <do_when value="{sector.exists@bgmusic.sector}" exact="0">
                  <set_value name="bgmusic.musicID_{sector.x@bgmusic.sector}_{sector.y@bgmusic.sector}" exact="0"/>
                </do_when>
                <!--... non-existing sectors should not have any track id ...-->
                <do_when value="{sector.music@bgmusic.sector}" min="1" negate="1">
                  <set_value name="bgmusic.musicID_{sector.x@bgmusic.sector}_{sector.y@bgmusic.sector}" exact="0"/>
                </do_when>
                <do_otherwise>
                  <!--save 'vanilla' music id-->
                  <set_value name="bgmusic.musicID_{sector.x@bgmusic.sector}_{sector.y@bgmusic.sector}" exact="{sector.music@bgmusic.sector}"/>
                  <!--create list of music ids-->
                  <set_value name="bgmusic.trackcount" operation="add"/>
                  <set_value name="bgmusic.track_{value@bgmusic.trackcount}" exact="{sector.music@bgmusic.sector}"/>
                </do_otherwise>
              </do_choose>
              <remove_sector sector="bgmusic.sector"/>
            </do_all>
          </do_all>
          <!--then set initial value for 'current sector'-->
          <set_sector name="bgmusic.sectorcurrent" value="{player.sector}"/>
        </do_all>
      </action>

      <cues>
        
        <!--... wait until all 'vanilla' music ids are saved-->
        <cue name="bgmusic_setup_complete" delay="2s" version="1">

          <condition>
            <check_all>
              <cue_is_complete cue="bgmusic"/>
            </check_all>
          </condition>

          <cues>
            
            <!--possibility to restore vanilla music-->
            <cue name="bgmusic_remove" delay="11s" version="1">

              <condition>
                <check_all>
                  <check_value value="{player.ship.name}" exact="bgmusic.remove"/>
                </check_all>
              </condition>

              <action>
                <do_all>
                  <set_pilot_data object="{player.ship}" shipname="{object.type.name@{player.ship}}"/>
                  <!--stop changing sector music-->
                  <cancel_cue cue="bgmusic_change"/>
                  <!--remove the created list of music ids-->
                  <do_all exact="{value@bgmusic.trackcount}" counter="cid">
                    <remove_value value="bgmusic.track_{counter@cid}"/>
                  </do_all>
                  <remove_value value="bgmusic.trackid"/>
                  <remove_value value="bgmusic.trackcount"/>
                  <set_sector name="bgmusic.sectorcurrent" value="{player.sector}"/>
                  <!--reset sector music of each sector-->
                  <do_all exact="24" counter="cx">
                    <do_all exact="20" counter="cy">
                      <find_sector name="bgmusic.sector" x="({counter@cx}-1)" y="({counter@cy}-1)" exact="0"/>
                      <do_if value="{sector.exists@bgmusic.sector}" exact="1">
                        <!--check if a music id has been saved for this sector-->
                        <do_if value="{value@bgmusic.musicID_{sector.x@bgmusic.sector}_{sector.y@bgmusic.sector}}" min="1">
                          <!--skip player sector to avoid game crash-->
                          <do_if value="{sector@bgmusic.sector}" exact="{sector@bgmusic.sectorcurrent}" negate="1">
                            <alter_sector sector="bgmusic.sector" music="{value@bgmusic.musicID_{sector.x@bgmusic.sector}_{sector.y@bgmusic.sector}}"/>
                          </do_if>
                        </do_if>
                      </do_if>
                      <remove_sector sector="bgmusic.sector"/>
                    </do_all>
                  </do_all>
                </do_all>
              </action>

              <cues>

                <!--... wait until player leaves sector-->
                <!--... is necessary to change the music of the players current sector-->
                <cue name="bgmusic_remove_final" delay="5s" version="1">

                  <condition>
                    <check_all>
                      <cue_is_complete cue="bgmusic_remove"/>
                      <check_value value="{player.sector}" exact="{sector@bgmusic.sectorcurrent}" negate="1"/>
                    </check_all>
                  </condition>

                  <action>
                    <do_all>
                      <incoming_message text="... bgmusic removed"/>
                      <!--reset sector music of previously visited sector-->
                      <alter_sector sector="bgmusic.sectorcurrent" music="{value@bgmusic.musicID_{sector.x@bgmusic.sectorcurrent}_{sector.y@bgmusic.sectorcurrent}}"/>
                      <remove_sector sector="bgmusic.sectorcurrent"/>
                      <!--remove saved 'vanilla' music ids-->
                      <do_all exact="24" counter="cx">
                        <do_all exact="20" counter="cy">
                          <find_sector name="bgmusic.sector" x="({counter@cx}-1)" y="({counter@cy}-1)" exact="0"/>
                          <remove_value value="bgmusic.musicID_{sector.x@bgmusic.sector}_{sector.y@bgmusic.sector}"/>
                          <remove_sector sector="bgmusic.sector"/>
                        </do_all>
                      </do_all>
                      <!--stop this script-->
                      <cancel_cue cue="bgmusic"/>
                    </do_all>
                  </action>
                  
                </cue>
                
              </cues>

            </cue>
            
            <!--change the sector music of the previously visited sector-->
            <cue name="bgmusic_change" delay="12s" version="1">

              <condition>
                <check_all>
                  <check_value value="{player.sector}" exact="{sector@bgmusic.sectorcurrent}" negate="1"/>
                </check_all>
              </condition>

              <action>
                <do_all>
                  <!--only allow to change music if 'vanilla' track id is saved-->
                  <do_if value="{value@bgmusic.musicID_{sector.x@bgmusic.sectorcurrent}_{sector.y@bgmusic.sectorcurrent}}" min="1">
                    <!--change music randomly-->
                    <set_value name="bgmusic.trackid" min="1" max="{value@bgmusic.trackcount}"/>
                    <alter_sector sector="bgmusic.sectorcurrent" music="{value@bgmusic.track_{value@bgmusic.trackid}}"/>
                  </do_if>
                  <!--update current sector-->
                  <remove_sector sector="bgmusic.sectorcurrent"/>
                  <set_sector name="bgmusic.sectorcurrent" value="{player.sector}"/>
                  <reset_cue cue="bgmusic_change"/>
                </do_all>
              </action>
              
            </cue>
            
          </cues>
          
        </cue>
        
      </cues>
      
    </cue>
    
  </cues>
  
</director>

Installation:
Obigen code in ne leere .xml datei kopieren, speichern, und in den ordner ..\director\ schieben, für X3AP heißt der ordner ..\addon\director\, falls der ordner nicht existiert, erstellt diesen einfach.
Das game muss außerdem bereits "modified" sein.

Deinstallation
Spieler-Schiffsname umbenennen zu: "bgmusic.remove" & den sektor wechseln. Hinweis: nachdem man installiert + wieder deinstalliert hat, kann man NICHT wieder das script aktivieren. statdessen muss der code geändert werden. überall, wo "bgmusic" im code vorkommt, einfach durch z.B. "bgmusic1" ersetzen.

... wie's funktioniert:
zuerst werden alle sektor-hintergrund-soundtracks abgespeichert (um später wieder deinstallieren zu können) und ne liste aller möglichen soundtracks erstellt. dann wartet das script, bis du den sektor wechselst. sobald geschehen, ändert das script die musik des letzt-besuchen sektors zufallsbasiert.
Last edited by JSDD on Sun, 10. Sep 17, 11:40, edited 1 time in total.
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 » Sat, 9. Sep 17, 16:19

--- reserviert ---
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
K-Silver01
Posts: 1192
Joined: Sun, 24. Nov 13, 09:13
x4

Post by K-Silver01 » Sun, 10. Sep 17, 10:32

Danke sehr ;)
Nun...
ein Bärtchen macht noch lange keinen Mann aus... :roll:
---
Ich bin Pazi 🤜🤜🤜 ... ich pfeiff auf die Terraner :sceptic: ... und natürlich auf das "Schrott-DLC" :roll:

Ghostrider[FVP]
Posts: 3262
Joined: Wed, 6. Nov 02, 20:31
x3ap

Post by Ghostrider[FVP] » Mon, 11. Sep 17, 23:33

Eine schöne Idee ..
Föderation Vereinter Planeten -=)FVP(=-
Since 1998... join the future! X3-The Sonen
Image
Ghostrider's X-Universum [INDEX]Lucikes Scripts & Mods

Post Reply

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