allVariables – Talk

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Global object and namespace quirks)
m (addition to my last sentence)
Line 17: Line 17:
missionNamespace setVariable ["myFancyTrigger", _trigger];
missionNamespace setVariable ["myFancyTrigger", _trigger];
</nowiki></code>
</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]]
::In fact, after this, there will still be both triggers, though the missionNamespace only knows the last one. The same thing would happen if you assigned the created trigger to a global variable and overwrite that. --[[User:Heeeere's Johnny!|Johnny]]

Revision as of 21:56, 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. The same thing would happen if you assigned the created trigger to a global variable and overwrite that. --Johnny