Scripthilfe für einen Anfänger

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

User avatar
Jey 16
Posts: 1212
Joined: Sun, 30. Jul 06, 22:52
x3ap

Scripthilfe für einen Anfänger

Post by Jey 16 »

Hey X-Community,

Ich würde gerne eine Art "regeneratives Hüllensystem" erstellen, bei dem die Hülle eines bestimmten Schiffstyps pro Sekunde um einen bestimmten Wert erhöht wird bis eben das maximum der Hülle ereicht ist.
Die Hülle regeneriert sich über die Zeit also selbst. Ich kenne mich mit dem Scripteditor allerdings überhaupt nicht aus!


Ich dachte im prinzip würde es mit der Hülle ja zumindest so funktionieren:

Code: Select all

get max hull  -> maxhull
get hull -> hull

While hull<maxhull do
           hull + 5
           wait 1s


Naja zumidnest so in etwa ^^ Programmieren war nie meine Stärke.

Ich denke mal ihr könnt mir da helfen :)
User avatar
Cadvan
Posts: 2951
Joined: Sun, 14. Mar 04, 05:05
x4

Post by Cadvan »

als ausführendes script ist es fast richtig.

Code: Select all


001:  $maxhull: [This] -> get max hull
002:  $hull: [This] -> get hull
003: 
004:  while $hull < $maxhull
005:    $hull = $hull + 5
006:    [This] -> set hull to $hull
007:@  = wait 1000 ms
008:  end
009:
010: return null

die frage ist nur: wie willst du es starten?
Willst du es nur für eine Schiffsklasse haben mit festen Hüllenwerten oder soll es sich der Schiffsklasse anpassen? (dann würde ich prozente vorschlagen)

Wann soll es enden?
Du mußt dir auch um die umgebenden faktoren gedanken machen. insbesondere der start und das ende, sonst hast du irgendwann unter umständen dieses kleine script 1.000 mal auf deinems chiff laufen, deine hülle in null komma nix wieder hergestellt (balance ade) und kannst nicht mehr spielen ( fps im keller)
User avatar
Jey 16
Posts: 1212
Joined: Sun, 30. Jul 06, 22:52
x3ap

Post by Jey 16 »

Soweit schonmal danke, war also doch nicht ganz so falsch was ich da im Kopf hatte :)

Mir ist gerade der Gedanke gekommen in der Schleife noch einmal die Hülle abzufragen, wenn nämlich das Schiffe wärend die Schleife ausgeführt wird, erneut Schaden erleidet, würde dieser praktisch nicht beachtet werden.

Wie regelt das eigentlich der Scripteditor wenn der maximale Hüllenwert 1000 beträgt und die Hülle den Wert 999 hat. Es werden 5 dazu addiert, das wäre dan 1004. wird der Überschuss einfach nicht beachtet und die Hülle wird einfach auf 1000 gesetzt?

Zum Start dachte ich an eine Abfrage die auf dem Schiff läuft und die Hülle in % abfrägt: Ist diese kleiner als 100% wird das auführende Script gestartet.
Die Abfrage muss aber auch abfragen, ob bereits ein Script dieser Art ausgeführt wird.
Allerdings fehlt mir dafür jetzt der Ansatz.
User avatar
Generalwest
Posts: 2764
Joined: Thu, 31. May 07, 18:07
x4

Post by Generalwest »

lass es halt direkt auf einen task laufen.

<RevObj> start task=(fester task oder einen den du mit get aviabel task start= rausfindest (General Commands -> Script Calls)) (Externes bzw zusätzliches Script)

aus Zeile 6 kannst du möglicherweise while [TRUE] machen und sie in Zeile 001 verschieben. So hast du alles eingebunden.

Eine abfrage ob das revobj noch exestiert wäre auch "Sinnvoll" denk ich wobei ich nicht sagen kann ob das Script wirklich weiter läuft wenn das RevObj gegrillt wurde.

das sähe beispielsweise so aus (in der while Schleife)

skip if <RevObj> -> exist
|return null
Mir ist gerade der Gedanke gekommen in der Schleife noch einmal die Hülle abzufragen, wenn nämlich das Schiffe wärend die Schleife ausgeführt wird, erneut Schaden erleidet, würde dieser praktisch nicht beachtet werden.
Stimmt aber wenn das Script wieder aufgerufen wird dann schon. Allerdings kannst du es etwas komplizierter machen und die while var in der while neu setzen bzw den alten Inhalt ersetzen.

Code: Select all

$max.hull [THIS] -> get max hull
$hull == $max.hull - 1
while $max.hull < $hull

$hull [THIS] -> get hull
...den rest vom obigen Beispiel bzw weiterer Script Code...
end
Werden zwar ein Paar wegen Bad-Style meckern aber es ist Möglich.
Wie regelt das eigentlich der Scripteditor wenn der maximale Hüllenwert 1000 beträgt und die Hülle den Wert 999 hat. Es werden 5 dazu addiert, das wäre dan 1004. wird der Überschuss einfach nicht beachtet und die Hülle wird einfach auf 1000 gesetzt?
get max hull übergibt in deinem Beispiel 1000
get hull übergibt den aktuellen hüllenwert in deinem Beispiel 999

wenn dus mit $hull == &hull + (Deinen Wert) machst kann es nie über die max hull drüber. Es wird nur bis dahin aufgefüllt und der rest normalerweise Ignoriert.

wenn du hier $max hull setzt wird direkt die maximale Hüllenpunkte aus der TShip gesetzt.

if task in use prüft ob ein script auf einem Bestimmten Task bereits läuft.
<RetVar/if> <RevObj> is script <script name> on stack of task=<VarNum> sollte prüfen ob auf dem Task ein bestimmtes Script läuft (General Commands -> Script Calls)

Hoffe geholfen zu haben. PS: Aufhänger kann alles mögliche sein je nachdem was dir als Trigger vorschwebt. Auto wäre zum beispiel die Otas Schiffe vom X3R XTM das ein Array durchgeht und schaut welches Schiff der Otas weniger als 100% Hülle hat.

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