hinzugefügte NPC Stationen vermehren sich

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

mcdance
Posts: 400
Joined: Sun, 18. Jan 09, 14:16
x4

hinzugefügte NPC Stationen vermehren sich

Post by mcdance »

Guten Morgen,

ich habe da ein kleines Problem, und zwar habe ich für mein NPP projekt diverse NPC stationen per script hinzugefügt, aber irgendwie vermehren die sich in den ausgewählten sektoren, anbei das script

Code: Select all

001   $x =  = random value from -50000 to 50001 - 1
002   $y =  = random value from -20000 to 20001 - 1
003   $z =  = random value from -50000 to 50001 - 1
004   $station =  create station: type=Boronen Aufbereitungsanlage für Radioaktive Abfälle owner=Boronen addto=Königstal x=$x y=$y z=$z
005   = $station -> install 15 units of 2 GJ Schild
006   $mcd = $station -> get maximum shield strength
007   $station -> set current shield strength to $mcd
008   $station -> add product to factory or dock: Wasser 
009   $station -> add primary resource to factory: Radioaktiver Abfall
010   $station -> add primary resource to factory: Energiezellen
011   $station -> add primary resource to factory: BoGas
012   $station -> station trade and production tasks: on=[TRUE]
013   
014   $station =  create station: type=Paraniden Fertigungsstätte für Angereichertes Uran owner=Paraniden addto=Paranid Prime x=$x y=$y z=$z
015   = $station -> install 15 units of 2 GJ Schild
016   $mcd = $station -> get maximum shield strength
017   $station -> set current shield strength to $mcd
018   $station -> add product to factory or dock: Angereichertes Uran
019   $station -> add primary resource to factory: Radioaktiver Abfall
020   $station -> add primary resource to factory: Energiezellen
021   $station -> add primary resource to factory: Teladianium
022   $station -> add primary resource to factory: BoGas
023   $station -> station trade and production tasks: on=[TRUE]
024   
025   $station =  create station: type=Paraniden Atomare Raketenfertigung owner=Paraniden addto=Dreieinigkeit x=$x y=$y z=$z
026   = $station -> install 15 units of 2 GJ Schild
027   $mcd = $station -> get maximum shield strength
028   $station -> set current shield strength to $mcd
029   $station -> add product to factory or dock: Streithammer-Torpedo
030   $station -> add primary resource to factory: Angereichertes Uran
031   $station -> add primary resource to factory: Energiezellen
032   $station -> add primary resource to factory: Erz
033   $station -> add primary resource to factory: Siliziumscheiben
034   $station -> add primary resource to factory: Cahoona Fleischblöcke
035   $station -> station trade and production tasks: on=[TRUE]
036   
037   
038   
039   return null
weiss da jemand rat, woran das liegt?

danke und gruß
Vorstandsvorsitzender der MMFC

Nuklear Power Plant
User avatar
eMYNOCK
Moderator (DevNet)
Moderator (DevNet)
Posts: 2061
Joined: Thu, 21. Aug 03, 10:37
x4

Post by eMYNOCK »

ich habe zwar nicht die geringste ahnung wie aber du solltest überprüfen ob in den betroffenen sektoren schon eine station existiert die z.b. Radioaktiven Abfall im sortiment hat...

das war, glaube ich, irgendwas mit >Arrays, check und exist< etc. ansonsten wird bei jedem spielneustart und laden immer wieder eine station an die definierten stellen gesetzt.
MynoCorp Technologies - We build it, you're stuck with it.
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Re: hinzugefügte NPC Stationen vermehren sich

Post by Gazz »

mcdance wrote:weiss da jemand rat, woran das liegt?
Das ist einfach. Du prüfst nirgends, ob die Station noch existiert.

Ob du jetzt die Objektreferenzen $station in eine globale Variable speicherst oder die Sektoren nach einer existierenden Station durchsuchst ist dabei Geschmackssache.
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.
mcdance
Posts: 400
Joined: Sun, 18. Jan 09, 14:16
x4

Post by mcdance »

moin,

sehe ich das richtig das ich dann einfach unter der positionsangabe folgendes eingebe

Code: Select all

skip if $station -> exists
sprich zwischen 003 und 004

Code: Select all

003   $z =  = random value from -50000 to 50001 - 1
004   $station =  create station: ty
oder wo muss das hin?

danke und gruß
Vorstandsvorsitzender der MMFC

Nuklear Power Plant
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

Zuerst mußt du $Station ja irgendwo herbekommen.
Wenn das Script gestartet wird, hat die Variable natürlich den Wert null und die Station null existiert definitiv nicht.

Entweder hast du den link in eine globale variable gespeichert, so daß du ihn wieder auslesen kannst, oder du suchst in dem Sektor nach einer Station, die nur von diesem Script erstellt worden sein kann.
Am einfachsten geht das, wenn du deine Stationen mit einer lokalen variable markierst.
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.
mcdance
Posts: 400
Joined: Sun, 18. Jan 09, 14:16
x4

Post by mcdance »

danke Gazz, werde mich dann mal wieder ans lesen machen :lol:

Edit:

ich habe folgendes gefunden

Code: Select all

Globale Variablen

Dies wird durch globale Variablen erreicht. Sie sind von jedem Script abrufbar.

set global variable: name=<Var/String> value=<Value>

Obiger Befehl dient dazu, eine globale Variable auf einen bestimmten Wert zu setzen. Er hat 2 Parameter, einmal <Var/String> und einmal <Value>.

<Var/String> repräsentiert den Namen der globalen Variable. Dieser muss einmalig sein, denn ansonsten überschreibt ihr eine eventuell bestehende globale Variable. Allgemeine Namen wie "Nummer" oder "Anzahl" oder "Ziel" sind dabei äußerst ungünstig, daher hat sich folgendes Namensschema weit verbreitet: "ScripterKürzel.Modulname.FunktionDerGlobalenVariable". Ich selbst könnte zum Beispiel eine globale Variable namens "s304.militaerischer.angriff.Schiffszahl" setzen. Scripter-Kürzel wäre hier also "s304", "militaerischer.angriff" wäre der Name meines Modules und "Schiffszahl" wäre dann die Funktion der globalen Variable.


<Value> ist hier der Wert, auf den wir die globale Variable setzen wollen. Bei meiner Beispielvariable könnte das zum Beispiel eine andere Variable namens "$errechnete.schiffszahl" sein.

Bei meiner Beispielvariable sähe dieser Befehl nun also folgendermaßen aus:

set global variable: name='s304.militaerischer.angriff.Schiffszahl' value=$errechnete.schiffszahl


Man kann die globalen Variablen natürlich auch abrufen. So sieht der dazu nötige Befehl aus:

<RetVar/IF> get global variable: name=<Var/String>


Dieser hat wieder 2 Parameter. Einmal <RetVar/IF> und einmal <Var/String>.

<Var/String> dient wieder dazu, den Namen der globalen Variable abzurufen.

<RetVar/IF> ist der sogenannte "Returnvalue", zu Deutsch "Rückgabewert". Das ganze funktioniert so, dass zunächst der eigentliche Befehl abgearbeitet wird, hier ist das halt das Auslesen der globalen Variable. Anschließend wird das Ergebnis des Befehls, also hier der ausgelesene Wert der GVar, im Returnvalue gespeichert.
Als Beispiel wollen wir hier mal die Variable "Schiffe" nehmen und die oben genutzte globale Variable:

$Schiffe = get global variable: name='s304.militaerischer.angriff.Schiffszahl'

Nun wird der Wert der globalen Variable also in der Variable "$Schiffe" gespeichert.
wie setzte ich das jetzt um das es im o.g. Script mit drin ist, sehe vor lauter bäume gerade den wald nicht
Vorstandsvorsitzender der MMFC

Nuklear Power Plant
User avatar
ThalonMook
Posts: 1296
Joined: Tue, 3. Feb 04, 12:11
x4

Post by ThalonMook »

Hi,

Du muss erst nach der Station suchen.
Also so in etwa:

Code: Select all

000   $exist =  find station in galaxy: startsector=Königstal class or type=Boronen Aufbereitungsanlage für Radioaktive Abfälle race=Boronen flags=null refobj=null serial=null max.jumps=1
000   if not $exist
001   $x =  = random value from -50000 to 50001 - 1
002   $y =  = random value from -20000 to 20001 - 1
003   $z =  = random value from -50000 to 50001 - 1
004   $station =  create station: type=Boronen Aufbereitungsanlage für Radioaktive Abfälle owner=Boronen addto=Königstal x=$x y=$y z=$z
005   = $station -> install 15 units of 2 GJ Schild
006   $mcd = $station -> get maximum shield strength
007   $station -> set current shield strength to $mcd
008   $station -> add product to factory or dock: Wasser
009   $station -> add primary resource to factory: Radioaktiver Abfall
010   $station -> add primary resource to factory: Energiezellen
011   $station -> add primary resource to factory: BoGas
012   $station -> station trade and production tasks: on=[TRUE]
013   
014   end
Das vor jedem Create einfügen und dann wird auch nur eine neue Station gebaut wenn keine vorhanden ist oder sie zerstört wurde.

Bis den Thalon
mcdance
Posts: 400
Joined: Sun, 18. Jan 09, 14:16
x4

Post by mcdance »

Ich danke allen helfenden, scheint bis jetzt zu funktionieren

danke
Vorstandsvorsitzender der MMFC

Nuklear Power Plant

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