Lou Montana/Sandbox – User

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Update w/ links)
 
(83 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{SideTOC}}
[[Category: Sandbox]]
{{Feature|informative|To go on [[Initialisation Order]].}}


[[Debugging Techniques]] are ways for a developers to debug (narrow down/determine the root source), or to learn and understand where and why errors or unexpected outcomes are occurring within their code.
{| class="wikitable sortable align-center align-left-col-1"
|+ Order of Initialisation (use column sorting for respective machine order)
! rowspan="2" class="unsortable" style="text-align: center" | Task
! rowspan="2" | Exec Environment
! rowspan="1" colspan="5" class="unsortable" | Machine
|-
! Single Player
! Dedicated Server
! Hosted Server
! Multiplayer Client
! [[Multiplayer Scripting#Join In Progress|JIP]] MP Client


{{note|Debugging is the process of finding and resolving defects or problems within a computer program that prevent correct operation of computer software or a system – ''[https://en.wikipedia.org/w/index.php?title{{=}}Debugging Wikipedia - Debugging]''}}
|-
| [[Arma 3: Functions Library|Functions]] with <syntaxhighlight lang="cpp" inline>recompile</syntaxhighlight> {{Link|Arma 3: Functions Library#Attributes 3|attribute}} are recompiled
| {{n/a}}
| 1 <!-- Single Player -->
| 1 <!-- Dedicated Server -->
| 1 <!-- Hosted Server -->
| 1 <!-- Multiplayer Client -->
| 1 <!-- JIP MP Client -->


== Code basics ==
|-
| [[Arma 3: Functions Library|Functions]] with <syntaxhighlight lang="cpp" inline>preInit</syntaxhighlight> {{Link|Arma 3: Functions Library#Attributes 3|attribute}} are called
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| 2 <!-- Single Player -->
| 2 <!-- Dedicated Server -->
| 2 <!-- Hosted Server -->
| 2 <!-- Multiplayer Client -->
| 2 <!-- JIP MP Client -->


Various links about code and how to write it:
|-
* [[SQF syntax]]
| Object Init Event Handlers are called
* [[SQS syntax]]
| [[Scheduler#Unscheduled Environment|Unscheduled]]
* [[Code Optimisation]]
| 3 <!-- Single Player -->
| 3 <!-- Dedicated Server -->
| 3 <!-- Hosted Server -->
| 3 <!-- Multiplayer Client -->
| {{Icon|unchecked}} <!-- JIP MP Client -->


=== IDE and Syntax Highlight ===
|-
| Expressions of [[Eden Editor: Configuring Attributes|Eden Editor entity attributes]] are called<ref name="isPlayer"><sqf inline>isPlayer _entity</sqf> does not return [[true]] immediately. Once the entity has become a [[player]], it is transferred to the client.</ref>
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| 4 <!-- Single Player -->
| 4 <!-- Dedicated Server -->
| 4 <!-- Hosted Server -->
| {{Icon|unchecked}} <!-- Multiplayer Client -->
| {{Icon|unchecked}} <!-- JIP MP Client -->


Syntax errors are a frequent occurrence when developing scripts. '''Syntax highlight''' will help you find typos in commands and in your scripts.
|-
| Object initialisation fields are called
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| 5 <!-- Single Player -->
| 5 <!-- Dedicated Server -->
| 5 <!-- Hosted Server -->
| 4 <!-- Multiplayer Client -->
| 3 <!-- JIP MP Client -->


An '''I'''ntegrated '''D'''evelopment '''E'''nvironment (short '''IDE''') is a development environment software that provides among other things '''code analysis''', '''code completion''' and '''syntax highlight'''  to help you write better, more error free code.
|- style="background-color: #95F0AD"
| [[Event Scripts#init.sqs|init.sqs]] is executed
|
| 6 <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


See further [[#Debugging Tools|Debugging Tools]] page section for download links.
|- style="background-color: #95F0AD"
| [[Event Scripts#init.sqf|init.sqf]] is executed
| [[Scheduler#Scheduled Environment|Scheduled]]<ref name="enginewaits">Note '''in single player''' that while the environment is [[Scheduler#Scheduled Environment|Scheduled]] ([[canSuspend]] returns true), the engine seems to wait until the script is done executing, essentially behaving similarly to an [[Scheduler#Unscheduled Environment|Unscheduled environment]] - infinite loops will freeze the game, [[uiSleep]] may pause the game for up to ~20s (postInit), [[waitUntil]] can cause catastrophic issues, etc.</ref>
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


=== Errors ===
|-
| Expressions of [[Eden Editor: Configuring Attributes|Eden Editor scenario attributes]] are called<ref name="playerCommandNotAvailable">[[player]] is not available immediately.</ref>
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


An error in SQF '''will''' purely and simply '''halt''' the current script, leading to unpredictable behavior.
|- style="background-color: #95DEF0"
Error are not to happen as it may reduce performance as well as break a mission/feature.
| Persistent functions are called
So if you notice an issue, address it as your script '''will''' stop.
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


=== Finding Errors ===
|-
| [[Modules]] are initialised
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| {{Icon|unchecked}} <!-- JIP MP Client -->


Debugging is usually as complicated as writing the actual code itself. You usually get hinted by the game, where some error happened, and what it was.<br />
|- style="background-color: #DEF0AD"
There are instances where actual error reason might be something completely different than announced (eg. you get the error on a variable being [[nil]] somewhere, but the actual error is that you mistyped it where you set it initially).
| [[Event Scripts#initServer.sqf|initServer.sqf]] is executed
| [[Scheduler#Scheduled Environment|Scheduled]]
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| {{n/a}} <!-- Multiplayer Client -->
| {{n/a}} <!-- JIP MP Client -->


{{Important|Make sure you enable ''Show Script Errors'' in the Launcher (for {{arma3}}) or set the corresponding [[Arma_3_Startup_Parameters|-showScriptErrors]] startup parameter.}}
|- style="background-color: #DEF0AD"
| [[Event Scripts#initPlayerLocal.sqf|initPlayerLocal.sqf]] is executed
| [[Scheduler#Scheduled Environment|Scheduled]]
| <!-- Single Player -->
| {{n/a}} <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


A script error will greet you with this box:
|- style="background-color: #DEF0AD"
[[File:A3_ScriptErrorMsg.jpg|thumb|Script error message|center|500px]]
| [[Event Scripts#initPlayerServer.sqf|initPlayerServer.sqf]] is executed on the server
| [[Scheduler#Scheduled Environment|Scheduled]]
| <!-- Single Player -->
| {{n/a}} <!-- Dedicated Server -->
| ?? <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


It tells you what went wrong, shows a snippet of the code that failed and what file and line it occurred in (unless you used a command combination like eg. {{Inline code|[[compile]] [[loadFile]]}}).
|-
Knowing this, you now can proceed to find the actual reason why that specific piece of code errored.
| [[Arma 3: Functions Library|Functions]] with <syntaxhighlight lang="cpp" inline>postInit</syntaxhighlight> {{Link|Arma 3: Functions Library#Attributes 3|attribute}} are called
| [[Scheduler#Scheduled Environment|Scheduled]]<ref name="enginewaits"/>
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


{{informative|This information can also be found in the [[arma.RPT|RPT log]].}}
|- style="background-color: #95DEF0"
| [[Event Scripts#init.sqs|init.sqs]] is executed
| [[Scheduler#Scheduled Environment|Scheduled]]
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


To solve an issue, you must first to became aware that of it. Aside from your script not having the desired result/effect (if any), an error message can tell you about the problem.
|- style="background-color: #95DEF0"
* Be sure to use [[Arma 3 Startup Parameters#Developer Options|<tt>-showScriptErrors</tt>&nbsp;startup&nbsp;parameter]] to display the error on-screen when it happens
| [[Event Scripts#init.sqf|init.sqf]] is executed
* To learn about the location in your script use [[preprocessFileLineNumbers]] to [[preprocessFile]]
| [[Scheduler#Scheduled Environment|Scheduled]]
* Read [[Crash Files|RPT files]] for more information (make sure [[Arma 3 Startup Parameters#Performance|<tt>-noLogs</tt> startup parameter]] is '''not''' active - otherwise the log will empty)
| <!-- Single Player -->
** Scripts running on a server use the '''Arma''X''Server.RPT''' file which has varying location depending upon the type of server being run.
| <!-- Dedicated Server -->
** Scripts running on a client use the '''Arma''X''.RPT''' file.
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


==== RPT files ====
The [[arma.RPT|RPT]] is also used by the game's engine log other type of problems (low level engine issues, or content problems for example). Hence it will dump all kinds of debug information, warnings, errors as well as encountered script errors.
One can also write information to it by using commands like [[diag_log]].
{{Important|The RPT file might be disabled using the Arma 3 launcher or by setting the corresponding [[Arma_3_Startup_Parameters|-noLogs]] startup parameter ({{arma3}} or {{arma2oa}} option)}}
{|class="bikitable"
|+ RPT File location per game (See [[Crash Files]] for more information)
!Game
!Location
!Files
|-
| {{GVI|arma3|1.00}} {{arma3}}
| <code>'''%localappdata%'''\Arma 3</code>
| <code>Arma3_x64_yyyy-mm-dd_hh-mm-ss.rpt</code>
|-
| {{GVI|arma2|1.00}} {{arma2}}
| <code>'''%localappdata%'''\ArmA 2</code>
| <code>arma2.rpt</code>
|-
| {{GVI|arma|1.00}} {{arma}}
| <code>'''%localappdata%'''\ArmA</code>
| <code>arma.rpt</code>
|-
|-
| {{GVI|ofp|1.00}} {{ofp}}
| [[remoteExec]]'s [[Multiplayer Scripting#Join In Progress|JIP]] queue
| <code>'''''OFP root directory'''''</code>
| {{n/a}}
| <code>flashpoint.rpt<br />context.bin</code>
| {{n/a}} <!-- Single Player -->
|}
| {{n/a}} <!-- Dedicated Server -->
 
| {{n/a}} <!-- Hosted Server -->
 
| {{n/a}} <!-- Multiplayer Client -->
=== Solving Errors ===
| 42 <!-- JIP MP Client -->
 
Once the script error is located: '''Make sure to check first the BiKi page corresponding to the command/function you are using to learn about potential misuse or other important information mentioned on the page!'''
 
The most simple thing you can do is to output expected values. This can be done using for example [[diag_log]] or [[systemChat]].
Output yourself a few [[Variables|variables]] that relate to your problem (for example: When the error occurs because you land in some [[if]] block, output the corresponding variables inside of the if).
You continue doing this until you hit the actual problem: When [[Variables|variable]] A is not set, go to where [[Variables|variable]] A gets set and check around there, repeat and continue.
 
The same can be done for non-critical errors like when a method is "just" computing the wrong values.
 
{{Informative|
If you're having great difficulty solving a problem, the good way is to narrow down the issue to the simplest code block possible;
or take the mission part that doesn't work, paste it into a new test mission and go from here.
Doing so will save you dealing with other scripts' potential side effects!}}
 


==== Common errors ====
|- style="background-color: #EEE"
| ''Scenario going''
| {{n/a}}
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


{| class="bikitable sortable"
!Error message
!Cause
!Solution
|-
|-
|<tt>Error Undefined variable in expression: _varName</tt>
| [[Event Scripts#exit.sqf|exit.sqf]]
|variable ''_varName'' has not been initialised properly in this context.
<code>[[hint]] _nonExistentVar;</code>
|
|
* in the case of a [[spawn]]ed code, previous local variables are '''not''' accessible and must be passed as arguments in order to access them.
| <!-- Single Player -->
* a variable may have been ''undefined'' ({{Inline code|_varName {{=}} [[nil]]}}). Unset it ''after'' you are done using it.
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->
 
|-
|-
|<tt>Error x elements provided, y is expected</tt>
| [[Event Scripts#exit.sqs|exit.sqs]]
|A wrong number of arguments in array was provided
<code>_unit [[setPos]] [0]; {{codecomment|// [[setPos]] only takes an array of 2 to 3 elements}}</code>
|rowspan="2" align="center"|'''Read the wiki about said command'''.<br /><br />Use [[typeName]] to output a variable type and compare it to the command's wiki page.
|-
|<tt>Error type x, expected y</tt>
|An ill-typed argument was provided.
<code>[[hint]] 5; {{codecomment|// must be [[String]] or [[Structured Text]], [[Number]] provided}}</code>
|-
|rowspan="2"|<tt>Error Zero divisor</tt>
|Pretty self-explanatory, somewhere in your code is a division by zero.
<code>[[private]] _number = 0;
[[private]] _result = 100/_number;</code>
|
|
* Make sure to check that your divisor is different from zero before dividing.
| <!-- Single Player -->
<code>[[private]] _result = [100, 100/_number] [[select]] (_number != 0);</code>
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->
 
|-
|-
|Also happens when using an invalid [[select]] index.
| {{Link|Arma 3: Mission Event Handlers#Ended|"Ended" Mission Event Handler}}
<code>["a","b","c"] [[select]] 20; {{codecomment|// index can only be 0, 1 or 2}}</code>
|
|
* Ensure your [[select]] happens within the array boundaries.
| <!-- Single Player -->
* use [[selectRandom]] to pick a random item in an array.
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->
 
|-
|-
|<tt>Local variable in global space</tt>
| {{Link|Arma 3: Mission Event Handlers#MPEnded|"MPEnded" Mission Event Handler}}
|An attempt to [[private]] a public variable
<code>[[private]] "myVar"; {{codecomment|// should be "_myVar"}}</code>
|Replace public variable usage with private variables.
|-
|rowspan="2"|<tt>Error Generic error in expression</tt>
|A [[sleep]]/[[uiSleep]]/[[waitUntil]] command has been used in an [[Scheduler#Unscheduled Environment|unscheduled environment]].
<code>[[player]] [[addEventHandler]] ["Fired", { [[sleep]] 1; [[hint]] "bang"; }];</code>
|
* Do '''not''' use such suspending commands in unscheduled environment; a common workaround could be:
<code>[[private]] _t = [[time]] + 5; {{codecomment|// having to wait for 5 seconds}}
[[waitUntil]] { [[time]] > _t };</code>
* [[spawn]] code:
<code>[[player]] [[addEventHandler]] ["Fired", { [] spawn { [[sleep]] 1; [[hint]] "bang"; }; }];</code>
|-
|Further code reading is required.
|
|
* cut your code in smaller pieces and locate the concerned line(s).
| <!-- Single Player -->
|}
| <!-- Dedicated Server -->
 
| <!-- Hosted Server -->
=== Working with Addons ===
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


If you are working on an addon, repacking a PBO can be time-intensive.
This operation can be replaced simply by creating a basic mission in the "Missions" or "MPmissions" (if your feature is multiplayer-specific) folder of your game installation, and running the mission locally.
The easiest way of accomplishing this is by the use of [[Event Scripts]] to run your code such as [[init.sqf]].
Once you have tested your code this way, you can then sequentially pack your PBO when major changes have been made, rather than for each debug session of a script or piece of code.
=== Debugging specific sections of code ===
Although primitive, the combined use of [[diag_log]], [[systemChat]]/[[hint]] and [[format]] can help to debug the content of function arguments.
In the case that specific pieces of code do not run, or if specific ''if'' conditions don't appear to fire, debugging the variable content with [[diag_log]] can be useful.
As with all debugging, as long as the developer is methodical and logical in checking each section of code that runs, finding bugs and resolving them can be straightforward.
== Debugging Tools ==
{| class="bikitable sortable"
! Game
! User
! Addon/Toolname
! Category
! Description
! Link
|-
|''N/A''
|[https://forums.bohemia.net/profile/797692-sanjo/ Sanjo]
|Notepad++ SQF
|Text editor plugin - Notepad++
|[https://notepad-plus-plus.org/download/ Notepad++] SQF Syntax highlighter plugin. [http://www.armaholic.com/page.php?id=8680 Forum post]
|[https://github.com/Sanjo/npp-sqf Download]
|-
|''N/A''
|[https://forums.bohemia.net/profile/1110763-k-town/ K-Town]
|Arma IntelliJ plugin
|IDE plugin - IntelliJ
|[https://forums.bohemia.net/forums/topic/190427-arma-intellij-plugin-smart-editing-for-header-and-sqf-files/ Forum post]
|[https://github.com/kayler-renslow/arma-intellij-plugin/releases Download]
|-
|''N/A''
|[https://forums.bohemia.net/profile/804281-armitxes/ Armitxes]
|SQF Language
|IDE plugin - Visual Studio Code
|[https://forums.bohemia.net/forums/topic/182917-vs-code-~-sqf-visual-studio-code-sqf-language/ Forum post]
|[https://marketplace.visualstudio.com/items?itemName=Armitxes.sqf Download]
|-
|''N/A''
|ole1986
|Arma Dev
|IDE plugin - Visual Studio Code
|
|[https://marketplace.visualstudio.com/items?itemName=ole1986.arma-dev Download]
|-
|''N/A''
|[https://forums.bohemia.net/profile/757308-skacekachna/ SkaceKachna]
|SQFLint
|IDE plugin - Visual Studio Code
|[https://forums.bohemia.net/forums/topic/194417-sqflint-syntax-error-checker-cli/ Forum post]
|[https://marketplace.visualstudio.com/items?itemName=skacekachna.sqflint Download]
|-
|''N/A''
|[https://forums.bohemia.net/profile/1044335-krzmbrzl/ krzmbrzl]
|SQDev
|IDE plugin - Eclipse
|Provides code validation (linting) while you are typing it. [https://forums.bohemia.net/forums/topic/202181-sqdev-sqf-developing-in-eclipse/ Forum post]
|[https://github.com/Krzmbrzl/SQDev Download]
|-
|''N/A''
|[[User:Sbsmac|Sbsmac]]
|Squint
|IDE
|Provides a fully-featured code editor which allows for syntax highlighting, displaying of errors and code correction. [https://forums.bohemia.net/forums/topic/101921-squint-the-sqf-editor-and-error-checker/ Forum post]
|[https://sites.google.com/site/macsarmatools/squint Download]
|-
|''N/A''
|[[User:X39|X39]]
|SQF VM
|Emulator
|[https://forums.bohemia.net/forums/topic/210118-sqf-vm-an-sqf-emulator/ Forum post]
|[https://github.com/SQFvm/vm Download]
|-
|''N/A''
|[[User:Dedmen|Dedmen]]
|Arma Script Profiler
|Tool
|[https://forums.bohemia.net/forums/topic/211626-arma-script-profiler/ Forum post]
|[https://github.com/dedmen/ArmaScriptProfiler/ Download]
|-
|''N/A''
|[[User:Dedmen|Dedmen]]
|Arma Debug Engine
|Tool
|[https://steamcommunity.com/sharedfiles/filedetails/?id=1585582292 Workshop link]
|[https://github.com/dedmen/ArmaDebugEngine/ Download]
|-
|{{GVI|arma3|1.00}}
|[[Bohemia_Interactive|Bohemia Interactive]]
| ''N/A''
|Debug console
|Debug Console capable of executing code and more.
|[[Mission Editor: Debug Console (Arma 3)|Wiki page]]
|-
|{{GVI|arma3|1.00}}
|[[User:Kju|Kju]]
|DevCon
|Debug console
|
|[https://forums.bohemia.net/forums/topic/140287-devcon-the-developer-console/ Download]
|-
|{{GVI|tkoh|1.00}}
|[[Bohemia_Interactive|Bohemia Interactive]]
| ''N/A''
|Debug console
|Debug Console capable of executing code and more.
|[[Mission Editor: Debug Console (Take On Helicopters)|Wiki page]]
|-
|{{GVI|arma2|1.00}}
|[[User:Kju|Kju]]
|DevCon
|Debug console
|
|[http://forums.bistudio.com/showthread.php?t=126249 Download]
|-
|{{GVI|arma2|1.00}}
|[https://forums.bohemia.net/profile/761667-charon-productions/ Charon Productions]
|TroopMon v3
|Debug system
|Debugging system containing informations relevant to mission-makers (especially about AI)
|[http://www.armaholic.com/page.php?id=19898 Download]
|-
|{{GVI|arma2|1.00}}
|[[User:Str|Str]]
|
|Debug console
|
|[http://temp.moricky.com/arma2/stra_debug2.rar Download]
|-
|{{GVI|arma|1.00}}
|[https://forums.bohemia.net/profile/761667-charon-productions/ Charon Productions]
|TroopMon v0.8b
|Debug system
|Complex debugging system providing lots of information for mission-makers, especially about AI.
|[http://www.armaholic.com/page.php?id=727 Download]
|-
|{{GVI|arma|1.00}}
|[[User:Str|Str]]
|
|Debug console
|available in all singleplayer missions, intros and outros. Easy and simple to use (Escape-Enter execute)
|[http://www.armaholic.com/page.php?id=549 Download]
|}
|}




<!--
== See Also ==
|{{GVI|arma|1.00}}
|[[User:Vektorboson|Vektorboson]]
|
|Debug console
|
|<s>[http://home.arcor.de/vektorboson/res/console_3.7z '''''DEAD LINK''''']</s>
|-
|{{GVI|arma2|1.00}}
|Chain of Command
|Binary gamefile viewer
|Tool
|Allows to check variables and script states in save files
|<s>[http://ofp.gamepark.cz/index.php?showthis=6989&newlang=eng '''''DEAD LINK''''']</s>
-->
 
 
[[Category:Operation Flashpoint: Editing]]
[[Category:ArmA: Editing]]
[[Category:ArmA 2: Editing]]
[[Category:Take_On Helicopters: Editing]]
[[Category:Arma 3: Editing]]
[[Category:Scripting Topics]]
 


[[Category:Sandbox]]
* [[Arma 3: Functions Library]]<!--
* [[Arma 2: Functions Library]] -->
* [[Arma 3: Remote Execution]], [[BIS_fnc_MP]] <!-- keep? -->
* [[Eden Editor: Configuring Attributes|Eden Editor: Configuring Attributes]]
* [[Event Scripts]]
* [[Scheduler]]

Latest revision as of 00:29, 18 March 2024

Order of Initialisation (use column sorting for respective machine order)
Task Exec Environment Machine
Single Player Dedicated Server Hosted Server Multiplayer Client JIP MP Client
Functions with recompile attribute are recompiled N/A 1 1 1 1 1
Functions with preInit attribute are called Unscheduled 2 2 2 2 2
Object Init Event Handlers are called Unscheduled 3 3 3 3 Unchecked
Expressions of Eden Editor entity attributes are called[1] Unscheduled 4 4 4 Unchecked Unchecked
Object initialisation fields are called Unscheduled 5 5 5 4 3
init.sqs is executed 6
init.sqf is executed Scheduled[2]
Expressions of Eden Editor scenario attributes are called[3] Unscheduled
Persistent functions are called
Modules are initialised Unchecked
initServer.sqf is executed Scheduled N/A N/A
initPlayerLocal.sqf is executed Scheduled N/A
initPlayerServer.sqf is executed on the server Scheduled N/A ??
Functions with postInit attribute are called Scheduled[2]
init.sqs is executed Scheduled
init.sqf is executed Scheduled
remoteExec's JIP queue N/A N/A N/A N/A N/A 42
Scenario going N/A
exit.sqf
exit.sqs
"Ended" Mission Event Handler
"MPEnded" Mission Event Handler


See Also

  1. isPlayer _entity does not return true immediately. Once the entity has become a player, it is transferred to the client.
  2. 2.0 2.1 Note in single player that while the environment is Scheduled (canSuspend returns true), the engine seems to wait until the script is done executing, essentially behaving similarly to an Unscheduled environment - infinite loops will freeze the game, uiSleep may pause the game for up to ~20s (postInit), waitUntil can cause catastrophic issues, etc.
  3. player is not available immediately.