Cross Script Variables
This article is actually a discussion which was brought into the Main Wiki because it has interesting or important information. It should be converted into an actual article; if you can do this, it would be appreciated.
If you are looking for a way to get the value of a variable from one script running on one object to a script running on another object I can imagine you may have entered the above article name in your search or something similar to it. As you first begin writing mods you may notice that the scripting language of Oblivion assumes the only universally accessible variables should be Global variables. This would not be terrible except that all Global variables are treated as floats. (See Floating Point.)
It is possible a time will come in writing a script when you will wish to have a repository to store variable values in that can be read from and written to by any script. Fortunately this is possible. This article addresses a method for not only storing and retrieving non-float numeric values, but object references as well. This could prove very handy when creating dynamic game scenarios.
The Basics
A scenario for creating and testing this type of functionality includes at least three features:
1 - A quest script that acts as the database for storing values. (One might want to read over the article Quest scripts to get familiar with the source of this idea.)
2 - A script that writes a value to one of the variables in the "database" Quest script when it is activated.
3 - A script that reads a value from one of the variables in the "database" Quest script when it is activated.
Using this basic model you should be able to easily construct a simple scenario to see this functionality in action.
The Quest Script
The quest script acts as a database. Unfortunately Oblivion doesn't provide the powerful database features you would find in an SQL database service. Still, it does provide the quest script where the most basic database functionality can be achieved - a command syntax for reading and writing to its variables from outside of the script from external scripts.
The script:
Scriptname MyQuestScriptDatabase ref refVar ; reference values can be stored and retrieved float floatVar ; float values can be stored and retrieved short ShortVar ; integer values can be stored and retrieved begin GameMode ; you don't have to put anything in here ; in fact you probably shouldn't. nothing is required here. ; if you set the value of a variable here it will be locked in ; instead you will set the values of these variables from outside scripts end
Make sure you set the Script Type as "Quest" in the script editor window and then save your script.
The script is very simple. You just declare all the variables you need for storing values. Too bad there isn't a way to create variables dynamically as with an SQL database. Still, this functionality is much better than nothing at all!
Notes
- You should NOT assign starting values to your variables. If you need to do this, do it using some other method. Setting values within this script essentially locks the value in. There may be a workaround for doing this, but more testing will be required.
The next part of this step is to create a quest. You can read up on the steps for creating a quest on the wiki. Just keep in mind that the only setting needed for creating this functionality is the "Script" setting under the Quest Data tab. Once you create and name your quest select your quest script from above under the script setting for the quest.
Storing a Value
Okay! Now that you have your quest and a quest script associated with it you need to know how to write values to it.
The script: