Marines scripten

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
Addi1990
Posts: 44
Joined: Fri, 24. Jun 11, 15:46
x3tc

Marines scripten

Post by Addi1990 » Wed, 1. Apr 15, 12:28

Hallo,

ich wollte mal fragen, ob mir jemand sagen kann, wie man sich einen Passagier ins Schiff scriptet und den dann zu einem voll ausgebildeten Marine werden lässt? Bzw. wie kann ich einen Marine scripten, der ein Terraner ist und den Namen trägt, den ich ihm gegeben habe.

Danke euch für Tipps im Voraus.

Viele Grüße,

Addi1990

User avatar
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 24965
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus » Wed, 1. Apr 15, 14:01

Nun verfügbar! X3: Farnham's Legacy - Ein neues Kapitel für einen alten Favoriten

Die komplette X-Roman-Reihe jetzt als Kindle E-Books! (Farnhams Legende, Nopileos, X3: Yoshiko, X3: Hüter der Tore, X3: Wächter der Erde)

Neuauflage der fünf X-Romane als Taschenbuch

The official X-novels Farnham's Legend, Nopileos, X3: Yoshiko as Kindle e-books!

Addi1990
Posts: 44
Joined: Fri, 24. Jun 11, 15:46
x3tc

Post by Addi1990 » Wed, 1. Apr 15, 17:34

Danke erstmal. Da steht nun folgender Code:

$i = 0
$passenger.arr = [PLAYERSHIP] -> get passenger array
$size.passenger.arr = size of array $passenger.arr
while $i < $size.passenger.arr
|$passenger = $passenger.arr[$i]
|$passenger -> create marine from passenger: fighting=10 hacking=0 mechanical=0 engineering=0
|inc $i =
end
return null


Ist wirklich jede Zeile genau so zu übernehmen und vor allem, wie schreib ich die? Also wo die "create marine from passenger" zeile ist, weiß ich, aber der Rest, von dem hab ich keine Ahnung.

LG, Addi

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Wed, 1. Apr 15, 18:02

i = 0 ... ist n ausdruck, kann beliebig lang werden, befehl <retvar/if> expression unter general commands
selbiges gilt für die while zeile
das element aus dem array fragst du über die zeile <> = <> [<>] ab, steht unter general commands\arrays
selbiges gilt für die abfrage <> sizeof array<>
die inc zeile unter general commands, die end zeile unter general commands\flow comtrol
selbiges gilt für das return <> (wird beim schließen/speichern automatisch hinzugefügt)
den get passenger pefehl findet mal afaik unter trade cmds\ for pilots

generell: dieses script fragt die passagierliste in deinem schiff ab, erzeugt selbst keine passagiere
dazu findest du entspr. befehle (afaik) unter general object commands\create ... evtl irgendwo unter trade cmds

wenn du vor der zeile "create marine from passenger" 4 weitere zeilen der form:
R1 = random value from 0 to 101-1
R2 = random value from 0 to 101-1
R3 = random value from 0 to 101-1
R4 = random value from 0 to 101-1
hinzufügst, kannste die skills auch etwas zufällig variieren lassen
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

Addi1990
Posts: 44
Joined: Fri, 24. Jun 11, 15:46
x3tc

Post by Addi1990 » Wed, 1. Apr 15, 18:22

Danke hat geklappt. Passagier erstellen hatte ich bereits hinbekommen.

Wenn ich nun z.B. in irgend eines meiner Schiffe einen Piloten setzen möchte oder in irgend eine Station, den ich dann sehen und auch anfunken können möchte, wie mache ich das dann?

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Wed, 1. Apr 15, 18:50

eigene piloten kann man nicht anfunken, nur npcs (non-player-characters) lassen sich ansprechen
sobald erstellt, muss man den pilot in ein object setzen, dann weden automatisch die "standard" comms options:
1. wo ist die nächste werft ?
2. // ausrüstungsdock ?
3. gib auf !?
hinzugefügt, wenn du weitere kommunikarionsmöglichkeiten hinzufügen willst, dann ist der script editor das falsche tool
=> mission director (MD) nennt sich die "sprache", mit der man charaktere erschafft, die auch andere sachen "kommunizieren" können, ist xml-basiert & wesentlich unverständlicher (zu beginn)
so geht's ...
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

Addi1990
Posts: 44
Joined: Fri, 24. Jun 11, 15:46
x3tc

Post by Addi1990 » Wed, 1. Apr 15, 19:09

Mit was für einem Script erstelle ich einen NPC, den ich in eine Station oder ein Schiff stecken kann um mit ihm die Standardkommunikation durchführen zu können?

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Wed, 1. Apr 15, 20:08

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">

  <cues>
    <cue name="wasweisich">
      <action>
        <do_all>
          <find_station name="this.station" class="equipment">
            <sector sector="{player.sector}"/>
          </find_station>
          <create_actor name="this.actor" character="JSDD" race="argon" face="126" voiceflags="32" object="this.station" location="crew"/>
          <remove_actor actor="this.actor"/>
          <cancel_cue cue="wasweisich"/>
        </do_all>
      </action>
    </cue>
  </cues>
  
</director>
erstellt ein npc namens JSDD an dem ausrüstungsdock im spielersektor
den code kopierste in eine leere datei, speicherst diese als xxxxxxx.xml & legst sie im ordner "director" ab (im install-verzeichnis, also da wo auch "scripts" "t" etc liegen)

anstelle von find_station kann man auch find_ship nehmen, dann wird der mpc auf nem schiff erstellt (sollte ein GKS sein, weil es ein crew mitglied ist, kein pilot)
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

Addi1990
Posts: 44
Joined: Fri, 24. Jun 11, 15:46
x3tc

Post by Addi1990 » Wed, 1. Apr 15, 20:39

Danke dir, werd ich gleich mal ausprobieren.

bei cue hast du geschrieben, "wasweisich" :-D was bedeutet das, bzw. was kann man da reinschreiben?

Wenn ich möchte, dass er auf meiner eigenen Station, die ich in "xyz xyz" umbenannt habe, im Sektor Mars gespawnt wird, dann schreib ich z.B.

<find_station name="xyz xyz" class="?">
<sector sector="{Mars}"/>

Ungefähr so? Bei Class weiß ich nicht was da reingehört

Und wenn er auf meiner Kolossus gespawnt werden soll, die ich in "xyz xyz" umbenannt habe und die derzeit im Sektor Mond steht, dann ungefähr so?:

<find_ship name="xyz xyz" class="M1">
<sector sector="{Mond}"/>

Wird der dann immer nur gespawnt, wenn dieses Schiff im Sektor Mond aufkreuzt? Oder wird der einmal auf diesem Schiff gespawnt und bleibt dann da? Falls nicht, wie muss ich das schreiben, wenn der immer auf meiner Kolossus bleiben soll?

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Wed, 1. Apr 15, 23:37

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">
  
  <!--...-->
  <cues>
    <cue name="mytestactor">
      <action>
        <do_all>
          <!--finde alle spieler stationen im aktuellen spielersektor-->
          <find_station group="this.gruppevonstationen" race="player" multiple="1" max="99">
            <sector sector="{player.sector}"/>
          </find_station>
          <!--loop ueber alle objekte in der gruppe-->
          <do_all exact="{group.object.count@this.gruppevonstationen}" counter="c1">
            <!--pruefe objekt name-->
            <do_if value="{object.name@{group.object.{counter@c1}@this.gruppevonstationen}}" exact="xyz xyz">
              <!--station gefunden: erstelle npc-->
              <create_actor name="this.actor" character="JSDD" race="argon" face="126" gender="male" voiceflags="32" object="{group.object.{counter@c1}@this.gruppevonstationen}" location="crew"/>
              <!--erstelle comms option: verkaufen sie etwas? mit 2 optionsmoeglichkeiten-->
              <create_offer cue="mytestactor" actor="this.actor" conversation="L2OfferBuy2">
                <params>
                  <param name="Option1" value="... erste auswahl"/>
                  <param name="Price1" value="... 50Cr."/>
                  <param name="Option2" value="... zweite auswahl"/>
                  <param name="Price2" value="... 400Cr."/>
                </params>
              </create_offer>
              <!--erstelle comms option: benutzerdefiniert mit 1 optionsmoeglichkeiten-->
              <create_offer cue="mytestactor" actor="this.actor" conversation="L2OfferBuyCustom1">
                <params>
                  <param name="OfferText" value="benutzerdefinierterTEXT\n\nxxxxx"/>
                  <param name="Option1" value="... sonstiges"/>
                  <param name="Price1" value="... 77Cr."/>
                </params>
              </create_offer>
              <incoming_message popup="1" text="...hat geklappt"/>
            </do_if>
          </do_all>
        </do_all>
      </action>
    </cue>
  </cues>
  
</director>
das attribut name="usw" hat nix mit dem objektnamen zutun, ist eher sowas wie variablenname
wenn ich da z.B. "this.fab" hinschreib, dann bedeutet das:
--> speicher die variable lokal im aktuellen cue unter der referenz "fab"
(wobei fab natürlich frei erfunden/wählbar ist, solange es nicht doppelt vorkommt)
(der punkt trennt zwischen cuename und variable, ergo hat der ne bedeutung, also nie variablennamen mit punkten setzen!)

alternativ hätte ich schreiben können: "mytestactor.fab" ist dasselbe wie "this.fab"

der obige code erstellt einen npc (= "actor") dem 2 comm optionen hinzugefügt werden, dieser npc bleibt bestehen solange deine station existiert, der "spawnt" also nur 1 mal, dann existiert er wie jedes andere objekt
seine comms optionen hab ich nicht weiter vervollständigt bzw. mit "leben" gefüllt, aber wenn der was tun soll, wenn man ihn anfunkt, kann man das auch scripten
=> siehe oben verlinkte videos ;)

als beispiel:
man könnte ihn beauftragen, alle schiffe im hangar zu reparieren
man könnte ihn beauftragen, alle schiffe im hangar mit software auszurüsten
... usw ... also alles, was scripttechnisch möglich ist
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

Post Reply

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