Oblivion:Variablen: Unterschied zwischen den Versionen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche
K
K (Scriptvariablen)
 
(21 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Allgemeines zu Variablen im CS ==
 
== Allgemeines zu Variablen im CS ==
  
Die Scriptsprache des CS enthält [[wikipedia:de:Variable_%28Programmierung%29|Variablen]] wie andere [[wikipedia:de:Programmiersprache|Programmiersprachen]] auch.
+
Die Scriptsprache des [[ob:Construction Set|TESIVCS]] enthält [[wikipedia:de:Variable_%28Programmierung%29|Variablen]] wie andere [[wikipedia:de:Programmiersprache|Programmiersprachen]] auch. Es gibt drei unterschiedliche [[wikipedia:de:Datentyp|Datentypen]] und zwei Gültigkeitsbereiche.
  
  
 
== Variablentypen ==
 
== Variablentypen ==
Es gibt unterschiedliche [[wikipedia:de:Datentyp|Datentypen]]
 
 
  
 
=== Der Typ Short ===
 
=== Der Typ Short ===
Der Typ Short speichert ganzzahlige oder auch ([[wikipedia:de:Integer_%28Datentyp%29|integer]]) Werte. Im [ob:ConstructionSet|TESCS]] ist ein [[wikipedia:de:Integer_%28Datentyp%29|integer]]-Format, das 16 [[http://de.wikipedia.org/wiki/Bit Bit]] also 2 [[wikipedia:de:Byte|Byte]] belegt).
+
Der Typ Short speichert [[wikipedia:de:Integer_%28Datentyp%29|ganzzahlige ]]([[wikipedia:de:Integer_%28Datentyp%29|integer]]) Werte. Im [[ob:Construction Set|TESCS]] ist ein Mit[[wikipedia:de:Integer_%28Datentyp%29|integer]]-Format, das 16 [[wikipedia:de:Bit| Bit]] also 2 [[wikipedia:de:Byte|Byte]] belegt).
 
Da ein [[wikipedia:de:Bit|Bit]] für die Darstellung des Vorzeichen benötigt wird, können die Variablen von -2<sup>15</sup> (-32768) bis 2<sup>15-1</sup> (+32767) reichen.  
 
Da ein [[wikipedia:de:Bit|Bit]] für die Darstellung des Vorzeichen benötigt wird, können die Variablen von -2<sup>15</sup> (-32768) bis 2<sup>15-1</sup> (+32767) reichen.  
  
  
 
=== Der Typ Long ===
 
=== Der Typ Long ===
Der Typ Long speichert ganzzahlige oder auch ([[wikipedia:de:Integer_%28Datentyp%29|integer]]) Werte. Im TESCS ist ein [[wikipedia:de:Integer_%28Datentyp%29|integer]]-Format, das 326 [[http://de.wikipedia.org/wiki/Bit Bit] also 4 [[wikipedia:de:Byte|Byte]] belegt).
+
Der Typ Long speichert [[wikipedia:de:Integer_%28Datentyp%29|ganzzahlige ]]([[wikipedia:de:Integer_%28Datentyp%29|integer]]) Werte. Im [[ob:Construction Set|TESCS]] ist ein [[wikipedia:de:Integer_%28Datentyp%29|integer]]-Format, das 326 [[wikipedia:de:Bit|Bit]] also 4 [[wikipedia:de:Byte|Byte]] belegt).
 
Da ein [[wikipedia:de:Bit|Bit]] für die Darstellung des Vorzeichen benötigt wird, können die Variablen von -2<sup>31</sup> (-2147483647) bis 2<sup>31-1</sup> (+2147483647) reichen.  
 
Da ein [[wikipedia:de:Bit|Bit]] für die Darstellung des Vorzeichen benötigt wird, können die Variablen von -2<sup>31</sup> (-2147483647) bis 2<sup>31-1</sup> (+2147483647) reichen.  
 +
  
 
=== Der Typ Float ===
 
=== Der Typ Float ===
Der Typ float dient zur Speicherung von [[wikipedia:de:Gleitkommazahl|Gleitkommazahlenl]], im englischen floating point numbers genannt
+
Der Typ float dient zur Speicherung von [[wikipedia:de:Gleitkommazahl|Gleitkommazahlenl]], im englischen floating point numbers (kurz floats) genannt
 
 
Das [[hwikipedia:de:IEEE_754|IEEE-Format]] interpretiert eine bestimmte Anzahl von Bits als Dezimalzahl. Es gibt hier eine kleinere Variante mit 32 Bit und eine größere Variante mit 64 Bit. Im 32 Bit Short-Format, was für das TESCS als Float genutzt wird, werden die Bits 0 bis 22 als Mantisse interpretiert, die Bits 23 bis 30 als Exponent und das Bit 31 als Vorzeichen.
 
  
 +
Das [[wikipedia:de:IEEE_754|IEEE-Format]] interpretiert eine bestimmte Anzahl von [[wikipedia:de:Bit| Bits]] als Dezimalzahl. Es gibt hier eine kleinere Variante mit 32 [[wikipedia:de:Bit| Bit]] und eine größere Variante mit 64 [[wikipedia:de:Bit| Bit]]. Im [[wikipedia:de:IEEE_754#Zahlenformate_und_andere_Festlegungen_des_IEEE_754-Standards|32 Bit Short-Format]], was für das [[ob:Construction Set|TESIVCS]] als Float genutzt wird, werden die [[wikipedia:de:Bit| Bits]] 0 bis 22 als [[wikipedia:de:Mantisse|Mantisse]] interpretiert, die [[wikipedia:de:Bit| Bits]] 23 bis 30 als [[wikipedia:de:Exponent_%28Mathematik%29|Exponent]] und das [[wikipedia:de:Bit| Bit]] 31 als Vorzeichen.
  
 
=== Der Typ Ref ===
 
=== Der Typ Ref ===
refs in HEX,  
+
Ref-Variablen werden als [[wikipedia:de:Hexadezimalsystem|Hexadezimalzahl]] dargestellt. Sie verwalten [[Oblivion:Referenz|Referenzen]]. Während die [[ob:object|Objekte]] im [[ob:Construction Set|TESIVCS]] Vorlagen sind, die mit Editor ID und Form ID eindeutig gekennzeichnet sind, sind [[Oblivion:Referenz|Referenzen]] reale Dinge in der Oblivion-Welt. Sie haben weitere Eigenschaften, hauptsächlich eine Position in der Welt.
  
  
=== Der Typ "unsigned Integer" ===
+
=== Der Typ unsigned Integer ===
Neben diesen Variablentypen, die in der Scriptsprache im Gebrauch sind, gibt es noch zwei weitere Datentypen, die im TESCS in Gebrauch sind. Dies sind Unsigned Integer mit 8 bzw. 16 bit Länge. Sie werden hauptsächlich genutzt, um Attributs- und Fähigkeitswerde zu speichern.
+
Neben diesen Datentypen, mit denen Variablen in der Scriptsprache deklariert und im Programm genutzt werden können, gibt es noch zwei weitere Datentypen, die im [[ob:Construction Set|TESIVCS]] in Gebrauch sind. Dies sind Unsigned Integer mit 8 (0 bis 255) bzw. 16 bit (0 bis 32.767) Länge. Sie werden hauptsächlich genutzt, um Attributs- und Fähigkeitswerte zu speichern.
Da sie unsigned also vorzeichenlos sind, hat das einen auf den ersten Blick überraschenden Effekt, den sog. [[wikipedia:de:Ganzzahl%C3%BCberlauf|Ganzzahlüberlauf]], der dazu führt, dass zum Beispiel. ein x-wert von 255 durch Addition von 2 zu 1 statt zu 257 wird. Die häufig anzutreffende Bemerkung, dass "-1" unendlich viel sei, bedeutet also nur, dass "-1" den größtmöglichen Wert repräsentiert.  
+
Da sie unsigned, also vorzeichenlos sind, hat das einen auf den ersten Blick überraschenden Effekt, den sog. [[wikipedia:de:Ganzzahl%C3%BCberlauf|Ganzzahlüberlauf]], der dazu führt, dass zum Beispiel ein Wert von 255 durch Addition von 2 zu 1 statt zu 257 wird.
  
 
== Gültigkeitsbereiche und Lebensdauer von Variablen==
 
== Gültigkeitsbereiche und Lebensdauer von Variablen==
 
   
 
   
Variablen sind nur in ihrem [[wikipedia:de:Variable_%28Programmierung%29#G.C3.BCltigkeitsbereich_von_Variablen_.28Scope.29|Gültigkeitsbereich]] bekannt und damit nutzbar. Das Bekanntmachen wird [[wikipedia:de:Deklaration_%28Programmierung%29 |Deklaration]] genannt. Innerhalb von Scripts geschieht dies durch die Angabe des Variablentyps gefolgt von dem Variablennamen.
+
Variablen sind nur in ihrem [[wikipedia:de:Variable_%28Programmierung%29#G.C3.BCltigkeitsbereich_von_Variablen_.28Scope.29|Gültigkeitsbereich]] bekannt und damit nutzbar. Das Bekanntmachen wird [[wikipedia:de:Deklaration_%28Programmierung%29 |Deklaration]] genannt.  
  
 +
 +
=== Scriptvariablen ===
 +
Die [[wikipedia:de:Deklaration_%28Programmierung%29 |Deklaration]] geschieht durch die Angabe des Variablentyps gefolgt von dem Variablennamen.
 
<tesscript>  
 
<tesscript>  
 
short a
 
short a
Zeile 42: Zeile 43:
 
</tesscript>  
 
</tesscript>  
  
+
Da ein Script nicht aus sich heraus existiert, sondern als eine Eigenschaft an [[ob:object|Objekte]] (genauer die [[Oblivion:Referenz|Referenzen]]), ausgesprochene [[ob:Spell|Zauber]] oder [[ob:Quest|Quests]] gebunden ist, existieren die Variablen solange, wie die in die Welt gesetzten Elemente existieren.
Im TESCS gibt es drei unterschiedliche Gültigkeitsbereiche.
+
 
 +
Eine Besonderheit sind die Variablen, die in einem [[ob:Questscript|Questscript]] deklariert werden. Ihr Gültigkeitsbereich ist global. Auf sie kann mit <tesscript>Questname.Variablenname</tesscript> von außerhalb des Questscripts zugegriffen werden.
  
 
=== Globale Variablen ===
 
=== Globale Variablen ===
Eine Globale Variable ist für jedes Script oder Bedingung einer Referenz benutzbar, ohne das es einen Bezug an eine einzelne Quest oder Objekt braucht. Um alle Globalen Variablen zu sehen, mit denen man im TESCS arbeiten kann, wähle im Haupt-Menü "GamePlay -> Globals" und eine Liste wird dir angezeigt.
+
Eine globale Variable ist für jedes Script oder Bedingung einer [[Oblivion:Referenz|Referenz]] benutzbar, ohne dass es einen Bezug an eine einzelne Quest oder ein [[ob:object|Objekt]] braucht. Um alle globalen Variablen zu sehen, mit denen man im [[ob:Construction Set|TESIVCS]] arbeiten kann, wähle im Haupt-Menü "GamePlay -> Globals" und eine Liste wird dir angezeigt.
 +
 
 +
Du kannst dir auch eigene globale Variablen erstellen. Einfach in die eben erwähnte Liste rechtsklicken und "new" wählen.
 +
 
 +
* EditorID - Der Name der Variable. Freizeichen oder Sonderzeichen sind nicht erlaubt
 +
* Variable Type – Es sind die Typen Short, Long und Float möglich
 +
* Value - Der Standard-Wert für die globale Variable
  
Du kannst dir auch eigene Globale Variablen erstellen. Einfach in die eben erwähnte Liste rechtsklicken und "new" wählen.
+
Globale Variablen werden intern im Float-Format abgelegt, aber ansonsten dem angegebenen Typ entsprechend behandelt.
  
    * EditorID - Der Name der Variable. Freizeichen oder Sonderzeichen sind nicht erlaubt
+
Da globale Variablen an [[ob:Oblivion|Oblivion]] bzw. an eine Mod gebunden sind, existieren sie "immer" bzw. so lange, wie die Mod aktiviert ist.
    * Variable Type – Es sind die Typen Short, Long und Float möglich
 
    * Value - Der Standard-Wert für die Globale Variable
 
  
 +
=== Game Settings ===
 +
Game Settings sind keine Variablen im normalen Sinne, so wie die globalen und Script-Variablen. Sie können z.b. nicht als Ersatz für eine Zahl in einem Script verwandt werden. Auf sie kann nur mit einer Funktion [[ob:GetGameSetting |GetGameSetting ]] zugegriffen werden.
  
=== Questvariablen ===
+
Diese Variablen existieren ebenso wie die globalen und sind auch überall zugreifbar.
Questvariablen sind  
 
Questvariablen solange die Quest nicht abgeschlossen ist.
 
  
=== Scriptvariablen ===
 
Scriptvariablen immer, solange das zugehörige Objekt oder der zugehörige Zauber existiert.
 
  
  
 
== Besonderheiten ==
 
== Besonderheiten ==
  
=== Der Typ Float ===
+
=== Floatvariablen===
Die [[wikipedia:de:Gleitkommazahl#Eigenschaften_einer_Gleitkommaarithmetik|Gleitkommaarithmetik]] von Float-Zahlen (oder vereinfacht ausgedrückt, das Rechnen mit Float-Zahlen) ist ein wenig gewöhnungsbedürftig.  
+
Die [[wikipedia:de:Gleitkommazahl#Eigenschaften_einer_Gleitkommaarithmetik|Gleitkommaarithmetik]] von Float-Zahlen (oder vereinfacht ausgedrückt, das Rechnen mit Float-Zahlen) ist ein wenig gewöhnungsbedürftig, da mit diesem für Computer entwickelten Datentyp reale Zahlen nicht exakt abgebildet werden können, zumeist werden sie gerundet.  
 +
 
 +
 
  
[[wikipedia:de:Numerik|Numerik]]
+
=== Referenzvariablen ===
[[wikipedia:de:Rundungsfehler|Rundungsfehler]] 
 
  
=== Der Typ Ref ===
+
Eine Referenzvariable kann immer dort eingesetzt werden, wo man auch eine [[Oblivion:Referenz|Referenz]] (eines [[ob:object|Objektes]]) nutzen würde. Mit Referenzvariablen kann man nicht rechnen, mit ihnen sind nur Zuweisungen und Vergleichsoperationen möglich.
  
 +
[[Oblivion:Referenz|Referenzen]], die nicht [[ob:Persistenz|persistent]] sind, sind nicht über ein Script zugreifbar, wenn das [[ob:object|Objekt]] nicht im Spiel geladen ist (sich also nicht in der aktiven [[ob:cell|Zelle]] befindet). Auch [[Oblivion:Referenz|Referenzen]], die in einen [[ob:Container|Container]] aufgenommen werden, sind nicht zugreifbar.
  
 +
== Weitere Hinweise ==
 +
* [[wikipedia:de:Numerik|Numerik]]
 +
* [[wikipedia:de:Rundungsfehler|Rundungsfehler]] 
  
[[Kategorie: Grundlegendes Wissen|Variablen]]
+
[[Kategorie: Scripting_Wissen|Variablen]]
[[Kategorie: Scripts|Variablen]]
+
[[Category:Sprachelemente|Variablen]]

Aktuelle Version vom 1. Mai 2009, 09:59 Uhr

Allgemeines zu Variablen im CS

Die Scriptsprache des TESIVCS enthält Variablen wie andere Programmiersprachen auch. Es gibt drei unterschiedliche Datentypen und zwei Gültigkeitsbereiche.


Variablentypen

Der Typ Short

Der Typ Short speichert ganzzahlige (integer) Werte. Im TESCS ist ein Mitinteger-Format, das 16 Bit also 2 Byte belegt). Da ein Bit für die Darstellung des Vorzeichen benötigt wird, können die Variablen von -215 (-32768) bis 215-1 (+32767) reichen.


Der Typ Long

Der Typ Long speichert ganzzahlige (integer) Werte. Im TESCS ist ein integer-Format, das 326 Bit also 4 Byte belegt). Da ein Bit für die Darstellung des Vorzeichen benötigt wird, können die Variablen von -231 (-2147483647) bis 231-1 (+2147483647) reichen.


Der Typ Float

Der Typ float dient zur Speicherung von Gleitkommazahlenl, im englischen floating point numbers (kurz floats) genannt

Das IEEE-Format interpretiert eine bestimmte Anzahl von Bits als Dezimalzahl. Es gibt hier eine kleinere Variante mit 32 Bit und eine größere Variante mit 64 Bit. Im 32 Bit Short-Format, was für das TESIVCS als Float genutzt wird, werden die Bits 0 bis 22 als Mantisse interpretiert, die Bits 23 bis 30 als Exponent und das Bit 31 als Vorzeichen.

Der Typ Ref

Ref-Variablen werden als Hexadezimalzahl dargestellt. Sie verwalten Referenzen. Während die Objekte im TESIVCS Vorlagen sind, die mit Editor ID und Form ID eindeutig gekennzeichnet sind, sind Referenzen reale Dinge in der Oblivion-Welt. Sie haben weitere Eigenschaften, hauptsächlich eine Position in der Welt.


Der Typ unsigned Integer

Neben diesen Datentypen, mit denen Variablen in der Scriptsprache deklariert und im Programm genutzt werden können, gibt es noch zwei weitere Datentypen, die im TESIVCS in Gebrauch sind. Dies sind Unsigned Integer mit 8 (0 bis 255) bzw. 16 bit (0 bis 32.767) Länge. Sie werden hauptsächlich genutzt, um Attributs- und Fähigkeitswerte zu speichern. Da sie unsigned, also vorzeichenlos sind, hat das einen auf den ersten Blick überraschenden Effekt, den sog. Ganzzahlüberlauf, der dazu führt, dass zum Beispiel ein Wert von 255 durch Addition von 2 zu 1 statt zu 257 wird.

Gültigkeitsbereiche und Lebensdauer von Variablen

Variablen sind nur in ihrem Gültigkeitsbereich bekannt und damit nutzbar. Das Bekanntmachen wird Deklaration genannt.


Scriptvariablen

Die Deklaration geschieht durch die Angabe des Variablentyps gefolgt von dem Variablennamen. <tesscript> short a long b float c ref d </tesscript>

Da ein Script nicht aus sich heraus existiert, sondern als eine Eigenschaft an Objekte (genauer die Referenzen), ausgesprochene Zauber oder Quests gebunden ist, existieren die Variablen solange, wie die in die Welt gesetzten Elemente existieren.

Eine Besonderheit sind die Variablen, die in einem Questscript deklariert werden. Ihr Gültigkeitsbereich ist global. Auf sie kann mit <tesscript>Questname.Variablenname</tesscript> von außerhalb des Questscripts zugegriffen werden.

Globale Variablen

Eine globale Variable ist für jedes Script oder Bedingung einer Referenz benutzbar, ohne dass es einen Bezug an eine einzelne Quest oder ein Objekt braucht. Um alle globalen Variablen zu sehen, mit denen man im TESIVCS arbeiten kann, wähle im Haupt-Menü "GamePlay -> Globals" und eine Liste wird dir angezeigt.

Du kannst dir auch eigene globale Variablen erstellen. Einfach in die eben erwähnte Liste rechtsklicken und "new" wählen.

  • EditorID - Der Name der Variable. Freizeichen oder Sonderzeichen sind nicht erlaubt
  • Variable Type – Es sind die Typen Short, Long und Float möglich
  • Value - Der Standard-Wert für die globale Variable

Globale Variablen werden intern im Float-Format abgelegt, aber ansonsten dem angegebenen Typ entsprechend behandelt.

Da globale Variablen an Oblivion bzw. an eine Mod gebunden sind, existieren sie "immer" bzw. so lange, wie die Mod aktiviert ist.

Game Settings

Game Settings sind keine Variablen im normalen Sinne, so wie die globalen und Script-Variablen. Sie können z.b. nicht als Ersatz für eine Zahl in einem Script verwandt werden. Auf sie kann nur mit einer Funktion GetGameSetting zugegriffen werden.

Diese Variablen existieren ebenso wie die globalen und sind auch überall zugreifbar.


Besonderheiten

Floatvariablen

Die Gleitkommaarithmetik von Float-Zahlen (oder vereinfacht ausgedrückt, das Rechnen mit Float-Zahlen) ist ein wenig gewöhnungsbedürftig, da mit diesem für Computer entwickelten Datentyp reale Zahlen nicht exakt abgebildet werden können, zumeist werden sie gerundet.


Referenzvariablen

Eine Referenzvariable kann immer dort eingesetzt werden, wo man auch eine Referenz (eines Objektes) nutzen würde. Mit Referenzvariablen kann man nicht rechnen, mit ihnen sind nur Zuweisungen und Vergleichsoperationen möglich.

Referenzen, die nicht persistent sind, sind nicht über ein Script zugreifbar, wenn das Objekt nicht im Spiel geladen ist (sich also nicht in der aktiven Zelle befindet). Auch Referenzen, die in einen Container aufgenommen werden, sind nicht zugreifbar.

Weitere Hinweise