Script zur Energieversorgung - brauche noch etwas Hilfe
Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum
-
- Posts: 297
- Joined: Wed, 17. Dec 03, 18:55
Script zur Energieversorgung - brauche noch etwas Hilfe
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.
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>
-
- Posts: 1035
- Joined: Mon, 2. Feb 04, 20:30
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
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"

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

-
- Posts: 297
- Joined: Wed, 17. Dec 03, 18:55
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?
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>
-
- Posts: 297
- Joined: Wed, 17. Dec 03, 18:55
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)
- 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>
-
- Posts: 231
- Joined: Thu, 11. Mar 04, 12:00
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
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
-
- Posts: 61
- Joined: Wed, 25. Feb 04, 03:28
vorschlag: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?
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

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
This sentence is not provable - Gödel
-
- Posts: 4861
- Joined: Wed, 6. Nov 02, 20:31
Mein Skript ist fertig ich trau mich nur noch nicht es zum Download anzubieten. 
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
Gruß ticaki
P.S sind aber um die 600 Zeilen

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

Gruß ticaki
P.S sind aber um die 600 Zeilen

-
- Posts: 1087
- Joined: Sun, 7. Mar 04, 23:03
-
- Posts: 297
- Joined: Wed, 17. Dec 03, 18:55
-
- Posts: 2245
- Joined: Mon, 10. Nov 03, 18:22
... 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
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)
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

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)
-
- Posts: 231
- Joined: Thu, 11. Mar 04, 12:00
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
=> Du kannst auf diese Weise natürlich viel mehr Informationen in einem Block zusammenfassen.
G+D,
jnrk
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

=> Du kannst auf diese Weise natürlich viel mehr Informationen in einem Block zusammenfassen.
G+D,
jnrk
-
- Posts: 297
- Joined: Wed, 17. Dec 03, 18:55
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!
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>
-
- Posts: 297
- Joined: Wed, 17. Dec 03, 18:55
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!
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>