Script für (zufällig verteilte) Herrenlose Schiffe?

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
Berni
Posts: 515
Joined: Sun, 15. Feb 04, 13:52
x4

Script für (zufällig verteilte) Herrenlose Schiffe?

Post by Berni » Thu, 26. Feb 15, 16:56

Hallo, da ich mit der Suche nicht fündig werde, frage ich hier mal nach:

Gibt es bereits ein Script, mit dem man herrenlose Schiffe erstellen kann?

Mit dem create ship command bekomme ich einfach keine Schiffe ohne Piloten hin, die man wie früher finden und übernehmen kann :(


Ich würd mir gern wieder ein paar Schiffchen "verstecken" lassen, weil die Suche früher ganz lustig war ;)

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Thu, 26. Feb 15, 17:16

sollte mit create ship klappen, man braucht nur den richtigen owner (gibt da iirc einen speziell dafür) ;)
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 ;)

Berni
Posts: 515
Joined: Sun, 15. Feb 04, 13:52
x4

Post by Berni » Thu, 26. Feb 15, 17:59

Hallo UniTrader, danke erstmal für deine schnelle Antwort^^ :)

...nach ein wenig "rumspielen" hab ich mal herrenlose M3 bekommen:

- ich hab nen feindlichen Piloten (Terraner) reingesetzt und ihn beim erstellen im Script zum Schluss gleich wieder aussteigen lassen ;)

Aber weiter reichen meine Fähigkeiten diesbezüglich nicht - wie kann man nun diese Schiffe random in noch unentdeckten Sektoren auf zufälligen Positionen spawnen lassen (z.b. 50km radius ums Zentrum)


Und an welcher Schraube muss ich drehen, damit auch M2 und M1 Schiffe "übernehmbar" werden?

Gruss

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Thu, 26. Feb 15, 18:36

kurzum wäre der Code sowas (Code aus der erinnerung geschrieben; Befehle können leicht anders heissen):

start: // define label
* Zufälligen Sektor im Uni auswählen (wird so lange wiederholt, bis ein gültiges Koordinatenpaar raus kommt)
$SecX = get max universe x index
$SecX = random value from 0 to $SecX - 1
$SecY = get max universe y index
$SecY = random value from 0 to $SecY - 1
$Sector = get Sectro from Universe Index: x= $SecX y=$SecY
do if $Sector -> exists
| * Ein Schiff an einer zufälligen Position im gefundenen Sektor spawnen
| $X = random value from -50000 to 50001 - 1
| $Y = random value from -50000 to 50001 - 1
| $Z = random value from -50000 to 50001 - 1
| $Ship = create ship: type=<Var/Ship> owner= <Var/Race> addto=$Sector x=$X y=$Y z=$Z
| * Alles weitere was du mit dem Schiff machen willst
else
| * Sektor nicht Existent; nochmal probieren
| goto label start
end
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
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Post by JSDD » Thu, 26. Feb 15, 18:58

bei race muss man "Neutral Race" nehmen
afaik geht das erstellen herrenloser schiffe aber nur bei kleinen schiffen, bigships müssen anders erstellt werden (z.B. nach erstellen pilot aussteigen lassen o.ä.)

via MD bekomm ich's hin, einfach explizit capturable=1 setzen, via script hab ich noch nicht getestet ...
(nachdem man dieses capturable=1 gesetzt hat, lässt sich das schiff im raumanzug übernehmen wie beim goner TLS)

hier noch n link
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

Berni
Posts: 515
Joined: Sun, 15. Feb 04, 13:52
x4

Post by Berni » Thu, 26. Feb 15, 22:04

Huhu, danke euch beiden! :)

Damit werd ich mich jetzt mal beschäftigen^^

Was bedeutet "MD"?

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

Post by JSDD » Fri, 27. Feb 15, 12:49

MD = mission director, grob gesagt ne alternative zum SE (script editor), die schwerpunktmäßig zum erstellen von plots genutzt wird
vorteil: die befehle sind meist etwas genauer beschreibbar
nachteil: eine gewöhnungsbedürftige syntax

beispielcode:

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <!--
  Abandoned Ship Spawner:
  >>> to make also capital ships capturable
  -->

  <cues>

    <cue version="1" name="ABS_System_Instance" instantiate="static" delay="15m">
      <cues>
        <cue ref="ABS_System"/>
      </cues>
    </cue>
    
    
    <cue version="1" library="1" name="ABS_System">
      <action>
        <do_all>
          <set_value name="ABS_System.Race" exact="{random.race@default|pirategroup|terran}"/>
          <set_value name="ABS_System.SubRace" exact="{random.race@default}"/>
          <set_value name="ABS_System.Class" exact="{random.class@m1|m2|m3|m4|m5|m6|m7|m8|tl|tm|ts|tp}"/>
          <find_sector name="ABS_System.Sector" sector="{player.sector}" min="1" max="3"/>
          <do_if value="{sector.exists@ABS_System.Sector}" exact="0">
            <cancel_cue cue="ABS_System"/>
          </do_if>
        </do_all>
      </action>
      <cues>
        <cue version="1" ref="SRST">
          <params>
            <param name="Race ID"           value="{value@ABS_System.Race}"/>
            <param name="Subrace ID"        value="{value@ABS_System.SubRace}"/>
            <param name="Class ID"          value="{value@ABS_System.Class}"/>
            <param name="Cue"               value="ABS_System"/>
            <param name="CancelCue"         value="SRST"/>
            <param name="Shiptype Address"  value="ABS_System.ShipType"/>
            <param name="Include M1P"       value="1"/>
            <param name="Include M2P"       value="1"/>
            <param name="Include M3P"       value="1"/>
            <param name="Include M4P"       value="1"/>
            <param name="Include M5P"       value="1"/>
            <param name="Include M6M"       value="1"/>
            <param name="Include M7M"       value="1"/>
            <param name="Include Unique"    value="1"/>
          </params>
        </cue>
        <cue version="1" name="ABS_System_SelectShip">
          <condition>
            <check_all>
              <cue_cancelled cue="SRST"/>
            </check_all>
          </condition>
          <action>
            <do_all>
              <do_choose>
                <do_when value="{value@ABS_System.ShipType}" exact="0">
                  <cancel_cue cue="ABS_System"/>
                </do_when>
                <do_otherwise>
                  <create_ship name="ABS_System.Ship" typename="{value@ABS_System.ShipType}" race="neutral" capturable="1">
                    <position x="0" y="0" z="0" min="50km" max="100km"/>
                    <sector sector="ABS_System.Sector"/>
                  </create_ship>
                  <do_choose>
                    <do_when value="{object.exists@ABS_System.Ship}" exact="0">
                      <remove_object object="ABS_System.Ship"/>
                      <cancel_cue cue="ABS_System"/>
                    </do_when>
                    <do_when value="{object.type@ABS_System.Ship}" exact="{lookup.type@SS_SH_A_TL}">
                      <destroy_object object="ABS_System.Ship" explosion="0"/>
                      <cancel_cue cue="ABS_System"/>
                    </do_when>
                    <do_otherwise>
                      <run_script task="1" script="JSDD.MD.ABS.Ship.Created">
                        <scriptargs>
                          <scriptvalue datatype="ship" datavalue="{object@ABS_System.Ship}"/>
                        </scriptargs>
                      </run_script>
                      <set_hull object="ABS_System.Ship" min="5" max="30"/>
                      <remove_object object="ABS_System.Ship"/>
                      <cancel_cue cue="ABS_System"/>
                    </do_otherwise>
                  </do_choose>
                </do_otherwise>
              </do_choose>
            </do_all>
          </action>
        </cue>
      </cues>
    </cue>
    
  </cues>
  
</director>
so wollte ich die gleiche geschichte umsetzen ...
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

Berni
Posts: 515
Joined: Sun, 15. Feb 04, 13:52
x4

Post by Berni » Sat, 28. Feb 15, 00:01

Hallo JSDD,

kann ich deinen Beispiel-Code 1:1 übernehmen und ein XML-file draus machen?

Wie gehts dann weiter? In den Director-Ordner verschieben und per Scripteditor im Spiel aufrufen?

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

Post by JSDD » Sat, 28. Feb 15, 00:48

... nicht ganz ... stell dir vor, du spielst sagen wir mal 2 ingame-tage:

2d * 24 h/d * 60min/h * 1ship/15min = 192 ships

nach 2 ingame-tagen wurden also 192 schiffe erstellt ... ist ne ziemliche menge !!
=> cleanup muss her

diese 1ship/15min kommt aus der zeile
<cue version="1" name="ABS_System_Instance" instantiate="static" delay="15m">
...ggf deinen vorstellungen entprechend anpassen

erstell n script (im script editor), nenn es "wasweisdennich.zeitbombe", ersetze "JSDD.MD.ABS.Ship.Created" durch "wasweisdennich.zeitbombe"
dieses script soll folgendes tun:
1. warte ne weile
2. teste ob schiff mittlerweile spieler gehört
3. wenn nicht, zerstöre schiff

außerdem lösche:

Code: Select all

<param name="Include M1P"       value="1"/> 
<param name="Include M2P"       value="1"/> 
<param name="Include Unique"    value="1"/> 
ersetze:

Code: Select all

<run_script task="1" script="wasweisdennich.zeitbombe">
<scriptargs>
<scriptvalue datatype="ship" datavalue="{object@ABS_System.Ship}"/>
</scriptargs>
</run_script> 
durch folgenden 1zeiler: (EDIT: code verbessert)

Code: Select all

<run_script task="1" taskid="7777" object="{object@ABS_System.Ship}" script="wasweisdennich.zeitbombe"/>
in deinem script "wasweisdennich.zeitbombe" kannst du mit der konstanten [THIS] arbeiten, welches das schiff entspricht
vereinfacht könnte das so aussehen:

Code: Select all

time = random value from 30 to 120-1
time = time * 60 * 1000
@wait time ms
skip if [OWNER] == Player
... [THIS] -> jump out of existence
return null
ansonsten ... jepp, einfach den text in ne xml reinkopieren & file in den ordner \director\
ausführen brauchst du da nix, md-files führen sich selbstständig automatisch aus ;)

ps:
<position x="0" y="0" z="0" min="50km" max="100km"/>
bedeutet mindestens 50km maximal 100km entfernt von sektormitte wird schiff gespawnt
=> lieber etwas verkleinern statt vergeblich zu suchen :P

<set_hull object="ABS_System.Ship" min="5" max="30"/>
setzt die schiffshülle auf 5% .. 30% (soll ja n wrack sein)

falls es dir nicht passt, dass auch m1/m2 etc gespawnt werden:
<set_value name="ABS_System.Class" exact="{random.class@m1|m2|m3|m4|m5|m6|m7|m8|tl|tm|ts|tp}"/>
hier ggf klasse löschen
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

Berni
Posts: 515
Joined: Sun, 15. Feb 04, 13:52
x4

Post by Berni » Sat, 28. Feb 15, 03:38

Hey danke dir, dass du dir die Zeit nimmst und alles so ausführlich erklärst! :thumb_up:


...eigentlich würds mir ja reichen (evtl. geht auch im Scripteditor), wenn 1 Schiff "versteckt" wird :)

Das wäre ein M2 aus dem Xtra-Shippack, die Daedalus^^

Muss halt dann übernehmbar sein ;)

Schönes Wochenende wünsch ich dir

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

Post by JSDD » Sat, 28. Feb 15, 04:28

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

  <cues>
    <cue name="hghgxcfxcgmfkjhnj">
      <action>
        <do_all>
          <find_sector name="this.sector" min="1" max="99"/>
          <do_if value="{sector.exists@this.sector}" exact="1">
            <create_ship name="this.ship" typename="SS_SH_A_M1" race="neutral" capturable="1">
              <position x="0" y="0" z="0" min="40km" max="60km"/>
              <sector sector="this.sector"/>
            </create_ship>
            <incoming_message text="... {object.type.name@this.ship} created in sector {object.sector.name@this.ship}..." popup="1"/>
            <remove_object object="this.ship"/>
          </do_if>
          <remove_sector sector="this.sector"/>
          <cancel_cue cue="hghgxcfxcgmfkjhnj"/>
        </do_all>
      </action>
    </cue>
  </cues>
  
</director>
erstellt 1x argon colossus (SS_SH_A_M1) in nem zufälligen sektor & gibt gleich noch ne message aus in der steht, wo gespawnt wurde
// nach erfolgreichem testen einfach die <incoming_message> zeile löschen
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

Berni
Posts: 515
Joined: Sun, 15. Feb 04, 13:52
x4

Post by Berni » Sat, 28. Feb 15, 10:40

Perfekt! :D

Funktioniert super, vielen, vielen Dank^^

...zusammen mit den gemoddeten Strahlenwaffen, die jetzt wie lange Lichtschwerter aussehen, macht X3 wieder richtig gut Laune ;)


Jetzt muss ich mir nur noch anschauen, wie ich die Texturen bei den Schiffen "tauschen" kann, damit ein paar ältere (Mod)Schiffe wieder in neuem Glanz erstrahlen :)

Post Reply

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