Stationen scripten

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

edeler89
Posts: 15
Joined: Wed, 25. Mar 09, 02:17
x3tc

Stationen scripten

Post by edeler89 »

Hallo alle zusammen, ich habe mir selber ein script erstellt, indem ich eineb Militärischen Außenposten produziert habe, der mich immer mit Raketen der Warenklasse "M" versorgen soll.

Mein Ansatz sieht wie folgt aus :

001 $station = create station: type=Militärischer Außenposten owner=Argonen addto=Argon Prime x=0 y=0 z=0
002 = $station -> install 3 units of 2 GJ Schild
003 $shield = $station -> get maximum shield strength
004 $station -> set current shield strength to $shield
005 $station -> set name to 'Raketenbasis'
006 $station -> add product to factory or dock: Baluga-Rakete
007 $station -> add product to factory or dock: Donnerschlag-Rakete
008 $station -> add product to factory or dock: Dorn-Rakete
009 $station -> add product to factory or dock: Feuersturm-Torpedo
010 $station -> add product to factory or dock: Gewittersturm-Rakete
011 $station -> add product to factory or dock: Hammerhai-Rakete
012 $station -> add product to factory or dock: Hornisse-Rakete
013 $station -> add product to factory or dock: Morgenstern-Rakete
014 $station -> add product to factory or dock: Taifun-Rakete
015 $station -> add product to factory or dock: Tornado-Rakete
016 $station -> add product to factory or dock: Zyklon-Rakete
017 $station -> add product to factory or dock: Laderaumerweiterung
018 $station -> add product to factory or dock: Ruder-Optimierung
019 $station -> add product to factory or dock: Triebwerkstuning
020 $station -> station trade and production tasks: on=[TRUE]

Nun will ich das ganze so gestalten, dass ich immer ein paar Raketen im Lager habe, es aber nie voll ist, damit ich auch mal wieder welche verkaufen kann ;)
Das Lager einfach immer wieder auffüllen zu lassen per script kann ich, aber ich würde mir wünschen, dass es quasi immer halbvoll ist. :-D

Ich bitte um Vorschläge und Hilfen, da ich nicht so sehr bewandert bin, was das scripten angeht !

Danke schonmal im Voraus !


Edit
Wenn ich aber eine Abfrage einbaue, ob das Lager min. halbvoll ist, es aber voll ist, dann wird es ja nicht wieder leer...
Gibt es denn die Möglichkeit, die Anzahl auf eine bestimmte Anzahl festzulegen ?
Denn wenn ich Raketen verkaufe, sollen die so schnell wie möglich wieder aus dem Lager verschwinden ! (man kann ja nur immer eine bestimmte Menge lagern)
Last edited by edeler89 on Wed, 25. Mar 09, 14:31, edited 1 time in total.
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Docks sind keine Fabriken und produzieren deswegen nichts.. es sind reine Lager.. da wird dir wohl nix anderes übrig bleiben als das ganze per Script zu lösen :roll:
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
Kakadu
Posts: 295
Joined: Thu, 2. Dec 04, 16:13
x4

Post by Kakadu »

Da müsstest Du afaik einfach in das Script zum befüllen eine Abfrage für den Lagerbestand einbauen, die prüft, ob das Lager zu weniger als 50% gefüllt ist und bei ja einfach eine Rakete reinscriptet.
***modified*** und stolz drauf!
[ external image ]
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

Dann wärs aber einfacher, die Raketen in das Schiff reinzuscripten, das sie abschießen soll.
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
Kakadu
Posts: 295
Joined: Thu, 2. Dec 04, 16:13
x4

Post by Kakadu »

Solange da nur durch Script Raketen reinkommen, sollte es durch die Abfrage eigentlich nicht mehr als halbvoll werden :?
Ansonsten "einfach" ein zweites Script auf der Station laufen lassen, welches bei einem Lagerbestand von mehr als 50% immer eine Rakete entfernt.

Aber was soll das eigentlich mit dem immer halbvoll :?
Für den Verkauf ist es doch völlig schnuppe, ob halb oder ganz voll.
***modified*** und stolz drauf!
[ external image ]
edeler89
Posts: 15
Joined: Wed, 25. Mar 09, 02:17
x3tc

Post by edeler89 »

Kakadu wrote:Aber was soll das eigentlich mit dem immer halbvoll :?
Für den Verkauf ist es doch völlig schnuppe, ob halb oder ganz voll.
Wenn ich aber kurz danach wieder Raketen des gleichen Typs verkaufen möchte, dann sind die anderen immernoch auf Lager. Ich müsste also warten, bis irgendwer dieses Lager leerkauft, und darauf will ich nicht warten. Also per script irgendwie wieder halbvoll machen...

Nur weiß ich nicht, wie das gehen soll .... :evil:
User avatar
ScRaT_GER
Posts: 1962
Joined: Tue, 8. Jan 08, 18:19
x3tc

Post by ScRaT_GER »

Ist ganz einfach:

$amount.max = $station -> get max storage volume of ware $rocket (oder so ähnlich)
$amount.max = $amount.max / 2
$amount.true = $station -> get true amount of $rocket in cargo bay
if $amount.true > $amount.max
   $amount = $amount.true - $amount.max
   $station -> install $amount units of §rocket
end

So oder so ähnlich sollte das klappen.

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

Post by Gazz »

edeler89 wrote:Wenn ich aber kurz danach wieder Raketen des gleichen Typs verkaufen möchte, dann sind die anderen immernoch auf Lager. Ich müsste also warten, bis irgendwer dieses Lager leerkauft, und darauf will ich nicht warten.
Also wenns nur darum geht, dann ist es so einfacher:

add money to player: 2000000000
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.
edeler89
Posts: 15
Joined: Wed, 25. Mar 09, 02:17
x3tc

Post by edeler89 »

$rocket = Morgenstern-Rakete
022 * Warenmenge
023 $menge.max = $station -> get max. store amount of ware $rocket
024 $menge.max = $menge.max / 2
025 $menge.true = $station -> get true amount of ware $rocket in cargo bay
026 if $menge.true > $menge.max
027 $menge = - $menge.true - $menge.max
028 = $station -> install $menge units of $rocket
029 end
030 return null


irgendwie scheint es noch nicht zu funktionieren...
aber muss bei 024 nicht auch ein $menge.true = $menge.max / 2 hin ?
das allein kann es aber nicht sein, denn das habe ich schon probiert...
kann bitte noch wer helfen ... :cry:

@ Gazz
das kann ja jeder, aber ich wollte es doch durch etwas ehrlichere Arbeit machen ;)
d0peshow
Posts: 646
Joined: Tue, 17. May 05, 12:07
x4

Post by d0peshow »

was ich trotzdem nicht verstehe, ist wieso Du die Fabrik nur halbvoll machen willst? Verkaufen kannst Du das Zeug doch auch an jedem x-beliebigen AD/MA/HQ? Also wozu der ganze Stress? Mach das Ding einfach randvoll und gut is.. :)
:D Tutorial zur Erstellung einer 100%-TC-kompatiblen Cockpit-Mod :D
---------------------------------------------------------------------------------------
Mein erstes eigenes Script: d0 Raketen Hotkeys
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz »

Oh, natürlich macht ein script wie dieses auch Arbeit aber... ehrlich?

Rechne mal nach was bei
027 $menge = - $menge.true - $menge.max

tatsächlich rauskommt. Ohne Klammern ist das etwas vage formuliert.

Einfacher und schneller ginge es natürlich mit
Add -999999 units of $ware
Add (halbe Menge) units of $ware
d0peshow wrote:was ich trotzdem nicht verstehe, ist wieso Du die Fabrik nur halbvoll machen willst? Verkaufen kannst Du das Zeug doch auch an jedem x-beliebigen AD/MA/HQ? Also wozu der ganze Stress? Mach das Ding einfach randvoll und gut is.. :)
Natürlich wäre es sinnvoller, eine Schleife mit
Add 999999 units of $ware auf einem Frachter laufen zu lassen
aber ich glaub nicht daß es hier darum geht, nur ein Handelsproblem zu lösen. =P

Geht mir ja auch manchmal so. Manchmal ist es einfach nicht genug, das Problem zu lösen. Es muß auf meine Weise gelöst werden und nicht anders. ("oder gar nicht" wäre auch nicht akzeptabel)
Sinnvoll oder nicht steht dabei nicht zur Debatte.
Last edited by Gazz on Wed, 25. Mar 09, 17:45, edited 2 times in total.
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 »

Schau mal welchen Wert $menge.true hier:

$menge.true = $station -> get true amount of ware $rocket in cargo bay

annimt.
Einfach mit write to player logbook $menge.true.
Wenn das gleich null ist, ersetze

get true amount of ware

durch

get amount of ware.

Weiß nicht genau wie der Befehl funktioniert.
aber muss bei 024 nicht auch ein $menge.true = $menge.max / 2 hin ?
Der Name $menge.max ist vllt. irreführend. Nenn es §menge.half oder so, dann macht alles wieder Sinn.

MfG,
ScRaT
d0peshow
Posts: 646
Joined: Tue, 17. May 05, 12:07
x4

Post by d0peshow »

Gazz wrote:Ich glaub nicht daß es hier darum geht, nur ein Handelsproblem zu lösen. =P

Geht mir ja auch manchmal so. Manchmal ist es einfach nicht genug, das Problem zu lösen. Es muß auf meine Weise gelöst werden und nicht anders.
Sinnvoll oder nicht steht dabei nicht zur Debatte.
Ok, das Prinzip "Warum einfach, wenns auch kompliziert geht" kenn ich auch irgendwoher.. :)
aber wollte die Möglichkeit trotzdem mal erwähnen, nur der Vollständigkeit halber.
:D Tutorial zur Erstellung einer 100%-TC-kompatiblen Cockpit-Mod :D
---------------------------------------------------------------------------------------
Mein erstes eigenes Script: d0 Raketen Hotkeys
edeler89
Posts: 15
Joined: Wed, 25. Mar 09, 02:17
x3tc

Post by edeler89 »

Sowohl mit der Zeile

025 $menge.true = $station -> get true amount of ware $rocket in cargo bay

als auch mit

025 $menge.true = $station -> get amount of ware $rocket in cargo bay

wir jedes mal "0" angezeigt, es werden nur dann Raketen ins Lager gebracht, wenn ich die Befehle

025 $menge.true = $station -> install $menge.true units of $rocket
oder
025 $menge.true = $station -> add $menge.true units of $rocket

verwende.

Die Zeilen daruner funktionieren leider noch gar nicht. Irgendwie müsste ich doch eine Schleife einarbeiten, damit das Lager immer wieder neu bestückt wird, noch funktioniert das nicht...
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

hier mal das Script was du willst in der Art wie ich es schreiben würde (ich hab mir jetzt nicht alle anderen Posts durchgelesen, nur die letzten paar und sehe dass du mit den bisherigen Vorschlägen nicht klar kommst...)


* Zuerst die Station erstellen (wie, was, wo ist hier irrelevant)
$Station = create Station....

*Dann die gewünschen Waren in einer Liste (oder auch Array) sammeln, um sie später alle nacheinander abarbeiten zu können
$Ware.arr = array alloc: size=0
append Ware1 into array $Ware.arr
append Ware2 into array $Ware.arr
append Ware3 into array $Ware.arr
append ....

* anschliessend alle Waren in der Liste als Produkt in die Station einfügen
* (die ersten 4 gelben Zeilen und die letze sorgen dafür, dass die aktionen dazwischen für jeden eintrag in der Liste nacheinander ausgeführt werden, stell dir einfach vor $Ware steht für alle Waren in deiner Liste auf einmal)

$Ware.size = size of array $Ware.arr
while $Ware.size
| dec $Ware.size=
| $Ware = $Ware.arr [ $Ware.size ]

| $Station add product to factory or Dock $Ware
end

*und nun das Lager für immer halb voll halten... (Gelb hat dieselbe bedeutung wie oben ^^)
while [TRUE]
| @wait 1000 ms
| $Ware.size = size of array $Ware.arr
| while $Ware.size
| | dec $Ware.size=
| | $Ware = $Ware.arr [ $Ware.size ]
* Hälfte der Maximalmenge der Ware ermitteln
| | $Menge.soll = $Station -> get maximum amount of Ware $Ware that can be stored in the Cargo Bay
| | $Menge.soll = $Menge.soll / 2
*Bestandsmenge ermitteln
| | $Menge.ist = $Station -> get amount of Ware $Ware the Cargo Bay
*differenz aus beiden errechnen und diese dem Lager hinzufügen (bzw. entfernen)
| | $Menge.differenz = $Menge.soll - $Menge.ist
| | = $Station -> add $Menge.differenz units of $Ware
| end
end


PS und nimm auf jeden fall add ware, NICHT install, denn dieses hat seltsame Nebenwirkungen wenn man damit Waren abziehen will...


EDIT: Kommentare in kleinere Schrift gesetzt, damit man sie besser vom Code unterscheiden kann...
Last edited by UniTrader on Wed, 25. Mar 09, 21:41, edited 1 time in total.
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 ;)
d0peshow
Posts: 646
Joined: Tue, 17. May 05, 12:07
x4

Post by d0peshow »

da hätt ich doch auch gleich noch eine Frage dazu:
wärs evtl. nicht sinnvoll da noch eine Abbruchbedingung mit einzubauen? So in der Art "while $Station exists" anstelle von while [TRUE]? Nur für den Fall der Fälle? Oder ist das Unsinn?
:D Tutorial zur Erstellung einer 100%-TC-kompatiblen Cockpit-Mod :D
---------------------------------------------------------------------------------------
Mein erstes eigenes Script: d0 Raketen Hotkeys
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

d0peshow wrote:da hätt ich doch auch gleich noch eine Frage dazu:
wärs evtl. nicht sinnvoll da noch eine Abbruchbedingung mit einzubauen? So in der Art "while $Station exists" anstelle von while [TRUE]? Nur für den Fall der Fälle? Oder ist das Unsinn?
ja, wäre sinnvoll, ich hatte aber nicht mehr den nerv das noch genauer auszuführen...
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 ;)
d0peshow
Posts: 646
Joined: Tue, 17. May 05, 12:07
x4

Post by d0peshow »

hehe ok, thx :)
:D Tutorial zur Erstellung einer 100%-TC-kompatiblen Cockpit-Mod :D
---------------------------------------------------------------------------------------
Mein erstes eigenes Script: d0 Raketen Hotkeys
edeler89
Posts: 15
Joined: Wed, 25. Mar 09, 02:17
x3tc

Post by edeler89 »

:o WWWOOOOOOOOOOOOWWW :o

DANKE !!!

Es läuft genau so, wie ich es mir vorgestellt habe !!!
Dankeschön !
Das hätte ich ohne Eure Hilfe und ganz speziell die von UniTrader nie geschafft !
Danke nochmals !

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

Post by UniTrader »

ich hoffe du verstehst auch ungefähr wie das ganze funktioniert ;) hat mich nämlich nen bisschen Zeit gekostet das ganze zusammen zu schreiben ^^
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 ;)

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