Pathfinder Version 6.2
======================

Author: Ralf Beck alias hraban


What is Pathfinder:
-------------------

Pathfinder is the generic term for a small collection of script libraries which work together to calculate a flightpath for ships and where settings in the ship's command console control how the pathfinder will be invoked. A ship that has been sent on a journey with the pathfinder will, for example, avoid all Khaak, Xenon and Pirate sectors if these have been set as enemies in the ship's command console.


What script libraries are there and what do they do:
----------------------------------------------------

-> setup.hraban.pathfinder

   Generates an array for each sector containing all neighbours 1 jump away.

-> lib.hraban.pathfinder.main

   Starts the route finding and guides the flight to its target.

-> lib.hraban.pathfinder.move

   Internal routine for steering the flight to the target.

   There is also a

-> lib.hraban.pathfinder.move.test

   included. If this is activated, all routefinding will be documented in Log 3055.

-> lib.hraban.pathfinder

   Internal routing (recursive) which calculates the flightpath.

-> mmove.movetosector

   Modified standard Egosoft routine

   This routine must be renamed if the pathfinder is to be used by all ships.


Which scripts should the user call:
-----------------------------------

The user must ensure that 'setup.hraban.pathfinder' is in the script folder. Until 'setup.hraban.pathfinder' is executed, nothing else will happen. Once the preparatory work is done, an appropriate message will appear in the logbook.

Other than that, the user only needs to pass parameters containing the start sector, the target sector, and a flag for checking relations, to 'lib.hraban.pathfinder.main'. If the "check relations" flag is passed as [True], enemy sectors will be avoided. Otherwise, the pathfinder works similarly to the standard command '!move.movetosector'.

Alternatively, the user can pass the pathfinder a list of prohibited sectors. To do this, a global variable with the name 'hraban.sector.stop' must be created. If this array exists, then the sectors it contains will be avoided, regardless of the value of the 'check settings' flag.


Important information:
----------------------

Checking relations can lead to relatively long search times. Because of the command structure of the SE, it isn't possible for me to create a faster routine. To quantify this, in the worst case it can take up to 60 seconds.

My personal attitude is: rather wait longer and find a safe flightpath than lose an expensive ship.

If a ship flies into an enemy sector, either the relations in the ship's command console must have been changed, or the target sector must otherwise only be reachable by flying through more enemy sectors than by this route. Patherfinder is written so that if a sector turns out to be unreachable, the relation check will be ignored and a direct route found.


Personal test results:
----------------------

So far I have not been able to identify any impact on gameplay from using Pathfinder. Only that the time that a ship takes to start its journey has increased significantly if forbidden or enemy sectors have to be avoided.




Pathfinder Version 6.2
======================

Autor: Ralf Beck alias hraban


Was ist Pathfinder:
-------------------

Pathfinder ist der Oberbegriff für eine kleine Sammlung von Script-Libarys, welche im zusammenspiel einen Flugweg für Schiffe ermitteln, wobei die Einstellungen in der Kommandokonsole des Schiffes, welches Pathfinder aufruft berücksichtigt wird.
Ein mit Pathfinder auf die Reise geschickte Schiff wird z.B. alle Khaak, Xenon und Piratensektoren meiden wenn diese in der Kommandokonsole des Schiffes auf Feind stehen.


Welche Script-Library's gibt es und was machen diese:
-----------------------------------------------------

-> setup.hraban.pathfinder

   Generiert an jedem Sektor ein Array von Nachbarn mit der Entfernung 1 Jump.

-> lib.hraban.pathfinder.main

   Startet die Wegfindung und steuert den Flug zum Ziel.

-> lib.hraban.pathfinder.move

   Inert-Routine für die Flugsteuerung zum Ziel.

   Es befindet sich auch eine 
   
   -> lib.hraban.pathfinder.move.test
  
   im Lieferumfang. Wird diese aktiviert, werden im Log 3055 alle Wegfindungen
   dokumentiert.

-> lib.hraban.pathfinder

   Inert-Routine (Rekursion) welche den Flugweg berechnet.

-> mmove.movetosector

   Abgewandelte Standard-Routine von Egosoft

   Diese Routine muß umbenannt werden, wenn Pathfinder auf alle Schiffe angewendet 
   werden soll.


Welches der Scripte muss der Anwender aufrufen:
-----------------------------------------------

Der Anwender muss dafür sorgen, daß 'setup.hraban.pathfinder' im scriptverzeichnis steht. Solange 'setup.hraban.pathfinder' nicht ausgeführt ist geht es nicht weiter. Sind die Vorarbeiten erledigt, erscheint im Logbuch eine entsprechende Meldung im Log.

Der Anwender benötigt ansonsten nur 'lib.hraban.pathfinder.main', dem der Startsektor, der Zielsektor und ein Flag zur Prüfung der Relation übergeben werden muss. Wird bei 'check relation' [True] übergeben werden feindliche Sektoren gemieden. Andernfalls funktioniert Pathfinder ähnlich wie der Standard-Befehl '!move.movetosector'.

Der Anwender kann dem Pathfinder alternativ eine Liste von gesperrten Sektoren übergeben.
Dazu muss eine Globale Variable mit dem Namen 'hraban.sector.stop' erstellt werden. Ist dieses Array vorhanden werden die enthaltenen Sektoren, unabhängig vom Flag für die Prüfung der Relation, bei der Flugwegfindung ausgeklammert.

Wichtiger Hinweis:
------------------

Bei der Prüfung auf die Relation kann es zu relativ langen Suchzeiten kommen. Bedingt durch die Befehlsstruktur des SE ist es mir nicht möglich eine schnellere Routine zu schaffen. In Zahlen Ausgedrückt, kann die Wegfindung im ungünstigsten Fall bis zu 60 Sekunden dauern. 

Meine persönliche Einstellung ist: lieber einen längeren Zeitraum warten und eine sichere Flugroute finden, als ein teures Schiff zu verlieren.

Soll ein Schiff in einen feindlichen Sektor einfliegen, muss entweder die Relation in der Kommandokonsole des Schiffes verändert werden, oder der Sektor muss direkt, ohne den durchflug durch weitere, möglicherweise feindliche Sektoren, erreichbar sein, wenn die Suche einen schnellen Erfolg liefern soll.
Pathfinder ist so eingerichtet, daß im Fall der unerreichbarkeit eines Sektor der Check auf die Relation ausgeschaltet und ein direkter Weg gefunden wird.


Persönliche Testergebnisse:
---------------------------

Bisher konnte ich keine Beeinflusung des Gameplay durch den Einsatz von Pathfinder feststellen. Lediglich die Zeit, welche ein Schiff benötigt bis es seine Reise antritt hat sich wesentlich verlängert wenn gesperrte oder feindliche Sektoren umflogen werden müssen.


