[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: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

User avatar
Iifrit Tambuur-san
Posts: 1664
Joined: Thu, 4. Mar 04, 16:14
x3tc

Post by Iifrit Tambuur-san »

Die Anzahl von ausgeführten Sprüngen meines Hyperraumnotfallprotokolls aus dem ZPM-Mod (dieser Wert wird als LV auf dem ausführenden Schiff gespeichert). Es ist die einfache Überzeugung, dass es den Antrieb dabei stark belastet und dieser nach einer gewissen Zahl an Aktivierungen einer Wartung an einem AD erfordert. Der ganze Wartungskram wird mit dem MD abgewickelt und auch der Preis ist von der Anzahl der ausgeführten Sprünge abhängig, weshalb dieser Wert im MD nötig ist. ;) Und es funktioniert!
Passierschein A38.5 gefunden!
[ external image ]
"Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind." Albert Einstein
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Marodeur wrote:Servus nochmal.

Bin grad an den letzten Änderungen der SRST und OBS und bin auf eine Schwierigkeit gestosen.

Zum einen kommen inzwischen M1 und M2 sowie auch M7 als Gegner. Ausserdem hab ich den Piraten M6 (Marodeur/Marauder) sowie das Yaki M6M (Washi) freigeschaltet. Vor allem bei letzteren fand ichs einfach unpassend das sie lauter eigene Designs haben aber hier auf den Zentauren zurückgreifen. Und wenn der Washi schonmal da ist...

Aber nun zum Problem:
Wenn Piraten ein M1 mit Supportschiffen spawnen sind die Schiffe die auf dem Träger gedockt sind den jeweiligen Rassen zugeordnet und keine Piraten. Es starten also lauter neutrale Schiffe die auch dementsprechend benannt sind (Argon Nova, Teladi Bussard, etc.) statt das es Piratenschiffe sind. Und ich komm nicht dahinter wo genau der Fehler liegt.
also im MSCI könnte ich dir weiter helfen, das hat einfach was damit zu tun, dass Piratenschiffe immer getarnt gespawnt werden.. nach einem Scan oder der verwendung des MSCI-Befehls <RefObj> set pirate cover state to [FALSE] erscheinen sie als normale Piraten ;) aber ich habe kA wie man den Tarnstatus im MD festlegt..
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 ;)
User avatar
Iifrit Tambuur-san
Posts: 1664
Joined: Thu, 4. Mar 04, 16:14
x3tc

Post by Iifrit Tambuur-san »

director.htm wrote:<set_covered> Set whether specified object's race should be covered (pirates only)
task boolean Start action as a separate task?
chance expression Percentage (or weighted if in <do_any>) chance of action being performed (action is skipped if not)
comment string Comment for documentation purposes only
object object Object name
covered boolean Object's race is covered (pirates only)?


<set_group_covered> Set whether all objects in specified group's race should be covered (pirates only)
task boolean Start action as a separate task?
chance expression Percentage (or weighted if in <do_any>) chance of action being performed (action is skipped if not)
comment string Comment for documentation purposes only
object object Object name
covered boolean Object's race is covered (pirates only)?
Ich denke mal, dass das die passenden Befehle sind.
Passierschein A38.5 gefunden!
[ external image ]
"Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind." Albert Einstein
User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 12168
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar »

Jens Ka wrote:

Code: Select all

<do_when value="{value@OBS.ShipRace}" list="{lookup.race@pirate}|{lookup.race@yaki}" comment="Sets a race for pirates and yaki">
                            <set_value name="OBS.Pilot Race" exact="{random.race@default}"/>
                          </do_when>
ändere mal die Race von default auf die Schiffs Rasse dann könnte es funzen. Kann aber auch sein das da noch irgend wo was ist was da einfluss hat musst probiren obs so geht.
hoffe das es dir weiter hilft :)

MfG

Jens Ka
Nicht machen, es gibt keine Piraten/Yaki Piloten!! Wichtig bei dem ganzen ist eben der covered=0 (als NICHT covered), sind Piloten als covered eingestellt, werden diese erst rot wenn gescannt.

MFG

Ketraar
Image
Marodeur
Posts: 1349
Joined: Wed, 6. Nov 02, 20:31
xr

Post by Marodeur »

Danke für die Hinweise. Mal näher ansehen. Sollte am Ende wohl wegen der blauen Yaki auch einen Eintrag im Bugforum wert sein denn gewollt ist das eher nicht. ;)
Raumkraut93
Posts: 1368
Joined: Wed, 18. Mar 09, 22:20
x3tc

Post by Raumkraut93 »

ich mal wieder

1. kann mir einer sagen wo ich die texte finden kann die bei den missionsbeschreibungen im Briefing stehen (also nicht die t-files, sondern die missionen (MD-Files) selbst) ?

2. Wie kann ich neue Missionen einfügen die dann an einer station angeboten werden bzw ist das überhaupt möglich?

3. Wie kann ich neue Laser machen (also neue Effekte) und diese dann einbinden? (gibts da vl ein tutorial?)

4. Wie krieg ich schwierigkeitsgrad und Belohnung von Missionen erhöht (ich will nicht das wieder so unbalanced machen das man ne riesen-belohnung kriegt, sondern einfach generell schwerer und dafür mit mehr belohnung)

Jo das wars erstmal. Danke im Vorraus.
"Dies ist alles, was ich über den Krieg weiss: Einer gewinnt, einer verliert
und nichts ist nachher so
wie es vorher war."

"Stellt eure Truppen auf, oh große Generäle,
Der Preis des Sieges übersteigt den Preis der Niederlage."
User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 12168
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar »

1. Die texte sind nun mal in den t-files, im MD code wird meist nur ne t-id benutzt. Die ID für die Briefings wird im Breifing node eingetragen. (create_briefing title="" ect..)

2. Naja so wie die anderen. :roll: Ne das ist zu viel um es mal so kurz zu erklären, am besten du saugst dir eine bestehende Mission (gibt ja ein paar) und schaust dort nach wie das aufgebaut ist. Generell gilt, das für eine solche Mission ein Actor der die Mission anbietet gebraucht wird, dann eine Konversation (siehe conversation.xml im t ordner/cat) damit diese auch anwählbar ist. Ist das erledigt erstellst du die Offer (Anbieten der Mission) mit dem create_offer node. Was da so alles enthalten ist liegt nun an dir.

3. Mit dem MD gar nicht, am besten stellst diese Frage im Topic für [DISKUSSION] Allgemeine S&M-Fragen

4. Die generischen Missionen Werden mit eine art Baukastensystem erstellt, dieses System basiert auf einigen Librarys, dort befindet sich auch der Wert welcher die Belohnungen vergeben (unter anderem).

MFG

Ketraar
Image
Raumkraut93
Posts: 1368
Joined: Wed, 18. Mar 09, 22:20
x3tc

Post by Raumkraut93 »

Ok, bis hierhin schonmal danke.

Vorneweg: ich bin ein absolouter neuling habe erst vorgestern angefangen. Wenn die Fragen also dumm sind, bitte nicht schlagen :shock:


1. Wie kann ich den Feind-Spawn vom Fight-Rank abhängig machen?

2. Kann ich z.b. mit <do_choose> oder sonstigem irgendwie einen zufälligen cue von bestimmten cues auswählen lassen?

3. Kann ich irgendwo etwas in ner Variable speichern? Ich will nämlich am Ende der Mission das der "counter" um 1 erhöht wird und dann die mission sich neustartet. wenn der counter 5 erreicht, startet ein neuer cue und es gibt ne belohnung.

4. und hier ist noch mein derzeitiger code, der irgendwie nicht richtig funzt :-/

Code: Select all

<director name="raumkraut93_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">
  <cues>
    <cue name="rk93_1">
      <condition>
        <check_all>
          <check_value value="{player.notoriety.atf}" min="{lookup.notoriety@notop7}"/>
        </check_all>
      </condition>
      <timing>
        <time exact="15s"/>
      </timing>
      <action>
        <do_all>
          <find_station category="dock" name="tr_station" race="terrangroup" typename="SS_DOCK_ATF_MILITARY_1">
            <sector x="12" y="3"/>
          </find_station>
          <find_sector exact="1" name="tr_sector" sector="tr_sector" race="terran" known="1"/>
          <create_actor  name="u24_4_atfcmd" character ="{3895,19}" face="1135" voice="3819" race="terran" object="{object@tr_station}" location="crew" />
          <play_text actor="u24_4_atfcmd" pageid="3819" textid="191000" priority="99"/>
          <create_briefing  cue="rk93_1" title="{71372,1}" text="{71372,2}" background="ship_terran_scimitar.tga">
            <mission discipline="XXXT" level="difficult"/>
            <objectives>
              <objective step="1">
                <dockat object="{object@tr_station}"/>
              </objective>
              <objective step="2">
                <flyto>
                  <sector sector="sector@{tr_sector}"/>
                </flyto> 
              </objective>
              <objective step="3">
                <custom action="{71372,3}"/>  
              </objective>
            </objectives>
          </create_briefing>
          <set_objective cue="rk93_1" story="{71372,2}" title="{71372,1}" noabort="1">
            <briefing cue="u24_3_start" step="1"/>
            <mission discipline="XXXT" level="trivial"/>
            <dockat object="{object@tr_station}"/>
          </set_objective>
        </do_all>
      </action>
    </cue>
    
    <cue name="rk93_2">
      <condition>
        <check_all>
          <cue_is_complete cue="rk93_1"/>
          <object_is_docked dockobject="{object@tr_station}" object="{player.ship}"/>
        </check_all>
      </condition>
      <timing>
        <time exact="15s"/>
      </timing>
      <action>
        <do_all>
          <find_sector exact="1" name="tr_sector" race="terran" known="1"/>
          <incoming_message text="{7137,1}" popup="1"/>
        <set_objective cue="rk93_1" story="{71372,2}" title="{71372,1}" noabort="1">
          <briefing cue="u24_3_start" step="2"/>
          <mission discipline="XXXT" level="trivial"/>
          <flyto>
            <sector sector="{sector@tr_sector}"/>
          </flyto> 
       </set_objective>
        </do_all>
          </action>
    </cue>

    
    <cue name="rk93_3">
      <condition>
        <check_all>
          <cue_is_complete cue="rk93_2"/>
        </check_all>
      </condition>
      <action>
        <do_all>
          <set_objective cue="rk93_1" story="{71372,2}" title="{71372,1}" noabort="1">
            <briefing cue="u24_3_start" step="3"/>
            <mission discipline="XFXX" level="hard"/>
            <custom action="{71372,3}"/>
          </set_objective>
        </do_all>
      </action>
    </cue>
        
	      <cue name="rk93_createenemies">
          <condition>
            <check_all>
              <cue_is_complete cue="rk93_3"/>
            </check_all>
          </condition>
              <action>
                <do_all>
                  <find_gate name="tr_gate" nearest="1">
                    <sector sector="{sector@tr_sector}"/>
                  </find_gate>
                  <create_special typename="SS_SH_JUMP_BEACON">
                    <position object="{object@tr_gate}" exact="20km" />
                    <sector sector="{sector@tr_sector}"/>
                  </create_special>
                  <create_ship  group="rk93_xenon" covered="0" race="xenon" racelogic="1" typename="SS_SH_X_M7">
                    <position/>
                    <sector sector="{sector@tr_sector}"/>
                    <equipment loadout="default" />
                    <command command="killenemies" distance="20km"/>
                  </create_ship>
                  <create_ship  group="rk93_xenon" covered="0" race="xenon" racelogic="1" typename="SS_SH_X_M3">
                    <position/>
                    <sector sector="{sector@tr_sector}"/>
                    <equipment loadout="default" />
                    <command command="killenemies" distance="20km"/>
                  </create_ship>
                  <create_ship group="rk93_xenon" covered="0" race="xenon" racelogic="1" typename="SS_SH_X_M3">
                    <position/>
                    <sector sector="{sector@tr_sector}"/>
                    <equipment loadout="default" />
                    <command command="killenemies" distance="20km"/>
                  </create_ship>
                  <create_ship  group="rk93_xenon" covered="0" race="xenon" racelogic="1" typename="SS_SH_X_M6">
                    <position/>
                    <sector sector="{sector@tr_sector}"/>
                    <equipment loadout="default" />
                    <command command="killenemies" distance="20km"/>
                  </create_ship>
                  <create_ship  group="rk93_xenon" covered="0" race="xenon" racelogic="1" typename="SS_SH_X_M6">
                    <position/>
                    <sector sector="{sector@tr_sector}"/>
                    <equipment loadout="default" />
                    <command command="killenemies" distance="20km"/>
                  </create_ship>
                </do_all>
              </action>
            </cue>
            <cue name="rk93_4">
              <condition>
                <check_all>
                  <cue_is_complete cue="rk93_createenemies"/>
                  <all_objects_destroyed group="rk93_xenon"/>
                </check_all>
              </condition>
              <action>
                <do_all>
                  <remove_objective cue="rk93_1" status="complete"/>
                  <remove_briefing cue="rk93_1"/>
                  <incoming_message text="{71371,2}" popup="1" />
                  <reward_player>
                    <notoriety>
                      <relation race="atf" operation="set" exact="{lookup.notoriety@notop9}"/>
                    </notoriety>
                  </reward_player>
                  <set_value name="ATF Notoriety" exact="{lookup.notoriety@notop9}"/>
                </do_all>
              </action>
            </cue>
      </cues>    
</director>
Im Briefing steht nix und auch kein Hintergrundbild, und die Sektorauswahl verläuft auch nicht richtig. Des Weiteren muss ich garnicht an der Station andocken obwohl ich es oben geschrieben hab.
"Dies ist alles, was ich über den Krieg weiss: Einer gewinnt, einer verliert
und nichts ist nachher so
wie es vorher war."

"Stellt eure Truppen auf, oh große Generäle,
Der Preis des Sieges übersteigt den Preis der Niederlage."
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Zu 1. : Die Egosoft Missionen nutzen immer das Mission Director Opponent Balancing System - kurz: OBS.
Dies ist soweit ich weiß, eine Library, die die passenden Feinde für das Spielerschiff heraussucht.

Zu 2. : Das weiß ich nicht... Aber reicht nicht einfach ein <do_choose> im Action-node?

Zu 3. : Ja, das geht einfach mit <set_value> .

Zu 4. : Bist du sicher, dass du den Sektor tr_sector zweimal "finden" willst?

Du hast einmal

<find_sector exact="1" name="tr_sector" sector="tr_sector" race="terran" known="1"/>

und später nochmal

<find_sector exact="1" name="tr_sector" race="terran" known="1"/>


Du ordnest der Variable tr_sector also zweimal einen Sektor zu, ob das dann im Endeffekt der gleiche ist, ist natürlich nicht mit Sicherheit gegeben.
Wenn du denn Sektor aus Cue "rk93_1" einfach nur im Cue "rk93_2" wiederverwenden möchtest, musst du einfach

<flyto>
<sector sector="{sector@tr_sector}"/>
</flyto>

in

<flyto>
<sector sector="{sector@rk93_1.tr_sector}"/>
</flyto>

ändern.

Des Weiteren ist mir noch ein kleiner Fehler aufgefallen.

<sector sector="sector@{tr_sector}"/> beim erstellen des Briefings, müsste eigentlich <sector sector="{sector@tr_sector}"/> heißen.

Ich hoffe ich habe nichts allzu falsches gesagt, mit dem MD habe ich mich insgesamt noch nicht genug auseinandergesetzt.


Meine Frage:

Ich stehe etwas auf dem Schlauch. Ich möchte, dass ein Cue erst startet, wenn irgendein Sektor keine Stationen einer bestimmen Klasse mehr hat.
Die Anzahl der Stationen eines Sektors würde ich einfach über <count_stations> regeln, doch wie ich es schaffen kann, dass alle Sektoren berücksichtig werden, weiß ich momentan nicht.

Ist das irgendwie möglich?

EDIT:

Wie kann man alle Sektoren einer bestimmten Rasse und eines bestimmten Typs (Core / Border) finden? "group" scheint bei <find_sector> nicht zu funktionieren!?

MfG,
ScRaT
XGamer
Posts: 2355
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer »

Raumkraut93 wrote:Ok, bis hierhin schonmal danke.

Vorneweg: ich bin ein absolouter neuling habe erst vorgestern angefangen. Wenn die Fragen also dumm sind, bitte nicht schlagen :shock:


1. Wie kann ich den Feind-Spawn vom Fight-Rank abhängig machen?

2. Kann ich z.b. mit <do_choose> oder sonstigem irgendwie einen zufälligen cue von bestimmten cues auswählen lassen?

3. Kann ich irgendwo etwas in ner Variable speichern? Ich will nämlich am Ende der Mission das der "counter" um 1 erhöht wird und dann die mission sich neustartet. wenn der counter 5 erreicht, startet ein neuer cue und es gibt ne belohnung.

4. und hier ist noch mein derzeitiger code, der irgendwie nicht richtig funzt :-/
1. Schaue dir die Datei OBS.xml im Director Ordner einmal an. Dort gibt es ganz oben folgenden Abschnitt:

Code: Select all

<documentation>
...
<params>
....
</params>
Alles was zwischen <param> und </params> steht kopierst du und dann in deiner Mission an der Stelle wo du die Feinde spawnen lassen möchtest schreibst du:

Code: Select all

<cue ref="OBS">
<params>
Den Kopierten Krams aus der OBS.xml
</params>
</cue>
anschliessend musst du noch die Parameter anpassen also überall nen value="was immer du brauchst" reinschreiben das was rot unterstrichen wird rausnehmen (type, documentation) und gut. Welcher Parameter wofür gut ist wird in der Description erläutert. Die Parameter welche du nicht benötigst kannst du löschen. Du wirst nicht alle brauchen kommt halt immer drauf an.

2. Jo klar.

Code: Select all

<cue name="My Mìssion Select Cue">
<action>
<do_choose>
<do_when überprüfe dein zeug hier>
<set_value name="this.CueSelect" exact="1"/>
</do_when>
<do_when überprüfe dein zeug hier>
<set_value name="this.CueSelect" exact="2"/>
</do_when>
<do_when überprüfe dein zeug hier>
<set_value name="this.CueSelect" exact="3"/>
</do_when>
<do_otherwise>
<set_value name="this.CueSelect" exact="4"/>
</do_otherwise>
</do_choose>
</action>
</cue>
<cue name="My Mission Cue 1">
<condition>
<check_value value="{value@My Mission Select Cue.CueSelect}" exact="1"/>
</condition>
<action>
...
</action>
</cue>
<cue name="My Mission Cue 1">
<condition>
<check_value value="{value@My Mission Select Cue.CueSelect}" exact="1"/>
</condition>
<action>
...
</action>
</cue>
<cue name="My Mission Cue 2">
<condition>
<check_value value="{value@My Mission Select Cue.CueSelect}" exact="2"/>
</condition>
<action>
...
</action>
</cue>
<cue name="My Mission Cue 3">
<condition>
<check_value value="{value@My Mission Select Cue.CueSelect}" exact="3"/>
</condition>
<action>
...
</action>
</cue>
<cue name="My Mission Cue 4">
<condition>
<check_value value="{value@My Mission Select Cue.CueSelect}" exact="4"/>
</condition>
<action>
...
</action>
</cue>
Das ganze kannst du so oft machen wie du möchtest... Ist zwar nicht gerade die schönste Art und Weise aber es geht.
Einfacher währe eine Cue wo du in der Action den do_choose hast und dann halt dort überprüfst und dementsprechend nur das ausführst was du gerade möchtest.

3. siehe oben <set_value/>

4. Habe ich mir nicht angeschaut ;) aber wo ich Scars Antwort gelesen habe ist mir aufgefallen das du

Code: Select all

<find_sector exact="1" name="tr_sector" sector="tr_sector" race="terran" known="1"/>
verwendet haben sollst... Das geht nicht :!:
Als erstes mal ist das sector="tr_sector" da fehl am platze. Und zweitens wirst du sehr warscheinlich keinen Sektor finden. Denn was du machst ist einen Sektor suchen der den Terranern gehört, dem Spieler bekannt sein muss und exakt einen Sprung weit vom aktuellen Spielersektor entfernt liegt. Sollte sich der SPieler aber gerade nicht im Terranergebiet aufhalten wirst du nichts finden!



ScRaT_GER wrote:Ich stehe etwas auf dem Schlauch. Ich möchte, dass ein Cue erst startet, wenn irgendein Sektor keine Stationen einer bestimmen Klasse mehr hat.
Die Anzahl der Stationen eines Sektors würde ich einfach über <count_stations> regeln, doch wie ich es schaffen kann, dass alle Sektoren berücksichtig werden, weiß ich momentan nicht.

Ist das irgendwie möglich?

EDIT:

Wie kann man alle Sektoren einer bestimmten Rasse und eines bestimmten Typs (Core / Border) finden? "group" scheint bei <find_sector> nicht zu funktionieren!?

MfG,
ScRaT
Keine Garantie aber es könnte sein das folgende Condition dir weiterhilft:

Code: Select all

      <condition>
        <count_stations typename="SS_FAC_A_SWARM_COMPLEX" max="0">
          <sector x="0" y="0"/>
          <jumps max="200"/>
        </count_stations>
      </condition>
Die Bedingungen für die Station (maker, besitzer, blah) kannst du nach belieben anpassen.

Alle Sektoren auf einmal in einer Variable ist nicht möglich afaik.
Eventuell auch ohne Garantie kannst du nen Sektor in eine Gruppe hinzufügen... also <add_object_to_group group="this.mySectorGroup" object="this.MySector"/> es kann sein das du den Sektor dazu erst mit <set_object name="this.MySector" value="{sector@this.FoundSector}"/> in eine Objektvariable speichern musst...

WIe gesagt ich habe keine Ahnung ob das so wirklich funktioniert aber ein Versuch währe es wert.

gruß
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (3 points for split ships and stations, 4.0 -> -50 points).
If you are raising pirate activity, give me meaningful ways to deal with them PERMANENTLY. Better things to do than replacing ships every 10 minutes, or babysitting ships getting harassed.
Stopped playing X4 with 4.0 due to outrageous, needless and pointless nerfs to everything. Don't change what wasn't broken in the first place.
User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 12168
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar »

Wie kann man alle Sektoren einer bestimmten Rasse und eines bestimmten Typs (Core / Border) finden? "group" scheint bei <find_sector> nicht zu funktionieren!?
Man kann nicht multiple sectors auf einmal suchen lassen.
Ich möchte, dass ein Cue erst startet, wenn irgendein Sektor keine Stationen einer bestimmen Klasse mehr hat.
Das geht über find_station für jeden sektor einzeln. Dann entweder direkt den stationstyp suchen lassen (muss man dann dass für jeden Stationstyp einzeln wiederholen) oder alle stationen suchen lassen und danach filtern.
Etwa so

Code: Select all

<director name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">
  <documentation>
    <author alias="Ketraar" contact="Forums"/>
    <content name="Stationschecktest" description="Stations check test"/>
    <version date="today" number="1.0" status="concept"/>
  </documentation>
  <cues>
    <cue name="Sct_toplevell">
      <condition>
        <check_age value="{player.age}" min="10s"/>
      </condition>
      <action>
        <do_all>
          <set_value name="Sct_toplevell.sectorXvalue" exact="0"/>
          <set_value name="Sct_toplevell.sectorYvalue" exact="0"/>
          <set_value name="Sct_toplevell.triggervalue" exact="0"/>
        </do_all>
      </action>
      <cues>
        <cue name="Sct_findstations" delay="1s">
          <condition>
            <cue_is_complete cue="Sct_toplevell"/>
          </condition>
          <timing>
            <time exact="1s"/>
          </timing>
          <action>
            <do_all>
              <find_sector name="Sct_findstations.searchsector" x="{value@Sct_toplevell.sectorXvalue}" y="{value@Sct_toplevell.sectorYvalue}"/>
              <do_choose>
                <do_when value="{sector.race@Sct_findstations.searchsector}" list="{lookup.race@default}|{lookup.race@terran}">
                  <find_station group="Sct_findstations.foundstationsgroup" class="factory" multiple="1" max="9999">
                    <sector sector="Sct_findstations.searchsector"/>
                  </find_station>
                </do_when>
                <do_otherwise>
                  <do_choose>
                    <do_when value="{value@Sct_toplevell.sectorXvalue}" max="22">
                      <set_value name="Sct_toplevell.sectorXvalue" operation="add" exact="1"/>
                      <reset_cue cue="Sct_findstations"/>
                    </do_when>
                    <do_otherwise>
                      <do_choose>
                        <do_when value="{value@Sct_toplevell.sectorYvalue}" max="18">
                          <set_value name="Sct_toplevell.sectorXvalue" exact="0"/>
                          <set_value name="Sct_toplevell.sectorYvalue" operation="add" exact="1"/>
                          <reset_cue cue="Sct_findstations"/>
                        </do_when>
                        <do_otherwise>
                          <set_value name="Sct_toplevell.sectorXvalue" exact="0"/>
                          <set_value name="Sct_toplevell.sectorYvalue" exact="0"/>
                          <reset_cue cue="Sct_findstations"/>
                        </do_otherwise>
                      </do_choose>
                    </do_otherwise>
                  </do_choose>
                </do_otherwise>
              </do_choose>
            </do_all>
          </action>
          <cues>
            <cue name="Sct_findstations_filter" delay="1s">
              <condition>
                <cue_is_complete cue="Sct_findstations"/>
              </condition>
              <action>
                <do_all>
                  <set_value name="Sct_findstations_filter.LVL1fabscount" exact="0"/>
                  <set_value name="Sct_findstations_filter.LVL2fabscount" exact="0"/>
                  <set_value name="Sct_findstations_filter.LVL3fabscount" exact="0"/>
                  <do_all exact="{group.object.count@Sct_findstations.foundstationsgroup}" counter="stationscounter">
                    <do_if value="{object.resources.count@{group.object.{counter@stationscounter}@Sct_findstations.foundstationsgroup}}" exact="1">
                      <set_value name="Sct_findstations_filter.LVL1fabscount" operation="add" exact="1"/>
                    </do_if>
                    <do_if value="{object.resources.count@{group.object.{counter@stationscounter}@Sct_findstations.foundstationsgroup}}" exact="2">
                      <set_value name="Sct_findstations_filter.LVL2fabscount" operation="add" exact="1"/>
                    </do_if>
                    <do_if value="{object.resources.count@{group.object.{counter@stationscounter}@Sct_findstations.foundstationsgroup}}" exact="3">
                      <set_value name="Sct_findstations_filter.LVL3fabscount" operation="add" exact="1"/>
                    </do_if>
                  </do_all>
                </do_all>
              </action>
              <cues>
                <cue name="Sct_findstations_evalueate">
                  <condition>
                    <check_value value="{value@Sct_toplevell.triggervalue}" exact="1"/>
                  </condition>
                  <timing>
                    <time exact="1s"/>
                  </timing>
                  <action>
                    <do_all>
                      <do_choose>
                        <do_when value="{value@Sct_findstations_filter.LVL1fabscount}" max="0">
                          <set_value name="Sct_toplevell.triggervalue" exact="1"/>
                        </do_when>
                        <do_when value="{value@Sct_findstations_filter.LVL2fabscount}" max="0">
                          <set_value name="Sct_toplevell.triggervalue" exact="1"/>
                        </do_when>
                        <do_when value="{value@Sct_findstations_filter.LVL3fabscount}" max="0">
                          <set_value name="Sct_toplevell.triggervalue" exact="1"/>
                        </do_when>
                        <do_otherwise>
                          <do_choose>
                            <do_when value="{value@Sct_toplevell.sectorXvalue}" max="22">
                              <set_value name="Sct_toplevell.sectorXvalue" operation="add" exact="1"/>
                              <reset_cue cue="Sct_findstations"/>
                            </do_when>
                            <do_otherwise>
                              <do_choose>
                                <do_when value="{value@Sct_toplevell.sectorYvalue}" max="18">
                                  <set_value name="Sct_toplevell.sectorXvalue" exact="0"/>
                                  <set_value name="Sct_toplevell.sectorYvalue" operation="add" exact="1"/>
                                  <reset_cue cue="Sct_findstations"/>
                                </do_when>
                                <do_otherwise>
                                  <set_value name="Sct_toplevell.sectorXvalue" exact="0"/>
                                  <set_value name="Sct_toplevell.sectorYvalue" exact="0"/>
                                  <reset_cue cue="Sct_findstations"/>
                                </do_otherwise>
                              </do_choose>
                            </do_otherwise>
                          </do_choose>
                        </do_otherwise>
                      </do_choose>
                    </do_all>
                  </action>
                </cue>
              </cues>
            </cue>
          </cues>
        </cue>
      </cues>
    </cue>
  </cues>
</director>
Jetzt brauchst du nur noch im cue der dann ausgeführt werden soll den check

Code: Select all

<check_value value="{value@Sct_toplevell.triggervalue}" exact="1"/>
Das wird die Performance etwas beanspruchen weil das dauernd läuft bis es zutriff. Solltest du das nachdem dein cue ausgeführt wurde nochmals benutzen wollen, muss noch ein reset_cue her und alles fängt von vorne an.

MFG

Ketraar
Image
XGamer
Posts: 2355
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer »

@raumkraut:

So nachdem ich mir jetzt mal die Mühe gemacht habe deinen Code durchzusehen:
  • Als erstes mal werden Lokale Variablen verwendet ;) Also cuename.Variablenname this ist dabei die aktuelle Cue.
  • Im Briefing muss es <mission discipline="XXXT" level="easy"/> (oder einer der anderen Werte aus der Liste die aufpoppt) heissen. Es gibt kein level="difficulty" :!:
  • Bei den Objectives ist auch so einiges Falsch. Du kannst dir die diversen {object@ und {sector@} sparen... Der erwartet sowieso ein Objekt bzw. einen Sektor. Das ganze sieht dann so aus:

    Code: Select all

                  <objective step="1">
                    <dockat object="this.tr_station"/>
                  </objective>
                  <objective step="2">
                    <flyto>
                      <sector sector="this.tr_sector"/>
                    </flyto>
                  </objective>
    
  • Beim letzten Custom Objective fehlt dir mindestens eines der anderen Attribute. Entweder text, object oder actor damit angezeigt wird was denn da gemacht werden soll... So wie das jetzt ist steht im Briefing nur das was in der TFile an der Addresse steht nen Doppelpunkt und dann garnichts mehr.
  • Als nächstes hätten wir dann dein <set_objective> beim briefing gibst du eine nicht existierende cue an, was logischerweise nicht geht.
  • Noch einiges mehr was aber vom Sinn her schon oben erwähnt wurde...
Korrekt würde das ganze dann so aussehen:

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<director name="raumkraut93_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="U:\Program Files\EGOSOFT\X3 Terran Conflict\director\director.xsd">
  <cues>
    <cue name="rk93_1">
      <condition>
        <check_all>
          <check_value value="{player.notoriety.atf}" min="{lookup.notoriety@notop7}"/>
        </check_all>
      </condition>
      <timing>
        <time exact="15s"/>
      </timing>
      <action>
        <do_all>
          <find_station name="this.tr_station" race="terrangroup" typename="SS_DOCK_ATF_MILITARY_1">
            <sector x="12" y="3"/>
          </find_station>
          <find_sector name="this.tr_sector" min="0" max="60" nearest="1" race="terran" known="1"/>
          <create_actor name="this.u24_4_atfcmd" character="{3895,19}" face="1135" voice="3819" race="terran" object="this.tr_station" location="crew" />
          <play_text actor="this.u24_4_atfcmd" pageid="3819" textid="191000" priority="99"/>
          <create_briefing cue="rk93_1" title="{71372,1}" text="{71372,2}" background="ship_terran_scimitar.tga">
            <mission discipline="XXXT" level="easy"/>
            <objectives>
              <objective step="1">
                <dockat object="this.tr_station"/>
              </objective>
              <objective step="2">
                <flyto>
                  <sector sector="this.tr_sector"/>
                </flyto>
              </objective>
              <objective step="3">
                <custom action="{71372,3}"/>
              </objective>
            </objectives>
          </create_briefing>
          <set_objective cue="rk93_1" story="{71372,2}" title="{71372,1}" noabort="1">
            <briefing cue="rk93_1" step="1"/>
            <mission discipline="XXXT" level="trivial"/>
            <dockat object="this.tr_station"/>
          </set_objective>
        </do_all>
      </action>
    </cue>

    <cue name="rk93_2">
      <condition>
        <check_all>
          <cue_is_complete cue="rk93_1"/>
          <object_is_docked dockobject="rk93_1.tr_station"/>
        </check_all>
      </condition>
      <timing>
        <time exact="15s"/>
      </timing>
      <action>
        <do_all>
          <incoming_message author="{actor.name@rk93_1.u24_4_atfcmd}" text="{7137,1}" popup="1"/>
          <set_objective cue="rk93_1" story="{71372,2}" title="{71372,1}" noabort="1">
            <briefing cue="rk93_1" step="2"/>
            <mission discipline="XXXT" level="trivial"/>
            <flyto>
              <sector sector="rk93_1.tr_sector"/>
            </flyto>
          </set_objective>
        </do_all>
      </action>
    </cue>


    <cue name="rk93_3">
      <condition>
        <check_all>
          <cue_is_complete cue="rk93_2"/>
        </check_all>
      </condition>
      <action>
        <do_all>
          <set_objective cue="rk93_1" story="{71372,2}" title="{71372,1}" noabort="1">
            <briefing cue="rk93_1" step="3"/>
            <mission discipline="XFXX" level="hard"/>
            <custom action="{71372,3}" comment="STUFF MISSING HERE AGAIN!!!!"/>
          </set_objective>
        </do_all>
      </action>
    </cue>

    <cue name="rk93_createenemies">
      <condition>
        <check_all>
          <cue_is_complete cue="rk93_3"/>
        </check_all>
      </condition>
      <action>
        <do_all>
          <find_gate name="rk93_1.tr_gate" nearest="1">
            <sector sector="rk93_1.tr_sector"/>
          </find_gate>
          <create_special typename="SS_SH_JUMP_BEACON">
            <position object="rk93_1.tr_gate" exact="20km" />
            <sector sector="rk93_1.tr_sector"/>
          </create_special>
          <create_ship group="rk93_1.xenon" race="xenon" typename="SS_SH_X_M7">
            <sector sector="rk93_1.tr_sector"/>
            <equipment loadout="default" />
            <command command="killenemies"/>
          </create_ship>
          <create_ship group="rk93_1.xenon" race="xenon" typename="SS_SH_X_M3">
            <sector sector="rk93_1.tr_sector"/>
            <equipment loadout="default" />
            <command command="killenemies"/>
          </create_ship>
          <create_ship group="rk93_1.xenon" race="xenon" typename="SS_SH_X_M3">
            <sector sector="rk93_1.tr_sector"/>
            <equipment loadout="default" />
            <command command="killenemies"/>
          </create_ship>
          <create_ship group="rk93_1.xenon" race="xenon" typename="SS_SH_X_M6">
            <sector sector="rk93_1.tr_sector"/>
            <equipment loadout="default" />
            <command command="killenemies"/>
          </create_ship>
          <create_ship group="rk93_1.xenon" race="xenon" typename="SS_SH_X_M6">
            <sector sector="rk93_1.tr_sector"/>
            <equipment loadout="default" />
            <command command="killenemies"/>
          </create_ship>
        </do_all>
      </action>
    </cue>
    <cue name="rk93_4">
      <condition>
        <check_all>
          <cue_is_complete cue="rk93_createenemies"/>
          <all_objects_destroyed group="rk93_1.xenon"/>
        </check_all>
      </condition>
      <action>
        <do_all>
          <remove_objective cue="rk93_1" status="complete"/>
          <remove_briefing cue="rk93_1"/>
          <incoming_message author="{actor.name@rk93_1.u24_4_atfcmd}" text="{71371,2}" popup="1" />
          <reward_player>
            <notoriety>
              <relation race="atf" operation="add" exact="notop2"/>
            </notoriety>
          </reward_player>
        </do_all>
      </action>
    </cue>
  </cues>
</director>
Ich hoffe ich habe nichts übersehen.

greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (3 points for split ships and stations, 4.0 -> -50 points).
If you are raising pirate activity, give me meaningful ways to deal with them PERMANENTLY. Better things to do than replacing ships every 10 minutes, or babysitting ships getting harassed.
Stopped playing X4 with 4.0 due to outrageous, needless and pointless nerfs to everything. Don't change what wasn't broken in the first place.
Raumkraut93
Posts: 1368
Joined: Wed, 18. Mar 09, 22:20
x3tc

Post by Raumkraut93 »

:o vielen dank für die mühe!

Ich werd das gleich mal testen :D
"Dies ist alles, was ich über den Krieg weiss: Einer gewinnt, einer verliert
und nichts ist nachher so
wie es vorher war."

"Stellt eure Truppen auf, oh große Generäle,
Der Preis des Sieges übersteigt den Preis der Niederlage."
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Danke erstmal an XGamer und Ketraar für die Hilfe und den Code!
Das wird die Performance etwas beanspruchen weil das dauernd läuft bis es zutriff.
Das wäre ein ziemliches Problem. Dann muss ich das anders lösen, vielleicht indem ich eine Gruppe von Stationen anlege und bei Zerstörung einer dieser Stationen schaue, ob der Sektor jetzt frei von Stationen dieser Klasse ist.

Dabei stellt sich mir nur die Frage: Wie kann man, wenn man z.B. die Bedingung <any_object_destroyed> stellt, im Action - Node herausfinden, welches Objekt zerstört wurde?
Eventuell auch ohne Garantie kannst du nen Sektor in eine Gruppe hinzufügen... also <add_object_to_group group="this.mySectorGroup" object="this.MySector"/> es kann sein das du den Sektor dazu erst mit <set_object name="this.MySector" value="{sector@this.FoundSector}"/> in eine Objektvariable speichern musst...
Ich habe dies nun mit einer Gruppe versucht, in der alle (bzw. erstmal nur 4) Rassen sein sollen.
Hier der Code:

Code: Select all

  <cues>
    <cue name="scrat_test_init">
      <condition>
        <check_age value="{player.age}" exact="1s"/>
      </condition>
      <action>
        <do_all>
          <set_object name="this.race1" value="{lookup.race@argon}"/>
          <add_object_to_group group="this.races" object="this.race1"/>
          <set_object name="this.race2" value="{lookup.race@boron}"/>
          <add_object_to_group group="this.races" object="this.race2"/>
          <set_object name="this.race3" value="{lookup.race@teladi}"/>
          <add_object_to_group group="this.races" object="this.race3"/>
          <set_object name="this.race4" value="{lookup.race@split}"/>
          <add_object_to_group group="this.races" object="this.race4"/>
        </do_all>
      </action>
      <cues>
        <cue name="scrat_test_races">
          <condition>
            <cue_completed cue="scrat_test_init"/>
          </condition>
          <action>
            <do_all exact="{group.object.count@scrat_test_init.races}" counter="mycount">
              <incoming_message author="DEBUG" text="Rasse {counter@mycount}: {group.object.{counter@mycount}@scrat_test_init.races}"/>
            </do_all>
          </action>
        </cue>
      </cues>
    </cue>
  </cues>
Im Spiel bekommt man keine Nachricht(en). Funktionieren Groups mit den Rassen nicht oder ist der Code einfach nur fehlerhaft?

Wenn das schon nicht funktioniert, dann wird das mit den Sektoren wohl auch nicht funktionieren...
Es ist zu schade, dass <count_stations> nur als Bedingung funktioniert.

MfG,
ScRaT
User avatar
Jens Ka
Posts: 468
Joined: Thu, 18. Jan 07, 15:32
x4

Post by Jens Ka »

Hi ScRaT_GER

versuch mal mit lockeren condition. exact 1s ist sehr heftig da lädt das Spiel ja noch :roll: dazu kommt das es nur exatc 1s spielzeit zu trifft mach da mal min 10s.
und rein zur Sicherheit nimmst den event check aus dem 2 cue und machst

Code: Select all

<cue_is_complete cue="scrat_test_init"/> 
sollte zwar auch so mit cue_completed gehen aber ist so ja schon nen Experiment für sich und warum sich selber schwerer machen als nötig :wink:

Ob das mit Rassen in einer Gruppe geht weis ich jetzt nicht braute sowas noch nicht.

MfG
Jens Ka
MD IST NICHT MSCI!!!!
MD ist Eventdriven. Es passiert etwas - du reagierst darauf.
Bin nicht für weitere Mod Projekte zu haben.
ND VSM XTC
Allgemeine MD-Fragen
XGamer
Posts: 2355
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer »

ich sprach von Actors und nicht von Rassen :roll:
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (3 points for split ships and stations, 4.0 -> -50 points).
If you are raising pirate activity, give me meaningful ways to deal with them PERMANENTLY. Better things to do than replacing ships every 10 minutes, or babysitting ships getting harassed.
Stopped playing X4 with 4.0 due to outrageous, needless and pointless nerfs to everything. Don't change what wasn't broken in the first place.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Meinst du mich?
ScRaT_GER wrote:Wenn das schon nicht funktioniert, dann wird das mit den Sektoren wohl auch nicht funktionieren...
Außerdem sprachst du von Sektoren, nicht von Actors. :?

Naja, ich habe die von Jens Ka vorgeschlagenen Änderungen ausprobiert, leider ohne Erfolg.
Ich vermute, da muss ich irgendeine andere Lösung finden.

Ob es mit Sektoren funktioniert habe ich jetzt noch nicht versucht, werde ich aber noch machen.
Ich würde es halt gerne irgendwie hinbekommen, dass alle Kern- und Grenzsektoren jeder Rasse gezählt werden. Ich denke ich werde es so versuchen, wie Ketraar es in seinem Codebeispiel gemacht hat, also mittels X- und Y-Koordinaten die Sektoren "abfahren" und dann den eine Variable für jede Rasse und jeden Sektortyp. Dass ich dann nicht die einzelnen Sektoren als richtige Gruppe bekomme, muss ich dann wohl hinnehmen.

Danke für die Hilfe!

MfG,
ScRaT
XGamer
Posts: 2355
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer »

hm naja mixed up ;)

aber rassen gehen ebenfalls nicht inner Gruppe - woher auch...
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (3 points for split ships and stations, 4.0 -> -50 points).
If you are raising pirate activity, give me meaningful ways to deal with them PERMANENTLY. Better things to do than replacing ships every 10 minutes, or babysitting ships getting harassed.
Stopped playing X4 with 4.0 due to outrageous, needless and pointless nerfs to everything. Don't change what wasn't broken in the first place.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

hm naja mixed up :wink:
Ok, dann hat sich ja alles erledigt. ^^

Was kann man denn so grundlegendes über Gruppen bzw. "groups" sagen?

Ich weiß, der Vergleich/Erwähnung ist hier nicht gern gesehen, aber aus dem SE kennt man ja Arrays, die so ziemliches alles beinhalten können.
Kann man Groups mit Arrays vergleichen und welche Objekte können sie beinhalten?
Kann man auch eine Gruppe "starten", indem man
<set_object name='this.obect' group='this.mygroup' value=.../>
verwendet oder geht das nur über die entsprechenden <find_ship/station... group="this.mygroup' ...> - Befehle?

MfG,
ScRaT
XGamer
Posts: 2355
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer »

du hättest deine Antwort wesentlich schneller gehabt wenn du es ausprobiert hättest. ;)

Generell können groups aus Objekten bestehen. Also im Grunde Schiffen und Stationen.
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (3 points for split ships and stations, 4.0 -> -50 points).
If you are raising pirate activity, give me meaningful ways to deal with them PERMANENTLY. Better things to do than replacing ships every 10 minutes, or babysitting ships getting harassed.
Stopped playing X4 with 4.0 due to outrageous, needless and pointless nerfs to everything. Don't change what wasn't broken in the first place.

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