Benutzer:Schnobs/Skripte
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.