Umherwandernde NPCs
Im Normalfall steht ein NPC, der vielleicht einen Quest für den Spieler hat, starr an einem Punkt der Karte. Es ist aber auch recht einfach möglich, diesen Umherwandern zu lassen. So könnte ein Minenarbeiter zwischen einer Unterkunft und seiner Mine, und ein Wanderer zwischen diversen Bäumen eines Waldes und seiner Hütte umherwandern.
Damit dies funktioniert, muss der NPC zunächst einen Namen haben und initialisiert werden. Diese Initialisierung sollte geschehen, bevor etwas anderes mit dem NPC gemacht wird (zum Beispiel die Zuweisung eines Quests). Wenn der NPC nun „Wanderer“ heisst, so sollte folgende Zeile in FirstMapAction()
InitNPC( "Wanderer" );
Der NPC wandert nicht beliebig umher. Er steuert innerhalb einer festgelegten Zeitspanne vorgegebene Zielpunkte an. Die Zielpunkte können beliebige Objekte sein, also ScriptEntities, Häuser, Bäume, Tiere oder auch andere NPCs. Diese müssen nun einen Namen haben und durchnummeriert werden. Als Name wird in diesem Beispiel „NPC1_WP“ verwendet, da es Wegpunkte für den ersten NPC sind. Der Name kann natürlich beliebig gewählt werden.
Der erste Wegpunkt erhält den Namen „NPC1_WP1“, der nächste „NPC1_WP2“ und so weiter… Hierbei ist die Reihenfolge in der die Namen vergeben werden egal. Die Nummerierung muss nur bei 1 beginnen und darf keine Lücken haben.
Jetzt können die Wegpunkte für den NPC mit dieser Zeile festgelegt werden:
SetNPCWaypoints( "Wanderer", "NPC1_WP", 15 );
Die 15 ist die Zeit in Sekunden die gewartet wird, bevor der NPC einen weiteren Wegpunkt ansteuert. Wird die Zeit zu gering gewählt, wird der NPC nie einen der Wegpunkte erreichen, sondern immer auf halben Weg abbrechen und einen neuen Wegpunkt ansteuern. Ist die Zeit sehr hoch gewählt, wird der NPC bei jedem Wegpunkt eine zeitlang verweilen.
Die Wegpunkte werden nicht der Reihe nach angesteuert. Es wird (in diesem Fall alle 15 Sekunden) ein Wegpunkt ausgewählt, zu dem der NPC hinläuft. Bei dieser Zufallsauswahl kann der nächste Wegpunkt auch der sein, an dem er sich bereits befindet. Der NPC wird also an diesem Punkt etwas länger stehenbleiben.
Wird ein Zielpunkt während des Spiels zerstört, so wird er nicht automatisch aus der Liste entfernt. Wenn dieser nicht mehr existierende Punkt angesteuert werden soll, dann verweilt der NPC einfach an seiner letzten Position, bis ein neuer noch existierender Punkt ausgewürfelt wird. Im Beispiel des Wanderers im Wald würde dieser also irgendwann für immer an seiner Hütte stehenbleiben, sobald alle Bäume, die als Zielpunkte dienten, gefällt wurden.
Natürlich kann man dem NPC zu jedem Zeitpunkt ein neues Set von Wegpunkten zuweisen.
Der NPC verweilt übrigens automatisch an einem Wegpunkt wenn ein Held in der Nähe ist. Dies erleichtert das Ansprechen deutlich. Er bleibt allerdings nicht automatisch stehen, wenn er einen Held auf seinem Weg trifft.