Difference between revisions of "Variables and Properties"

1,142 bytes added ,  19:28, 12 February 2017
imported>Egocarib
(Added cross-reference to Accessing Functions From Other Scripts)
imported>Marth
 
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
==Description==
==Description==


Variables and Properties are similar things, they both "hold" values and objects. A variable is "private" meaning that only that script is aware of them, can set their contents, and get their contents.  A Property is essentially a variable that other scripts can access, their contents can be set and get by a other scripts.
Variables and Properties are similar things, they both "hold" values and objects. A variable is "private" meaning that only that script is aware of them, can set their contents, and get their contents.  A Property is essentially a variable that other scripts can access, their contents can be set and get by a other scripts. If a variable or property holds a numeric value, like an integer, get/set returns its value. If a variable or property holds an object, you can access that object's properties and functions. (This is analogous to a reference variable from the old scripting system.)


If a variable or property holds a numeric value, like an integer, get/set returns its value. If a variable or property holds an object, you can access that object's properties and functions. (This is analogous to a reference variable from the old scripting system.)


==Declaring Variables==
==Declaring Variables==
Line 180: Line 179:


==Getting Properties From Any Other Script==
==Getting Properties From Any Other Script==
You can use the above example regarding the Magic Effect script as a basis for your script. You must define a property in your script, with the "Type" of your object you are wishing to access. If your object has a custom script, define the type as your object's script name. Be careful not to declare it as the object's name. All objects can have multiple scripts, so you must specify the ''script name'' you want to access.
You can access the properties of any script attached to any object not just those attached to quests. But you will be accessing a specific script attached to a specific object.
 
'''Example:'''
<source lang="papyrus">
ScriptName ScriptA extends ObjectReference
 
int Property count Auto
float Property weight Auto
</source>
 
 
If both scripts are attached to the same game object (Quest, Perk, ObjectReference, etc.) accessing the variables from the other script is simply a matter of casting self to the correct type.
 
'''Example:'''
<source lang="papyrus">
ScriptName ScriptB extends ObjectReference
 
Event OnInit()
    ScriptA me = self as ScriptA
    me.count = 1
    me.weight = 12.9
 
    (self as ScriptA).count += 7  ; this in-line method works too
EndEvent
</source>
 
 
If the other script is attached to some other object then you'll need a way to access that object. The most common way is a property but you might also get access through some Event argument instead.
 
'''Example:'''
<source lang="papyrus">
ScriptName ScriptB extends ObjectReference
 
ScriptA Property remoteObject Auto
 
Event OnInit()
    remoteObject.count = 1
    remoteObject.weight = 12.9
EndEvent
 
Event OnActivate(ObjectReference akActionRef)
    if (akActionRef as ScriptA)
        (akActionRef as ScriptA).count += 7
    endif
EndEvent
</source>
 
 
For a list of objects you can use as a type that are already within the game, visit the [[Script Objects]] page.
For a list of objects you can use as a type that are already within the game, visit the [[Script Objects]] page.


'''See Also: [[Function_Reference#Accessing_Functions_From_Other_Scripts|Accessing Functions From Other Scripts]]'''
'''See Also: [[Function_Reference#Accessing_Functions_From_Other_Scripts|Accessing Functions From Other Scripts]]'''


==Warnings==
==Warnings==
Line 204: Line 249:
==Notes==
==Notes==
*The list of properties in properties dialog is only updated after adding a new property or after compiling the script with the build-in editor.
*The list of properties in properties dialog is only updated after adding a new property or after compiling the script with the build-in editor.
*You should avoid adding or removing Properties to a base item's script if one or more of its child ObjectReference's is already baked into a current save game.


==See Also==
==See Also==
*[[Variable Reference]]
*[[Property Reference]]
*[[Property Reference]]
*[[Default Value Reference]]
*[[Cast Reference]]


[[Category: Papyrus]]
[[Category: Papyrus]]
[[Category: Papyrus Tutorials]]
[[Category: Papyrus Tutorials]]
{{Languages}}
{{Languages}}
Anonymous user