Haywood Slap/Sandbox – User

From Bohemia Interactive Community
Jump to navigation Jump to search
(Copied in text of the Variables page.)
 
(Empty it)
Tag: Replaced
 
(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]]

Latest revision as of 01:05, 4 December 2019