Script zur Energieversorgung - brauche noch etwas Hilfe

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

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

gsl
Posts: 297
Joined: Wed, 17. Dec 03, 18:55
x2

Script zur Energieversorgung - brauche noch etwas Hilfe

Post by gsl »

Hallo,
ich habe als mein erstes Projekt für den Eigenbedarf ein Script zur Energieversorgung meiner Großkampfschiffe geschrieben.
Das läuft auch alles ganz gut:
Mein Frachter holt solange Energiezellen, bis die eingestellte Anzahl im Laderaum der Heimatbasis erreicht ist.

Doch sobald ich mehrere Frachter einsetze, gibt es drei kleinere Probleme:
1. Sie fliegen das gleiche SKW an, ist aber nicht so schlimm.
2. Angenommen, in der HB sind keine E-Zellen und die Frachter sollen beide bis 1500 einkaufen (ich gehe von Mantas aus, 999 E-Zellen passen in den Laderaum). Beide fliegen los, der erste kommt am SKW an. Kauft 999 Energiezellen, was er auch soll. Der zweite kauft aber auch 999 und nicht, wie es sollte, 501, weil er nichts vom Kauf des anderen weiß.


Was ich bräuchte:
Einen Zähler, auf den alle Frachter, die für die gleiche HB arbeiten, zugreifen können. Ich hatte schon an eine globale Variable gedacht, aber wenn ich das Script für mehr als eine HB ausführe, kommt das in Konflikt.
Hat da jemand eine Idee?


3. Der erste Frachter liefert seine 999 ab, fliegt aber sofort wieder los. Dann kommt der zweite an, liefert von seinen 999 Zellen 501 ab, behält den Rest (soll er auch), und das Script ist fertig.
Der erste Frachter, der schon wieder losgeflogen ist, merkt erst am SKW, dass er wieder zurück muss und hat also eine "Leerfahrt". Dieser Punkt sollte sich mit dem in Punkt 2 genannten Zähler lösen lassen.
#include <funnysig>
User avatar
o1ofco2
Posts: 1035
Joined: Mon, 2. Feb 04, 20:30
x4

Post by o1ofco2 »

ich denke das liegt am game selber....
die frachter schauen wieviel benötigt wird, dann wieviel wo zu welchem preis zu kaufen ist und dann fliegen sie los....
ABER: sie checken das nur einmal nähmlich kurz bevor sie losfliegen!
UND: sie checken NICHT ob nen anderer Frachter den selben auftrag hat!

ich hab ne SI-Mine und 2 Piratentransporter drin mit dem befehl doch EZ's zu kaufen und bei mir gibt es GENAU dein beschriebenes Problem (nicht das es mich stört, ganz im gegenteil... so hab ich immer nen bissl EZ's auf "Lager" (in nem transporter nähmlich der dann die ganze zeit versucht seine EZ's im frachtraum in die Fab zu übergeben, so bleiben die beiden auch mal länger "zu hause" ;) -> können nicht sooft überfallen werden)


du müsstest des halt noch abfragen: ob schon einer unterwegs ist UND wieviel der holen will und das alle 1-2 minuten halt... dann müsste es eigendlich klappen ;)


viel glück :)
gsl
Posts: 297
Joined: Wed, 17. Dec 03, 18:55
x2

Post by gsl »

Gibt es nicht schon Leute, die ein Script gemacht haben, um das Anfliegen der selben Fab zu verhindern?
Mich würde interessieren, wie die das gemacht haben!

Die Frage ist, WIE checke ich das ab?
Gibt es eine Möglichkeit, alle Schiffe zu kriegen, die ein bestimmtes Schiff als Heimatbasis haben?
#include <funnysig>
gsl
Posts: 297
Joined: Wed, 17. Dec 03, 18:55
x2

Post by gsl »

Ich hab da eine Idee, weiß aber nicht ob/wie das geht:

- Sobald das Script gestartet wird, trägt das Script [THIS] und [HOMEBASE] in ein globales Array ein.

- Jetzt kann man durch dieses Array iterieren, prüfen, ob die Heimatbasis stimmt, wenn ja -> die Menge der EZ im Frachtraum des Schiffes zu einer Variable addieren

Wäre so was möglich?
- wie deklariere ich ein globales Array?
- möglichst mehrdimensional (eine Dimension variabel, die andere 0 to 1, um Schiff und HB zu speichern)
#include <funnysig>
jnrk
Posts: 231
Joined: Thu, 11. Mar 04, 12:00
x2

Post by jnrk »

Hab mal noch keine Funktion für mehrdimensionale Arrays gesehen. Als Behelf könnten mehrere normale Arrays dienen, die über den Index zusammenhängen.
Wäre es nicht interessanter Base, benötigte Ware, benötigte (Restmenge) zu sichern, dann müsste ein Frachter beim Start nur noch kontrollieren, ob seine eigene HB etwas benötigt.

Ab 1.3 gibts glaub ich die Fkten set&get global var...

just my 2 cent,
jnrk
Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis »

gsl wrote:Gibt es nicht schon Leute, die ein Script gemacht haben, um das Anfliegen der selben Fab zu verhindern?
Mich würde interessieren, wie die das gemacht haben!
Die Frage ist, WIE checke ich das ab?
vorschlag:
Ich würde hier eher ne Abfrage einbauen, ob der Preis immer noch der selbe ist, (als der Frachter sich auf den Weg zu dieser Fab gemacht hat), sonst nächste beste Verkaufmöglichkeit suchen. Hat zwei Vorteile. Einmal hilfe es etwas bei deinem Problem und zum anderen auch, wenn KI Frachter den Preis der Fab runterschrauben.

wie jnrk schon meinte gibts globale vars erst seit Version v1.3.
wg den globalen Arrays:
Soweit ich weiss gibts keine mehrdimesionalen Arrays :( ja leider schade. ein globales Array erstellt man , indem man erst mal ein ganz normales erstellt und dieses dann mit folgendem Befehl global macht:

unter General Commands ganz unten.
set global variable : name=<String>, value=<Value>
umbedingt als Namen Strings benutzen.

soweit mein senf dazu^^
van
Van

This sentence is not provable - Gödel
ticaki
Posts: 4861
Joined: Wed, 6. Nov 02, 20:31
x3

Post by ticaki »

Mein Skript ist fertig ich trau mich nur noch nicht es zum Download anzubieten. :o

Auf jeden Fall fliegen meine (gleiche Homebase) Frachter beim Einkauf nicht die gleichen Fab's an und machen auch noch ne schöne Rundreise bis sie voll sind. Werds hier posten, wenn ich es zum Download freigegeben hab kannste dir dann mal ankucken :wink:

Gruß ticaki

P.S sind aber um die 600 Zeilen :shock:
XeHonk
Posts: 1087
Joined: Sun, 7. Mar 04, 23:03
x3tc

Post by XeHonk »

urhm.. du weißt aber schon, dass du einfach lokale variablen benutzen könntest anstatt globalen?
die würden dann nur für die entsprechende homebase gelten :P
gsl
Posts: 297
Joined: Wed, 17. Dec 03, 18:55
x2

Post by gsl »

Heißt also, auf Variablen, die ich mit "set local varibale" mache, können alle Frachter einer HB zugreifen?

Ich meine hier mal gelesen zu haben, dass das nicht so ist :roll:
Hmm...
#include <funnysig>
ArcaJeth
Posts: 2245
Joined: Mon, 10. Nov 03, 18:22
x3tc

Post by ArcaJeth »

... nein, leider im Moment noch nicht - ist leicht fehlerhaft ...

Du könntest aber einen Array als Globale Variable erstellen. So hab ich das zur Zeit beim SVP2.0 gemacht.
Dort setzt Du immer in eine Feld den Namen der Homebase und ein Feld dannach den Zähler .. verstanden ? Mal angenommen du hast dann 3 Stationen:
Array[1] = Station1, Array[2] = Station1.Zähler
Array[3] = Station2, Array[4] = Station2.Zähler
Array[5] = Station3, Array[6] = Station3.Zähler

Jedes mal wenn ein Zähler erhöht werden soll durchsuchst du das Array nach der Station (brauchst ja auch nur jedes 2. Feld im Array vergleichen). Ich hab das als 'externes' Script gemacht welches die Nummer der Station im Array zurück gibt

Code: Select all

Lauf.a = 1
while $lauf.a < Array.size
 $tmp = $Array[$lauf.a]
 if $tmp = $Station.gesucht
  return $lauf.a
 end
 $lauf.a = $lauf.a + 2
end
Wenn du nun weißt welche Nummer die Station hat, kannst du dir leicht den Zählerstand rausholen und aktuallisieren :)
Ich weiß, es ist etwas umständlich - aber es funktioniert ...

PS: (in 1.4 wird das mit dem lokalen Variablen so weit ich weiss gefixt)
jnrk
Posts: 231
Joined: Thu, 11. Mar 04, 12:00
x2

Post by jnrk »

Mensch ArcaJeth[D6a],

sag doch gleich Du nutzt das Array als Datenbank, wobei die Schrittweite fürs Ein+Auslesen gleich der Anzahl der zu speichernden Informationen ist. Genial einfach, einfach genial sag ich da :thumb_up:

=> Du kannst auf diese Weise natürlich viel mehr Informationen in einem Block zusammenfassen.

G+D,
jnrk
gsl
Posts: 297
Joined: Wed, 17. Dec 03, 18:55
x2

Post by gsl »

Naja, ich werde dann mal bis 1.4 warten - oder bis ich noch mehr Scripting-Erfahrung hab.

Mein derzeitiges Projekt ist ein System, das vor Angriffen auf eigene Schiffe warnt, aber nur wenns gefährlich wird - dann kann man den Bordcompi auf 0% drehen. Hab ich auch schon nen Thread zu.
Es bleibt spannend!
#include <funnysig>
gsl
Posts: 297
Joined: Wed, 17. Dec 03, 18:55
x2

Post by gsl »

Ich hab jetzt die Möglichkeit mit dem globalen Array als zwei externe Scripts realisiert, aber jetzt taucht das zweite Problem auf:

Wann setze ich den Counter auf 0 zurück :?
Immer, bevor ich eine neue Frachterwelle losschicke, muss der Counter ja bei 0 sein.
Ich könnte natürlich den Counter bei jedem Scriptstart resetten, aber dann würde ich Frachter 1 starten und wenn ich dann den 2. starte aber der 1. hat schon gekauft geht der Counter wieder auf 0.
Ich werd es wohl erstmal so machen, weil man ja eigentlich sowieso alle Frachter direkt hintereinander startet, aber wenn jemand eine bessere Idee hat, her damit!
#include <funnysig>

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