allVariables – Talk

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Clearification)
m (Global object and namespace quirks)
Line 12: Line 12:
::<code><nowiki>someVar = "Hello, world";
::<code><nowiki>someVar = "Hello, world";
hintSilent format ["%1", missionNamespace getVariable "someVar"]; //result: "Hello, world"</nowiki></code>
hintSilent format ["%1", missionNamespace getVariable "someVar"]; //result: "Hello, world"</nowiki></code>
::So there's no need for that. --[[User:Heeeere's Johnny!|Johnny]]
::So there's no need for that. You can overwrite variables in the namespaces, just as you can overwrite global variables by reassigning them. But if you create objects which are global by default (like triggers), you can overwrite their reference (as variables are called by reference), but this will not overwrite the object itself:
::<code><nowiki>myFancyTrigger = createTrigger ["EmptyDetector", getPosATL player];
_trigger = createTrigger ["EmptyDetector", getPosATL player];
missionNamespace setVariable ["myFancyTrigger", _trigger];
</nowiki></code>
::In fact, after this, there will still be both triggers, though the missionNamespace only knows the last one. --[[User:Heeeere's Johnny!|Johnny]]

Revision as of 21:51, 13 December 2014

I don't really play around on the dev build so I'm a little confused with this command. Does it return all variables or only the ones created with setVariable? for example: _myVariable = 0; //same as with missionNamespace do { _myVariable = 0; }; I guess I don't understand how the different namespaces work either. Would this command return ["_myVariable"] in both cases? - DreadedEntity (talk) 20:50, 12 December 2014 (CET)

Let's assume that you're using global variables (since I'm not sure if local variables are actually in any namespace). setVariable is simply a handy means of setting a variable, so it would return the variables in your first and second example as well as if you had used missionNamespace setVariable ["myVariable",0]. --SilentSpike (talk) 21:20, 12 December 2014 (CET)
Creating a global variable automatically sets it into the missionNamespace:
someVar = "Hello, world"; hintSilent format ["%1", missionNamespace getVariable "someVar"]; //result: "Hello, world"
So there's no need for that. You can overwrite variables in the namespaces, just as you can overwrite global variables by reassigning them. But if you create objects which are global by default (like triggers), you can overwrite their reference (as variables are called by reference), but this will not overwrite the object itself:
myFancyTrigger = createTrigger ["EmptyDetector", getPosATL player]; _trigger = createTrigger ["EmptyDetector", getPosATL player]; missionNamespace setVariable ["myFancyTrigger", _trigger];
In fact, after this, there will still be both triggers, though the missionNamespace only knows the last one. --Johnny