[gamestart] Spielstart mit bereits erkundetem Universum erstellen

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

s.o.p.
Posts: 35
Joined: Wed, 6. Nov 02, 20:31
x4

[gamestart] Spielstart mit bereits erkundetem Universum erstellen

Post by s.o.p. »

Wie wärs mit einem GAMESTART, bei dem das Universum schon erkundet ist?

So gehts:
- nachfolgenden Code in die start.xml als erste "cue" einfügen
- unter "<condition>" die ID "900" entsprechend anpassen

Was passiert?
- alle existierende Sektoren mit Torverbindungen werden der Galaxiekarte hinzugefügt
- alle Tore, Stationen und Asteroiden sind sichtbar
- alle Asteroiden sind gescannt

Code: Select all

<!-- Reveal Universe -->
<cue name="reveal_universe">
  <condition>
    <check_all>
      <check_value value="{player.gamestart}" exact="900"/>
    </check_all>
  </condition>
  <action>
    <do_all exact="22" counter="Xcount">
      <do_all exact="17" counter="Ycount">
        <set_value name="this.Xcounter" exact="{counter@Xcount}-1"/>
        <set_value name="this.Ycounter" exact="{counter@Ycount}-1"/>
        <find_sector name="this.sector" x="{value@this.Xcounter}" y="{value@this.Ycounter}"/>
        <do_if value="{sector.exists@this.sector}" exact="1">
          <find_gate group="this.gates" multiple="1" max="6">
            <sector sector="this.sector"/>
          </find_gate>
          <set_value name="this.Gcounter" exact="{group.object.count@this.gates}"/>
          <do_if value="{value@this.Gcounter}" min="1" max="4">
            <add_map>
              <sector sector="this.sector"/>
            </add_map>
            <find_station group="this.stations" multiple="1" max="30">
              <sector sector="this.sector"/>
            </find_station>
            <find_asteroid group="this.asteroids" multiple="1" max="200">
              <sector sector="this.sector"/>
            </find_asteroid>
            <set_group_known group="this.gates" known="1"/>
            <set_group_known group="this.stations" known="1"/>
            <set_group_known group="this.asteroids" known="1"/>
            <set_group_scanned group="this.asteroids" scanned="1"/>
          </do_if>
          <remove_group group="this.gates"/>
        </do_if>
      </do_all>
    </do_all>
  </action>
</cue>
Natürlich geht das Ganze auch per Skript. Das wissen wir ja alle.

Viel Spaß
s.o.p.
Hi,

ich möchte mir einen Spielstart mit aufgedecktem Universum erstellen. Als Argonischer Agent greift man natürlich auf Geheimdienstinformationen zurück, um nicht ganz bei Null anfangen zu müssen. :)

Der Spielstart als solcher funktioniert soweit, nur das Aufdecken des Universums klappt nicht.

Um nicht die entsprechenden Daten für jeden einzelnen Sektor in die start.xml einfügen zu müssen (was bei etwa 2000 Zeilen durchaus funktionieren würde), habe ich stattdessen folgenden Code geschrieben:

Code: Select all

<!-- Reveal Universe -->
<cue name="reveal_universe">
  <condition>
    <check_value value="{player.gamestart}" exact="900"/>
  </condition>
  <timing>
    <count exact="22" comment="X coordinate of universe map"/>
  </timing>
  <action>
    <do_all exact="17" counter="this.Ycount" comment="Y coordinate of universe map">
      <find_sector name="this.sector" x="{index@this}-1" y="{this.Ycount}-1"/>
      <do_if value="{sector.exists@this.sector}" exact="1">
        <find_gate group="this.gates" multiple="1" max="6">
          <sector sector="this.sector"/>
        </find_gate>
        <do_if value="{group.object.count@this.gates}" min="1">
          <add_map>
            <sector sector="this.sector"/>
          </add_map>
          <find_station group="this.stations" multiple="1" max="30">
            <sector sector="this.sector"/>
          </find_station>
          <find_asteroid group="this.asteroids" multiple="1" max="200">
            <sector sector="this.sector"/>
          </find_asteroid>
          <set_sector_known sector="this.sector" known="1"/>
          <set_group_known group="this.gates" known="1"/>
          <set_group_known group="this.stations" known="1"/>
          <set_group_known group="this.asteroids" known="1"/>
          <set_group_scanned group="this.asteroids" scanned="1"/>
        </do_if>
      </do_if>
    </do_all>
  </action>
</cue>
Er funktioniert leider nicht; wie gewohnt befindet sich nur der Startsektor in der Unikarte.

Ich habe bis jetzt keinerlei Erfahrung mit SE und MD gemacht.

Wo liegt der Fehler? Kann mir bitte jemand helfen?

s.o.p.
Last edited by s.o.p. on Fri, 22. Oct 10, 15:34, edited 2 times in total.
User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 12182
Joined: Fri, 21. May 04, 17:15
x4

Post by Ketraar »

Hier mal ein paar generelle Anmerkungen zu deinem Wunsch:
  • Du wirst nicht drumherum kommen jeden Sektor einzeln zu referenzieren.
  • Auch nach dem aufdecken der Sektoren fehlen denen die Objekte, heisst du musst die Tore und Stationen genau gleich "von Hand" abklappern, heisst nutzen = praktisch null.
  • Es wäre um einiges einfacher hierfür ein SE script zu benutzen, dabei gibt es bereits welche die genau das tun. Alternativ kann man auch einfach nach Spielstart den den im Cheatpack enthaltene "decke alles auf cheat" zu benutzen, erspart das coden.
Solltest du das trotzdem im MD machen wollen, solltest du dir erst dieses und dieses Thema durchlesen.

MFG

Ketraar

EDIT: Post etwas entschärft, war doch bissi viel humpf drin.
Image
User avatar
Jens Ka
Posts: 468
Joined: Thu, 18. Jan 07, 15:32
x4

Post by Jens Ka »

Da Ketraar Sachn Grundlagen durch habt noch paar Kleinlichkeit was den code an geht.

Code: Select all

<set_sector_known sector="this.sector" known="1"/>
Die Zeile existiert im MD gar nicht kann also nicht funktionieren.

Dann zu der Geschichte mit dem counter this. ist da fehl am platze counter bleiben immer im cue sind also immer lokale Abläufe.

Du kannst auch zwei do_all counter in einer cue Action einbauen gehen sogar noch mehr.

Code: Select all

<action>
        <do_all exact="23" counter="Xcount">
          <do_all exact="19" counter="Ycount">
            
          </do_all>
        </do_all>
      </action>
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
|K.O.S.H.
Posts: 3728
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. »

mach doch eifnahc n script, dass in jedme sektor nen sateliten baut und wieder zerstört
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

oder noch besser:
nutz doch die bereits vorhandene möglichkeit, Sektoren bekannt zu machen.. es hat nie jemand verlangt, dass du das alles von Hand eintippen musst -> nimm einfach ne Tabellenkalkulation und damit kannst du dann die ganzen Zahlen lang ziehen.. anschliessend Kopieren (vorher evtl. als Textdatei mit passender Formatierung speichern und daraus kopieren) und in deine xml einfügen..[/code]
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
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

ich glaub wenn mans via SE Script macht und bei 0|0 anfängt und ne while grenze ist das denke ich um einiges einfacher und angenehmer. Bei bedarf Post ich das was ich da so nutze.
User avatar
Lucike
Posts: 12969
Joined: Sun, 9. May 04, 21:26
x4

Post by Lucike »

Code: Select all

001   $PosX = get max sectors in x direction
002   while $PosX
003   |dec $PosX = 
004   |$PosY = get max sectors in y direction
005   |while $PosY
006   ||dec $PosY = 
007   ||$Sector = get sector from universe index: x=$PosX, y=$PosY
008   ||skip if $Sector -> exists
009   |||continue
010   ||$Sector -> set known status to [TRUE]
011   ||
012   ||$Array.Station = $Sector -> get station array from sector
013   ||$While =  size of array $Array.Station
014   ||while $While
015   |||dec $While = 
016   |||$Station = $Array.Station[$While]
017   |||skip if not $Station -> exists
018   ||||$Station -> set known status to [TRUE]
019   ||end
020   ||
021   ||$Array.Asteroid = $Sector -> get asteroid array from sector
022   ||$While =  size of array $Array.Asteroid
023   ||while $While
024   |||dec $While = 
025   |||$Asteroid = $Array.Asteroid[$While]
026   |||skip if $Asteroid -> exists
027   ||||continue
028   |||$Asteroid -> set known status to [TRUE]
029   |||$Asteroid -> set asteroid scanned to [TRUE]
030   ||end
031   ||
032   ||$GateID = 4
033   ||while $GateID
034   |||dec $GateID = 
035   |||$Gate = $Sector -> get warp gate: gate id=$GateID
036   |||skip if not $Gate -> exists
037   ||||$Gate -> set known status to [TRUE]
038   ||end
039   ||
040   |end
041   end
042   return null
http://www.lucike.info/x3_terran_confli ... .known.xml
(Anklicken -> anschauen / Ziel speichern unter -> runterladen)

Image
s.o.p.
Posts: 35
Joined: Wed, 6. Nov 02, 20:31
x4

Post by s.o.p. »

@ Jens Ka
Da ist ja die verschachtelte Schleife im MD! Vielen Dank, hab sie schon verzweifelt gesucht... :)

@ Lucike
Danke für den Skriptcode. Sollte ich mal den SE anwerfen wollen, werde ich mir eh deine Skripte als Tutorial vornehmen. Jedenfalls sieht der Code schon mal eher nach Programmiersprache aus. Aber ich will es ja auch nicht anders... :roll:

@ Ketraar
Hättest du den Code mal gelesen anstatt ihn nur anzuschauen, wäre aus dem EDIT ein DELETE geworden... :!:
s.o.p.
Posts: 35
Joined: Wed, 6. Nov 02, 20:31
x4

Post by s.o.p. »

So, jetzt klappt das auch als MD-Code... (siehe Eröffnungsbeitrag)

Danke an alle für die Hilfe.

s.o.p.

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