[DISKUSSION] Allgemeine S&M-Fragen

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

Icetrack
Posts: 170
Joined: Tue, 1. May 07, 12:32
x4

Post by Icetrack »

Den neuen Editor hab ich wieder deinstalliert, weil ich mit der Version die ich hatte, keine t-files bearbeiten konnte, aber dann lade ich ihn mal wieder. ;)

Das Drohne erstellen kann ich, ich wollte halt nur einen Befehl haben, der nicht zuviel Leistungbraucht, wenn 120 oder mehr Drohnen im Uni erzeugt werden.

Ich werde mir die Jobs mal ansehen, hab aber auch ne Alternative gefunden:

@ <RetVar/IF><RefObj> move around <var/number> ms

Sieht auch "lebendig" aus. Sie fliegt jetzt ne Stunde und "jumpt dann out of existence".

Ich habe dann versucht das zu loopen, also, das das gaze von vorn anfängt, sobald die alte drohne gejumpt ist, aber das klappt noch nicht so ganz.

Wenn ich das hinbekomme, mit dem Loop und ich dieses Drohnen-Erzeug-Script im Setup-Plugin starte, wird das Drohnen-Erzeuge-Script jedesmal neu gestartet, wenn man ein zuvor bei laufendem Script gespeichertes Spiel lädt?

Mit anderen Worten, erzeuge ich so eine unendliche anzahl von sich "replizierenden" Drohnen?

Wenn ja muss ich sonst was einbauen, ne Abfrage, das das nicht nochmal gestartet wird, wenn es schon im Gange ist, oder doch nen Job oder Leerlauf nehmen.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Also ich würde das so machen:

Job Einträge für die Drohne erstellen. Dabei ein sinnvolles Maximum für die Maximalanzahl angeben.
Dann wird auf der Drohne ein Skript gestartet das folgendermaßen abläuft:

->Zufällige Station finden
-> Zur Station fliegen

Das als Loop, sollte eigentlich reichen.

Wenn das Ganze nicht zu Prozessorlastig sein soll, dann köntest du auch bei den Jobs ein Häkchen bei "Destroy OOS" machen.

MfG,
ScRaT

EDIT: Habe eine kleine Frage bezüglich der Tasks.

Hier der Code:

[PLAYERSHIP]->start task 5010 with script 'a.test.script' and prio 0: arg1=null arg2=null arg3=null arg4=null arg5=null

Dies ist das Setup-Skript für ein kleines Skript, das ich geschrieben habe. Es soll auf Task 5010 ein Skript starten, allerdings scheint dies nicht der Fall zu sein, da zum Einen das gestartete Skript nicht funktioniert und zum Anderen die Abfrage "is task 5010 in use" 0 ergibt.


Was muss ich bezüglich Tasks noch beachten?

MfG,
ScRaT
Icetrack
Posts: 170
Joined: Tue, 1. May 07, 12:32
x4

Post by Icetrack »

Ah, i see, so meinte ich das garnicht.

Ich wollte wenn möglich ohne Tjobs.pck auskommen und das ganze nur auf Script-Basis machen und einen bestehenden Job auswählen, der die Drohne ein wenig im Sektor rumfliegen lässt. Die Frage ist dann, wie ich einen bestehenden Job der Drohne zuweise, welchen ich dann nehme müsste ich mir mal ansehen ...
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Achso.
Dann würde ich es so versuchen:

Überwachungsskript, das global läuft und eine bestimmte Anzahl von Drohnen spawnt/ersetzt falls welche zerstört wurden.

Dieses Skript wird von einem Setup Skript aufgerufen. Allerdings nur einmalig.
Das kannst du dann z.B. mittels einer globalen Variable erreichen, welche z.B. durch das Überwachungsskript = [TRUE] gesetzt wird.
Im Setupskript dann einfach ein 'skip if not get global var' vor dem Skriptaufruf einfügen und schon wird das Überwachungsskript nur gestartet, wenn es noch nicht läuft.

Das würde verhindern, dass unglaublich viele Drohnen erstellt werden.

Ob du einen bestehenden Job für das rumfliegen der Drohne nehmen kannst, weiß ich nicht.
Aber ein kleines Skript, das die Drohnen steuert ist ja schnell geschrieben.

MfG,
ScRaT
Icetrack
Posts: 170
Joined: Tue, 1. May 07, 12:32
x4

Post by Icetrack »

ScRaT_GER wrote:Achso.
Dann würde ich es so versuchen:

Überwachungsskript, das global läuft und eine bestimmte Anzahl von Drohnen spawnt/ersetzt falls welche zerstört wurden.
Wie ich das machen soll weiß ich nicht. :cry: Das Erzeugen wird ja sicher über "create ship" laufen, den Sektor, den Bewegungsbefehl und evtl. das Equipment kann ich per call script aufrufen, wenn ich eben vorher ein entsprechendes Script geschrieben habe, aber wie mache ich das, das das Script neue spawnt, wenn alte Drohnen zerstört werden und was meinst du mit "global laufen"?

ScRaT_GER wrote:Dieses Skript wird von einem Setup Skript aufgerufen. Allerdings nur einmalig.
Das kannst du dann z.B. mittels einer globalen Variable erreichen, welche z.B. durch das Überwachungsskript = [TRUE] gesetzt wird.
Im Setupskript dann einfach ein 'skip if not get global var' vor dem Skriptaufruf einfügen und schon wird das Überwachungsskript nur gestartet, wenn es noch nicht läuft.
Das kann ich, und das Steuerskript für die Drohne ist geschrieben.

Edit: Wo ist eigentlich der Unterschied zwischen lokalen und globalen Variablen? Global heist, wenn sie einmal eingetregen ist, kann sie von jedem Script abgerufen werden, hab ich immer gedacht.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Globale Variablen sind nicht objektgebunden und können, wie du richtig bemerkt hast, von "überall" aufgerufen werden.
Lokale Variablen werden lokal auf einem Objekt gespeichert und brauchen dieses immer als Referenz, wenn die Variable gelesen werden soll.
Das Erzeugen wird ja sicher über "create ship" laufen, den Sektor, den Bewegungsbefehl und evtl. das Equipment kann ich per call script aufrufen, wenn ich eben vorher ein entsprechendes Script geschrieben habe, aber wie mache ich das, das das Script neue spawnt, wenn alte Drohnen zerstört werden und was meinst du mit "global laufen"?
Mit global laufen meine ich, dass das Skript nicht auf einem Objekt gestartet wird.

Das geht wie folgt:

$null = null
START $null -> call script ....

Du kannst dir hierzu dieses Tutorial durchlesen.


Zum Skript selber:

Ich würde alle erzeugten Drohnen in ein Array schreiben.
Etwa so:

$drone = create ship
append $drone to array

Dieses Array wird dann regelmäßig überprüft und wenn eine Drohne nicht mehr existiert wird eine neue gespawnt.


MfG,
ScRaT
Icetrack
Posts: 170
Joined: Tue, 1. May 07, 12:32
x4

Post by Icetrack »

Sehr gut, vielen Dank! Das Tuto sehe ich mir gleich mal an.

Die Überprüfung des arrays läuft automatisch, solbald der einmal erstellt ist? Oder muss ich ne Prüfung schreiben?
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Die musst du natürlich machen.
So in etwa:

while [TRUE]
$size = size of array $array
while $size
dec $size=
$drone = $array[$size]
if not $done exists
remove value from array $array at index $size
call script 'create drone'
end
=wait 60000 ms
end

Man könnte es vielleicht noch schöner machen. Aber das wäre das, was ich spontan machen würde.

Im Uninstall-Skript musst du natürlich dafür sorgen, dass dieses Skript beendet wird und alle Drohnen zerstört werden.

MfG,
ScRaT
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

ScRaT_GER wrote:Im Uninstall-Skript musst du natürlich dafür sorgen, dass dieses Skript beendet wird und alle Drohnen zerstört werden.
Alle Kampfdrohnen zerstören sich nach 613 sec automatisch.
Frachtdrohnen nach 1 Stunde irgendwas.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Ah, wieder was dazu gelernt.

Um auf meine kleine Frage am Rande aufmerksam zu machen
Habe eine kleine Frage bezüglich der Tasks.

Hier der Code:

[PLAYERSHIP]->start task 5010 with script 'a.test.script' and prio 0: arg1=null arg2=null arg3=null arg4=null arg5=null

Dies ist das Setup-Skript für ein kleines Skript, das ich geschrieben habe. Es soll auf Task 5010 ein Skript starten, allerdings scheint dies nicht der Fall zu sein, da zum Einen das gestartete Skript nicht funktioniert und zum Anderen die Abfrage "is task 5010 in use" 0 ergibt.


Was muss ich bezüglich Tasks noch beachten?
Das aufgerufene Script besteht quasi aus einer while [TRUE] Schleife, sollte also eigentlich immer ausgeführt werden.

Irgendwelche Tips?

MfG,
ScRaT
Icetrack
Posts: 170
Joined: Tue, 1. May 07, 12:32
x4

Post by Icetrack »

ScRaT_GER wrote:Die musst du natürlich machen.
So in etwa:

[...]

Man könnte es vielleicht noch schöner machen. Aber das wäre das, was ich spontan machen würde.

Im Uninstall-Skript musst du natürlich dafür sorgen, dass dieses Skript beendet wird und alle Drohnen zerstört werden.

MfG,
ScRaT
Je mehr ich mich damit befasse, desto deutlicher wird das Theam X³ Scripting, wenn ich daran denke, was ich vor zwei Wochen erst alles konnte und seitdm dazu gelernt habe ... danke an alle in diesem Thread! :)

Vorallem verstehe ich mittlerweile, was genau passiert, wenn hier Scriptbeispiele kommen, zumindest wesentlich öfter als vorher :P , insofern danke für den Vorschlag, hab verstanden wie der Aufbau ist und was gemacht wird!
Gazz wrote:
ScRaT_GER wrote:Im Uninstall-Skript musst du natürlich dafür sorgen, dass dieses Skript beendet wird und alle Drohnen zerstört werden.
Alle Kampfdrohnen zerstören sich nach 613 sec automatisch.
Frachtdrohnen nach 1 Stunde irgendwas.
Ich glaube es könnten bei Frachtdrohnen ca. 70 Minuten sein, nach 7 Minuten Flugzeit sind 10% der "Energie" weg, kann man unter Info bei der F-Drohne sehen.

Aber das Script muss ich ja im uninstall Script trotzdem noch deaktivieren, aber da für gibts doch "fertigen Code", glaube ich. Naja, seh ich mir mal an, wenn ich die Drohnen erfolgreich im Universum drin hab.
Nahdar
Posts: 6
Joined: Fri, 22. May 09, 23:29

Merkwürdige Station ... aber wo ist sie ???

Post by Nahdar »

Hi Leute !

So mein Problem : Es sind wie ich merke nicht viele aber ich scripte schon ab und zu ... na ja und ich hab versucht das HQ herzuscripten und dabei is eine Station entstanden die ich eben erst im Besitzmenü gefunden hab ... na ja ... und da steht nicht wo die ist

Könnt ihr mir helfen ?
User avatar
X2-Illuminatus
Moderator (Deutsch)
Moderator (Deutsch)
Posts: 25130
Joined: Sun, 2. Apr 06, 16:38
x4

Post by X2-Illuminatus »

Das passt wohl eher in den allgemeinen Fragen Topic im Scripts und Modding Forum.


***Themen zusammengefügt***
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!
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

ScRaT_GER wrote:Ah, wieder was dazu gelernt.

Um auf meine kleine Frage am Rande aufmerksam zu machen
Habe eine kleine Frage bezüglich der Tasks.

Hier der Code:

[PLAYERSHIP]->start task 5010 with script 'a.test.script' and prio 0: arg1=null arg2=null arg3=null arg4=null arg5=null

Dies ist das Setup-Skript für ein kleines Skript, das ich geschrieben habe. Es soll auf Task 5010 ein Skript starten, allerdings scheint dies nicht der Fall zu sein, da zum Einen das gestartete Skript nicht funktioniert und zum Anderen die Abfrage "is task 5010 in use" 0 ergibt.


Was muss ich bezüglich Tasks noch beachten?
Das aufgerufene Script besteht quasi aus einer while [TRUE] Schleife, sollte also eigentlich immer ausgeführt werden.

Irgendwelche Tips?

MfG,
ScRaT
Poste mal bitte den Code vom aufrufenden und aufgerufenen Script.. vielleicht gibts ne andere ungereimtheit an die du gar nicht gedacht hast...


@Nahdar
wird das HQ zufällig in einem Sektor namens "Unbekanntes Objekt" angezeigt??
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
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

001 while [TRUE]
002 |$flying.ware = find flying ware: sector=[SECTOR] maintype=null subtype=null flags=[Find.Nearest] refobj=null maxdist=null maxnum=null, refpos=null
003 |$distance = = get distance between $flying.ware and [THIS]
004 |$abandoned.ship = find ship: sector=[SECTOR] class or type=Bewegliches Schiff race=null flags=[Find.Nearest] refobj=null maxdist=null maxnum=null refpos=null
005 |$distance.comp = = get distance between $abandoned.ship and [THIS]
006 |skip if $distance < $distance.comp
007 ||$distance = $distance.comp
008 |$distance = $distance / 5
009 |play sample 1203
010 @ | = wait $distance ms
011 end
012 return null

Das ganze ist ein Detektor. =)
Soll nur dazu dienen schneller zu piepen, wenn man sich einer Ware/Schiff nähert.

Konnte das ganze noch keinem Praxistest unterziehen, da das Schiff in den Autopilot geht, wenn an es so startet. Deswegen möchte ich es über ein Setup-Skript auf einem bestimmten Task (!=Task 0) laufen lassen.

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

Post by UniTrader »

ich würde das ganze auf jeden fall als Globales Script lösen, welches sich aufs Spielerschiff bezieht, denn so wie du es jetzt angehst hast du irgendwann nur noch ein Dauerpiepen, da sich dieses Script nicht beendet wenn der Spieler das Schiff verlassen hat.. und beim nächsten neu laden wird es zusätzlich auf dem aktuellen Spielerschiff gestartet..

(alternativ: wenn es objektbezogen sein soll bei jedem durchlauf prüfen, ob [THIS] == [PLAYERSHIP] und wenn nicht startet sich das Script selber auf dem neuen Spielerschiff und beendet sich dann auf dem alten...)

der Teil hier ist jedenfalls soweit in ordnung (wenn man von oben genanntem Konzeptfehler absieht), aber wie sieht eigentlich dein Setup aus??
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
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

Wäre schon toll wenn man das wie schon gesagt stoppen könnte ohne das Schiff zu zerstören. =)

Außerdem piepts auch wenn gar nix gefunden wird...
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Ja, wie gesagt, ich habe es nur mal kurz geschrieben und eigentlich gar nicht drauf geachtet ob es auch piept wenn nichts gefunden wird, bzw. was passiert wenn man das Schiff wechselt.

Das sind aber alles Sachen die man leicht beheben kann.

Das Setup sieht (testweise, weil ich mich bisher noch nicht mit Tasks beschäftig habe) so aus:

[PLAYERSHIP]->start task 5010 with script 'a.test.script' and prio 0: arg1=null arg2=null arg3=null arg4=null arg5=null

MfG,
ScRaT
Icetrack
Posts: 170
Joined: Tue, 1. May 07, 12:32
x4

Re: Merkwürdige Station ... aber wo ist sie ???

Post by Icetrack »

Nahdar wrote:Hi Leute !

So mein Problem : Es sind wie ich merke nicht viele aber ich scripte schon ab und zu ... na ja und ich hab versucht das HQ herzuscripten und dabei is eine Station entstanden die ich eben erst im Besitzmenü gefunden hab ... na ja ... und da steht nicht wo die ist

Könnt ihr mir helfen ?
Ich würde folgendes vorschlagen:

Code: Select all

Arguments
1: num , Var/Number , 'Nr. aus Log von Stationsname:' 
Source Text

001   skip if [THIS]
002   |return null
003   
004   
005   $pl.st.arr =  get station array: of race Player class/type=null
006   
007   $size.arr =  size of array $pl.st.arr
008   
009   
010   $t1 = 0
011   $t2 = 0
012   while $t1 < $size.arr
013   |inc $t1 = 
014   |$st.elm = $pl.st.arr[$t2]
015   |$log = $t2 + ' ' + $st.elm
016   |write to player logbook $log
017   |inc $t2 = 
018   end
019   
020   skip if $num == null
021   |$destruct.stat = $pl.st.arr[$num]
022   skip if $num == null
023   |$destruct.stat -> destruct: show no explosion=[TRUE]
024   
025   return null
Bevor du das hier jetzt aber nutzt: Ich garantiere nicht das es klappt und ich lasse mich später nicht dafür verantowrtlich machen, wenn der Spielstand oder das Spiel zerstört werden.

Ich habs bei mir ausprobiert und das Auflisten klappt anscheinend wunderbar, ich hab nicht versucht was zu zerstören.

Bevor du das nutzt, wäre es aber vielleicht nicht verkehrt, wenn einer der erfahrenen Scripter hier den Code ansieht und sagt, ob das klappt und ob es nicht alles noch schlimmer macht.


Es soll folgendermaßen funktionieren:

Man lässt es einmal durchlaufen und wählt bei der Nr.-Angabe "null" aus (null!!!!! du sollst keine 0 eintippen ;) sonst löscht du ne Station). (muss auf nem Obket gestartet werden) Jetzt werden im Logbuch alle Stationen aufgelistet, vor der Station steht die Zahl, die der Station im Array zugeteilt wurde.

Dann seiht man ins Log und sucht sich die Station, die man loswerden möchte. Jetzt startet man das Script neu und gibt bei der Nr.-Angabe die Zahl ein, die im Logbuch vor der Station stand, die man loswerden wollte.
Soric
Posts: 2
Joined: Sat, 23. May 09, 23:17

Post by Soric »

hab ne kurze frage...hab vor ewigkeiten mal recht lange x3 reunion gespielt und dort mal den SE benutzt...nur hab ich bei tc ein kleines problem nach all der zeit...ich kann den SE aktivieren bzw hatte ne schöne liste von fertigen scripts vor mir...nur wenn ich beispielweise jetzt eines der scripts verwenden will und dort die einzelheiten eignerichtet habe wie aktiviere ich den dann?

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