- Neue Lib.: Kapern und Schleudersitz [Update] -

Hier ist der ideale Ort um über Scripts und Mods für X²: Die Bedrohung zu diskutieren.

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

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

- Neue Lib.: Kapern und Schleudersitz [Update] -

Post by dPM_HeMan » Sun, 22. Aug 04, 13:57

Hi Leute

Im Zuge der Entwicklung meines "Sklavenhändler" Scriptes, habe ich folgende Lib gebastelt: download

wie gehts:

Code: Select all

001 @ START $script.dummy -> call script 'lib.create.survivor' :  the victim=$new.ship  passengers ARRAY or NULL=null  Control Pilot TRUE or FALSE=[FALSE]  Capture possible=[TRUE]  chance to cap=10
man beachte: START $script.dummy nicht THIS , damit das Script nicht auf dem Objekt ausgeführt wird ! (gibt sonst Probs)

was kann's ?

übergibt man ein Schiff (the victim) an das Script so wird auf folgendes geprüft:

- wenn Schiff zerstört, erstelle einen geretteten Piloten (mit Name)
- mit "passengers" kann man einen Array von Namen übergeben, die Passagiere retten sich dann vor der Explosion (null=nur Pilot)
- mit "control pilot" kann man bestimmen ob die Überlebenden zur nächsten Station fliehen oder an Ort und Stelle warten
- mit "capture possible" (False, True) kann man bestimmen ob der Pilot das Schiff verlassen wird (quasi: Kapern garantiert)
- mit "chance to cap" gibt man die Wahrscheinlichkeit an, sollte so im Bereich 1-50 sein.

Zu sagen wär vielleicht noch, dass das ganze erst greift, wenn der Gegner einen auch als Feind ansieht, also rot wird, sonst gibt die Zeile "get attacker" nämlich null zurück. Ich sehe das nicht als Problem an sondern als gewollt ;)

noch Fragen ?

mfg HeMan

mögliche Probleme:

- setzt man "capture possible" auf FALSE dann beeinflußt dies natürlich nicht die standart Chance die jeder Gegner hat, nur die "zusätzliche" durch das Script. k.A. was passiert wenn beide Wahrscheinlichkeiten zufällig zur selben Zeit greifen. [sollte gefixt sein]
- der "Capture" Teil ist hauptsächlich gedacht für Schiffe, die sowieso über ein Script gesteuert werden, hat bis jetzt aber auch bei "normalen" keine Probleme gemacht.

[EDIT]
dPM_HeMan wrote:
dPM_HeMan wrote: Update in Kürze:
- Angabe der Wahrscheinlichkeit für Kapern
das ist es schon :)

neuer Code:

Code: Select all

001 @ START $script.dummy -> call script 'lib.create.survivor' :  the victim=$new.ship  passengers ARRAY or NULL=null  Control Pilot TRUE or FALSE=[FALSE]  Capture possible=[TRUE]  chance to cap=10
Die Überprüfung erfolgt bei <5% Schilden, die Chance sollte von 1-50 gewählt werden, wobei 1 "sofort" und 50 "fast nie" heißt :D
Ein guter Wert ist 15 oder so.
Last edited by dPM_HeMan on Tue, 31. Aug 04, 10:13, edited 8 times in total.

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Re: - Neue Lib.: Kapern und Schleudersitz [22.08.] -

Post by dPM_HeMan » Sun, 22. Aug 04, 14:41

dPM_HeMan wrote: Update in Kürze:
- Angabe der Wahrscheinlichkeit für Kapern
das ist es schon :)

neuer Code:

Code: Select all

001 @ START $script.dummy -> call script 'lib.create.survivor' :  the victim=$new.ship  passengers ARRAY or NULL=null  Control Pilot TRUE or FALSE=[FALSE]  Capture possible=[TRUE]  chance to cap=10
Die Überprüfung erfolgt bei <5% Schilden, die Chance sollte von 1-50 gewählt werden, wobei 1 "sofort" und 50 "fast nie" heißt :D
Ein guter Wert ist 15 oder so.

User avatar
AP Hunter [ABK]
Posts: 1339
Joined: Thu, 3. Jun 04, 20:41
x3tc

Post by AP Hunter [ABK] » Mon, 23. Aug 04, 11:28

wie kann ich das bei al schiffen eingeben? :D
(\__/)
(O.o )
(> < )
This is Bunny. Copy Bunny into your signature to help him on his way to world domination.

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Mon, 23. Aug 04, 15:11

wie genau meinst du das jetzt ? um das bei irgendeinem Schiff zu starten musst du nur das Schiff an das Script übergeben (bei victim). Aber irgendwie glaube ich das war nicht deine Frage oder ?

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Re: - Neue Lib.: Kapern und Schleudersitz [22.08.] -

Post by dPM_HeMan » Mon, 23. Aug 04, 15:25

dPM_HeMan wrote:- setzt man "capture possible" auf FALSE dann beeinflußt dies natürlich nicht die standart Chance die jeder Gegner hat, nur die "zusätzliche" durch das Script. k.A. was passiert wenn beide Wahrscheinlichkeiten zufällig zur selben Zeit greifen.
Hab noch ne kleine Routine eingebaut, die prüft, ob der Besitzer gewechselt hat, sollte also keine Probs geben.

Zu sagen wär vielleicht noch, dass das ganze erst greift, wenn der Gegner einen auch als Feind ansieht, also rot wird, sonst gibt die Zeile "get attacker" nämlich null zurück. Ich sehe das nicht als Problem an sondern als gewollt ;)

Warbringer
Posts: 5
Joined: Mon, 28. Jun 04, 12:16
x3tc

Das Skript geht nicht

Post by Warbringer » Fri, 27. Aug 04, 17:05


Ich habe das Skript überall kopiert und es funktioniert nicht kann mir wer helfen. Habe die ganze Zeit ohne diese schönen Dinge gespielt.
Wo muss ich das hinkopieren, hab einen eigenen Ordner mod erstellt und es geht trotzdem nicht.
:?
Omega lässt grüßen

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Fri, 27. Aug 04, 20:25

[EDIT]Dieser Beitrag gehört zu dem Sklavenhändler Script - was sich auf die Lib bezieht, war wohl n bischen durch den Wind als ich das hier gepostet hab :oops: *g*[/EDIT]

Hi Warbringer

Ich hab grade noch eine neue Version hochgeladen, lad die die erstmal runter, dann kopierst du die Dateien in der *.rar Datei in die jeweiligen Ordner "scripts" und "t" .
Im Spiel kannst du dann mal Shift-o für die Optionen drücken und ganz Unten bei ArtificialLife-Engine gucken, ob du das Script dort findest (es müsste einen Eintrag: "Piraten - Sklavenhändler/Überfälle auf TPs" geben).
Sollte dies nicht der Fall sein, musst du eventuell erstmal den Scripteditor aktivieren, da bin ich mir aber nicht sicher. Wie das geht kannst du in einem der Stickys oben im Forum finden.

Wie gesagt ist das Script aber noch lange nicht fertig, es dient momentan nur dazu, zu gucken ob bis jetzt Alles ohne Probleme läuft und als kleiner Vorgeschmack.

mfg

HeMan
Last edited by dPM_HeMan on Sun, 29. Aug 04, 11:16, edited 1 time in total.

MichaRose
Posts: 328
Joined: Sat, 28. Feb 04, 19:25
x3

Post by MichaRose » Fri, 27. Aug 04, 21:28

So wie ich das sehe, muß man die Lib von einem anderen Script aus starten, indem das Ziel schon bekannt ist.

Liege ich da richtig?

Wenn ja, wie kann ich per Script herrausfinden, auf welches Schiff ich gerade geschossen habe, oder von welchem Bandit ich beschossen werde.

Gruß, Micha

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Sat, 28. Aug 04, 15:14

MichaRose wrote:So wie ich das sehe, muß man die Lib von einem anderen Script aus starten, indem das Ziel schon bekannt ist.
richtig !
MichaRose wrote:Wenn ja, wie kann ich per Script herrausfinden, auf welches Schiff ich gerade geschossen habe, oder von welchem Bandit ich beschossen werde.
Das geht in gewisser Weise mit:

Code: Select all

001   $attacker = $ship -> get attacker

Code: Select all

002   $attacking = $ship -> get attack target
Das eine ist unter "FlyCommands" das andere unter "GeneralObjCommands" , glaub ich :oops:

Man muss da nur ein wenig aufpassen, ich weiß nicht genau wie zuverlässig die Befehle sind, vor Allem im Zusammenhang mit Geschütztürmen.
Außerdem sollte man dann darauf achten, dass das Script auch nur einmal aktiviert wird und nicht in einer Schleife gleich mehrmals ;)

duenenstampfer
Posts: 91
Joined: Sun, 25. Jul 04, 04:57
x2

Post by duenenstampfer » Sun, 29. Aug 04, 07:38

du hast geschrieben das der kram in den ordner t und script kommt hab aber ja nur eine datei ?
wie soll das gehen??

Arsenal
Posts: 148
Joined: Tue, 3. Feb 04, 23:28
x3tc

Post by Arsenal » Sun, 29. Aug 04, 10:11

Ich habs nicht getestet, aber kann es sein dass man mit der Projektilkanone dann keine Schiffe kapern kann?

Bei normalen Schiffen (also ohne das Script) geht das ja.

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Sun, 29. Aug 04, 11:21

duenenstampfer wrote:du hast geschrieben das der kram in den ordner t und script kommt hab aber ja nur eine datei ?
wie soll das gehen??
*ähm* ja :oops: , ich hab mal Oben ein Edit drübergesetzt, ich meinte damit eigentlich mein Script und nicht die Lib. , die Lib. ist natürlich nur eine Datei und sollte dann einfach in den "Scripts" Ordner. Um sie dann wirklich zu nutzen muss man dann auch erstmal ein Script schreiben, dass darauf zugreift (siehe Antwort auf Micha's Frage, ist halt ne Lib. ) ;)

@Arsenal:

guter Einwandt, damit hast du wohl Recht, da muss ich mal gucken was ich da mache.

MichaRose
Posts: 328
Joined: Sat, 28. Feb 04, 19:25
x3

Post by MichaRose » Mon, 30. Aug 04, 18:45

Jo,

da ich von Natur aus ein Dickkopf bin und es mir keine Ruhe läßt, wenn ich etwas nicht weiß, aber wissen möchte, habe ich mir am Samstag ein bisschen was zurechtgefummelt. :roll:

Es sind drei Scripte erforderlich. Das erste ist die 'lib..create.survivor' und das zweite dient dazu, die Endlosschleife wieder zu beenden, ohne den Spielstand neu Laden zu müssen.

'Script.beenden'

Code: Select all

001   return [TRUE]
Wird das TRUE auf FALSE oder null gesetzt, wird das 'kaperscript' beendet.

'kaperscript'

Code: Select all

001 $Attacker = [PLAYERSHIP]
002
003 start:
004   
005 @ $Aktion = [THIS] -> call script 'Script.beenden' : 
006   
007 skip if $Aktion == [TRUE]
008  goto label Ende
009 
010 $Victim = get player tracking aim
011 
012 if $Victim != null
013 
014   $Distanz = get distance between $Victim and $Attacker
015   
016   if $Distanz <= 2500
017
018     $shild = $Victim -> get shield percent 
019
020     skip if $shild >= 5
021       @ START $Victim -> call script 'lib.create.survivor' :  the victim=$Victim  passengers ARRAY or NULL=null  Control Pilot TRUE or FALSE=[FALSE]  Capture possible=[TRUE]  chance to cap=10
022
023   end
024
025 end
026
027 @ = wait 1000 ms
028 
029 goto label start
030
031 Ende:
032
033 return null

Dieses Script einfach mit <r> im Editor starten. Wenn ein Ziel ausgewählt wurde, es maximal 2500 km vom Spielerschiff entfehrnt ist und die Schilde bis unter 5% runtergeschossen wurden, wird das Script 'lib.create.survivor' im Zielschiff gestartet.

Allerdings hat die lib einen kleinen Schönheitsfehler, denn sie wird nicht beendet wenn der Angriff abgebrochen wird. In der While Schleife im StartCheck: sollte noch eine Abfrage eingebaut werden, die diese lib beendet, wenn das Spielerschiff sich weiter als 5 km entfehrnt.

Dann könnte man das Kaperscript auch so abändern, das es durch ein Commando auf einem KI Schiff gestartet werden kann.
Arsenal wrote:Ich habs nicht getestet, aber kann es sein dass man mit der Projektilkanone dann keine Schiffe kapern kann?

Bei normalen Schiffen (also ohne das Script) geht das ja.
Fügen Projektilkanonen den Schilden keinen Schaden zu? Wenn doch, dann funktioniert das Script!

Ich habe diese Waffe noch nie benutzt.

Gruß,
Michael

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Mon, 30. Aug 04, 19:18

Hi Micha

Ich glaube dein Script ist in gewisser Weise doppelt gemoppelt. Jedesmal wenn die Schilde unter 5% geraten wird das Script gestartet. Dieses ist aber eigentlich selbstlaufend und sollte nur 1mal gestartet werden. Sobald es läuft, macht es nämlich (in stark gekürzter Form) folgendes:

Code: Select all

016   while $victim -> exists
026    skip if $shild >= 5 OR $chk.capture == [FALSE]
027     goto label capture
028   end
Es wir also solange geprüft, wie das Schiff existiert !

Wenn bedarft besteht könnte ich eine Routine einbauen, die das Script beendet bevor es zerstört wird und eine zusätzliche Variable für die Schildprozente vielleicht, obwohl ich das eigentlich fest bei 5 halten möchte.

mfg

HeMan

[EDIT]da ham wa wohl gleichzeitig geschrieben :shock:
mit den Projektilwaffen da hat Arsenal recht, da muss ich mal gucken. Ich mach das mal eben mit der Abfrage.[/EDIT]

MichaRose
Posts: 328
Joined: Sat, 28. Feb 04, 19:25
x3

Post by MichaRose » Mon, 30. Aug 04, 20:10

Stimmt, das ist doppelt gemoppelt.

Aber da die lib ja nicht wieder beendet wird, solange das Ziel noch existiert und nicht gekapert wurde, wollte ich nicht, das es bei einem versehentlichen Schuß gestartet wird. Die Schilde bei einem anvisierten Schiff runterzuballern ist ja eindeutig! Ein Schuß daneben auf einem verbündeten dagegen nicht.

Ich muß auch zugeben, das ich die lib ein wenig abgeändert habe. Aus dem While habe ich ein If gemacht und nach dieser If Abfrage einen Goto zum Ende der lib gesetzt. So durchläuft die lib nur einen Durchgang pro Sekunde, wenn die Schildstärke unter 5% liegt. Diese Vorgehensweise scheint mir Recourcen freundlicher.

Außerdem kann man so noch andere Zielgerichtete Scripte einbinden, wie zum Beispiel eine Missile Abwehr oder ein Fluchtscript, wenn die eigenen Schilde unten sind.

Die 5% sind schon gut, sonst wird es zu leicht. Und so läßt sich gerade noch verhindern, das die Schiffshülle zu sehr beschädigt wird.

Aha, dann sind Projektile wohl eigenständige Flugkörper, bei denen die Zugehörigkeit nicht festzustellen ist?

Gruß,
Michael

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Mon, 30. Aug 04, 21:04

ich hab die Lib. mal ubgedatet, download Oben.
Die nutzt jetzt eine lokale Variable Lib.Survivor setzt man die auf False wird das Script auf dem Schiff wieder beendet ;)
Außerdem gibt es jetzt eine Abfrage der Hülle, fällt die auf unter 15% obwohl die Schilde aktiv sind wird auch ne Chance auf Kapern gestartet.
Schilde bleiben bei 5%.
Ich muß auch zugeben, das ich die lib ein wenig abgeändert habe. Aus dem While habe ich ein If gemacht und nach dieser If Abfrage einen Goto zum Ende der lib gesetzt. So durchläuft die lib nur einen Durchgang pro Sekunde, wenn die Schildstärke unter 5% liegt. Diese Vorgehensweise scheint mir Recourcen freundlicher.
Schlimmer Junge :p , eigentlich soll das ja so funktionieren, dass man die Lib auf einem Schiff startet und dann läuft die, war ja auch nicht direkt für den Spieler gedacht, also irgendwie mißbrauchst du die ein wenig ;)

MichaRose
Posts: 328
Joined: Sat, 28. Feb 04, 19:25
x3

Post by MichaRose » Mon, 30. Aug 04, 21:55

dPM_HeMan wrote:Schlimmer Junge :p , eigentlich soll das ja so funktionieren, dass man die Lib auf einem Schiff startet und dann läuft die, war ja auch nicht direkt für den Spieler gedacht, also irgendwie mißbrauchst du die ein wenig ;)
HeHe, darin bin ich Unschlagbar! :roll:

Ging aber nicht anders. Den ganzen Tag habe ich damit verbracht, das irgendwie zum laufen zu bekommen und so einige Programmabstürze verursacht.

Aber, wenigstens hatts Spaß gemacht!

Wenn ich einen Piraten TS auf 15% Hülle runter schieße, sind die Schilde eigentlich schon zerstört und somit 0%. Außerdem bräuchte man ja dann einfach nur hinterher zu fliegen. Oder wird der 'get attacker' Status nach einer bestimmten Zeit wieder auf null gesetzt?

Und wenn die lib nicht nur für den Spieler, sondern für alle Rassen gilt und somit auch die Kapern können, wäre das noch viel besser. So als AL Script! :idea:

Gruß,
Micha

Arsenal
Posts: 148
Joined: Tue, 3. Feb 04, 23:28
x3tc

Post by Arsenal » Mon, 30. Aug 04, 22:35

Eine kleine Erklärung:
Projektilkanonen verschießen Projektile (muss man extra Munition kaufen) Diese Projektile können Schilde umgehen indem sie die Schildenergie dazu nutzen eine Raumblabla zu erzeugen bla. Hör dir mal den Text im Ausrüstungsdock dazu an.

Es verhält sich halt so:
Energetische Schilde können nur Energie absorbieren die nicht in Form von kinetischer Energie auftreten also Hitze (Plasma) oder auch ionisierte Partikel aufgrund der Ionisierung ablenken (da gibts ja diese netten Gleichungen und so) ungelenkte Materie (Staub, kleine Meteoriten) können ebenfalls teilweise abgelenkt werden. Die Projektile sind aber nun vergleichbar mit den heutzutage verbotenen Explosivmunition, also ein Projektil, das zielgerichtet mit sehr hoher Geschwindigkeit auf das Schild auftrifft. Das kann die Geschwindigkeit zwar verringern aber das Geschoss nicht aufhalten. Das Projektil trifft auf die Hülle und explodiert. Und richtet somit nur Hüllenschaden an, da das Schild ja durchdrungen und somit quasi umgangen wird.

Zugegeben das deckt sich nicht ganz mit dem was da in dem Text zur Projektilkanone steht, aber die Idee dürfte ähnlich geartet sein.

Zufälligerweise hatte ich als ich mal zum Spass ein Buch zu Star Wars schreiben wollte genau die gleiche Idee. Ich werde das Gefühl nicht los, dass es irgendwo einen Ideenpool gibt aus dem jeder jede Idee kriegen kann....

Es kann natürlich sein, dass Egosoft sich auch von Isaac Asimov beeinflussen hat lassen. Auch dieses Gefühl werde ich nicht los wenn ich etwas von Trantor und Seldon höre....


Edit:
Was ich ganz vergessen hab:
Ich find 15% ein bissl arg wenig. lieber wäre mir etwas im Bereich von 25-30%, ein Schiff mit 15% ist doch kaum mehr wert als das was man dafür bekommt es abzuballern (vorrausgesetzt es ist ein Feind)

MichaRose
Posts: 328
Joined: Sat, 28. Feb 04, 19:25
x3

Post by MichaRose » Mon, 30. Aug 04, 22:58

Jetzt verstehe ich das auch mit der 15% Hülle.

Der Pool wird wohl das Fehrnsehen, oder andere Medien sein. Denn die Leute, die auf diesen Zukunfts Kram stehen, unterliegen alle der gleichen beeinflussung. Jeder hat sich zum Beispiel Star Wars oder Star Trek angetahn und das nicht nur einmal!

Ich hatte mal vor über 15 Jahren die Idee, das man Filme Digitalisieren und abspeichern könnte. Zugegeben, mit einem C64 wäre das wohl kaum gegangen!

Gruß,
Micha

User avatar
dPM_HeMan
Posts: 820
Joined: Mon, 16. Feb 04, 13:08
x3

Post by dPM_HeMan » Tue, 31. Aug 04, 10:11

MichaRose wrote:Und wenn die lib nicht nur für den Spieler, sondern für alle Rassen gilt und somit auch die Kapern können, wäre das noch viel besser. So als AL Script! :idea:
Im Zuge dessen hab ich die ja auch entwickelt (Sklavenhändler) ;) , ich brauchte die halt als Möglichkeit ein Schiff abzuschießen und dann kommen da überlebende Passagiere raus. Irgendwie hatte ich dann plötzlich noch ne Routine fürs Kapern und da viel mir ein, dass Ticaki oder so, irgenwo mal geschrieben hatte, dass der Universumshändler vielleicht mal n Schleudersitz kriegt, damit der Pilot überlebt, wenn das Schiff zerstört wird. Naja und da dacht ich halt man könnte das als Lib. machen für jeden der ein Script schreibt wo Irgenwer, Irgendwen kapern oder zerstören soll oder wo halt die Piloten überleben sollen :)

Deine Idee mit dem Kapern ist allerdings auch nicht schlecht, die war ja das Script quasi auf jedem Schiff zu starten, dass von einem angegriffen wird und somit das Kapern garantiert wird.
Ich hätte es halt so gemacht, dass man das Ziel des Spielers überprüft (wie du es gemacht hast) und dann das Script startet (1mal) und fertig. Man könnte das Script jetzt auch wieder beenden mit der lokalen Variable, wenn der Spieler nichtmehr angreift (oder man lässt es einfach weiterlaufen und wartet ob jemand Anderes das Schiff kapert :D ).

Also ich fänd's jedenfalls gut wenn du das Script noch weitermachst.

@Arsenal:

15% find ich schon in Ordnung, oder würdest du dein Schiff früher aufgeben nur weil jemand mit Projektilkanonen auf dich feuert und deine Schilde noch pralle voll sind ? :p

Post Reply

Return to “X²: Die Bedrohung - Scripts und Modding”