Skyrim:Script File Structure
<header line>
(<import>|<variable definition>|<property definition>|<state definition>| <function definition>|<event definition>)
Ein Papyrus-Script ist eine Textdatei mit der Erweiterung ".psc", das aus einer Kopfzeile am Anfang der Datei besteht, gefolgt von einer Sammlung von Importen, Variable, Properties, States, Funktionen und Events. Die Reihenfolge dieser Elemente ist nicht wichtig solange die Kopfzeile die erste Nicht-Kommentarzeile in der Datei ist.
Inhaltsverzeichnis
Kopfzeile
<Header Line> ::= 'ScriptName' <identifier> ['extends' <identifier>] (<flags>)*
Die Kopfzeile des Scripts, die Header Line, besteht aus dem Keyword "ScriptName" gefolgt vom identifier des Scripts (der dem Namen der Datei entsprechen muss).
Wenn das Script ein anderes Script erweitert, wird an den Namen des Script das keyword "Extends" und der Name des Script angehängt, das erweitert wird. Und abschließend Flags.
Script Extension
Das Erweitern eines anderen Scripts erlaubt es, dessen Funktionen und Events zu übersteuern, um etwas anderes zu tun, oder um dem älteren Script zusätzliche Funktionalität hinzuzufügen. Die einzigen Einschränkungen sind, das gleichnamige Funktionen oder Event im Child-Script und Parentscript auch den selben Return-Typ und die selbe Parameterliste haben müssen.
Beispiele
<papyrusscript>
- MyScript.psc
ScriptName MyScript
</papyrusscript>
<papyrusscript>
- HiddenScript.psc Das Script ist auf der Editorliste für Scripts und auf der Liste de
This script is hidden from the editor's normal script list, and extends ParentScript ScriptName HiddenScript Extends ParentScript Hidden </papyrusscript>
Inhalt
Der Rest der Datei nach der Kopfzeile besteht aus Importen, Variablen-Definitionen, Properties, States, Funktionen und Events in beliebiger Reihenfolge. Man braucht die Scriptvariable, Properties, Funktionen, States und Events erst zu definieren, wenn sie benötigt werden (Variablen in Funktionen und Events müssen jedoch von der Nutzung definiert werden)
Importe
'Import' <identifier>
Das "Import"-keyword lässt es zu, globale Funktionen in einem Script zu nutzen, ohne das den Namen des Scripts voranstellen muss, in dem sie sich befindet. Nutze einfach "Import" gefolgt vom Namen des Scripts, was importiert werden soll. Wenn eine Funktion mit dem selben Namen in beiden Scripts existiert, muss man allerdings nach wie vor den Namen des Scripts voranstellen, das die Version enthält, die man gebrachen will.
Beispiele
<papyrusscript>
- Aufruf von MyGlobal() in Utility, kein Import
Function MyFunction()
Utility.MyGlobal()
EndFunction
</papyrusscript>
<papyrusscript>
- Aufruf von MyGlobal() in Utility, mit Import
import Utility
Function MyFunction()
MyGlobal()
EndFunction </papyrusscript>
Leerzeichen
Leerzeichen sind in Papyrus unwichtig mit Ausnahme von Zeilenenden, was unten erklärt wird. Leerzeichen können überall eingesetzt werden solange dabei kein Keyword, Operator, Literal oder ähnliches aufgeteilt wird.
Beispiele
<papyrusscript>
- gültiger Gebrauch eines Leerzeichens
- (allerdings vielleicht nicht unbedingt besser lesbar)
x = (10+1* 2 ) as float
</papyrusscript>
<papyrusscript>
- Leerzeichen zwischen den zwei Gleichheitszeichen im Gleichheitsoperator machen daraus
- zwei einzelne Gleichheitszeichen, was zu einem Übersetzungsfehler führt.
x = = 1
</papyrusscript>
<papyrusscript>
- Leerzeichen zwischen der 10 und 12 machen daraus zwei Zahlen, was zu einem Übersetzungsfehler führt.
10 12 </papyrusscript>
Zeilenende
Papyrus-Scripte sind in Zeilen aufgeteilt, die festlegen, wo eine Anweisung endet und eine andere beginnt . Wenn man eine lange Anweisung hat, die man in mehrere Zeilen unterteilen möchte, kann man ein "\"-Zeichen am Ende der Zeile hinzu fügen und in der nächsten fortsetzen. "\"-Zeichen wird in einem Kommentar werden ignoriert (weil alles in einem Kommentar ignoriert wird), man kann aber Kommentar hinter ein "\"-Zeichen einfügen, wenn man mag.
Beispiele
<papyrusscript>
- Zwei Anweisungen, die durch ein Zeilenende getrennt sind
x = 1 + 2
y = 2 * 3
</papyrusscript>
<papyrusscript>
- Eine lange Anweisung, die in zwei Zeilen aufgeteilt ist
x = 1 + 2 \
+ 3 + 4
</papyrusscript>
<papyrusscript>
- Der Backslash in dieser Zeile wird ignoriert weil es in einem Kommentar ist \
x = 1 + 2 ; Diese Zeile gehört nicht! zum obigen Kommentar </papyrusscript>
Kommentare
Kommentare in Papyrus gibt es in drei Formen: Einzelzeile, Mehrfachzeile, Dokumentation
Einzelzeilen-Kommentare
<single line comment> ::= ';' <any text> <end of line>
Einzelzeilen-Kommentare beginnen mit ";" und gehen bis zum Zeilenende. Sie enthalten allen Text nach dem Semikolon, auch einen Backslash, der anderswo eine Fortsetzung auf der nächsten Zeile markiert.
Beispiele
<papyrusscript>
- Ein Einzelzeilen-Kommentar
</papyrusscript>
Mehrfachzeilen-Kommentare
<multi-line comment> ::= ';/' <any text> '/;'
Mehrfachzeilen-Kommentare beginnen mit ";/". Sie enthalten allen anschließenden Text (auch Zeilenenden) bis zum einem "/;"
Beispiele
<papyrusscript>
- / Ein einfacher
Mehrfachzeilen-Kommentar/;
- / Man kann auch Quellcode innerhalb dieser Zeichen haben, wenn man den auskommentieren möchte
x = 2 * 1 y.DoCoolStuff() /; </papyrusscript>
Dokumentations-Kommentare
<documentation comment> ::= '{' <any text> '}'
Dokumentations-Kommentare sind etwas Besonderes und können nur in der Zeile auftreten, die direkt dem Script-Header, einer Property-Definition oder einer Funktions-Definition folgt. Dokumentations-Kommentare beginnen mit einen "{"-Zeichen und gehen bis zu einem abschließenden "}"-Zeichen, einschließlich Zeilenenden oder ähnlichem. Diese Kommentare erscheinen als Tooltips im Editor, wenn man mit der Maus über das Script im Scriptpicker geht oder wenn man mit der Maus über eine Property im Property-Editor geht.
Beispiele
<papyrusscript>
ScriptName MyCoolScript
{Dokumentation für mein tolles Script!
I das kann mehrere Zeilen dauern...}
</papyrusscript>
<papyrusscript>
int Property MyProperty Auto
{Diese Property ist nur Spaß. Auf 1 gesetzt kann man sehen, was für tolle Sachen passieren!}
</papyrusscript>
Links
- Script File Structure (das englische Original des obigen Artikels)