[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: 9057
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar » Fri, 20. Feb 09, 14:19

Klar geht das und viel mehr.

Code: Select all

      <action>
        <do_all>
          <do_choose>
            <do_when value="{player.fight.rank}" max="4">
              <create_ship name="this.Ship" typename="SS_SH_A_M5_2" race="enemy" comment="Discoverer">
                <position object="{player.ship}" min="5km" max="8km"/>
                <sector sector="{player.sector}"/>
                <equipment loadout="maximum" loadoutmask="all"/>
                <command command="attack" commandobject="{player.ship}"/>
                <pilot shipname="Bad Bastu Pirate"/>
              </create_ship>
            </do_when>
            <do_when value="{player.fight.rank}" min="5">
              <create_ship name="this.Ship" typename="SS_SH_A_M7" race="enemy" comment="Cerberus">
                <position object="{player.ship}" min="5km" max="8km"/>
                <sector sector="{player.sector}"/>
                <equipment loadout="maximum" loadoutmask="all"/>
                <command command="attack" commandobject="{player.ship}"/>
                <pilot shipname="Bad Bastu Pirate"/>
              </create_ship>
            </do_when>
          </do_choose>
        </do_all>
      </action>
Du kannst (fast) unendlich viele do_when benutzen, und auch mehrere "schichten".

Code: Select all

        <do_all>
          <do_choose>
            <do_when value="{player.fight.rank}" min="1">
              <do_choose>
                <do_when value="{weather.is.good}" exact="1">
                  <abandon_ship/>
                </do_when>
                <do_otherwise>
                  <warp_player/>
                </do_otherwise>
              </do_choose>
            </do_when>
            <do_otherwise>
              <abandon_ship/>
            </do_otherwise>
          </do_choose>
        </do_all>
Der do_chosse ist eines der stärksten nodes im MD wenn ihr mich fragt.

MFG

Ketraar
Last edited by Ketraar on Fri, 20. Feb 09, 17:34, edited 1 time in total.
Image

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

Post by XGamer » Fri, 20. Feb 09, 17:28

PS: Ketraar du hast Kommas anstatt Punkten verwendet :P

btt:

Neben den obigen Methoden in einem <do_choose> oder <do_if> den Kampfrang abzufragen und eventuell auch ein <do_all exact="5"> in diesem einzubauen gibt es dafür auch vorgefertigte Libraries von Egosoft welche benutzt werden können. Diese erstellen verschiedene Schiffsklassen (M2, M3, etc) abhängig vom Kampfrang des Spielers und Schwierigkeitsgrad der Mission.

greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 1/10 (point for split ships and stations, 3.20 still so many hair pulling annoying issues...)

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

Post by Ketraar » Fri, 20. Feb 09, 17:36

XGamer wrote:PS: Ketraar du hast Kommas anstatt Punkten verwendet :P
Also ich seh keine :-P Edit Funktion ftw

MFG

Ketraar
Image

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

Post by XGamer » Fri, 20. Feb 09, 18:34

Pfft :P

nächstesmal gibts nen QFT :P

greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 1/10 (point for split ships and stations, 3.20 still so many hair pulling annoying issues...)

User avatar
TGG
Posts: 1100
Joined: Sun, 19. Oct 08, 00:45
x4

Post by TGG » Tue, 10. Mar 09, 22:21

Hallo,
hoffendlich bin ich hir richtig.
Ich suche Background ID für Sektorhindergrund.
Und zwar wenn mann im Spiel den unvogusierten Sprungantrieb der Goner benutzt springt mann immer in den Unbekannten Sektor (19/23 oder 23/19 ) und das Aussehen des Sektor wird zufalsgenneriert. Jedenfalls wird da oft als Hintergrund die Galaxy - Milchstrasse aus verschiedenen Blickwinkeln gezeigt. So das mann den eindruck gewind im lehren Raum zwischen den Galaxyn zu sein.
Und zu diesen Hinderdrund suche ich die ID für Sektorneuerstellung.
Kann mir da jemand weiter helfen ?

gruss
Image
TGG ( Terra Ghost Gesellschaft )

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

Post by XGamer » Tue, 10. Mar 09, 23:08

Du bist hier zwar völlig falsch aber naja.

Du kannst im Galaxyeditor die einzelnen Sektorhintergründe durchschalten. Mach das einfach solange bis du den richtigen gefunden hast und du hast dessen ID.

Alternativ könnte das hier funktionieren (dann währst du hier sogar richtig :P)

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="Sector Background Debug" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">
  <cues>
    <cue name="XGDBG001" instantiate="static">
      <condition>
        <object_changed_sector/>
      </condition>
      <action>
        <do_all>
              <incoming_message author="XGamer Debug Services" text="Sektor {player.sector.name}: Background ID: {player.sector.background}" popup="1"/>
        </do_all>
      </action>
    </cue>
  </cues>
</director>
Kopieren, als .xml Datei im director Ordner von TC speichern, spielen und Sektor wechseln.

PS: Kauf dir mal nen Duden... ist ja schrecklich...

greetz
XGamer
X:BtF: 7/10 | X2: 8/10 | X3:R/TC/AP: 8/10 | X:R: 3/10 | X4: 1/10 (point for split ships and stations, 3.20 still so many hair pulling annoying issues...)

User avatar
TGG
Posts: 1100
Joined: Sun, 19. Oct 08, 00:45
x4

Post by TGG » Wed, 11. Mar 09, 00:07

@XGamer

danke für das Script :thumb_up: . Und ein Duden, kammst mir ja schenken :P .

mfg
Image
TGG ( Terra Ghost Gesellschaft )

User avatar
Generalwest
Posts: 2718
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Fri, 13. Mar 09, 14:46

XGamer wrote:
Ketraar wrote:
Raylon wrote:1. Was muss ich machen, damit die Story direkt zu Beginn eines Spielstarts aktiviert wird, aber auch nur, wenn man diesen bestimmten spielstart gewählt hat?
Alle MD Dateien werden sofort geladen, was dann ausgeführt wird steuerst du mit den conditions. Es gibt aber keinen Check für den Spielstart, hier musst du auf Umwege eine Aktivierung verhindern.
doch gibt es ;)

Code: Select all

player.gamestart
greetz
XGamer
wie setz ich den befehl eig. ein? <player.gamstart exact="*startid*"/> wird dann ein <cue> erzeugt? oO oder gleicht der befehl einer if abfrage :?

ein beispiel Anwendung wäre von großen vorteil

geht das so?

<cues>
<cue name="123">
<condition player.gamestart exact="*startid"*/>
...
</condition>
</cues>
Image

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

Post by Ketraar » Fri, 13. Mar 09, 17:24

Code: Select all

    <cue name="Mycue">
      <condition>
        <check_value value="{player.gamestart}" exact="123"/>
      </condition>
    </cue>
So. :)

MFG

Ketraar
Image

User avatar
Generalwest
Posts: 2718
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Fri, 13. Mar 09, 18:45

hmm thx und wenn danach was kommen soll mach ich einfach

Code: Select all

<cue name="Mycue">
      <condition>
        <check_value value="{player.gamestart}" exact="123"/>
               ....weiteres....
      </condition>
    </cue>
oder ist das schwerer?

Die guten alten if´s wo sind sie nur hin? :)
Image

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

Post by Ketraar » Fri, 13. Mar 09, 19:10

nunja du kannst auch mehrere conditions einbauen dafür muss aber zusätzlich noch was eingetragen werden.

1.

Code: Select all

      <condition>
        <check_all>
          <check_value value="" exact=""/>
          <check_age value="" min=""/>
        </check_all>
      </condition>
      <action>
        ....
      </action>
    </cue>
Hier müssen alle conditions passen, wobei wenn die erste nicht passt, wird die zweite nicht gecheckt (von oben nach unten), hier könne etliche checks eingefügt werden, wobei man bedenken soll, dass je mehr man (force)checkt, desto geringer sind die Chancen, das es zutrifft. Vorsicht mit Event-Conditions, wenn die in einem multiple check drinn sind, muss man sich versichern, das der event mit der anderen condition passt. 2 events können so nicht gecheckt werden.

-------------------------
2.

Code: Select all

    <cue name="Mycue">
      <condition>
        <check_any>
          <check_value value="" exact=""/>
          <check_age value="" min=""/>
        </check_any>
      </condition>
      <action>
        ....
      </action>
    </cue>
Hier wird die action aktiviert sobal irgendeine der coditions zutrifft. trifft die erste so werden alle anderen ignoriert und die action aktiviert. Trift die erste nicht zu, wird die nächste gecheckt, trifft keine zu fängt es wieder von vorne an.
------------------------

3.

Code: Select all

    <cue name="Mycue">
      <condition>
        <check_all>
          <check_value value="" exact=""/>
          <check_any>
            <check_age value="" min=""/>
            <check_distance value="" max=""/>
            <player_station_count typename="SS_FAC_A_AMMO" min="1"/>
          </check_any>
        </check_all>
      </condition>
      <action>
        ....
      </action>
    </cue>
In diesem Fall muss die erste condition und irgendeine der anderen im check_any passen, wobei hier der check_any im check_all als einzelne codition gilt, die wie die anderen zutreffen muss (was auch geschieht sobald eine der conditions im check_any stimmt).

Hoffe das war verständlich.

MFG

Ketraar

[EDIT]
Die guten alten if´s wo sind sie nur hin?

Code: Select all

<action>
        <do_if value="{player.age}" min="125">
          <create_ship>
            ...
          </create_ship>
        </do_if>
      </action>
oder

Code: Select all

<action>
        <do_choose>
          <do_when value="{object.cargo.SS_WARE_ENERGY.count@{player.ship}}" min="0" max="50">
            <add_cargo>
              ...
            </add_cargo>
          </do_when>
          <do_when value="{object.cargo.SS_WARE_ENERGY.count@{player.ship}}" min="51" max="150">
            <add_cargo>
              ...
            </add_cargo>
          </do_when>
          <do_when value="{object.cargo.SS_WARE_ENERGY.count@{player.ship}}" min="151" max="1500">
            <add_cargo>
              ...
            </add_cargo>
          </do_when>
          <do_otherwise>
            <add_cargo>
              ...
            </add_cargo>
          </do_otherwise>
        </do_choose>
      </action>
Genug? :P
Image

User avatar
Generalwest
Posts: 2718
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Fri, 13. Mar 09, 20:13

das was ich wissen wollte hast du erfolgreich übersprungen aber da du es sehr ausführlich gemacht hast hab ich schon gefunden wonach ich gesucht hab :P

condition tag sind die bedingungen gelistet also if ^^ und im action teil sind die tu dies und mach das sachen. das alles in ein cue packen und gut oder?

Sinnbeispiel:

(<cue name="Kreethar">)
(<condition>)
$plt= get plying time (stimmt so nicht dient aber dem verständniss)

if plt == 200
(</codition>)

(<action>)
creat station hausdampfkraftwerk
creat schiff/astro oder fliege nach heimat des unglücks
end
(</action>)
(</cue>)
viele der oben genannten befehle sind frei erfunden und sollen nur mir als Eselsbrücken dienen. :roll:

irwie hab ich mir das schwerer vorgestellt. (hat auch nie die zeit mir das genauer anzusehen)

den unterschied zwischen du_if und do_when würde mich noch interessieren do_when wenn do_if FALSE?

gesteuerte schleifen wäre sicher auch son punkt so ala
$n == 200
while $n
dec $n = usw.
Image

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

Post by Ketraar » Fri, 13. Mar 09, 20:28

Generalwest wrote:das was ich wissen wollte hast du erfolgreich übersprungen
Siehe 1-3 :roll:

@Sinn
Yup im Sinn passt das.
irwie hab ich mir das schwerer vorgestellt.
Tun die meisten ;-)
den unterschied zwischen du_if und do_when würde mich noch interessieren
ein do_if wird nur ausgeführt wenn es stimmt (TRUE), sonst wird ignoriert.
Ein do_choose besteht ja aus mehreren do_when und ein do_otherwise, was dann sicherstellt das eine der Optionen immer zutrifft ;-)
gesteuerte schleifen wäre sicher auch son punkt so ala
$n == 200
while $n
dec $n = usw.
gesteuerte Schleifen gibt es in dem sinn nicht, was änhnliches wäre

Code: Select all

      <action>
        <do_all counter="Mycounter" exact="{object.cargo.SS_WARE_ENERGY.count@{player.ship}}">
          <!-- action -->
        </do_all>
      </action>
oder

Code: Select all

      <action>      
        <do_all exact="125">
          <!-- action -->
        </do_all>
      </action>
MFG

Ketraar
Image

User avatar
Generalwest
Posts: 2718
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest » Fri, 13. Mar 09, 20:45

Ketraar wrote:
Generalwest wrote:das was ich wissen wollte hast du erfolgreich übersprungen
Siehe 1-3 :roll:
[/quote]

ok ich seh grad das ich mich extrem unglücklich ausgedrückt hab mein Fehler. Was ich eig wollte war, wenn die Bedingung in codition zutrifft das er was bestimmtes tun soll.
@Sinn
Yup im Sinn passt das.
thx

das mit <do_all counter="Mycounter" exact""> hab ich verstanden. wenn ich es beispielsweise global laufen lassen will beispielsweise <creat_ship...> dann wäre es nicht wirklich gut wenn es auf {object.cargo.SS_WARE_ENERGY.count@{player.ship}} läuft. aber ist der md "Strang" (String) nicht darauf ausgelegt eine bestimmte Ware den maximal wert wieoft eine ware in den ladereaum passt zu ermitteln?

Wäre das dan so theoretisch richtig

Code: Select all

<do_all counter="xyz" exact="23">
<creat_station..../>
</do_all>
dann müsste es doch von meinem Verständnis her 23 Stationen erzeugen
*yxz ist der Name des Counters*
Image

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

Post by Ketraar » Fri, 13. Mar 09, 21:46

Generalwest wrote:das mit <do_all counter="Mycounter" exact""> hab ich verstanden. wenn ich es beispielsweise global laufen lassen will beispielsweise <creat_ship...> dann wäre es nicht wirklich gut wenn es auf {object.cargo.SS_WARE_ENERGY.count@{player.ship}} läuft.
Ich hab da nur ne zufalls variable genommen, woher du die Zahl nimmst, ist dir überlassen, kannst auch direkt ne Zahl eingeben.
Und Global/lokal gibts im MD nur für Objekte und Values. Ein counter ist immer lokal (dem do_all zugewiesen)
aber ist der md "Strang" (String) nicht darauf ausgelegt eine bestimmte Ware den maximal wert wieoft eine ware in den ladereaum passt zu ermitteln?
Nein, nicht direkt. sowas würde dann so aussehen

Code: Select all

<set_value name="this.amountvalue" exact="({object.cargospace@{player.ship}}/{lookup.type.cargospace@SS_WARE_ENERGY}-1)"/>
dann hast du eine value mit der Mange an EZ die in dein Schiff passen. (das -1 ist nur zur sicherheit ;-))

Du kannst aber auch

Code: Select all

          <add_cargo>
            <ware exact="1589525" typename="SS_WARE_ENERGY"/>
          </add_cargo>
benutzen, wobei dann nur soviel eingeladen wird wie es platz hat.
Wäre das dan so theoretisch richtig

Code: Select all

<do_all counter="xyz" exact="23">
<creat_station..../>
</do_all>
dann müsste es doch von meinem Verständnis her 23 Stationen erzeugen
*yxz ist der Name des Counters*
Yo wobei der counter nur dann wichtig ist, wenn du eine Durchnummerierung brauchst.

MFG

Ketraar
Image

Post Reply

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