execVM: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - " <h3 style="display:none">Notes</h3> <dl class="command_description"> <!-- Note Section BEGIN --> <!-- Note Section END --> </dl> " to "") |
Lou Montana (talk | contribs) m (Text replacement - " *\| *([Cc]omments|COMMENTS|Game|[Gg]ame [Nn]ame|Game [Vv]ersion|Game Version \(number surrounded by NO SPACES\)|Multiplayer Arguments( \("local" or "global"\))?|Effects|Multiplayer Effects( \("local" or "global"\))?|Multiplayer Exe...) |
||
Line 1: | Line 1: | ||
{{Command | {{Command | ||
| arma1 | | arma1 | ||
|gr1= Program Flow | |gr1= Program Flow | ||
|1.00 | |1.00 | ||
| Compiles and adds [[SQF_syntax|SQF]] [[Script]] to the [[Scheduler|scheduler]] queue and returns script handle. The script is first searched for in the mission folder, then in the campaign scripts folder and finally in the global scripts folder. The script does not execute immediately upon running [[execVM]] command, but with some delay. How much delay is unknown as it largely depends on how many other scripts there are in the queue and how busy is VM. The optional argument is passed to the script in [[private]] variable <tt>_this</tt>. In Arma 3 the script handle is also passed to the script in <tt>_thisScript</tt> variable. | | Compiles and adds [[SQF_syntax|SQF]] [[Script]] to the [[Scheduler|scheduler]] queue and returns script handle. The script is first searched for in the mission folder, then in the campaign scripts folder and finally in the global scripts folder. The script does not execute immediately upon running [[execVM]] command, but with some delay. How much delay is unknown as it largely depends on how many other scripts there are in the queue and how busy is VM. The optional argument is passed to the script in [[private]] variable <tt>_this</tt>. In Arma 3 the script handle is also passed to the script in <tt>_thisScript</tt> variable. | ||
Line 18: | Line 18: | ||
To see what VM scripts are currently in the scheduler, use [[diag_activeSQFScripts]] command.<br><br> | To see what VM scripts are currently in the scheduler, use [[diag_activeSQFScripts]] command.<br><br> | ||
{{Warning | If the file you are executing is not prepared using UTF-8 encoding and contains some characters [[toArray | with codes]] > 127, they might convert incorrectly}} | {{Warning | If the file you are executing is not prepared using UTF-8 encoding and contains some characters [[toArray | with codes]] > 127, they might convert incorrectly}} | ||
| | | arguments [[execVM]] filename | ||
| | |p1= arguments: [[Anything]] - arguments accessible as <tt>[[_this]]</tt> in the script | ||
| [[ | |p2= filename: [[String]] - file with sqf code (doesn't have to have .sqf extension, but not using standard extensions may cause problems later during binarisation) | ||
|s2= [[execVM]] filename | | [[Script]] - script handle, can be used to determine (via [[scriptDone]] (also via [[isNull]] in Arma 3)) when the execVMed script has finished. In Arma 3, the handle is also available inside the execVMed script in <tt>_thisScript</tt> variable. | ||
|s2= [[execVM]] filename | |||
|p21= filename: [[String]] - file with sqf code (doesn't have to have .sqf extension, but not using standard extensions may cause problems later, during binarisation) |PARAMETER21= | |p21= filename: [[String]] - file with sqf code (doesn't have to have .sqf extension, but not using standard extensions may cause problems later, during binarisation) |PARAMETER21= | ||
|r2= [[Script]] - script handle, can be used to determine (via [[scriptDone]] (also via [[isNull]] in Arma 3)) when the execVMed script has finished. In Arma 3, the handle is also available inside the execVMed script in <tt>_thisScript</tt> variable. | |r2= [[Script]] - script handle, can be used to determine (via [[scriptDone]] (also via [[isNull]] in Arma 3)) when the execVMed script has finished. In Arma 3, the handle is also available inside the execVMed script in <tt>_thisScript</tt> variable. | ||
|x1= <code>_handle = [[execVM]] "test.sqf";</code> | |x1= <code>_handle = [[execVM]] "test.sqf";</code> | ||
|x2= <code>_handle = [[player]] [[execVM]] "test.sqf"; | |x2= <code>_handle = [[player]] [[execVM]] "test.sqf"; | ||
[[waitUntil]] { [[scriptDone]] _handle };</code> | [[waitUntil]] { [[scriptDone]] _handle };</code> | ||
|x3= In Arma 3 this is also possible: | |x3= In Arma 3 this is also possible: | ||
<code>_handle = [[execVM]] "123.sqf"; | <code>_handle = [[execVM]] "123.sqf"; | ||
[[waitUntil]] { [[isNull]] _handle };</code> | [[waitUntil]] { [[isNull]] _handle };</code> | ||
|x4= <code>[4] [[execVM]] "showDamage.sqf"; | |x4= <code>[4] [[execVM]] "showDamage.sqf"; | ||
{{cc|showDamage.sqf}} | {{cc|showDamage.sqf}} | ||
[[private]] _damage = _this [[select]] 0; | [[private]] _damage = _this [[select]] 0; | ||
[[hint]] [[format]] ["%1", _damage];</code> | [[hint]] [[format]] ["%1", _damage];</code> | ||
| [[call]], [[spawn]], [[exec]], [[execFSM]], [[scriptDone]], [[scriptNull]], [[terminate]], [[sleep]], [[uiSleep]], [[waitUntil]], [[canSuspend]], [[diag_activeScripts]], [[diag_activeSQFScripts]], [[SQF syntax]], [[Control Structures]] | | [[call]], [[spawn]], [[exec]], [[execFSM]], [[scriptDone]], [[scriptNull]], [[terminate]], [[sleep]], [[uiSleep]], [[waitUntil]], [[canSuspend]], [[diag_activeScripts]], [[diag_activeSQFScripts]], [[SQF syntax]], [[Control Structures]] | ||
}} | }} | ||
Revision as of 00:35, 18 January 2021
Description
- Description:
- Compiles and adds SQF Script to the scheduler queue and returns script handle. The script is first searched for in the mission folder, then in the campaign scripts folder and finally in the global scripts folder. The script does not execute immediately upon running execVM command, but with some delay. How much delay is unknown as it largely depends on how many other scripts there are in the queue and how busy is VM. The optional argument is passed to the script in private variable _this. In Arma 3 the script handle is also passed to the script in _thisScript variable.
In order to understand execVM consider the following comparison:private _handle = _args execVM "someFile.sqf"; // is practically identical to private _handle = _args spawn compile preprocessFileLineNumbers "someFile.sqf";
So if you need multiple execution of the same file, you might want to store it in a function (Functions Library), otherwise, for a single execution, execVM is a good choice.
To see what VM scripts are currently in the scheduler, use diag_activeSQFScripts command.
- Groups:
- Program Flow
Syntax
- Syntax:
- arguments execVM filename
- Parameters:
- arguments: Anything - arguments accessible as _this in the script
- filename: String - file with sqf code (doesn't have to have .sqf extension, but not using standard extensions may cause problems later during binarisation)
- Return Value:
- Script - script handle, can be used to determine (via scriptDone (also via isNull in Arma 3)) when the execVMed script has finished. In Arma 3, the handle is also available inside the execVMed script in _thisScript variable.
Alternative Syntax
- Syntax:
- execVM filename
- Parameters:
- filename: String - file with sqf code (doesn't have to have .sqf extension, but not using standard extensions may cause problems later, during binarisation)
- Return Value:
- Script - script handle, can be used to determine (via scriptDone (also via isNull in Arma 3)) when the execVMed script has finished. In Arma 3, the handle is also available inside the execVMed script in _thisScript variable.
Examples
- Example 1:
_handle = execVM "test.sqf";
- Example 2:
_handle = player execVM "test.sqf"; waitUntil { scriptDone _handle };
- Example 3:
- In Arma 3 this is also possible:
_handle = execVM "123.sqf"; waitUntil { isNull _handle };
- Example 4:
[4] execVM "showDamage.sqf"; // showDamage.sqf private _damage = _this select 0; hint format ["%1", _damage];
Additional Information
- See also:
- callspawnexecexecFSMscriptDonescriptNullterminatesleepuiSleepwaitUntilcanSuspenddiag_activeScriptsdiag_activeSQFScriptsSQF syntaxControl Structures
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Notes
Notes
- Posted on November 23, 2010 - 15:56
- Kabilen
- Passing variables to the script file
To pass multiple variables to the script file, use an array e.g:
null = [myunit,1234] execVM "test.sqf";
Now within test.sqf to access the elements, use the following:
_myunit = _this select 0;
_myvar = _this select 1;