Raumfliegen per Script/Mod entfernen

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

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Raumfliegen per Script/Mod entfernen

Post by |K.O.S.H. » Fri, 19. Jan 18, 08:30

Hallo,

ich habe seit längerem das Problem, dass mein SINZA nicht mehr richtig funktioniert.
Mein Savegame ist 10 Jahre alt und es hat sich wohl so einiges angesammelt.

Bei der Suche nach dme Schuldigen bin ich auf das Script blabla.follow.Spacefly aufmerksam geworden. Das läuft über 6000 mal.
Es sind also über 6000 Raumfliegen im Universum unterwegs.

Diese wollte ich per Script entfernen, habe jedoch das Problem, dass man den Shiptype Raumfliege nicht im Editor auswählen kann.
Man kann sie also nicht wegscripten.


Kennt jemand ne Alternative, die Viecher irgendwie per Script zu erfassen?

Ich bin auch für jeden anderen Vorschlag offen.


Mein bisheriger alternativer Ansatz: der Szene einen Engine-Emitter verpassen mit fetter Lensflare, damit ich sie sehe. Rakete mit 100km Sprengradius und nur 500 Schaden, um einen Sektor zu komplett befreien. Dafür müsste ich aber imemrnoch alle Sektoren einzeln abklappern.


Gibt es vlt ein Kommando für KI-Schiffe, die Raumfliegen zu fangen?
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 » Fri, 19. Jan 18, 13:36

Code: Select all

$shiptype = get ware from subtype 7 and maintype 275
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 ;)

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Fri, 19. Jan 18, 14:15

danke!
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sat, 20. Jan 18, 11:55

also mit maintype 7 und subtype 275 bekomme ich "Raumfliegen", das schient auch dme EIntrag in der tShips zu entsprechen.

Die Frage ist, wie geht es weiter?

"Get ship Array" funktioniert nicht, ebenso "find ship" und "find flying ware".
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

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

Post by JSDD » Sat, 20. Jan 18, 13:46

ich nehm mal an, unitraders zeile stimmt, dann:

Code: Select all

$shiptype = get ware from subtype 7 and maintype 275
$array.flies = get ship array: race = null class/type = $shiptype
$index = size of array $array.flies

$text = '... destroying ' + $index + ' flies ...' ...
write to logbook $text

while $index > 0 ...
dec= $index
$fly = $array.flies[$index]
$fly -> destruct: show no explosion = [TRUE]
end

return null
angenommen, der befehl "get ship array" geht tatsächlich nicht, dann gehts bestimmt (?) via "find object: " in den universe commands, dort solltest du auch die class = Space Flies direkt eingeben können, denk ich ...

bei sector= ... und race=... jeweils null eingeben
bei flags=... solltest du [Find.Multiple] eingeben, sodass du ein array zurück bekommst (statt ne einzelne fliege)
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

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sat, 20. Jan 18, 14:49

ich habe jetzt ganz simpel:

find shipclass or type == raumfliege, flags find multiple

alles andere null

das Ergebnis ist ein null-Array :(

edit: egal, was ich eingebe, es kommt immer null raus.
Gibt's da Argumente, die unbedingt gesetzt werden müssen?
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

User avatar
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Sat, 20. Jan 18, 15:47

Bist Du Dir sicher, dass die Raumfliegen noch da sind? Kannst Du sie beobachten?

Vlt. ist Dein Ergebnis ja richtig. (=Null)
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sat, 20. Jan 18, 15:57

Ich habe ihnen eine Szene Engine-Emitter hinzugefügt mit ner dicken Lensflare, jetzt kann man sie durch den ganzen Sektor sehen.
Sind teilweise bis zu 10 Schwärme pro Sektor.

Im Moment jage ich sie mit ner Art Schockwellengenerator.

Also es sind definitiv viele da.

Auch interessant: Wenn man sie killt, verschwinden die Scripte nicht vom Stack.
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

User avatar
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Sat, 20. Jan 18, 16:19

Das Problem bei den Fliegen ist ja, dass man sie erst als Ziel auffassen kann, wenn sie mittels Ionendisruptor betäubt wurden. Dieser Umstand wird dafür sorgen, dass Du kein Ergebnis im Array erhältst.
Wie also die Fliegen betäuben? Vielleicht fällt mir da noch was ein.
Es ist aber ein bisschen Lustig. Andere Piloten suchen verzweifelt nach Fliegen, um sie zu fangen und Du hast eine Plage. (Die Geister die ich rief…) :wink:
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

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

Post by JSDD » Sat, 20. Jan 18, 17:08

Code: Select all

Script !ship.cmd.follow.spacefly

Version: 2
for Script Engine Version: 40

Description
Ship Spacefly COMMAND FOLLOW

Arguments

    1: leader , Value , 'leader space fly'


Source Text

001   [THIS] ->set command: COMMAND_FOLLOW  target=$leader target2=$leader par1=null par2=null
002   
003   skip if $leader -> exists
004   |return null
005   skip if $leader -> is of class Spacefly
006   |return null
007   
008   [THIS] ->add to formation with leader $leader
009   
010   $disabledtimer = random value from 5000 to 15000 - 1
011   
012   while 1
013   |if [THIS] -> is disabled
014   ||if $disabledtimer > 0
015 @ |||$disabledtimer = wait $disabledtimer ms
016   ||else
017   |||[THIS] ->set ship disabled to [FALSE]
018   |||$disabledtimer = random value from 5000 to 15000 - 1
019   ||end
020   ||continue
021   |end
022   |
023   |$leader = [THIS] -> get formation leader
024   |skip if $leader -> exists
025   ||break
026   |
027   |[THIS] ->set command target: $leader
028   |[THIS] ->set command target2: $leader
029   |
030 @ |= [THIS] -> escort ship $leader
031   |
032 @ |= wait randomly from 100 to 200 ms
033   end
034   
035   * default idle
036 @ = [THIS] -> call script '!ship.cmd.idle.spacefly' : 
037   return null


signed 
meinst du dieses script ??
!ship.cmd.follow.spacefly

wenn ja, dieses script macht nix außer der fliege auf welchem es läuft, seinen "leader" hinterherzufliegen. ODER wenn "disabled" flag gesetzt, wartet es einfach sooo, d.h. macht nix ... & wenn leader nimmer existiert, ruft es !ship.cmd.idle.spacefly auf, welches dieses fliege unabhängig rumfliegen lässt (d.h. ohne leader zu folgen)

------------------------------------------------------

amen. soweit sogut.

meine einschätzung ist, dass diese nicht unbedingt die performance beeinflussen, kann mich aber auch irren ...

weitere möglichkeit, diese fliegen zu killen: mission director, der kann so ziemlich alles erfassen. die steuerung ist manchmal etwas stressig, however ...

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="destroy_all_flies_in_xuniverse" version="1">
      <action>
        <do_all>
          <!-- ... find all spaceflies -->
          <find_object group="this.flies" multiple="1" class="spacefly" max="9999">
            <sector sector="{player.sector}"/>
            <jumps max="99"/>
          </find_object>
          <!-- ... destroy group -->
          <do_if value="{group.object.count@this.flies}" min="1">
            <destroy_group group="this.flies" explosion="1"/>
          </do_if>
          <!-- ... delete group variable -->
          <remove_group group="this.flies"/>
        </do_all>
      </action>
    </cue>
  </cues>

</director>
mit dem md-script zerstörst du (einmalig!) alle fliegen (hoffentlich!), jedenfalls erfasst dieses die fliegen IS (bei mir sind's in "die 3. erlösung" 81 fliegen), OOS scheint es keine fliegen zu geben (hab keine gefunden mit dem script)

|K.O.S.H. wrote:Auch interessant: Wenn man sie killt, verschwinden die Scripte nicht vom Stack.
welcher "stack" denn ? die globale prozess-liste etwa ??
wenn ein objekt zerstört ist, kann es keine scripts auf dessen (lokalen) stack geben .. (eben weils nimmer existiert)


[edit]
bei mir sinds 73000 "totally called", aber nur 76x "as task" und "on stack"
Last edited by JSDD on Sat, 20. Jan 18, 17:11, edited 1 time in total.
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

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sun, 21. Jan 18, 08:57

bei mir sinds 73000 "totally called", aber nur 76x "as task" und "on stack"
genau bei mit sind da 6865 "as task" und auch "on stack".

Egal, wie viele Raumfliegen ich töte, die Zahlen werden nicht kleiner.
Durch den IonenDisruptor habe ich jetzt auch rausgefunden, dass die Raumfliegen anscheinend erstellt werden, wenn man den Sektor benutzt (habe die Hülle von 200 auf 40 gesetzt, die Fliegen im neuen Sektor hatten 100% Hülle, wären sie vorher erstellt worden, hätten sie 500% haben müssen).
Ergo -> die 6865 Scripte laufen irgendwo anders...

Evtl auf Schiffen oder Objekten, die fehlerhaft erstellt worden (vlt ist mir in der tShips mal was durcheinander geraten).

Das wird ein Spaß.

Danke schon mal für die Hilfe, ihr seid super.
Bin weiterhin für jede Hilfe dankbar.

Am liebsten wäre mir eine Möglichkeit, alle Objekte anzeigen zu lassen, die ein bestimmten Script ausführen, aber das gibt's wohl nicht...

PS. habe schon probiert, alle Schiffe und Stationen im Universum zu killen...
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

User avatar
Klaus11
Posts: 859
Joined: Mon, 13. Feb 12, 17:23
x3ap

Post by Klaus11 » Sun, 21. Jan 18, 09:54

Wäre es nicht einfacher ein neues Spiel zu beginnen? Vielleicht kannst Du Deinen Spielstand auch in einer sauberen Installation laden. Oder funktioniert das nicht?
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE

User avatar
ubuntufreakdragon
Posts: 5189
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Sun, 21. Jan 18, 10:03

Wäre trotzdem interessant zu wissen, was da abgeht, Schon mal probiert durch alle schiffe des universums zu gehen und Abzufragen ob das script bei ihnen läuft?
Ganzdämlich wäre natürlich, wenn es per bug global gestartet wurde, schau mal ob die Zeil skip if this exists return null vorhanden ist.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sun, 21. Jan 18, 11:50

nee, die Zeile gibt es nicht.

Er prüft nur, ob der Leader eine Raumfliege ist.

Du meinst, es kann vorkommen, dass ein Script noch läuft, ohne, dass das Objekt noch existiert?

Ich versuche mal zu checken, ob das Script läuft, muss aber erstmal lernen, wie das geht .

Auch interessant: Es gibt im gesamten Universum nur (freifliegendes Ufo), seine Rasse (nicht Pilot) ist "Unbekanntes Objekt".


@ Klaus: neues Savegame geht nicht, meins ist 10 Jahre alt!
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sun, 21. Jan 18, 12:56

das Script läuft auf keinem Schiff auf den Tasks 0 bis 6...
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

User avatar
ubuntufreakdragon
Posts: 5189
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Sun, 21. Jan 18, 13:33

|K.O.S.H. wrote:Du meinst, es kann vorkommen, dass ein Script noch läuft, ohne, dass das Objekt noch existiert?
Nein, wenn ein Objekt zerstört wird werden alle Scripte darauf beendet, aber
Du meinst, es kann vorkommen, dass ein Script noch läuft, ohne, dass das Objekt existiert?
das könnte sehr wohl der Fall sein, wenn das script durch ein anderes per Start auf z.b. $spacefly ausgeführt wird $spacefly aber (mittlerweile) leer ist
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sun, 21. Jan 18, 13:43

wäre $spacefly dann nicht null und das Script würde in den global Script Tasks erscheinen?
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

User avatar
ubuntufreakdragon
Posts: 5189
Joined: Thu, 23. Jun 11, 14:57
x4

Post by ubuntufreakdragon » Sun, 21. Jan 18, 13:46

|K.O.S.H. wrote:wäre $spacefly dann nicht null und das Script würde in den global Script Tasks erscheinen?
ja, könntest du das mal checken?
Ansonsten könnte es noch auf einer station oder was anderem laufen.
Wir könnten es auch rückwärs versuchen und das spacefly script so umschreiben,(vorausgesetzt diese änderungen werden iwie übernommen z.b. durch neue buginstanzen), das es alle ausführenden Objekte in ein globales array einträgt.
My X3 Mods

XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist

|K.O.S.H.
Posts: 3724
Joined: Fri, 19. Dec 03, 10:36
x3tc

Post by |K.O.S.H. » Sun, 21. Jan 18, 14:18

hab schon das Script geändert, dass es sich beendet, alles schön mit Ausrufezeichen und als pck, damit die Datei auch definitiv höchste Prio hat.

Hat auch bei neuen Raumfliegen funktioniert bei den laufenden Scripts jedoch nicht :/
Wing Commander Mod - German Topic
06.07.11 - v1.1 RELEASED!

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

Post by JSDD » Sun, 21. Jan 18, 14:38

... testweise einfach mal n debug einbauen, von wegen:

Code: Select all

$debug = [TRUE] ...
if $debug
$script.name = get script name
$text = sprint fmt: '... %s runs on instance of %s ...', [THIS], $script.name, null, null, null
write to logfile 12345 append=[TRUE] $text, ...
end
sodass außerhalb des games (& nicht im in-game-logbuch) dir ne logfile erstellt wird, inder drin steht, welches objekt das script startet ... evtl noch [SECTOR] usw ausgeben lassen ... klar hilfts nur bei neu gestarteten script-instanzen, vllt taucht der fehler trotzdem noch auf & lässt sich entdecken (aber ehrlich gesagt hätt ich den [newGame] button geklickt ^^)
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”