Umwandlung vom Raumanzug zu Sklaven verhindern / alle Kommandos deaktivieren

Hier ist der ideale Ort um über Scripts und Mods für X³: Reunion zu diskutieren.

Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators

Post Reply
x-beat
Posts: 39
Joined: Mon, 9. Aug 04, 14:39
x3

Umwandlung vom Raumanzug zu Sklaven verhindern / alle Kommandos deaktivieren

Post by x-beat » Thu, 19. Apr 07, 09:54

Hallo „Scripte- Gemeinschaft“, ich benötige Eures Fach wissen.
Ich habe vor einem Jahr angefangen, .....eher versucht, mein erster Script meines Lebens, in X3, zu erstellen. Leider wurde dieser von mir mangelst Wissen und Motivation (erheblichen Rückschritte :( ) nicht fertig gestellt.

Nun....., die Motivation ist nach längere Pause wieder zurückgekehrt :) . Mein Wissen über das Scripten konnte ich auch noch ein wenig verbessern, da ich mein Script nochmals überarbeiten musste um zu verstehen was ich genau geschrieben hatte :oops: . Dazu fand ich fast zu jedem Problem, welche ich nicht weiter kam, in diesem Forum einige Lösungsansätze.

Leider bin ich wieder einmal an einem Punkt angelangt, wo ich nicht mehr weiter komme. Habe in verschiedene Foren versucht die Hürden zu meistern, ....aber ohne Erfolg.

Also, zu meinen Bescheidenen Hürden :

1.)Ich möchte einen selbst erstellten Raumanzug (Astronaut) der dem Spieler gehört, mit dem Spielerschiff einsammeln. Das erstellen und einsammeln des Raumanzuges selbst ist kein Problem.
Ich habe nun das Problem, wenn ich den Raumanzug eingesammelt habe, wird im Frachtraum des Spielerschiff, ein Sklave erscheinen . Anstelle eines Sklaven möchte ich eine andere Ware (von mir selbst erstellt) ersetzen.
Vermutlich ist dieser Vorgang von Egosoft Hardcodiert, aber ich habe einen älteren Beitrag gefunden, hier http://forum.egosoft.com/viewtopic.php? ... omatischer, der etwas änliches behandelte. Dort wird erwähnt das es möglich währe. Komme aber nicht dahinter wie ich es machen soll oder muss?????

2.)Wenn ich eine Ware (die selbe wie im Punkt 1.) aus dem Spielerschiff manuell herauswerfe, soll ein Raumanzug anstelle der Ware werden.
Nun...., das Problem ist nicht das umwandeln des Ware zu einem Raumanzug, sonder wie starte ich den Umwandlungsprozess am besten?
Meine momentane „Vorstellung“ ist eine Endlosschleife zu starten sobald die Ware im Frachtraum ist, um abzufragen ob die Ware immer noch an Bord existiert. Existiert die Ware nicht mehr im Frachtraum, wird die Umwandlung gestartet.
Mit einer solchen Endlosschleife, glaube ich, ist es nicht gerade die optimalste Lösung!
Gibt es ein flag für den Frachtraum wie CmdConCheck.Available für die Kommandos oder könnte man den Button/ Icon Auswerfen irgend wie mit einem Script verbinden?

3.)Ein Raumanzug dem dem Spieler gehört, wird gleich behandelt wie ein normales Schiff des Spieler. Man kann mit dem Transporter in den Raumanzug hinein Teleportieren und genau das will ich verhindern. Ich möchte also einen Raumanzug der dem Spieler gehört, der das Transferieren nicht möglich ist.

4.)So und zur letzten frage. Kann man alle Kommandos die es in X3 gibt, auf einem Objekt, mit einem Schlag deaktivieren/ ausschalten?
Es gibt einen Befehl, global script map: ignore: key=<Object Command/Signal>, class=<Var/Class>, race=<Var/Race> der einzelne Kommandos deaktivieren lässt, ist aber ein rissen Aufwand jeder Slot zu definieren.
Um den gleichen Effekt zu haben und den Aufwand möglichst gering zu halten, habe sämtliche installierten Upgrade deinstalliert (<RetVar/IF> <RefObj> install <Var/Number> units of <Var/Ware>) und zusätzlich alle Kommandos welche nicht mit einem Upgrade in Verbindung sind, einzeln deaktiviert.
Natürlich werden alle Upgrade und Kommandos installiert/ aktiviert, sobald mein Teil- Script beendet wird. Diese Lösung funktioniert problemlos, ist aber eher eine „Bastelarbeit“.


So, das war's. Ich hoffe, ich habe mich genug verständlich ausgedrückt um meine Probleme darzustellen und bin auf Eure Antworten gespannt, so fern es Antworten gibt.

Gruss
x-beat
<------------------->
for ever X-Beat
<------------------->

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

Post by UniTrader » Thu, 19. Apr 07, 12:19

wofür soll das gut sein?? :D

na ja, mal sehen ob ich dir helfen kann...

1.) ja, der vorgang selbst ist Hardcode, aber du kannst das über einen (evtl. Performancelastingen) umweg regeln:

lass ein globales Script laufen, was prüft, ob dieser Raumanzug noch existiert und wenn es ihn nicht mehr gibt tauscht du im Frachraum des Schiffes vom Spieler was am nähesten zur letzten bekannten Position des Raumanzuges ist eine Einheit Sklaven gegen deine Ware ;) (Rückgabewert von <RetVar/IF> <RefObj> install <Var/Number> units of <Var/Ware> ist die Tatsächlich abgezpgene mege und sollte zur prüfung, ob ein Sklave im Frachtraum war verwendet werden)


2.) eine solche abfrage gibt es afaik nicht... aber evtl. kannst du ja den Raumanzug als Ware in den Frachtraum direkt hinzufügen ("$ra.ware = get ware from Maintype 6 and subtype 66", siehe auch hier) und mit deiner momentanen vorstellung änderst du dann die Besitzerrasse des Raumanzuges (so sind längere waits möglich, um nen flüssigen übergang zu machen ;))

3.) nein, nicht möglich, Hardcoded

4.) das könntest du in ner Schleife lösen:

Code: Select all

$cmd = 1265
while $cmd >= 200
 dec $cmd
 global script map: ignore: key=$cmd, class=Raumanzug, race=Player
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 ;)

x-beat
Posts: 39
Joined: Mon, 9. Aug 04, 14:39
x3

Post by x-beat » Thu, 19. Apr 07, 16:49

upppppsss..., das habe ich ja überhaupt nicht erwähnt. Nun....., in X2 und X3 hat mich immer zwei Sachen gestört.;

1. Piloten werden aus dem Nichts in einem Schiff befördert

2. wenn ein Schiff zerstört wird, verliert man den Piloten (so fern einer Vorhanden ist). Bei den NCP- Schiffe steigt dieser aber ab und zu aus. Wieso eigentlich nicht auch beim Spieler?

Das erste ist mehr oder weniger Fertig. Das Schiff fliegt erst zu seiner Heimatbasis und holt sich dort einen Piloten, resp. einen Co- Piloten.

Das zweite, wenn ein Schiff vom Spieler in Jenseits befördert wird, steigt der Pilot aus (natürlich mit einem zufalle Prinzip). Dieser Pilot kann man einsammeln und weiterverwenden. Aber, bei jedem Ausstieg verliert er an Erfahrungpunkte oder sogar an Level (physische oder psychische Schock).
Die zwei Sachen möchte ich in mein Hauptscript integrieren aber der zweite Teil, mit dem Ausstieg und Einsammeln macht mir Probleme.


So, zu deinen Vorschläge:

Punkt 1 :
über ein globales Script.....mhhh, dass habe ich noch nicht in Betracht gezogen. Ich bin immer vom SIGNAL_KILLED ausgegangen. Ich habe festgestellt, dass wenn man ein Objekt vom Spieler eingesammelt wird, wird dieses zerstört und dann im Frachtraum eingefügt.
Ich hatte damals das Problem, dass das Spielerschiff nicht als Feind anerkannt wurde. Somit wusste ich, resp. das Objekt nicht wo es als Ware im Schiff erscheinen soll.

Zu Punkt 2 und 4 :
Sorry, das Verstehe ich jetzt nicht so ganz?????? :?
Ist es ev. mögliche etwas genauer zu Erläutern :oops: . Bin leider nicht gerade der schnellst :oops: :oops: .


Herzlichen dank für Deine Antwort
x-beat
<------------------->
for ever X-Beat
<------------------->

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

Post by UniTrader » Thu, 19. Apr 07, 17:20

punkt 2 erläutere ich später genauer (komm am besten in den DevChat, da gehts besser mit dem erklären als im Forum ;))

Punkt 4 musst du nicht unbedingt verstehen, mit diesen Befehlen werden einfach ALLE Kommandos auf den Raumanzügen deaktiviert (ach nee, ehe gerade, dass das "while $cmd" heissen muss, nicht "while $cmd >= 200" aber wenn du ne genauere erklärung willst -> schau im DevChat vorbei ;) der Link dorthin ist rechts zwischen "FAQ" und "Statistics" ;)
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
jensemann
Posts: 541
Joined: Mon, 6. Mar 06, 11:17
x4

Post by jensemann » Thu, 26. Apr 07, 15:37

Dein Problem mit Raumanzügen und Sklaven ist folgendes:

Raumanzüge sind Objekte vom Typ Ship der M5 Klasse, Sklaven sind Objekte vom Typ Ware.
Jedes Schiff kann Raumanzüge einsammeln, bräuchte aber einen Hangar um den M5-Raumanzug zu docken. Da das nicht immer der Fall ist, wird (hardcoded) das Schiff (respektive Raumanzug M5) zerstört und die Ware "Sklaven" - sofern ein Lebenserhaltungssystem installiert ist - in den Frachtraum eingefügt.
Wenn du Sklaven im Frachtraum hast und die Ware auswirfst, entsteht kein Raumanzug - wie man vielleicht erwarten könnte - sondern es erscheint eine Box im Raum - mit Sklaven drin :) Es bleibt also eine Ware.

Du müsstest also über ein globales Script die Ware "Sklaven" entfernen und stattdessen deinen Raumanzug dafür einsetzen. Idealerweise werden Werte, wie Name, Erfahrung und andere nützliche Dinge, irgendwo gespeichert und dem Schiff (bzw. Raumanzug M5) wieder übergeben.


jensemann
ob ***modified*** oder nicht - Hauptsache: Spaß!!!

Carrier Fighter Supplies V1.2a deutsch
Carrier Fighter Supplies V1.2a english

x-beat
Posts: 39
Joined: Mon, 9. Aug 04, 14:39
x3

Post by x-beat » Fri, 27. Apr 07, 08:46

Also, ich versuche alles einmal zusammen zu Fassen:

Aufsammeln eines Astronaut

Ausgangs Situation:
Raumanzug ist im Weltraum, Player- Ship befindet sich im gleichen Sektor wie der Raumanzug

Script abfolge:
1. Der Script wird über ein „Global- Script“ gestartet.

2. Der „Global- Script“ überprüft ob im Universum ein oder mehrere Astronauten vom Player vorhanden sind.

3. Der „Global- Script“ überprüft den aktuellen bestand der Sklaven im Frachtraum des Player- Ship.

4. Wenn ein Astronaut vorhanden ist: - Überprüfen Starten ob der Raumanzug immer noch im Universum existiert (Endlosschleife).

5. Existiert ein Astronaut nicht mehr:
- Überprüfen ob das Player- Ship im gleichen Sektor aufhält wie der Astronaut
- Überprüfen der Position vom Player- Ship mit dem Astronaut
- Übereinstimmt (muss die gleiche Position haben, mit Toleranz)
- Überprüfen ob im Frachtraum des Player- Ship ein Sklave befindet
- Überprüfen im Frachtraum der Player- Ship ob eine positive Veränderung (+1 Stk.) bei den Sklaven entstanden ist.

6. Umwandlungsprozess starten: ein Sklaven vom Frachtraum vom Player- Ship deinstallieren (-1 Stk.).

7. Neue Ware „XYZ“ wird im Frachtraum vom Player- Ship installieren.

8. Ein Array erstellen mit den allen relevanten Daten (Name, Erfahrungen, Level....) vom Astronauten.


Auswerfen eines Astronaut

Ausgangs Situation:
Player- Ship hat die Ware „XYZ“ im Frachtraum und wird manuell abgeworfen.

Script abfolge:
1. Der Script wird über ein „Global- Script“ gestartet.

2. Der „Global- Script“ überprüft ob im Universum ein oder mehrere Ware vom Typ „XYZ“ vorhanden ist (flying ware).

3. Wenn eine Ware „XYZ“ vorhanden ist :
- Position bestimmen von der Ware
- Ware zerstören
- Raumanzug auf der gleichen Position platzieren wie die Ware.

4. Übergabe der relevanten Daten (Name, Erfahrungen, Level....) an den Astronaut vom Array.


Könnte das so eventuell funktionieren???? :?



@UniTrader {KBG}
Sorry, dass ich mich noch nicht gemeldet habe bin auf Geschäftsreise. :(
<------------------->
for ever X-Beat
<------------------->

User avatar
wyvern11
Posts: 1703
Joined: Sat, 15. Jul 06, 20:59
x3

Post by wyvern11 » Fri, 27. Apr 07, 11:18

ich sehe da noch zwei probleme

1. wie bekommst du deinen aufgesammelten piloten an bord eines neuen frachters?

und noch schlimmer
2. OOS wird bei zerstörung von frachtern meines wissens keine flying ware erzeugt und ich min mir auch nicht sicher, ob man manuell auswerfen kann
Redest du noch - oder denkst du schon ?

User avatar
jensemann
Posts: 541
Joined: Mon, 6. Mar 06, 11:17
x4

Post by jensemann » Fri, 27. Apr 07, 11:57

wyvern11 wrote:ich sehe da noch zwei probleme

1. wie bekommst du deinen aufgesammelten piloten an bord eines neuen frachters?

und noch schlimmer
2. OOS wird bei zerstörung von frachtern meines wissens keine flying ware erzeugt und ich min mir auch nicht sicher, ob man manuell auswerfen kann
1. indem man an der selben station dockt, wie der Frachter, den Piloten "installiert" und einen Sklaven aus dem Frachtrsum entfernt

2. die ware wird nicht automatisch erzeugt, man muss es über das globale script oder SIGNAL_KILLED selbst tun. und ja, man kann.

jensemann
ob ***modified*** oder nicht - Hauptsache: Spaß!!!

Carrier Fighter Supplies V1.2a deutsch
Carrier Fighter Supplies V1.2a english

x-beat
Posts: 39
Joined: Mon, 9. Aug 04, 14:39
x3

Post by x-beat » Fri, 27. Apr 07, 14:41

@wyvern11
1. wie bekommst du deinen aufgesammelten piloten an bord eines neuen frachters?
Also, das um Setzen an sich selbst wird kein grobe Problem sein. Es wird behandelt wie eine ganz normale Ware. Eben wie @jensemann schon beschreiben hat oder natürlich mit dem Transporter.

Es entsteht beim Ganzen nur einen kleinen Hacken. Hat man mehr als ein Piloten eingesammelt, könnte ja vorkommen, wird es Probleme geben mit den Zuordnungen der relevanten Daten (Name, Erfahrungen, Level....). Man kann zwar die Array chronologisch abarbeiten (aufsteigend), gibt dann aber keine Spielraum wo welcher Pilot in welches Schiff eingesetzt wird. Der erste welche eingesammelt wurde wird auch als erster umgesetzt.

Dazu ich hätte da schon eine kleine Idee im Kopf:
Wenn ein Pilot oder Co- Pilot vom Spieler- Ship auf ein anderes Schiff transferiert wird, erscheint im Logbook eine Nachricht, die sieht etwa so aus.
Alle Piloten oder Co- Piloten Daten sind aufgeführt (Name und Level) welche man eingesammelt hat. Mit einem Icon/ Button kann man nun die gewünschte Pilot/ Co- Pilot dann auswählen und dementsprechend werden die Daten zum neuen Schiff übergeben.

@wyvern11
2. OOS wird bei zerstörung von frachtern meines wissens keine flying ware erzeugt und ich min mir auch nicht sicher, ob man manuell auswerfen kann
Das Problem habe ich schon mehr oder weniger gelöst und es sieht in etwa so aus:

Anmerkung:
Dieser Script ist ein Veruchs- Script (Alpha- Version), welche ich erstellt habe um meine Idee auszuprobieren.

Script 1 : Auslöser (A1.0)

Code: Select all

001   $cmd = SIGNAL_KILLED
002   
003   [THIS] -> set ship command/signal SIGNAL_KILLED to global default behaviour
004   [THIS] -> connect ship command/signal $cmd to script 'A1.1' with prio 100
005   
006   return null


Script 2 : Ware Umwandlung zum Raumanzug (A1.1)

Code: Select all

001   $sec = [THIS] -> get sector
002   $x.pos = [THIS] -> get x position
003   $x.pos = $x.pos + 10
004   $y.pos = [THIS] -> get y position
005   $z.pos = [THIS] -> get z position
006   $co.pilot = Co- Pilot
007   
008   * Ueberprüfen ob Co-Pilot an Bord ist
009   * ------------------------
010   $stk = [THIS] -> get true amount of ware $co.pilot in cargo bay
011   
012   * Ist ein oder mehrere Co- Pilot in dem Laderaum 
013   * ------------------------
014   while $stk > 0
015    $temp = [THIS] -> install -1 units of $co.pilot
016    $x.pos = $x.pos + 2
017    $escape.pilot =  create ship: type=Raumanzug owner=Player addto=$sec x=$x.pos y=$y.pos z=$z.pos
018    $stk = [THIS] -> get true amount of ware $co.pilot in cargo bay
019   end
020   return null
Gruss
x-beat
<------------------->
for ever X-Beat
<------------------->

Post Reply

Return to “X³: Reunion - Scripts und Modding”