Skyrim:State Reference

Aus Skript-Wiki
Version vom 13. August 2012, 12:00 Uhr von Keris (Diskussion | Beiträge) (Textersetzung - „tesscript>“ durch „papyrusscript>“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Ein "State" ist ein Modus, in den sich ein Script befinden kann, was zu verschieden aufrufbaren Versionen von Funktionen oder Events führt.

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