Raumfliegen per Script/Mod entfernen
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
Raumfliegen per Script/Mod entfernen
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?
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?
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
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
ich nehm mal an, unitraders zeile stimmt, dann:
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)
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
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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
Bist Du Dir sicher, dass die Raumfliegen noch da sind? Kannst Du sie beobachten?
Vlt. ist Dein Ergebnis ja richtig. (=Null)
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
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.
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.
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…)
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…)
[ external image ] Dif-tor heh smusma (Lebet lang und in Frieden – vulkanischer Gruß), Cockpitsammlung, Spieler HQ aktivieren, XENON-DAE
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
!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>
welcher "stack" denn ? die globale prozess-liste etwa ??|K.O.S.H. wrote:Auch interessant: Wenn man sie killt, verschwinden die Scripte nicht vom Stack.
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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
genau bei mit sind da 6865 "as task" und auch "on stack".bei mir sinds 73000 "totally called", aber nur 76x "as task" und "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...
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
- ubuntufreakdragon
- Posts: 5195
- Joined: Thu, 23. Jun 11, 14:57
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.
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
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
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!
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!
- ubuntufreakdragon
- Posts: 5195
- Joined: Thu, 23. Jun 11, 14:57
Nein, wenn ein Objekt zerstört wird werden alle Scripte darauf beendet, aber|K.O.S.H. wrote:Du meinst, es kann vorkommen, dass ein Script noch läuft, ohne, dass das Objekt noch 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 istDu meinst, es kann vorkommen, dass ein Script noch läuft, ohne, dass das Objekt existiert?
My X3 Mods
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
- ubuntufreakdragon
- Posts: 5195
- Joined: Thu, 23. Jun 11, 14:57
ja, könntest du das mal checken?|K.O.S.H. wrote:wäre $spacefly dann nicht null und das Script würde in den global Script Tasks erscheinen?
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
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
... testweise einfach mal n debug einbauen, von wegen:
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 ^^)
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
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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele