Skyrim:State Reference
Ein "State" ist ein Modus, in den sich ein Script befinden kann, was zu verschieden aufrufbaren Versionen von Funktionen oder Events führt.
Inhaltsverzeichnis
State Definition
<state> ::= ['Auto'] 'State' <identifier> <function or event>* 'EndState'
Ein State wird definiert, indem das Keyword "State" angegeben wird (mit optional vorangestelltem "Auto") gefolgt vom Identifier, der den State repräsentiert. Er enthält keine oder mehr Funktionen oder Events und endet mit dem Keyword "EndState".
Auto-State
Wenn einem State ein "Auto" voran gestellt ist, startet das Script in diesem State (und es wird kein OnBeginState gesendet. Es kann nur einen Auto State in einem Script geben. Wenn ein Child-Script einen Auto-State hat, hat dieser Vorrang über den das Parents, wenn das Child-Script jedoch keinen hat, wird der des Parents genutzt.
Der 'Empty State'
Alle Funktionen oder Events, die außerhalb eines State-Blocks definiert wurden, werden einem 'Empty State' zugerechnet. Dies ist ebenso, wenn eine Funktion genutzt wird, wenn das Script nicht in irgendeinem State ist, oder wenn derzeitige State keine Funktion implementiert oder übersteuert. Jede in einem State implementierte Funktion muss auch im 'Empty State' (mit identischem Namen, Return-Typen und Parameterliste) implementiert werden und zwar im aktuellen Script oder einem Parent.
Wechseln von States
Um einen State in einem Script zu wechseln, ruft man GotoState auf und übergibt den Namen des States, zu dem man wechseln will, als String. Der State muss in dem aufgerufenen Script nicht existieren. Um in den 'Empty State' zu wechseln, wird ein leerer String übergeben. .
Abfrage des derzeitigen States
Um den derzeitigen State zu erhalten, ruft man GetState auf. Es wird der Name der aktuellen States als String zurück gegeben.
Wie ein State sich auf Funktionen und Events auswirkt
Die zum Laufen ausgewählte Funktion oder das Event wird durch folgenden Algorithmus bestimmt:
- Überprüft den State des aktuellen Scripts auf die Funktion
- Überprüft den State des Parent-Scripts auf die Funktion
- Überprüft den 'Empty State' des aktuellen Scripts auf die Funktion
- Überprüft den 'Empty State' des Parent-Scripts auf die Funktion
Beispiele
<tesscript>
- Definiert eine Funktion und einen State mit Übersteuerung
a function and a state with an override
int Function MyFunction()
Return 1
EndFunction
State MyState
int Function MyFunction() ; Name, Parameter und Type des Returns müssen der Version ;im 'Empty State' entsprechen. Return 2 EndFunction
EndState
Function CallMyFunction()
int x = MyFunction() ; Zuweisung von 1, wenn das Script das erste mal läuft ( in keinem State) GotoState("MyState") x = MyFunction() ; Zuweisung von 2 GotoState("WrongState") x = MyFunction() ; Zuweisung von 1 (Rückfall, weil State in diesem Script nicht existiert, ; aber in einem Child–Script existieren könnte)
fallback because state doesn't exist in this script, but might in a child)
GotoState("") x = MyFunction() ; Zuweisung von 1 ('Empty State')
EndFunction
</tesscript >
<tesscript>
- Ändern des States im obigen Beispiel in ein Auto-State.
Auto State MyState
int Function MyFunction() ; Name, Parameter und Type des Returns müssen der Version , im 'Empty State' entsprechen.
Return 2 EndFunction
EndState
- Nun wird x in CallMyFunction() 2, 2, 1, 1 zugewiesen, weil das Script mit MyState beginnt.
</tesscript>
Siehe auch
- State_Reference (das englische Original des obigen Artikels)