This Visual Studio Code extension creates CfgFunctions.hpp (Functions Library) file with a simple click of a button when developing Arma 3.
Generating CfgRemoteExec.hpp (Remote Execution Framework) with persistent parameters is also supported (see documentation below).
This extension is somewhat opinionated when it comes to secure scripting. It intends and attempts to make basically all script based cheats useless.
- Automatic generation of
CfgFunctions.hppfile with a simple button click in VS Code interface (CfgFunctions.hppfile needs to be open and active) - Support for even complex projects with multiple dependencies or otherwise complex/large folder structure
- Personal/project tag included in settings (mandatory)
- Autocompletion for functions in the Functions Library that have been defined/added by the user (since v0.2.0) - note that you need to auto-generate
CfgFunctions.hpponce after opening the editor for the autocompletion to become active - Generation of
CfgRemoteExec.hpptemplate based on your custom functions by running a task (Ctrl+Shift+P) (since v0.3.0) - Support for
postInitandpreInitattributes.- Name your function
fn_preInit_yourFunction.sqforfn_postInit_yourFunction.sqfto include the needed attribute. (Since v0.5.0)
- Name your function
- Support for persistent remote execution framework (
CfgRemoteExec.hpp) parameters (function targets and JIP (Join In Progress)) for added security. (since v1.0.0)- For persistent CfgRemoteExec parameters, use formatting
fn_%1_%2_functionName.sqfwhere%1 = ALL || CLIENT || SERVERand%2 = JIP. Or the former in reverse order, it's supported too.- Example:
fn_CLIENT_JIP_getCarKeys.sqforfn_JIP_CLIENT_getCarKeys.sqf. Or:fn_SERVER_JIP_loadUnitData.sqforfn_JIP_SERVER_loadUnitData.sqf. - If you don't need to send a function call to JIP (Join In Progress) queue, just leave the
JIPpart off. Example:fn_SERVER_loadUnitData.sqforfn_CLIENT_loadUnitData.sqf. - Also adding
JIPparameter only is supported for special cases, but it's not recommended. If theJIPonly gets defined, the remote execution will allow all targets. (It's better to have separate functions for targeting server and clients.)
- Example:
- For persistent CfgRemoteExec parameters, use formatting
- Support for loading and overriding global extension settings with local config file (especially useful in complex projects). (Since v1.3.0)
- Up-to-date Visual Studio Code installation.
- (Empty)
CfgFunctions.hppfile inMISSION_OR_CAMPAIGN_ROOT/functions/folder. - Filenames of SQF files to be included must start with
'fn_'. - SQF files must be located in subfolder of
MISSION_OR_CAMPAIGN_ROOT/functions/folder. CfgFunctions.hppfile needs to be open and the active file in the editor.- To generate
CfgRemoteExec.hpp, you must haveCfgFunctions.hppopen and as active file in the editor.
- Global settings:
- Personal/project tag to avoid naming conflicts.
- Toggle to enable/disable allowing debug mode (functions recompile and logging).
- PBO prefix for addon development and/or complex projects.
- Toggle to enable/disable unrestrained execution with engine based remote execution framework.
- Local settings (override of global settings):
- Create a config file named exactly
cfgFunctions.txtin the same directory withCfgFunctions.hpp. Ensure that the file has.txtas its file extension. (Pay special attention to this on Windows, as Windows hides file extensions by default.)cfgFunctions.txtsupports overriding any combination of the three global settings with formattingsettingName=value, each on their own line. Note that there must be no whitespace in any line.- Examples of local config (
cfgFunctions.txt) settings:developerTag=yourTagpboPrefix=yourPboPrefixdebugEnabled=trueallowRemoteExec=true
- Examples of local config (
- Create a config file named exactly
- You must click the
CfgFunctions.hppfile contents in editor view at first before clicking the "GenerateCfgFunctions.hpp(Arma 3)" button. CfgFunctions.hppgeneration might fail ifCfgFunctions.hppfile has been edited and not saved when clicking the generate button.- Autocompletion of custom user defined functions works only after running the automatic generation of
CfgFunctions.hppat least once after opening the editor. - If you generate
CfgRemoteExec.hpp:-
- the file must not exist yet (the operation will fail if the file exists already to prevent accidental overwrites),
-
- you need to have generated
CfgFunctions.hppat least once, and
- you need to have generated
-
- you need to have the
CfgFunctions.hppfile active in the editor (by e.g. clicking on it's contents in the normal editor view) when you run theGenerate CfgRemoteExec template (Arma 3)task. (Ctrl+Shift+P)
- you need to have the
-
Bug reports are highly appreciated!
Initial release.
Added autocompletion for functions in the Functions Library defined by the user.
Added an option/task to generate CfgRemoteExec.hpp template based on the CfgFunctions.hpp.
Note that you must generate the CfgFunctions.hpp at least once and make sure that the file is active by clicking on it in the editor view before you can run the Generate CfgRemoteExec template (Arma 3) task. (Ctrl + Shift + P)
Fixed IntelliSense suggestions. The editor/IntelliSense should now suggest autocompletion of defined functions properly when you start typing the full function name (starting from your developer tag/prefix).
Added support for postInit and preInit attributes for functions. Name your function fn_preInit_yourFunction.sqf or fn_postInit_yourFunction.sqf to include the needed attribute.
Hotfix: missing semicolon when using attributes on core functions.
Support for persistent remote execution framework (CfgRemoteExec.hpp) parameters (function targets and JIP (Join In Progress)) for added security.
Fix showcase GIFs not showing.
Add documentation with examples how to make the Remote Execution Framework's function parameters persistent. (See "Requirements" on this page.)
Make CfgRemoteExec.hpp generation more tolerant to typos/casing mistakes.
Fix a bug that allowed user to define function as JIP (Join In Progress) one without allowed target(s) getting specified.
Add toggle to enable or disable allowing debug mode in Functions library.
Improve documentation in CfgRemoteExec.hpp.
Update project description.
Add option to add PBO prefix (necessary, if developing an addon instead of a mission).
Add option to override extension's global settings with local settings file (especially useful for complex projects and/or addon development). Read README -> Extension Settings for more information.
Fix empty category folders breaking the generation of CfgFunctions.hpp.
Hotfix developer tag not being set if it was imported from global config (extension settings).
Hotfix possible issues with PBO prefix and debug flag (not being set properly if they were imported from global config i.e. extension settings).
Fix autocompletion of functions becoming bugged easily. (Because of limitations of Visual Studio Code's extension API, please note that you still need to generate CfgFunctions once when starting development after opening the editor to ensure that your developer tag is set correctly.)
Add an extension setting: toggle allowing unrestrained remote execution (for development purposes). Fix function duplication in autocompletion of functions.
Enjoy!

