
Frage(n) zum Scripteditor (aktuell: Searchflags und "find flying ware")
Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum
-
- Posts: 1465
- Joined: Sat, 5. Aug 06, 22:05
Also eure vielen hilfreichen Antworten haben ja schon zu halbwegs brauchbaren Ergebnissen geführt, denn es stehen bereits ein Setupscript, ein -file und 4 weitere Scripts bereit, die bis auf ein kleines Problem (warum sonst würde ich hier posten
) auch erstmal wunderbar funktionieren. Folgendes Script speichert beim ersten Aufruf die Argumente nach den Prüfungen doppelt in den Arrays ab, wenn ich es aber aufrufe, nachdem bereits mindestens 1 (oder leider 2
) Elemente in den Arrays sind, funktioniert es wie geplant und alle Argumente werden nur einmal in den Arrays abgespeichert.
Hat irgendjemand eine Idee, wieso das passiert?
Wie versprochen diesmal mit Kommentaren, damit man den Überblick behält
.
p.s. Gibt's ne Möglichkeit im Scriptcode (Egoforum) noch mit Farben oder sozu arbeiten?


Code: Select all
Arguments
1: ware , Var/Ware , 'Ware angeben'
2: menge , Var/Number , 'Menge angeben'
3: prozent , Var/Number , 'Mindestlagerbestand in % angeben'
Source Text
001 * Überprüfung, ob die drei Arrays für dieses Schiff bereits als lokale Variablen
002 * vorhanden sind, gegebenenfalls deren Definierung, Aufruf der globalen Warenliste
003 $string.array1 = 'array.warenliste'
004 $string.array2 = 'array.mengenliste'
005 $string.array3 = 'array.prozentliste'
006 $string.array4 = 'array.globalewarenliste'
007 $array.warenliste = [THIS] -> get local variable: name=$string.array1
008 $array.mengenliste = [THIS] -> get local variable: name=$string.array2
009 $array.prozentliste = [THIS] -> get local variable: name=$string.array3
010 $array.globalewarenliste = get global variable: name=$string.array4
011 if $array.warenliste == null AND $array.mengenliste == null AND $array.prozentliste == null
012 $array.warenliste = array alloc: size=0
013 $array.mengenliste = array alloc: size=0
014 $array.prozentliste = array alloc: size=0
015 end
016 * Prüfung, ob das Schiff die Ware transportieren kann und auf deren Gültigkeit
017 if [THIS] -> can transport ware $ware
018 $Y = size of array $array.warenliste
019 * Abbruch, falls die Ware bereits im Array ist
020 while $Y > 0
021 dec $Y =
022 $arrayelement.warenliste = $array.warenliste[$Y]
023 if $ware == $arrayelement.warenliste
024 return null
025 end
026 end
027 $X = size of array $array.globalewarenliste
028 while $X > 0
029 dec $X =
030 $arrayelement.globalewarenliste = $array.globalewarenliste[$X]
031 if $arrayelement.globalewarenliste == $ware
032 * Prüfung, ob der freie Frachtraum ausreicht um alle bereits angegebenen Waren in
033 * der gewünschten Menge zu laden
034 $Y = size of array $array.warenliste
035 $frachtraum.frei = [THIS] -> get free volume of cargo bay
036 $frachtraum.zubelegen = 0
037 $frachtraum.belegt = 0
038 while $Y > 0
039 dec $Y =
040 $arrayelement.warenliste = $array.warenliste[$Y]
041 $arrayelement.mengenliste = $array.mengenliste[$Y]
042 $warenvolumen.array = get volume of ware $arrayelement.warenliste
043 $frachtraum.zubelegen = $frachtraum.zubelegen + ( $warenvolumen.array * $arrayelement.mengenliste )
044 $frachtraum.bereitsbelegt = [THIS] -> get volume of ware $arrayelement.warenliste in cargo bay
045 $frachtraum.belegt = $frachtraum.belegt + $frachtraum.bereitsbelegt
046 end
047 $warenvolumen = get volume of ware $ware
048 $frachtraum.warebelegt = [THIS] -> get volume of ware $ware in cargo bay
049 $frachtraum.zubelegen = $frachtraum.zubelegen + ( $warenvolumen * $menge ) - $frachtraum.warebelegt
050 if $frachtraum.frei >= $frachtraum.zubelegen - $frachtraum.belegt
051 * nach positiven Prüfungen Abspeichern der Werte in den drei Arrays und deren
052 * als lokale Variablen; Anpassung des Prozentsatz auf den Bereich von 0 bis 100
053 skip if $prozent >= 0
054 $prozent = 0
055 skip if $prozent <= 100
056 $prozent = 100
057 append $ware to array $array.warenliste
058 append $menge to array $array.mengenliste
059 append $prozent to array $array.prozentliste
060 end
061 end
062 end
063 end
064 [THIS] -> set local variable: name=$string.array1 value=$array.warenliste
065 [THIS] -> set local variable: name=$string.array2 value=$array.mengenliste
066 [THIS] -> set local variable: name=$string.array3 value=$array.prozentliste
067 return null
Wie versprochen diesmal mit Kommentaren, damit man den Überblick behält

p.s. Gibt's ne Möglichkeit im Scriptcode (Egoforum) noch mit Farben oder sozu arbeiten?
-
- Posts: 1465
- Joined: Sat, 5. Aug 06, 22:05
-
- Posts: 139
- Joined: Mon, 15. Mar 04, 15:52
-
- Posts: 139
- Joined: Mon, 15. Mar 04, 15:52
Das kann schnell passieren, du musst immer genau schauen das immer ein wait vorhanden ist und nicht eine Schleife ohne pause ständig durchlaufen
wird sonst lastet dein Skript so X3 aus das nichts mehr geht. Poste dir mal ein kleines Skript das ich ständig auf einem Task laufen habe,
so lange bis es extern wieder beendet wird.
wird sonst lastet dein Skript so X3 aus das nichts mehr geht. Poste dir mal ein kleines Skript das ich ständig auf einem Task laufen habe,
so lange bis es extern wieder beendet wird.
Code: Select all
001 while [THIS] -> exists
002 $enemy = [THIS] -> find nearest enemy ship: max.dist=$range
003 if $enemy -> exists
004 [THIS] -> interrupt task 0 with script 'plugin.3ddz.avoidenemycon' and prio 100: arg1=$range arg2=$enemy arg3=null arg4=null
005 * Hilfe anfordern
006 if $callhelp == 1
007 write to player logbook 'Hilfe angefordert Stufe 1'
008 end
009 @ = wait 30000 ms
010 $running = [THIS] -> is script 'plugin.3ddz.avoidenemycon' on stack of task=0
011 while $running == 1
012 @ = wait 60000 ms
013 $running = [THIS] -> is script 'plugin.3ddz.avoidenemycon' on stack of task=0
014 end
015 end
016 @ = wait 10000 ms
017 end
018 return null
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
dann Poste du mal den Code
evtl. können wir dir ja sagen worans lag 


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
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

-
- Posts: 1465
- Joined: Sat, 5. Aug 06, 22:05
Dein Wunsch ist mir Befehl, UniTrader.
Hab's auch schon mit "while [THIS] exists" am Anfang probiert, das Ergebnis war aber immer dasselbe: nichts oder Absturz
.
Nach dem letzten Scriptaufruf soll, wenn Y > 0, noch ein weiteres Script aufgerufen werden, dieses ist aber noch nicht ganz fertig.
Code: Select all
001 [THIS] -> set local variable: name='aktiv' value=[TRUE]
002 $aktiv = [THIS] -> get local variable: name='aktiv'
003 while $aktiv == [TRUE]
004 $staffel = [THIS] -> get formation leader
005 if $staffel == null
006 $staffel = [THIS]
007 end
008 $patrolsec = $staffel -> is script 'plugin.patrol.bas.single' on stack of task=0
009 $patrolsecs = $staffel -> is script 'plugin.patrol.bas.single' on stack of task=0
010 $faul = $staffel -> is task 0 in use
011 if $patrolsec == [TRUE] OR $patrolsecs == [TRUE] OR $faul == [FALSE]
012 $kampf = $staffel -> is script '!fight.attack.object' on stack of task=0
013 if $kampf == [FALSE]
014 $array.warenliste = [THIS] -> get local variable: name='array.warenliste'
015 $arraylaenge = size of array $array.warenliste
016 if $arraylaenge > 0
017 @ $Y = [THIS] -> call script 'plugin.autonachladen.warencheck' :
018 end
019 @ = wait 30000 ms
020 end
021 end
022 end
023 return null

Nach dem letzten Scriptaufruf soll, wenn Y > 0, noch ein weiteres Script aufgerufen werden, dieses ist aber noch nicht ganz fertig.
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
du hast da momenan so ne Struktur:
im prinzip wird nur gewartet, wenn das Schiff im Kampf ist
also ist die Pause an der falschen stelle... das wait sollte direkt nach das while oder vor das end, das zum while gehört 
Code: Select all
$aktiv = [TRUE]
while $aktiv // Schleife wird nie beendet, da $aktiv nicht aktualisiert wird
if...
...
end
if....
if...
if...
....
end
@ wait.... //es wird nur bedingt gewartet
end
end
end


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
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

-
- Posts: 139
- Joined: Mon, 15. Mar 04, 15:52
Das Problem ist das wenn $kampf == TRUE ist deine Wait nicht ausgeführt wird....
Stell noch ein Wait vor das letzte end in deinem Code, wie es jetzt ist läuft das ganze ohne wait ständig durch wenn eben $kampf nicht false ist
was dann dazu führt das X nicht mehr reagiert.
Ausserdem ist deine while Schleife die aktiv abfragt wirkungslos, du setzt aktiv auf true dann gehst du in die while Schleife, in der du aber aktiv
nicht mehr abfragst, also ist in der Schleife aktiv immer True.
Mein Skript hat noch kein dazugehöriges setupskript damit habe ich mich noch nicht befasst skripte auch erst seit 3 tagen...
Das Skript wird bis jetzt einfach aus einem anderen Skript mit start Task auf einem Task ausgeführt.
Edit: UniTrader {KBG} war schneller
...
Stell noch ein Wait vor das letzte end in deinem Code, wie es jetzt ist läuft das ganze ohne wait ständig durch wenn eben $kampf nicht false ist
was dann dazu führt das X nicht mehr reagiert.
Ausserdem ist deine while Schleife die aktiv abfragt wirkungslos, du setzt aktiv auf true dann gehst du in die while Schleife, in der du aber aktiv
nicht mehr abfragst, also ist in der Schleife aktiv immer True.
Mein Skript hat noch kein dazugehöriges setupskript damit habe ich mich noch nicht befasst skripte auch erst seit 3 tagen...
Das Skript wird bis jetzt einfach aus einem anderen Skript mit start Task auf einem Task ausgeführt.
Edit: UniTrader {KBG} war schneller

Last edited by 3ddz on Wed, 21. Mar 07, 18:59, edited 1 time in total.
-
- Posts: 1465
- Joined: Sat, 5. Aug 06, 22:05
Kann mal bitte jemand schauen ob dieses Setup-script bei der Versionsabfrage so funzt wie ich denke (hab keinere neuere VErsion zum Vergleich
).
Danke im Voraus.

Code: Select all
001 $version = get global variable: name='version'
002 $versionaktuell = get script version
003 if $version != $versionaktuell
004 load text: id=8554
005 global script map: set: key=Konfiguration Automatisertes Nachladen, class=Fighter, race=Player, script='plugin.autonachladen.hauptkonfig', prio=0
006 global script map: set: key=Konfiguration Automatisertes Nachladen, class=M6, race=Player, script='plugin.autonachladen.hauptkonfig', prio=0
007 global script map: set: key=COMMAND_AUTORELOAD, class=Fighter, race=Player, script='plugin.autonachladen.befehlcheck', prio=0
008 global script map: set: key=COMMAND_AUTORELOAD, class=M6, race=Player, script='plugin.autonachladen.befehlcheck', prio=0
009 set script command upgrade: command=COMMAND_AUTORELOAD upgrade=Flottenunterstützungssoftware
010 set script command upgrade: command=Konfiguration Automatisertes Nachladen upgrade=Flottenunterstützungssoftware
011 $global = null
012 skip if get global variable: name='array.globalewarenliste'
013 @ = $global -> call script 'plugin.autonachladen.globwarlist' :
014 set global variable: name='version' value=$versionaktuell
015 end
016 return null
-
- Posts: 5285
- Joined: Mon, 11. Apr 05, 21:11
Nö 
Die keys und load texts müssen bei jedem Start geladen werden, sonst werden sie entfernt. Zeilen 005 und 006 sind mir unverständlich; ist "Konfiguration Automatisertes Nachladen" der Name deiner Erweiterung? Die Zeilen tun das gleiche wie danach mit "COMMAND_AUTORELOAD", sind das zwei unterschiedliche Kommandoslots?
Zeile 013 braucht ein "Prefix: START", um nicht die ganze Geschichte zum Absturz zu bringen
STL

Die keys und load texts müssen bei jedem Start geladen werden, sonst werden sie entfernt. Zeilen 005 und 006 sind mir unverständlich; ist "Konfiguration Automatisertes Nachladen" der Name deiner Erweiterung? Die Zeilen tun das gleiche wie danach mit "COMMAND_AUTORELOAD", sind das zwei unterschiedliche Kommandoslots?
Zeile 013 braucht ein "Prefix: START", um nicht die ganze Geschichte zum Absturz zu bringen

STL
-
- Posts: 139
- Joined: Mon, 15. Mar 04, 15:52
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
wenn du irgendwo ne Spielerrasse brauchst wähle "Select Race" -> Spielername (Im Story-Spiel "Julian"), das wird dann automatisch durch "Player" ersetzt 

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
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

-
- Posts: 1465
- Joined: Sat, 5. Aug 06, 22:05
Wieso brauch Zeile 13 ein Präfix: START, oder besser gefragt was bedeutet das eigentlich (hat bisher auch ohne START gefunzt)?
Und offensichtlich war meine Frage in der Eile (noch Unterricht gehabt
) mal wieder unklar formuliert: Wenn der Benutzer jetzt eine neue Version der Scripts installiert und dann den Spielstand lädt, wird dann die neue Version auf den Schiffen, die dieses Kommando bereits verwenden, ab sofort die neue Version benutzt? Und falls nein welche Änderungen muss ich dafür noch vornehmen?
@SymTec ltd.
Was Zeile 5/6 bzw. 7/8 angeht schau mal bei class nach
.
Und offensichtlich war meine Frage in der Eile (noch Unterricht gehabt

@SymTec ltd.
Was Zeile 5/6 bzw. 7/8 angeht schau mal bei class nach

-
- Posts: 139
- Joined: Mon, 15. Mar 04, 15:52
Das was er meinte war denke ich, das du jedesmal das loadtext ausführen musst und jedesmal die Kommandos zuweisen musst.
Was bei deinem Skript so wie es jetzt ist passiert ist das die Kommandos nur zugewiesen werden wenn es eine neue Version gibt, wenn die Version gleichbleibt wird die load text Anweisung nicht ausgeführt also deine Kommandos werden nicht geladen und zugewiesen, jedenfalls soweit ich das sehe hab auch heut zum erstenmal mit diesem Kram gearbeitet.
@UniTrader {KBG}:
Ah danke, habe mal gelesen das es Probleme gibt wenn man Sachen aus dem aktuellen Spiel als Konstanten einsetzt, deshalb hab ich auch nie meinen Spieler dafür gewählt, aber wenn das dann durch Player ersetzt wird ist das ja ok
Was bei deinem Skript so wie es jetzt ist passiert ist das die Kommandos nur zugewiesen werden wenn es eine neue Version gibt, wenn die Version gleichbleibt wird die load text Anweisung nicht ausgeführt also deine Kommandos werden nicht geladen und zugewiesen, jedenfalls soweit ich das sehe hab auch heut zum erstenmal mit diesem Kram gearbeitet.
@UniTrader {KBG}:
Ah danke, habe mal gelesen das es Probleme gibt wenn man Sachen aus dem aktuellen Spiel als Konstanten einsetzt, deshalb hab ich auch nie meinen Spieler dafür gewählt, aber wenn das dann durch Player ersetzt wird ist das ja ok

-
- Posts: 5285
- Joined: Mon, 11. Apr 05, 21:11
Das heißt, dass das neue Script gestartet wird, ohne dass das alte darauf wartet, dass es fertig wird... sollte bei setups immer sein, die ja sowieso global laufen...Ogerboss wrote:Wieso brauch Zeile 13 ein Präfix: START, oder besser gefragt was bedeutet das eigentlich (hat bisher auch ohne START gefunzt)?
Hab ich. Du setzt aber trotzdem zwei Keys; zwei für M6, zwei für Fighter. Wenn du aber nicht zwei Keys haben willst, ist das nicht richtig.ogerboss wrote:Was Zeile 5/6 bzw. 7/8 angeht schau mal bei class nach.