Benutzer:Schnobs/Skripte: Unterschied zwischen den Versionen
Quellcode eingefügt. Kommentare willkommen. |
|||
| Zeile 15: | Zeile 15: | ||
===Start=== | ===Start=== | ||
Script plugin.satdrop.start | |||
Version: 0 | |||
for Script Engine Version: 25 | |||
Description | |||
Asks for relevant values, starts Sat deployment loop | |||
Arguments | |||
* 1: Camp , Var/Station , 'Select Base Camp' | |||
* 2: SatType , Var/Number , '0 NavSat, alles andere Erw.Sat' | |||
* 3: Range , Var/Number , 'max. Jump Range' | |||
Source Text | |||
001 $PageID = get global variable: name=$pageID.satdrop | 001 $PageID = get global variable: name=$pageID.satdrop | ||
002 | 002 | ||
| Zeile 37: | Zeile 34: | ||
004 * Automatic Satellite Deployment, startup script | 004 * Automatic Satellite Deployment, startup script | ||
005 | 005 | ||
006 $SatType = $ | 006 if $SatType == 0 | ||
007 $SatType = Navigationssatellit | |||
008 else | |||
009 $SatType = Erweiterter Satellit | |||
010 end | |||
011 | |||
012 * Andockerlaubnis am Basislager | |||
013 | |||
014 if not [THIS] -> is docking allowed at $Camp | |||
015 play sample 1248 | |||
016 write to player logbook: printf: pageid=$PageID textid=1, $Camp, null, null, null, null | |||
017 return null | |||
018 end | |||
019 | |||
020 * sind schon Satelliten im Kofferraum | |||
021 if not [THIS] -> get amount of ware $SatType in cargo bay | |||
022 * aha. Ist denn wenigstens genug Platz | |||
023 if not [THIS] -> get free amount of ware $SatType in cargo bay | |||
024 play sample 1253 | |||
025 write to player logbook: printf: pageid=$PageID textid=2, $SatType, null, null, null, null | |||
026 return null | |||
027 end | |||
028 end | |||
029 | |||
030 * ----ab hier werden die Sektoren durchgegangen---- | |||
031 * erstmal ein paar variablen | |||
032 * wie gross ist das Universum | |||
033 $uniX = get max sectors in x direction | |||
034 $uniY = get max sectors in y direction | |||
035 | |||
036 * und wo bin ich gerade | |||
037 $CampSector = $Camp -> get sector | |||
038 $homeX = $CampSector -> get universe x index | |||
039 $homeY = $CampSector -> get universe y index | |||
040 $SectorList = array alloc: size=0 | |||
041 | |||
042 | |||
043 * kleineren bereich abstecken... | |||
042 | |||
043 | |||
044 | 044 | ||
045 * und jetzt fuer min max XY pruefen... | 045 $minX = $homeX - $Range | ||
046 skip if $minX >= 0 | |||
047 $minX = 0 | |||
048 $maxX = $homeX + $Range | |||
049 skip if $maxX <= $uniX | |||
050 $maxX = $uniX | |||
051 | |||
052 $minY = $homeY - $Range | |||
053 skip if $minY >= 0 | |||
054 $minY = 0 | |||
055 $maxY = $homeY + $Range | |||
056 skip if $maxY <= $uniY | |||
057 $maxY = $uniY | |||
058 | |||
059 * und jetzt fuer min max XY pruefen... | |||
060 | |||
061 $x = $minX | |||
062 while $x <= $maxX | |||
063 $y = $minY | |||
064 while $y <= $maxY | |||
065 $tempSec = get sector from universe index: x=$x, y=$y | |||
066 $tempdist = get jumps from sector $CampSector to sector $tempSec | |||
067 $known = $tempSec -> is sector known by the player | |||
068 $nmy = [THIS] -> is $tempSec a enemy | |||
069 if $tempdist <= $Range AND $known == [TRUE] AND $nmy == [FALSE] | |||
070 | |||
071 * Sektor dem Array hinzufuegen | |||
072 append $tempSec to array $SectorList | |||
073 | |||
074 * ende der eigentlichen tests | |||
075 end | |||
076 | |||
077 * y hochsetzen, y-Schleife beenden | |||
078 inc $y = | |||
079 end | |||
080 | |||
081 * Ende der x-Schleife | |||
082 inc $x = | |||
083 end | |||
084 | |||
085 * an dieser Stelle sollte eine Sektorenliste vorliege | |||
086 * nun die Liste ins Log schreiben | |||
087 | |||
088 | |||
089 $i = 1 | |||
090 $numSectors = size of array $SectorList | |||
091 $tempSec = $SectorList[0] | |||
092 $msg = $tempSec | |||
093 while $i < $numSectors | |||
094 $tempSec = $SectorList[$i] | |||
095 $msg = $msg + ', ' + $tempSec | |||
096 inc $i = | |||
097 end | |||
098 | |||
099 write to player logbook: printf: pageid=$PageID textid=3, $SatType, $Camp, $msg, null, null | |||
100 | |||
101 | |||
102 * variablen exportieren un das eigentliche skript aufrufen. | |||
103 [THIS] -> set local variable: name=$SectorList value=$SectorList | |||
104 [THIS] -> set local variable: name=$SatType value=$SatType | |||
105 @ = [THIS] -> call script 'plugin.satdrop.main' : Basislager=$Camp Nav. oder Erw. satellit=$SatType | |||
106 * callscript | |||
107 return null | |||
==== | ===Sektoren überprüfen=== | ||
Script plugin.satdrop.main | |||
Version: 0 | |||
for Script Engine Version: 25 | |||
Description | |||
Satellite Deployment, main program loop | |||
Arguments | |||
* 1: Camp , Var/Station , 'Basislager' | |||
* 2: SatType , Var/Ware , 'Nav. oder Erw. satellit' | |||
Source Text | |||
001 | |||
002 | |||
003 | |||
004 | |||
005 * dies ist eine Endlos-Schleife | |||
006 while [TRUE] | |||
007 START: | |||
008 * Sektorenliste aktualisieren | |||
009 $SectorList = [THIS] -> get local variable: name=$SectorList | |||
010 | |||
011 * sind ueberhaupt Satelliten an Bord | |||
012 * nicht vergessen, alles ausser 0 ist wahr... | |||
013 skip if [THIS] -> get amount of ware $SatType in cargo bay | |||
014 * FEHLT einkaufskript starten | |||
015 | |||
016 | |||
017 $i.sec = 0 | |||
018 $sector.count = size of array $SectorList | |||
019 while $i.sec < $sector.count | |||
020 $tempSec = $SectorList[$i.sec] | |||
021 | |||
022 * falls wir keinen Nav.Sat finden... | |||
023 skip if find ship: sector=$tempSec class or type=Navigationssatellit race=Player flags=null refobj=null maxdist=null maxnum=null refpos=null | |||
024 * und auch keinen Erw.Sat... | |||
025 skip if find ship: sector=$tempSec class or type=Erweiterter Satellit race=Player flags=null refobj=null maxdist=null maxnum=null refpos=null | |||
026 * sofort aus der Schleife ausbrechen. | |||
027 break | |||
028 | |||
029 | |||
030 * wenn wir bis hier kommen, ist ein Satellit vorhanden. | |||
031 * deshalb wird tempSec geloescht, i hochgesetzt, naechster Sektor bitte. | |||
032 $tempSec = null | |||
033 inc $i.sec = | |||
034 end | |||
035 | |||
036 | |||
037 * wenn tempSec einen Wert hat, wurde oben kein Sat gefunden... | |||
038 if is datatyp[ $tempSec ] == [SECTOR] | |||
039 * FEHLT script hingehen und satellit aussetzen | |||
040 | |||
041 * und zurueck auf los. Wir schauen uns die restlichen | |||
042 * Sektoren an, noch bevor wir nach hause fliegen. | |||
043 @ = wait randomly from 0 to 5000 ms | |||
044 goto label START | |||
045 end | |||
046 | |||
047 | |||
048 * wenn wir hier ankommen, gibt es derzeit nichts weiter zu tun. | |||
049 * aber wenn wir im raum sind, gab es was zu tun. | |||
050 * brauchen wir nachschub an satelliten | |||
051 if not [THIS] -> is docked | |||
052 $sat.count = [THIS] -> get amount of ware $SatType in cargo bay | |||
053 skip if $sat.count > 1 | |||
054 * FEHLT einkaufscript aufrufen | |||
055 @ = wait randomly from 0 to 5000 ms | |||
056 goto label START | |||
057 end | |||
058 | |||
059 | |||
060 * wenn wir hier ankommen, wars ein nullrunde | |||
061 * machen wir halt 5 Mizuras Pause... | |||
062 @ = wait 300000 ms | |||
063 * ...plus zusatzzahl | |||
064 @ = wait randomly from 0 to 5000 ms | |||
065 end | |||
066 return null | |||
===Satelliten einkaufen=== | ===Satelliten einkaufen=== | ||
Dazu würde ich gerne auf die "Manuellen Handelsbefehle" (Skript im Bonuspack) zurückgreifen. Die Sprungweite würde dann von der Einstellung des Einsatzbereiches übernommen. Ein potentielles Problem besteht darin, daß für ein vernünftiges Einkaufsverhalten bereits einige Satelliten verteilt sein sollten... | Dazu würde ich gerne auf die "Manuellen Handelsbefehle" (Skript im Bonuspack) zurückgreifen. Die Sprungweite würde dann von der Einstellung des Einsatzbereiches übernommen. Ein potentielles Problem besteht darin, daß für ein vernünftiges Einkaufsverhalten bereits einige Satelliten verteilt sein sollten... | ||
===Der Rest=== | ===Der Rest=== | ||
Ziel Anfliegen, Satellit erzeugen, ggf zurück zum Parkplatz. Nichts davon sollte ein Problem sein. | Ziel Anfliegen, Satellit erzeugen, ggf zurück zum Parkplatz. Nichts davon sollte ein Problem sein. | ||
Version vom 23. Juni 2007, 22:04 Uhr
Jawoll, ich will's versuchen. Mal sehen, was dabei rauskommt. Als erstes Projekt habe ich mir ein Skript vorgenommen, daß automatisch Satelliten aufstellt (und zerstörte Satelliten ersetzt).
Hier der Plan. Kommentare sind herzlich willkommen.
Funktionsumfang (der Plan)
Eine Heimatbasis im eigentlichen Sinne (Spielerstation) ist nicht erforderlich. Aber das Schiff sollte ein Basislager (beliebige Station) haben, wohin es zurückkehrt, wenn sonst nichts anliegt.
Einstellung des Einsatzgebietes über Sprungweite und Freund/Feind Einstellungen. Das Schiff plaziert Satelliten in allen Sektoren des Einsatzgebietes, und ersetzt verloren gegangene.
Die erforderlichen Satelliten werden (ebenfalls innerhalb des Einsatzgebietes) günstigst eingekauft.
Ablauf (hier brauche ich Hilfe)
Start
Script plugin.satdrop.start
Version: 0
for Script Engine Version: 25
Description
Asks for relevant values, starts Sat deployment loop
Arguments
* 1: Camp , Var/Station , 'Select Base Camp'
* 2: SatType , Var/Number , '0 NavSat, alles andere Erw.Sat'
* 3: Range , Var/Number , 'max. Jump Range'
Source Text
001 $PageID = get global variable: name=$pageID.satdrop
002
003 * Created by Schnobs, July 2007
004 * Automatic Satellite Deployment, startup script
005
006 if $SatType == 0
007 $SatType = Navigationssatellit
008 else
009 $SatType = Erweiterter Satellit
010 end
011
012 * Andockerlaubnis am Basislager
013
014 if not [THIS] -> is docking allowed at $Camp
015 play sample 1248
016 write to player logbook: printf: pageid=$PageID textid=1, $Camp, null, null, null, null
017 return null
018 end
019
020 * sind schon Satelliten im Kofferraum
021 if not [THIS] -> get amount of ware $SatType in cargo bay
022 * aha. Ist denn wenigstens genug Platz
023 if not [THIS] -> get free amount of ware $SatType in cargo bay
024 play sample 1253
025 write to player logbook: printf: pageid=$PageID textid=2, $SatType, null, null, null, null
026 return null
027 end
028 end
029
030 * ----ab hier werden die Sektoren durchgegangen----
031 * erstmal ein paar variablen
032 * wie gross ist das Universum
033 $uniX = get max sectors in x direction
034 $uniY = get max sectors in y direction
035
036 * und wo bin ich gerade
037 $CampSector = $Camp -> get sector
038 $homeX = $CampSector -> get universe x index
039 $homeY = $CampSector -> get universe y index
040 $SectorList = array alloc: size=0
041
042
043 * kleineren bereich abstecken...
044
045 $minX = $homeX - $Range
046 skip if $minX >= 0
047 $minX = 0
048 $maxX = $homeX + $Range
049 skip if $maxX <= $uniX
050 $maxX = $uniX
051
052 $minY = $homeY - $Range
053 skip if $minY >= 0
054 $minY = 0
055 $maxY = $homeY + $Range
056 skip if $maxY <= $uniY
057 $maxY = $uniY
058
059 * und jetzt fuer min max XY pruefen...
060
061 $x = $minX
062 while $x <= $maxX
063 $y = $minY
064 while $y <= $maxY
065 $tempSec = get sector from universe index: x=$x, y=$y
066 $tempdist = get jumps from sector $CampSector to sector $tempSec
067 $known = $tempSec -> is sector known by the player
068 $nmy = [THIS] -> is $tempSec a enemy
069 if $tempdist <= $Range AND $known == [TRUE] AND $nmy == [FALSE]
070
071 * Sektor dem Array hinzufuegen
072 append $tempSec to array $SectorList
073
074 * ende der eigentlichen tests
075 end
076
077 * y hochsetzen, y-Schleife beenden
078 inc $y =
079 end
080
081 * Ende der x-Schleife
082 inc $x =
083 end
084
085 * an dieser Stelle sollte eine Sektorenliste vorliege
086 * nun die Liste ins Log schreiben
087
088
089 $i = 1
090 $numSectors = size of array $SectorList
091 $tempSec = $SectorList[0]
092 $msg = $tempSec
093 while $i < $numSectors
094 $tempSec = $SectorList[$i]
095 $msg = $msg + ', ' + $tempSec
096 inc $i =
097 end
098
099 write to player logbook: printf: pageid=$PageID textid=3, $SatType, $Camp, $msg, null, null
100
101
102 * variablen exportieren un das eigentliche skript aufrufen.
103 [THIS] -> set local variable: name=$SectorList value=$SectorList
104 [THIS] -> set local variable: name=$SatType value=$SatType
105 @ = [THIS] -> call script 'plugin.satdrop.main' : Basislager=$Camp Nav. oder Erw. satellit=$SatType
106 * callscript
107 return null
Sektoren überprüfen
Script plugin.satdrop.main
Version: 0
for Script Engine Version: 25
Description
Satellite Deployment, main program loop
Arguments
* 1: Camp , Var/Station , 'Basislager'
* 2: SatType , Var/Ware , 'Nav. oder Erw. satellit'
Source Text
001
002
003
004
005 * dies ist eine Endlos-Schleife
006 while [TRUE]
007 START:
008 * Sektorenliste aktualisieren
009 $SectorList = [THIS] -> get local variable: name=$SectorList
010
011 * sind ueberhaupt Satelliten an Bord
012 * nicht vergessen, alles ausser 0 ist wahr...
013 skip if [THIS] -> get amount of ware $SatType in cargo bay
014 * FEHLT einkaufskript starten
015
016
017 $i.sec = 0
018 $sector.count = size of array $SectorList
019 while $i.sec < $sector.count
020 $tempSec = $SectorList[$i.sec]
021
022 * falls wir keinen Nav.Sat finden...
023 skip if find ship: sector=$tempSec class or type=Navigationssatellit race=Player flags=null refobj=null maxdist=null maxnum=null refpos=null
024 * und auch keinen Erw.Sat...
025 skip if find ship: sector=$tempSec class or type=Erweiterter Satellit race=Player flags=null refobj=null maxdist=null maxnum=null refpos=null
026 * sofort aus der Schleife ausbrechen.
027 break
028
029
030 * wenn wir bis hier kommen, ist ein Satellit vorhanden.
031 * deshalb wird tempSec geloescht, i hochgesetzt, naechster Sektor bitte.
032 $tempSec = null
033 inc $i.sec =
034 end
035
036
037 * wenn tempSec einen Wert hat, wurde oben kein Sat gefunden...
038 if is datatyp[ $tempSec ] == [SECTOR]
039 * FEHLT script hingehen und satellit aussetzen
040
041 * und zurueck auf los. Wir schauen uns die restlichen
042 * Sektoren an, noch bevor wir nach hause fliegen.
043 @ = wait randomly from 0 to 5000 ms
044 goto label START
045 end
046
047
048 * wenn wir hier ankommen, gibt es derzeit nichts weiter zu tun.
049 * aber wenn wir im raum sind, gab es was zu tun.
050 * brauchen wir nachschub an satelliten
051 if not [THIS] -> is docked
052 $sat.count = [THIS] -> get amount of ware $SatType in cargo bay
053 skip if $sat.count > 1
054 * FEHLT einkaufscript aufrufen
055 @ = wait randomly from 0 to 5000 ms
056 goto label START
057 end
058
059
060 * wenn wir hier ankommen, wars ein nullrunde
061 * machen wir halt 5 Mizuras Pause...
062 @ = wait 300000 ms
063 * ...plus zusatzzahl
064 @ = wait randomly from 0 to 5000 ms
065 end
066 return null
Satelliten einkaufen
Dazu würde ich gerne auf die "Manuellen Handelsbefehle" (Skript im Bonuspack) zurückgreifen. Die Sprungweite würde dann von der Einstellung des Einsatzbereiches übernommen. Ein potentielles Problem besteht darin, daß für ein vernünftiges Einkaufsverhalten bereits einige Satelliten verteilt sein sollten...
Der Rest
Ziel Anfliegen, Satellit erzeugen, ggf zurück zum Parkplatz. Nichts davon sollte ein Problem sein.