Haywood Slap/Sandbox – User

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Bot: Adding category Sandbox)
(Empty it)
Tag: Replaced
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Stub}}
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:Sandbox]]
[[Category:Sandbox]]

Latest revision as of 01:05, 4 December 2019