[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
Ketraar
Moderator (DevNet)
Moderator (DevNet)
Posts: 9029
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Mon, 26. Jan 09, 12:20

Code: Select all

<cues>
    <cue name="Myfirstcue">
      <condition>
        ....
      </condition>
      <action>
        <find_station name="this.MyDock" class="dock" dockingallowed="1">
          <sector x="3" y="4"/>
        </find_station>
      </action>
      <cues>
        <cue name="Mysecondcue">
          <condition>
            <object_is_docked object="{player.ship}" dockobject="Myfirstcue.MyDock"/>
          </condition>
          <action>
            ....
          </action>
        </cue>
      </cues>
    </cue>
  </cues>
Das sollte gehen, achte beim Suchen (find_station) das du da die richtigen Parameter nimmst, nicht das sich diese gegenseitig anulieren.

MFG

Ketraar
Image

XGamer
Posts: 1459
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer » Mon, 26. Jan 09, 12:27

Code: Select all

<find_station category="dock" name="this.myDock" typename="<insert VALID Typename here>" race="default"> 
  <sector x="1" y="3" comment="Argon Prime" /> 
</find station> 

............ 

<condition> 
 <check_all> 
  ....... 
  <object_is_docked dockobject="{object@this.myDock}" /> 
 </check_all> 
</condition>
1. hast du die Befehle total falsch geschrieben
2. Du hast niemals irgendwo irgendwas zugewiesen.
3. Wenn der ganze File so aussieht dann viel SPass. Der MD File wird so wie er in deinem Code ausschaut nie geladen werden. (bzw. nie richtig)
4. Man achte darauf das Befehlsnamen keine Leerzeichen enthalten.
5. Man achte darauf Gleichheitszeichen zu verwenden bei zuweisungen.

Wie auch immer sofern du in meinem Code oben den typename noch einsetzt ohne das Gleichheitszeichen oder die Anführungszeichen zu entfernen dann sollte das erstmal so funktionieren. Vorausgesetzt du setzt es an der richtigen Stelle ein.

€Dit: Pöhser Ketraar war wieder schneller :D


greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (2.50 still pretty much unplayable due to bugs)

u24j7x5
Posts: 598
Joined: Thu, 1. Sep 05, 09:00
x4

Post by u24j7x5 » Mon, 26. Jan 09, 14:49

hi,

@Ketraar
@XGamer

besten dank für die schnelle antwort, werde es gleich umsetzen.


ps: @XGamer: ich verwende eh den web developer, da besteht keine gefahr des falschschreibens. aus dem stehgreif war das jetzt leider nicht optimal dargestellt.

gruß

XGamer
Posts: 1459
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer » Mon, 26. Jan 09, 17:16

Ahso ok dann ists ja gut. Dachte nur von dem Text her den du gepostet hast...

Aber ok wenn du den Web Developer nimmst dann schreibt ders ja richtig und präsentiert dir die Auswahl vorrausgesetzt du das das Schema richtig angegeben. :)

Viel Glück weiterhin.

greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (2.50 still pretty much unplayable due to bugs)

u24j7x5
Posts: 598
Joined: Thu, 1. Sep 05, 09:00
x4

Post by u24j7x5 » Mon, 26. Jan 09, 19:13

hi,

super danke, funktioniert jetzt. habe den (dummen) feher beseitigen können.


gruß

User avatar
Jens Ka
Posts: 458
Joined: Thu, 18. Jan 07, 16:32
x4

Post by Jens Ka » Sun, 1. Feb 09, 15:28

Halle.

Ich habe ein keines Problem.

Ich möchte feindliche NPC Schiffe im Radar Reichweite des Spielerschiffes erfassen und klassifizieren. Das klappt schon sehr gut nur leider werden die Schiff mehr fach erfast und gezählt.

Gibt es eine Möglichkeit das ein schon gezähltes Schiff nicht noch mal gezählt wird?

Hier mal der Code.

Code: Select all

          ...
          <cues>
            <cue name="JKa FDC Check">
              <condition>
                <count_ships class="ship" race="pirate|yaki|khaak|xenon" enemy="1" min="1">
                  <sector sector="{player.sector}"/>
                  <distance max="{value@JKa FDC.Distance}km"/>
                </count_ships>
              </condition>
              <action>
                <do_all>
                  <find_object name="this.EnemyShip" class="ship" race="pirate|yaki|khaak|xenon" enemy="1">
                    <sector sector="{player.sector}"/>
                    <distance max="{value@JKa FDC.Distance}km"/>
                  </find_object>
                  <do_if value="{object.exists@this.EnemyShip}" exact="0">
                    <reset_cue cue="JKa FDC Check"/>
                  </do_if>
                </do_all>
              </action>
              <cues>
                <cue name="JKa FDC CheckGroup">
                  <condition>
                    <check_all>
                      <object_exists object="JKa FDC Check.EnemyShip"/>
                      <object_is_in_group object="JKa FDC Check.EnemyShip" group="JKa FDC.EnemyGroup" negate="1"/>
                    </check_all>
                  </condition>
                  <action>
                    <do_all>
                      <do_choose>
                        <do_when value="{object.class@JKa FDC Check.EnemyShip}" exact="{lookup.class@ts}">
                          <add_object_to_group object="JKa FDC Check.EnemyShip" group="JKa FDC.EnemyGroup"/>
                          <set_value name="JKa FDC.Bonus" exact="{value@JKa FDC.Bonus}+{value@JKaConstant.{lookup.class@ts}}"/>
                          <set_value name="JKa FDC.EnemyCount" operation="add" exact="1"/>
                        </do_when>
                        <do_when value="{object.class@JKa FDC Check.EnemyShip}" exact="{lookup.class@tp}">
                          <add_object_to_group object="JKa FDC Check.EnemyShip" group="JKa FDC.EnemyGroup"/>
                          <set_value name="JKa FDC.Bonus" exact="{value@JKa FDC.Bonus}+{value@JKaConstant.{lookup.class@tp}}"/>
                          <set_value name="JKa FDC.EnemyCount" operation="add" exact="1"/>
                        </do_when>
                        ...
                        <do_otherwise>
                          <reset_cue cue="JKa FDC Check"/>
                        </do_otherwise>
                      </do_choose>
                    </do_all>
                  </action>
                  <cues>
                    <cue name="JKa FDC Reset">
                      <condition>
                        <cue_is_complete cue="JKa FDC CheckGroup"/>
                      </condition>
                      <timing>
                        <time exact="1s"/>
                      </timing>
                      <action>
                        <reset_cue cue="JKa FDC Check"/>
                      </action>
                    </cue>
                  </cues>
                </cue>
              </cues>
            </cue>
            ...
Ich habe auch schon versucht mit {counter@myloop} das in griff zu kriegen leider ohne erfolg. :(

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

User avatar
Ketraar
Moderator (DevNet)
Moderator (DevNet)
Posts: 9029
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Mon, 2. Feb 09, 02:54

Code: Select all

        <cue name="JKa FDC" delay="1s">
          <condition>
            <cue_is_complete cue="JKaConstant"/>
          </condition>
          <action>
            <do_all>
              <set_value name="this.EnemyCount" exact="1"/>
            </do_all>
          </action>
          <cues>
            <cue name="JKa FDC Check">
              <condition>
                <count_ships class="ship" race="pirate|yaki|khaak|xenon" enemy="1" min="1">
                  <sector sector="{player.sector}"/>
                  <distance max="{value@JKa FDC.Distance}km"/>
                </count_ships>
              </condition>
              <action>
                <do_all>
                  <find_object name="this.EnemyShip{value@JKa FDC.EnemyCount}" class="ship" race="pirate|yaki|khaak|xenon" enemy="1">
                    
                    <!--{value@JKa FDC.EnemyCount} ist dann eine immer fortlaufende nummer damit es keine überschreibungen gibt und so immer ein einzigartiger name ensteht-->
                    
                    <sector sector="{player.sector}"/>
                    <distance max="{value@JKa FDC.Distance}km"/>
                  </find_object>
                  
                  <set_value name="this.Shipmatch" exact="0" comment="diesen wert brauchen wir später für den do_choose"/>
                  
                  <do_if value="{object.exists@this.EnemyShip{value@JKa FDC.EnemyCount}}" exact="0">
                    <reset_cue cue="JKa FDC Check"/>
                  </do_if>
                </do_all>
              </action>
              <cues>
                <cue name="JKa FDC Matchobject">
                  <condition>
                    <check_all>
                      <cue_is_complete cue="JKa FDC Check"/>
                    </check_all>
                  </condition>
                  <action>
                    
                    <!-- hier checken wir ob das gefundene objekt bereits in der gruppe existiert
                    trifft das zu wird die Match value auf 1 gestellt und im späteren do_choose gebraucht
                    da es nur ein schiff geben kann das genau gleich ist, trifft das auch immer nur einmal zu oder eben garnicht-->
                    
                    <do_all counter="Shipmatch" exact="{group.objetc.count@JKa FDC.EnemyGroup}">
                      <do_if value="{group.objetc.{counter@Shipmatch}@JKa FDC.EnemyGroup}" exact="{object@JKa FDC Check.EnemyShip{value@JKa FDC.EnemyCount}}">
                        <set_value name="JKa FDC Check.Shipmatch" exact="1"/>
                      </do_if>
                    </do_all>
                  </action>
                  <cues>
                    <cue name="JKa FDC CheckGroup">
                      <condition>
                        <cue_is_complete cue="JKa FDC Matchobject"/>
                      </condition>
                      <action>
                        <do_all>
                          <!-- erste condition -->
                          <!-- sollte das gefundene schiff bereits in der gruppe sein, dann ist wert 1 und der do_otherwise triggert
                          sonst triggert der zweite do_choose-->
                          <do_choose>
                            <do_when value="{value@JKa FDC Check.Shipmatch}" exact="1" negate="1">
                              <!-- zweite condition -->
                              <do_choose>
                                <do_when value="{object.class@JKa FDC Check.EnemyShip{value@JKa FDC.EnemyCount}}" exact="{lookup.class@m1}">
                                  <add_object_to_group object="JKa FDC Check.EnemyShip{value@JKa FDC.EnemyCount}" group="JKa FDC.EnemyGroup"/>
                                  <set_value name="JKa FDC.Bonus" exact="{value@JKa FDC.Bonus}+{value@JKaConstant.{lookup.class@m1}}"/>
                                  <set_value name="JKa FDC.EnemyCount" operation="add" exact="1"/>
                                </do_when>
                                <do_otherwise>
                                  <reset_cue cue="JKa FDC Check"/>
                                </do_otherwise>
                              </do_choose>
                              <!-- ende zweite condition -->
                            </do_when>
                            <do_otherwise>
                              <reset_cue cue="JKa FDC Check"/>
                            </do_otherwise>
                          </do_choose>
                          <!--ende erste condition -->
                        </do_all>
                      </action>
                      <cues>
                        <cue name="JKa FDC Reset">
                          <condition>
                            <cue_is_complete cue="JKa FDC CheckGroup"/>
                          </condition>
                          <timing>
                            <time exact="1s"/>
                          </timing>
                          <action>
                            <reset_cue cue="JKa FDC Check"/>
                          </action>
                        </cue>
                      </cues>
                    </cue>
                  </cues>
                </cue>
              </cues>
            </cue>
          </cues>
        </cue>
Die comments sollten das erklären was gemeint ist, wichtig der teil mit dem do_all counter, da dieser jeweils das gefunden schiff mit den in der gruppe bereits existierenden checkt, trifft das zu wir reseted.

MFG

Ketraar
Image

Raylon
Posts: 360
Joined: Sun, 1. Jun 08, 13:16

Post by Raylon » Tue, 17. Feb 09, 19:48

hi

1. ist es möglich, eine md-mission zu schreiben, die nur bei einem bestimmten spielstart aktiviert wird, und erst nach einer bestimmten ingamezeit? also beides zusammen?
1.1 ist es zusätzlich möglich, das bei dieser mission der sektor, indem sich der spieler befindet, "das ziel ist"?

2. Ist es möglich irgendwie zu sagen: Aufgabe ist die Eroberung eines Sektors? (Also irgendwie als aufgabe, das der sektorbesitzer auf die rasse geändert werden muss, script dafür hätte ich schon)

3. falls nein, ist es möglich zu sagen: Aufgabe ist die Zerstörung aller Stationen im Sektor?

4. kann man evt. als belohnung für eine md-mission es so hinkriegen, dass ein sektor den besitzer wechselt in den besitz des spielers?

hoffe es ist alles verständlich.

mfg
:khaak::khaak::khaak:

Bald online: [X3TC-Mod] :khaak: Als Kha'ak spielen :khaak: by Xenon O. [KBG] und Raylon

Entwicklungsthread

:khaak::khaak::khaak:

User avatar
Ketraar
Moderator (DevNet)
Moderator (DevNet)
Posts: 9029
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Tue, 17. Feb 09, 20:43

1. Ja geht. Du kannst mehre Bedingungen (conditions) einfügen und verlangen das sie alle erfüllt sind damit die Mission (cue) aktiviert wird. Du kannst auch mehrer conditions haben und nur verlangen das eine davon erfüllt ist, oder auch das eine, oder mehrere erfüllt werden müssen und irgendeine aus einer Liste erfüllt werden.

Code: Select all

      <condition>
        <check_all comment="alle müssen stimmen, von oben nach unten. Wenn einer nicht zutrifft werden die nächsten NICHT gecheckt!">
          <check_value value="{player.gamestart}" exact="{wert hier eintragen}" comment="hier wird die gamestart ID gecheckt"/>
          <check_value value="{player.gamestart.name}" exact="{wert hier eintragen}" comment="hier wird der name des gamestarts gecheckt"/>
          <check_age value="{player.age}" min="1d" comment="ein ingame tag"/>
          <check_any comment="Mindestens eine muss zutreffen">
            <player_ship_count class="ts" min="15"/>
            <player_ship_count class="m8" min="5"/>
            <player_ship_count class="tl" min="2"/>
          </check_any>
        </check_all>
      </condition>
2. Geht, wobei man evtl. ein paar Umwege machen muss. Man muss hier auch bedenken, das was im Spiel angezeigt wird "nur" Glimmer ist, im code muss man dann die conditions so einsetzen das es dann auch wirklich nur dann passiert wann es soll. Aber ja es gibt auch custom objectives, wo man so ziemlich alles reinschreiben kann und dann auch angezeigt wird.

3. Wie gesagt es liegt an dir die Bedingungen zu stellen, auch das zerstören mehrer Objekte, sei es Stationen oder Schiffe oder sonstwas. Hier ist das erstellen einer Gruppe am besten. Also muss man via find_station (kann auch find_object, oder find_ship, je nach Bedürfnis) alle nötigen Stationen erfassen, womöglich wird es nötig sein mehrere find_station nodes zu benutzen wenn man bestimmte Stationen will, die sich gar in verschiedenen Sektoren befinden.
Hat man die gruppe erstellt, bzw. alle Stationen erfasst, kann man dann als condition <any_object_exists group="Groupname" negate="1"/> oder <all_objects_destroyed group="Groupname"/>, wobei mir ersteres besser passt.

Mann kann Gruppen auch aus verschiedene Objekte erstellen. Wie üblich muss man die erst "finden" und dann benutzt man den Befehl <add_object_to_group object="MD name des gefundenen Objekts" group="groupname"/>.

4. Kannst du machen, aber nicht direkt. Der set_sector_owner befehl funktioniert leider nicht. Musst also auf den SE zurückgreifen.

MFG

Ketraar
Image

Raylon
Posts: 360
Joined: Sun, 1. Jun 08, 13:16

Post by Raylon » Tue, 17. Feb 09, 21:21

hi

danke für deine tipps. ein paar fragen hätte ich noch:

1. Ist es möglich, dass sobald die Mission aktiviert wird, er sich einen zufälligen Sektor "aussucht", von mehreren die ich vorher angebe?

2. Kann ich ihn alle Stationen in diesem Sektor finden lassen? wenn ja, wie? (ich meine, wenn ich die station nicht kenne, er soll nur alle stationen finden die sich im sektor befinden, weil es können ja auch neue von GOD gebaut werden und diese soll er auch mitberückichtigen)

3. Manche schreiben, der VWD zeigt die befehle an, die man geben kann, wenn man das vorher irgendwie "eingibt". wie geht das und muss ich das alles selbst eingeben oder kann ich das irgendwie automatisch machen (ich kenne die befehle nämlichj nicht)?

danke
mfg
:khaak::khaak::khaak:

Bald online: [X3TC-Mod] :khaak: Als Kha'ak spielen :khaak: by Xenon O. [KBG] und Raylon

Entwicklungsthread

:khaak::khaak::khaak:

User avatar
Ketraar
Moderator (DevNet)
Moderator (DevNet)
Posts: 9029
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Tue, 17. Feb 09, 21:53

1. Klar dazu eignet sich der <do_any/> gut.

Code: Select all

<do_any>
  <find_sector name="Mycue.Mysector" x="0" y="0"/>
  <find_sector name="Mycue.Mysector" x="1" y="0"/>
  <find_sector name="Mycue.Mysector" x="2" y="0"/>
  <find_sector name="Mycue.Mysector" x="3" y="0"/>
  <find_sector name="Mycue.Mysector" x="4" y="0"/>
  <find_sector name="Mycue.Mysector" x="5" y="0"/>
  <find_sector name="Mycue.Mysector" x="6" y="0"/>
  <find_sector name="Mycue.Mysector" x="7" y="0"/>
</do_any>
Achte darauf das der name, das dem sektor vergeben wird immer der selbe ist, somit erreichst du ein Zufallseffekt, in der von dir vorgegebenen Sektorenliste. Du kannst aber noch zufälliger werden wenn du willst.

Code: Select all

<find_sector name="Mycue.Mysector" x="8" y="8" min="1" max="8"/>
Wobei hier ein zufälliger Sektor gefunden wird, der mindestens 1 und maximal 8 Sprünge von 8/8 (Habgier) ist.

2. Yup kein Problem

Code: Select all

<find_station group="Mystationgroup" class="station" multiple="1" max="9999">
  <sector sector="Mycue.Mysector" comment="Selber sector wie im random find_sector"/>
</find_station>
Wenn du nur Fabs willst, kannst das dann in der class ändern.

3. Da wo die Schemadatei bereits Einträge hat, kannst du diese abrufen indem du auf ctrl+leertaste drückst (deine MD-Datei muss aber im selben Ordner sein wie die director.xsd), aber an vielen Orten muss man das selber eintippen, values, names, coordinates, etc.. um auch da werte anzeigen zu lassen bedarf es einer editierten Schemadatei (directo.xsd), da hab ich aber noch nicht rumgespielt und habe es auch nicht vor in absehbarer Zeit.

MFG

Ketraar
Image

Raylon
Posts: 360
Joined: Sun, 1. Jun 08, 13:16

Post by Raylon » Tue, 17. Feb 09, 22:05

super, danke für deine hilfe!

nurnoch 2 minifragen

wo finde ich die director.xsd?
wie muss ich meine MD-Dateien eigentlich nennen, unter welcher endung anspeichern und wo?

danke mfg
:khaak::khaak::khaak:

Bald online: [X3TC-Mod] :khaak: Als Kha'ak spielen :khaak: by Xenon O. [KBG] und Raylon

Entwicklungsthread

:khaak::khaak::khaak:

XGamer
Posts: 1459
Joined: Sun, 25. Apr 04, 19:09
x4

Post by XGamer » Tue, 17. Feb 09, 22:59

Die Director.xsd befindet sich im director Ordner.

Du kannst die Dateien nennen wie es dir beliebt. Einzige Vorraussetzung ist das die dateien als .xml Dateien abgespeichert werden und das die Datei und cue Namen einzigartig sind (logischerweise)

greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 0/10 (2.50 still pretty much unplayable due to bugs)

Raylon
Posts: 360
Joined: Sun, 1. Jun 08, 13:16

Post by Raylon » Wed, 18. Feb 09, 16:01

ih check das mit dem schema nicht.

hab jetzt meine datei und die director.xsd in einen ordner getan, dann die MD-Datei von mir geöffnet und bei "XML->Schema..." die director.xsd ausgewählt (häkchen -> Dieses Schema verwenden). Doch er zeigt mir immernoch nix an!

hilfe...

mfg
:khaak::khaak::khaak:

Bald online: [X3TC-Mod] :khaak: Als Kha'ak spielen :khaak: by Xenon O. [KBG] und Raylon

Entwicklungsthread

:khaak::khaak::khaak:

User avatar
Ketraar
Moderator (DevNet)
Moderator (DevNet)
Posts: 9029
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Wed, 18. Feb 09, 16:09

Lies mal den Tuto Was brauche ich um mit dem MD zu arbeiten. von Jens Ka

Das stehts nochmals genauer.

MFG

Ketraar
Image

Post Reply

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