Skyrim:State Reference: Unterschied zwischen den Versionen
Keris (Diskussion | Beiträge) K (Die Seite wurde neu angelegt: =Überblick= Scripts laufen in verschiedenen States (Zuständen) – aber ein Script kann nur in einem zur Zeit sein. Welcher Code beim Aufruf einer Funktion abläuft o...) |
Keris (Diskussion | Beiträge) K (Textersetzung - „tesscript>“ durch „papyrusscript>“) |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | Ein "State" ist ein Modus, in den sich ein Script befinden kann, was zu verschieden aufrufbaren Versionen von [[sk:Function Reference|Funktionen]] oder [[sk:Events Reference|Events]] führt. | |
− | |||
− | = | + | == State Definition == |
− | + | <state> ::= ['Auto'] 'State' <identifier> | |
+ | <function or event>* | ||
+ | 'EndState' | ||
− | + | Ein State wird definiert, indem das [[sk:Keyword Reference|Keyword]] "State" angegeben wird (mit optional vorangestelltem "Auto") gefolgt vom [[sk:Identifier Reference|Identifier]], der den State repräsentiert. Er enthält keine oder mehr Funktionen oder Events und endet mit dem Keyword "EndState". | |
− | |||
− | |||
− | |||
− | |||
− | Wenn | + | == Auto-State == |
− | + | Wenn einem State ein "Auto" voran gestellt ist, startet das Script in diesem State (und es wird kein [[sk:OnBeginState|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'== | + | == 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 [[sk:GotoState|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 [[sk:GetState|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== | |
− | + | <papyrusscript> | |
− | < | + | ; Definiert eine Funktion und einen State mit Übersteuerung |
− | + | a function and a state with an override | |
− | + | int Function MyFunction() | |
− | + | Return 1 | |
− | + | EndFunction | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | state | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | 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("") | GotoState("") | ||
− | + | x = MyFunction() ; Zuweisung von 1 ('Empty State') | |
+ | EndFunction | ||
+ | </tesscript > | ||
+ | <br> | ||
+ | <papyrusscript> | ||
+ | ; Ä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. | |
− | + | </papyrusscript> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | </ | ||
− | |||
− | |||
==Siehe auch== | ==Siehe auch== |
Aktuelle Version vom 13. August 2012, 12:00 Uhr
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
<papyrusscript>
- 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 >
<papyrusscript>
- Ä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.
</papyrusscript>
Siehe auch
- State_Reference (das englische Original des obigen Artikels)