Benutzer:Schnobs/Skripte: Unterschied zwischen den Versionen

Aus X-Lexikon
Zur Navigation springenZur Suche springen
Schnobs (Diskussion | Beiträge)
Schnobs (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
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 ein paar Skripte, die ich mir so im Laufe der Zeit geschrieben habe. Bei Interesse findet ihr in den Wiki-Menüs am linken Rand die Funktion "Email an diesen Benutzer".
==Kleine Helferlein==


Hier der Plan. Kommentare sind herzlich willkommen.
===Geschützturmbefehl für den Bergbau===


Im Standard-Skript "Greife mein Ziel an" (!turret.attacktarget.std) findet sich folgendes:


==Funktionsumfang==
012      if not [THIS] -> is $victim a enemy
013        $victim = null
 
Damit soll verhindert werden, daß die Kanzel das Feuer auf neutrale und befreundete Schiffe und Stationen eröffnet. Eigentlich ist das ja ganz sinnvoll. Nur sind Asteroiden prinzipiell neutral und ändern ihre Meinung auch nicht, wenn man sie beschießt. Eine kleine Änderung am Skript prüft zusätzlich, ob das Ziel ein Asteroid und die Waffe ein Mobiles Bohrsystem ist.
 
Nun kann sich der Bergbauingeneur ganz auf die Steuerung des Schiffes konzentrieren, und muß nicht länger in die Heckkanzel umsteigen.
 
===Landecomputer für die KI===
 
Alle mit Landecomputer ausgestatteten Schiffe benutzen ihn auch.
 
===Mehr Fairness beim Völkerrang===
 
Die Flotten der Völker sind offensichtlich überfordert und schaffen es nicht, die Sicherheit in ihren Sektoren zu gewährleisten. Da ist der Spieler gefragt... und mit den Patroullienkommandos aus dem Bonuspack ist das ja durchaus zu schaffen. Nur: wo bleibt der Dank?
 
Wenn eines meiner Schiffe Völkerbesitz beschädigt, werde ich dafür persönlich zur Rechenschaft gezogen. Das gleichzeitig zahlreiche Patroullien in meinem Namen und auf meine Rechnung für Sicherheit sorgen, wird hingegen von niemandem gewürdigt. Das hat mir dermaßen Gestunken, daß ich da was unternommen habe.
 
Jetzt bekomme ich den vollen Völkerrang für Abschüsse durch eigenes Personal. Die Prämie muß ich mir mit dem Piloten teilen, schließlich hat er seinen Kopf hingehalten.
 
 
==Autom. Satellitenverteiler==
===Funktionsumfang===
oder<br>
oder<br>
'''Was geht und was nicht geht'''
'''Was geht und was nicht geht'''
Zeile 10: Zeile 33:
Dies ist ein sehr schlichtes Skript, um in einem bestimmten Bereich Satelliten aufzustellen. Das Schiff plaziert Satelliten in allen Sektoren des Einsatzgebietes, und ersetzt verloren gegangene. Die erforderlichen Satelliten werden (ebenfalls innerhalb des Einsatzgebietes) günstigst eingekauft.
Dies ist ein sehr schlichtes Skript, um in einem bestimmten Bereich Satelliten aufzustellen. Das Schiff plaziert Satelliten in allen Sektoren des Einsatzgebietes, und ersetzt verloren gegangene. Die erforderlichen Satelliten werden (ebenfalls innerhalb des Einsatzgebietes) günstigst eingekauft.


Dieses Skript richtet sich an den aufstrebenden Jungunternehmer: der Funktionsumfang ist bescheiden, mit Problemen kann es nicht umgehen. Dafür entstehen auch keine weiteren Kosten, keine Gebühr pro aufgestelltem Satellit oder sowas. Die Satelliten und das Schiff sind schon teuer genug.
Dieses Skript richtet sich an den aufstrebenden Jungunternehmer: der Funktionsumfang ist bescheiden, mit Problemen kann es nicht umgehen. Dafür entstehen auch keine weiteren Kosten, keine Gebühr pro aufgestelltem Satellit oder sowas. Ständig Satelliten zu ersetzen verursacht schon genug laufende Kosten.
 


Bedienung:<br>
Bedienung:<br>
Zeile 18: Zeile 40:
Weiterhin wird man gefragt, welche Art von Satellit man verteilen will: E = Erweitert, alle anderen Eingaben = Navigationssatellit.
Weiterhin wird man gefragt, welche Art von Satellit man verteilen will: E = Erweitert, alle anderen Eingaben = Navigationssatellit.


Zu guter letzt soll man noch eine Sprungweite angeben. Der Ausgangspunkt ist der Sektor, in dem sich das Basislager befindet. Das Einsatzgebiet wird aus der Sprungweite in Verbindung mit den Freund/Feind-Einstellungen berechnet. Beispiel: Basislager ist die Handelsstation in Argon Prime, Sprungweite ist 7, alle außer den Argonen sind Feinde. Ergebins: das Einsatzgebiet sind die sog. "Argonischen Kernsektoren".
Zu guter letzt soll man noch eine Sprungweite angeben. Der Ausgangspunkt ist der Sektor, in dem sich das Basislager befindet. Das Einsatzgebiet wird aus der Sprungweite in Verbindung mit den Freund/Feind-Einstellungen berechnet, dadurch kann man das Einsatzgebiet sinnvoll abgrenzen. Beispiel: Basislager ist die Handelsstation in Argon Prime, Sprungweite ist 7, alle außer den Argonen sind Feinde. Ergebnis: das Einsatzgebiet sind die sog. "Argonischen Kernsektoren".
 
:''VORSICHT: Die Rassen haben ja mehr als ein Gebiet. Wenn man die Sprungweite zu hoch einstellt, landen Sektoren aus mehreren Gebieten in der Liste. Das kann erwünscht sein, aber auf jeden Fall sind die Wege lang und u.U. führen Sie durch einen Xenonsektor oder dergleichen...''


Die Einbeziehung der Freund/Feind-Einstellungen ermöglicht eine recht sinnvolle Abgrenzung des Einsatzgebietes. Es wird einmal berechnet und dann als Liste gespeichert; es ließe sich also mit relativ wenig Aufwand ein Skript basteln, das einzelne Sektoren zur Liste hinzufügt oder daraus entfernt. Wenn man die F/F-Einstellungen später ändert, hat das KEINE Auswirkungen auf den Einsatzbereich!
Die Liste der Sektoren wird bei Programmstart berechnet und dann gespeichert; es ließe sich also mit relativ wenig Aufwand ein Skript basteln, das einzelne Sektoren zur Liste hinzufügt oder daraus entfernt. Wenn man die F/F-Einstellungen später ändert, hat das KEINE Auswirkungen auf den Einsatzbereich!


Was geschieht:<br>
Was geschieht:<br>
Zeile 29: Zeile 53:
Also, nochmal zum mitschreiben: das Skript ist schlau genug, ohne Satelliten gar nicht erst zu starten. Und das ist die einzige Intelligenz, die es hat. Andere Probleme werden nicht einmal erkannt.
Also, nochmal zum mitschreiben: das Skript ist schlau genug, ohne Satelliten gar nicht erst zu starten. Und das ist die einzige Intelligenz, die es hat. Andere Probleme werden nicht einmal erkannt.


==Ablauf (hier brauche ich Hilfe)==


===Start===
==Der (fast) perfekte Händler==
 
...funktioniert (von außen gesehen) ähnlich wie die Handelssoftware Mk3, nur viel besser. Denn dieser Händler Vergleicht systematisch alle Handelsgelegenheiten und entscheidet sich für den besten Auftrag, unter Berücksichtigung von Laderaum und Spielerkonto. Bezahlt wird er in CPU-Zyklen.
 
Anders als die Uni-Händler (oder Fabrikfrachter) kann dieser Händler nur die Preise der Sektoren abfragen, die der Spieler auch "sehen" kann. Er macht also nichts, was man nicht auch selbst tun könnte, und ist in dieser Hinsicht ausgesprochen fair. Geschrieben habe ich dieses Skript als ich (mal wieder) ein neues Spiel angefangen habe, des ständigen Preisvergleichs aber schnell überdrüssig wurde.
 
Dieser Händler ist erschreckend effizient: ich hatte eigentlich gedacht, ich hätte alle Preise sorgfältig abgeklappert (daher ja auch der Überdruß), aber denkste &dansh; die automatische Suche fördert Gelegenheiten zutage, an die ich nicht mal gedacht hätte. Dabei ist nicht mal ein ausgedehntes Satellitennetzwerk erforderlich, schon mit vier Sektoren kann sich der Händler geraume Zeit beschäftigen ohne daß der Gewinn pro Fahrt spürbar leidet.
 
Der systematische Vergleich aller Handelsmöglichkeiten ist potentiell ''sehr'' rechenintensiv, weshalb ich den Händler jetzt fest auf Sprungweite=1 festgenagelt habe. Außerdem würden höhere Distanzen einen Sprungantrieb erfordern; dazu muß er sich einen Vorrat an EZ für den Eigenbedarf anlegen und ggf ergänzen usw usf -- wobei es mir sehr fraglich erscheint, ob die Gewinne bei höherer Sprungweite noch signifikant steigen würden.


Script plugin.satdrop.start
Es gibt keine Sprachdatei oder Befehle. Gestartet wird die Software aus dem Skript-Editor, alle Nachrichten sind hart kodiert.
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


==Modifizierte Handelsbefehle==


===Sektoren überprüfen===
Meine derzeitige Baustelle. So etwas habe ich schonmal gemacht, bin aber überzeugt, daß es noch besser geht.
Die Befehle sollen in den "Zusätlichen Schiffskommandos" liegen; insgesamt gibt es drei Befehle, aber man kann leider nur max. zwei Kommandos gleichzeitig setzten. Schade eigentlich.


Script plugin.satdrop.main
===Handle naheliegend===
Version: 0
Normalwerweise sucht der Händler den meistbietenden Abnehmer; mit dieser Modifikation findet er den nächstgelegenen, der noch mindestens den eingestellten Preis bietet. Frühere Erfahrungen zeigen, daß das sehr sinnvoll sein kann: die Gewinne sinken ein wenig, aber man kann sich oft den zweiten Frachter sparen.
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


===Warte auf Ladung===
Nur für Verkäufer: das Schiff wird erst losfliegen, wenn sein Laderaum gefüllt ist. Wozu ständig mit halbleerem Laderaum durch die Gegend gondeln?


===Satelliten einkaufen===
===Abweichende Sprungweite===
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...
Selbsterklärend.


==Autom. Bergbau==


Die "große" Variante dieses Skripts soll den Bergbau vollständig automatisieren; es handelt sich um mein erstes großes Projekt, und das merkt man. Definitiv nicht reif für eine Veröffentlichung.


===Der Rest===
Als Ableger ist eine "kleine" Version entstanden: das Geschützturm-Skript erzeugt am Ort des zerstörten Asteroiden eine Navigationsbake. Erzsammler lassen sich nicht von treibenden Frachtcontainern ablenken, sie fliegen gezielt die Baken an und sammeln nur Minerale. Mehrere Sammler kommen sich nicht in die quere. Wenn der Laderaum voll ist, schalten sie ''erkennbar'' in den Bereitschaftsmodus, so daß man volle Frachter schon in der Besitztümerliste erkennt.
Ziel Anfliegen, Satellit erzeugen, ggf zurück zum Parkplatz. Nichts davon sollte ein Problem sein.

Aktuelle Version vom 24. Januar 2008, 17:54 Uhr

Hier ein paar Skripte, die ich mir so im Laufe der Zeit geschrieben habe. Bei Interesse findet ihr in den Wiki-Menüs am linken Rand die Funktion "Email an diesen Benutzer".

Kleine Helferlein

Geschützturmbefehl für den Bergbau

Im Standard-Skript "Greife mein Ziel an" (!turret.attacktarget.std) findet sich folgendes:

012       if not [THIS] -> is $victim a enemy
013        $victim = null

Damit soll verhindert werden, daß die Kanzel das Feuer auf neutrale und befreundete Schiffe und Stationen eröffnet. Eigentlich ist das ja ganz sinnvoll. Nur sind Asteroiden prinzipiell neutral und ändern ihre Meinung auch nicht, wenn man sie beschießt. Eine kleine Änderung am Skript prüft zusätzlich, ob das Ziel ein Asteroid und die Waffe ein Mobiles Bohrsystem ist.

Nun kann sich der Bergbauingeneur ganz auf die Steuerung des Schiffes konzentrieren, und muß nicht länger in die Heckkanzel umsteigen.

Landecomputer für die KI

Alle mit Landecomputer ausgestatteten Schiffe benutzen ihn auch.

Mehr Fairness beim Völkerrang

Die Flotten der Völker sind offensichtlich überfordert und schaffen es nicht, die Sicherheit in ihren Sektoren zu gewährleisten. Da ist der Spieler gefragt... und mit den Patroullienkommandos aus dem Bonuspack ist das ja durchaus zu schaffen. Nur: wo bleibt der Dank?

Wenn eines meiner Schiffe Völkerbesitz beschädigt, werde ich dafür persönlich zur Rechenschaft gezogen. Das gleichzeitig zahlreiche Patroullien in meinem Namen und auf meine Rechnung für Sicherheit sorgen, wird hingegen von niemandem gewürdigt. Das hat mir dermaßen Gestunken, daß ich da was unternommen habe.

Jetzt bekomme ich den vollen Völkerrang für Abschüsse durch eigenes Personal. Die Prämie muß ich mir mit dem Piloten teilen, schließlich hat er seinen Kopf hingehalten.


Autom. Satellitenverteiler

Funktionsumfang

oder
Was geht und was nicht geht

Dies ist ein sehr schlichtes Skript, um in einem bestimmten Bereich Satelliten aufzustellen. Das Schiff plaziert Satelliten in allen Sektoren des Einsatzgebietes, und ersetzt verloren gegangene. Die erforderlichen Satelliten werden (ebenfalls innerhalb des Einsatzgebietes) günstigst eingekauft.

Dieses Skript richtet sich an den aufstrebenden Jungunternehmer: der Funktionsumfang ist bescheiden, mit Problemen kann es nicht umgehen. Dafür entstehen auch keine weiteren Kosten, keine Gebühr pro aufgestelltem Satellit oder sowas. Ständig Satelliten zu ersetzen verursacht schon genug laufende Kosten.

Bedienung:
Bei Start wird man gebeten, eine Station auszuwählen: das Basislager. Dies ist keine Heimatbasis im eigentlichen Sinne, sondern lediglich der Parkplatz, den das Schiff anfliegt, wenn es sonst nichts zu tun hat. Insofern tut es jede Station, auf der man andocken kann.

Weiterhin wird man gefragt, welche Art von Satellit man verteilen will: E = Erweitert, alle anderen Eingaben = Navigationssatellit.

Zu guter letzt soll man noch eine Sprungweite angeben. Der Ausgangspunkt ist der Sektor, in dem sich das Basislager befindet. Das Einsatzgebiet wird aus der Sprungweite in Verbindung mit den Freund/Feind-Einstellungen berechnet, dadurch kann man das Einsatzgebiet sinnvoll abgrenzen. Beispiel: Basislager ist die Handelsstation in Argon Prime, Sprungweite ist 7, alle außer den Argonen sind Feinde. Ergebnis: das Einsatzgebiet sind die sog. "Argonischen Kernsektoren".

VORSICHT: Die Rassen haben ja mehr als ein Gebiet. Wenn man die Sprungweite zu hoch einstellt, landen Sektoren aus mehreren Gebieten in der Liste. Das kann erwünscht sein, aber auf jeden Fall sind die Wege lang und u.U. führen Sie durch einen Xenonsektor oder dergleichen...

Die Liste der Sektoren wird bei Programmstart berechnet und dann gespeichert; es ließe sich also mit relativ wenig Aufwand ein Skript basteln, das einzelne Sektoren zur Liste hinzufügt oder daraus entfernt. Wenn man die F/F-Einstellungen später ändert, hat das KEINE Auswirkungen auf den Einsatzbereich!

Was geschieht:
Alle fünf Mizuras werden die Sektoren im Einsatzbereich abgeklopft. Wenn sich in einem Sektor kein Spieler-Satellit befindet, fliegt das Schiff hin und plaziert einen Satelliten in der Mitte des Sektors deutlich oberhalb der Ekliptik. Es kann mehrere Satelliten hintereinander aufstellen, ohne jedesmal zum Basislager zurückzukehren.

Wenn ihm die Satelliten ausgehen, versucht es innerhalb des Einsatzgebietes neue zu beschaffen. So billig wie möglich zwar, aber erforderlichenfalls werden Spitzenpreise gezahlt. Falls das aus welchem Grund auch immer nicht klappt: Kein Geld auf dem Spielerkonto? Keine Station im Einsatzgebiet handelt mit den erforderlichen Satelliten? Keine Andockerlaubnis irgendwo? Das Skript kennt das alles nicht. Es weiß nur daß immer noch keine Satelliten geladen hat, wartet ein paar Mizuras und versucht es erneut. Wenn es über längere Zeit keine Satelliten einkaufen kann, wird ca. einmal pro Stunde eine Nachricht an den Spieler geschickt, während das Schiff es einfach immer weiter versucht.

Also, nochmal zum mitschreiben: das Skript ist schlau genug, ohne Satelliten gar nicht erst zu starten. Und das ist die einzige Intelligenz, die es hat. Andere Probleme werden nicht einmal erkannt.


Der (fast) perfekte Händler

...funktioniert (von außen gesehen) ähnlich wie die Handelssoftware Mk3, nur viel besser. Denn dieser Händler Vergleicht systematisch alle Handelsgelegenheiten und entscheidet sich für den besten Auftrag, unter Berücksichtigung von Laderaum und Spielerkonto. Bezahlt wird er in CPU-Zyklen.

Anders als die Uni-Händler (oder Fabrikfrachter) kann dieser Händler nur die Preise der Sektoren abfragen, die der Spieler auch "sehen" kann. Er macht also nichts, was man nicht auch selbst tun könnte, und ist in dieser Hinsicht ausgesprochen fair. Geschrieben habe ich dieses Skript als ich (mal wieder) ein neues Spiel angefangen habe, des ständigen Preisvergleichs aber schnell überdrüssig wurde.

Dieser Händler ist erschreckend effizient: ich hatte eigentlich gedacht, ich hätte alle Preise sorgfältig abgeklappert (daher ja auch der Überdruß), aber denkste &dansh; die automatische Suche fördert Gelegenheiten zutage, an die ich nicht mal gedacht hätte. Dabei ist nicht mal ein ausgedehntes Satellitennetzwerk erforderlich, schon mit vier Sektoren kann sich der Händler geraume Zeit beschäftigen ohne daß der Gewinn pro Fahrt spürbar leidet.

Der systematische Vergleich aller Handelsmöglichkeiten ist potentiell sehr rechenintensiv, weshalb ich den Händler jetzt fest auf Sprungweite=1 festgenagelt habe. Außerdem würden höhere Distanzen einen Sprungantrieb erfordern; dazu muß er sich einen Vorrat an EZ für den Eigenbedarf anlegen und ggf ergänzen usw usf -- wobei es mir sehr fraglich erscheint, ob die Gewinne bei höherer Sprungweite noch signifikant steigen würden.

Es gibt keine Sprachdatei oder Befehle. Gestartet wird die Software aus dem Skript-Editor, alle Nachrichten sind hart kodiert.

Modifizierte Handelsbefehle

Meine derzeitige Baustelle. So etwas habe ich schonmal gemacht, bin aber überzeugt, daß es noch besser geht. Die Befehle sollen in den "Zusätlichen Schiffskommandos" liegen; insgesamt gibt es drei Befehle, aber man kann leider nur max. zwei Kommandos gleichzeitig setzten. Schade eigentlich.

Handle naheliegend

Normalwerweise sucht der Händler den meistbietenden Abnehmer; mit dieser Modifikation findet er den nächstgelegenen, der noch mindestens den eingestellten Preis bietet. Frühere Erfahrungen zeigen, daß das sehr sinnvoll sein kann: die Gewinne sinken ein wenig, aber man kann sich oft den zweiten Frachter sparen.

Warte auf Ladung

Nur für Verkäufer: das Schiff wird erst losfliegen, wenn sein Laderaum gefüllt ist. Wozu ständig mit halbleerem Laderaum durch die Gegend gondeln?

Abweichende Sprungweite

Selbsterklärend.

Autom. Bergbau

Die "große" Variante dieses Skripts soll den Bergbau vollständig automatisieren; es handelt sich um mein erstes großes Projekt, und das merkt man. Definitiv nicht reif für eine Veröffentlichung.

Als Ableger ist eine "kleine" Version entstanden: das Geschützturm-Skript erzeugt am Ort des zerstörten Asteroiden eine Navigationsbake. Erzsammler lassen sich nicht von treibenden Frachtcontainern ablenken, sie fliegen gezielt die Baken an und sammeln nur Minerale. Mehrere Sammler kommen sich nicht in die quere. Wenn der Laderaum voll ist, schalten sie erkennbar in den Bereitschaftsmodus, so daß man volle Frachter schon in der Besitztümerliste erkennt.