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.