Dorf-Charaktere steuern: Unterschied zwischen den Versionen
(→Fortgeschrittenes Modding) |
|||
Zeile 36: | Zeile 36: | ||
function getName() { | function getName() { | ||
// Name des Charakters zurückliefern | // Name des Charakters zurückliefern | ||
− | return getLoca( "kvir_dwarf"; | + | return getLoca( "kvir_dwarf" ); |
} | } | ||
Version vom 31. August 2016, 14:23 Uhr
Um ein Dorf bzw. eine Stadt zu beleben, sind NPCs unerlässlich. Diese können mit Sternenschweif HD relativ einfach gemodded werden, sie können an bestimmte Orte permanent platziert oder zum Herumwandern gebracht werden, sie haben einen "Tagesablauf" und Zugriffsfunktionen, die es ermöglichen, Ihnen Stichwortdialoge oder spezifische Dialoge zuzuweisen.
Inhaltsverzeichnis
Grundlagen
Dorf-NPCs werden über die "Gebäudeereignisse" definiert, ihr Typ muss "Person" sein. Sie müssen eine im Dorf eindeutige Ereignis-ID haben. Die restlichen Parameter:
- SubID (UT2) ist der Übersetzungsschlüssel für den Namen, zB "kvir_ancoron_name", dieser erscheint beim Tooltip und einem etwaigen SchlüsselwortDialog
- Schlüsselwortdlg (UT3) ist der Schlüsselwortdialog, der beim Anklicken des Charakters aufgerufen wird. Der Standardname wird automatisch durch einen etwaigen definierten Namen ersetzt
- Trigger kann für einen einfachen Start eines Standard-Dialogs verwendet werden
Außerdem muss der Datentyp auf "Skript" gestellt werden, damit zumindest die Dauerposition des Charakters definiert wird (Ausnahme: Vordefinierte Charaktere, die nur verändert werden)
function getSchedule() { return [{time:0,location:{x:20,y:10,z:30}}]; } function getChardef() { return "humanmalebartender"; }
- time:0 ist wichtig, damit der Eintrag rund um die Uhr gilt
- location sind Koordinaten im obigen Format, bitte auf korrekte y-Koordinate achten
- getChardef liefert die Charakterdefinition zurück, diese kann entweder ein Charakter Template oder eine Charakterdefinition direkt aus dem Editor sein
Fortgeschrittenes Modding
Neben den obigen Grundfunktionen bietet das Charaktermodding auch noch eine Reihe weiterer Funktionen für maximale Flexibilität im Modding. Es können folgende Funktionen im Charakter definiert werden:
function getSchedule() { // der Ablaufplan für den Charakter return [{time:0,location:{x:20,y:10,z:30}}]; } function getName() { // Name des Charakters zurückliefern return getLoca( "kvir_dwarf" ); } function getChardef() { // Charakterdefinition return "dwarfmale"; } function onClick() { // Ausgeführt wenn der Charakter angeklickt wird return true; }
WICHTIG: (Hilfs-)Funktionsdefinitionen außerhalb dieser Definition sollten nach Möglichkeit vermieden werden, da hier mit einem System gearbeitet wird, um das normalerweise übliche "gegenseitige Überschreiben von Funktionen im Dorfkontext" wie zB bei Dialogen üblich zu vermeiden.
Der Ablaufplan
Diese Funktion wird einmal bei Initialisierung des Charakters (betreten des Dorfes oder reloadXML) aufgerufen. Sie liefert einen Plan zurück, wann der Charakter wo sein soll. Zurückgeliefert wird ein Array aus Datenobjekten, beispielsweise so:
function getSchedule() { return [ {time:0,location:{x:26,y:20,z:-28},visible:false}, {time:8,location:{x:57,y:6,z:-19}}, {time:10,location:{x:77,y:7,z:-40}}, {time:12,location:{x:26,y:20,z:-28}}, {time:14,location:{x:77,y:7,z:-40}}, {time:16,location:{x:57,y:6,z:-19}}, {time:18,location:{x:77,y:7,z:-40}}, {time:22,location:{x:27,y:21,z:-29},visible:false} ]; }
- time: Die Uhrzeit, ab der die Position erreicht werden soll (also das "losgehen" von der vorherigen Position), 8:30 Uhr wäre zB 8,5
- location: Die Koordinaten. y-Koordinate sollte so genau wie möglich sein, da diese auch für die Initialplatzierung verwendet wird
- visible: optional, standard true ob der Charakter an dieser Position zu dieser Zeit sichtbar ist, zB um 22 Uhr erscheint er vor der Taverne, geht nach Hause und verschwindet dort wieder
time und location sind verpflichtend, ohne diese wird der Eintrag ignoriert.
getChardef: Variable Charakterdefinition
Wenn gewünscht, kann in getChardef auch entsprechende Logik umgesetzt werden, um zB einen von X verschiedenen Definitionen für eine bestimmte ID zu spawnen. Die Funktion muss in jedem Fall eine Zeichenkette mit einem gültigen Charakter zurückliefern.
getName: Variable Namensdefinition
Wenn getName definiert ist, wird der vorgegebene Name aus der UT2 mit dem entsprechenden Ergebnis dieser Funktion überschrieben. Die Funktion muss in jedem Fall eine Zeichenkette zurückliefern, ansonsten wird ihr Ergebnis ignoriert.
onClick
Sollte der einfache Aufruf eines Dialogs (trigger) oder Stichwortdialogs (ut3) nicht ausreichend sein, kann mittels onClick eine eigene Definition für die Reaktion auf ein Click-Ereignis definiert werden. Dieses hat Vorrang vor trigger und ut3, muss allerdings den Wert true zurückliefern.