|
|
(4 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
| {{Stub}}
| | [[Category:Sandbox]] |
| | |
| A '''variable''' is a "storage container" or "named placeholder" for data. You can read and modify the data once this container is created.
| |
| | |
| == Requirements ==
| |
| | |
| The following links guide to the basics to understand this article:
| |
| | |
| * [[ArmA: Introduction to Scripting]]
| |
| * [[Identifier]]
| |
| | |
| == Initialization ==
| |
| | |
| The first thing you have to do is to find a name for your variable. This name is called [[identifier]]. Read the article [[Identifier]] for more information.
| |
| | |
| Once you know a name, you have to tell the game engine that you are going to use this identifier. This is called '''initialization'''. Then you may do anything with this variable.
| |
| | |
| Don't worry: This sounds more dramatic than it is. You can initialize any variable by assigning a value to it.
| |
| | |
| myVariable = 0;
| |
| | |
| Querying undefined (or uninitialized) variables returns [[nil]] (undefined value). When converted to [[String|Strings]] with [[str]], they will always return [[scalar bool array string 0xe0ffffef]] (in [[Armed Assault]]) or [[scalar bool array string 0xfcffffef]] (in [[Operation Flashpoint]]).
| |
| | |
| myString = str(undefinedVar);
| |
|
| |
| myString => "scalar bool array string 0xe0ffffef"
| |
| | |
| Thus you can't really apply any [[Operators|operations]] on variables before they are initialized with a start value.
| |
| | |
| == Deletion ==
| |
| | |
| Once created, variables will take up space in your computer memory. This is not drastic for small variables, but if you use a big number of very large variables, you should undefine any variables that are not needed anymore. This can be done with the command [[nil]].
| |
| | |
| hugeVariable = nil;
| |
| | |
| This effectively destroys a variable as if it had never existed.
| |
| | |
| == Namespace ==
| |
| | |
| Variables are only visible in certain areas (namespaces) of the game. This prevents name conflicts between different variables in different [[Script (File)|scripts]].
| |
| | |
| There are three namespaces:
| |
| | |
| ; local
| |
| : A variable is only visible in the [[Script (File)|script]] in which it was defined.
| |
| | |
| ; global
| |
| : A variable is visible on the whole computer where it is defined.
| |
| | |
| ; public
| |
| : A variable is broadcasted over the network and visible on all computers connected to the network.
| |
| | |
| === Local Variables ===
| |
| | |
| Local variables are only visible in a specific [[Script (File)|script]]. The whole code in this script has access to the variable, that includes also [[Function|functions]] called within the script.
| |
| | |
| The [[identifier]] of variables local to a [[Script (File)|script]] always has to start with an underscore.
| |
| | |
| _myLocalVariable = 0;
| |
| | |
| In functions you should additionally mark variables as local using the command [[private]]. Otherwise you may modify local variables of the calling script that are visible in the function.
| |
| | |
| private "_myLocalVariable";
| |
| _myLocalVariable = 0;
| |
| | |
| You may also pass more [[Identifier|identifiers]] to the private command using an [[Array]].
| |
| | |
| private ["_myLocalVariable1", "_myLocalVariable2", ...];
| |
| | |
| === Global Variables ===
| |
| | |
| Global variables are visible on the whole computer where they are defined. Names given to units in the [[Mission Editor]] are also global variables pointing to those units, which may not be redefined or modified.
| |
| | |
| [[Identifier]]s of global variables ''must not'' start with underscore. Otherwise there are the same rules as for all [[Identifier|identifiers]].
| |
| | |
| myGlobalVariable = 0;
| |
| | |
| === Public Variables ===
| |
| | |
| Public variables are global variables that are visible on all computers in the network. You can never have true public variables, but you can emulate their behaviour.
| |
| | |
| The value of a global variable gets broadcasted over the network using [[publicVariable]]. After the call of this command the variable will have the same value on all [[Client|clients]]. Once you modify the variable though you have to broadcast it manually ''again'' with [[publicVariable]].
| |
| | |
| == Scope ==
| |
| If a local variable is initialized within a [[Control Structures]] (i.e. [[if]], [[for]], [[switch]], [[while]]) its scope will stay ''within'' this structure (i.e. outside of the structure it will still be seen as undefined). This does not apply to global or public variables.
| |
| <code>if (alive player) then {_living=true}; hint format["%1",_living];</code>
| |
| Returns "scalar bool array string 0xe0ffffef", since the local variable was not initialized ''before'' being used within a control structure.
| |
| | |
| <code>_dead=true; if (alive player) then {_dead=false}; hint format["%1",_dead];
| |
| </code>
| |
| Returns "false", since the variable was initialized before the if...then.<br>
| |
| To initialize local variables, so that they are available throughout the whole script (including any control structures), either initialize it via the [[private]] command (e.g. ''private ["_varname"];''), or by assigning a default value to it (e.g. ''varname=0;'').
| |
| | |
| == Data Types ==
| |
| | |
| Variables may store certain values. The kind of the value specifies the ''type'' of the variable. Different [[Operators|operators]] and [[:Category:Scripting Commands|commands]] require variables to be of different types.
| |
| | |
| Read the article [[Data Types]] for more information about variable types.
| |
| | |
| == Multiplayer Considerations ==
| |
| | |
| FILL IN
| |
| | |
| == See also ==
| |
| | |
| * [[Data Types]]
| |
| | |
| [[Category: Scripting_Topics]] | |