Initialisation Order: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Includes Arma 3 information)
 
m (added scripting topic category)
(18 intermediate revisions by 8 users not shown)
Line 1: Line 1:
{{Important|This page is currently a WIP (Work in Progress) and not in a finished state}}
== Introduction ==
== Introduction ==


Line 8: Line 7:
== Arma 3 ==
== Arma 3 ==


Be aware that a mission's initialization order is different depending on whether it's being ran in a single player or multiplayer environment.
Take note that the order of initialization is different in single player and multiplayer environments. If an entry is unmarked then it applies to both.


=== Single Player ===
{| class="bikitable"
 
|-
# Functions with ''recompile'' attribute are recompiled
|+ Key
# Functions with ''preInit'' attribute are called
!Item
# Object Init Event Handlers are called
!Meaning
# Object initialization fields are called
|-
# init.sqs is executed
|bgcolor="#95F0AD"|
# init.sqf is executed
|Single Player Only
# Modules are initialized
|-
# Functions with postInit attribute are called
|bgcolor="#95DEF0"|
# "BIS_fnc_init" variable is set to true
|Multiplayer Only
 
|-
=== Multiplayer ===
|bgcolor="#DEF0AD"|
|Order is not guaranteed
|}


The following is relevant to every machine including the server itself and [[Arma 3 Headless Client|headless clients]]. If the server is non-dedicated then it should be considered both a server and client.
In multiplayer the following is relevant to every machine including the server and [[Arma 3 Headless Client|headless clients]]. If the server is non-dedicated then it should be considered both a server and client.


{| class="bikitable"
{| class="bikitable"
|-
|-
! bgcolor="#ddddff" | Task
|+ Order of Initialization
! bgcolor="#ddddff" | Applies To
! Task
! bgcolor="#ddddff" | JIP
! Applies To
! bgcolor="#ddddff" | Related To
! JIP
! Related To
! Exec Environment
|-
|-
|Functions with ''recompile'' attribute are recompiled
|Functions with ''recompile'' attribute are recompiled
Line 37: Line 40:
|✔
|✔
|[[Functions Library (Arma 3)]]
|[[Functions Library (Arma 3)]]
|
|-
|-
|Functions with ''preInit'' attribute are called
|Functions with ''preInit'' attribute are called
|All
|All
|
|
|[[Functions Library (Arma 3)]]
|[[Functions Library (Arma 3)]]
|[[Scheduler#Unscheduled_Environment|Unscheduled]]
|-
|-
|Object Init Event Handlers are called
|Object Init Event Handlers are called
Line 47: Line 52:
|
|
|
|
|[[Scheduler#Unscheduled_Environment|Unscheduled]]
|-
|Expressions of Eden Editor entity attributes are called
|<!-- network -->
|<!-- isJIP -->
|[[Eden Editor: Configuring Attributes]]
|[[Scheduler#Unscheduled_Environment|Unscheduled]]
|-
|-
|Object initialization fields are called
|Object initialization fields are called
|All
|All
|✔
|
|
|
|[[Scheduler#Unscheduled_Environment|Unscheduled]]
|-
|bgcolor="#95F0AD"| init.sqs is executed
|bgcolor="#95F0AD"| Single Player
|bgcolor="#95F0AD"|
|bgcolor="#95F0AD"| [[Event Scripts]]
|bgcolor="#95F0AD"|
|-
|bgcolor="#95F0AD"| init.sqf is executed
|bgcolor="#95F0AD"| Single Player
|bgcolor="#95F0AD"|
|bgcolor="#95F0AD"| [[Event Scripts]]
|bgcolor="#95F0AD"|[[Scheduler#Scheduled_Environment|Scheduled]]<ref name="enginewaits">Note 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 ~20secs (postInit), etc.</ref>
|-
|Expressions of Eden Editor scenario attributes are called
| All
|✔
|[[Eden Editor: Configuring Attributes]]
|[[Scheduler#Unscheduled_Environment|Unscheduled]]
|-
|-
|Persistent multiplayer functions are called
|Persistent functions are called
|Client
|Client
|✔
|✔
|[[BIS_fnc_MP]]
|[[BIS_fnc_MP]]
|
|-
|-
|Modules are initialized
|Modules are initialized
|All
|All
|
|
|
|
|
|-
|-
|initServer.sqf is executed
|bgcolor="#DEF0AD"|initServer.sqf is executed
|Server
|bgcolor="#DEF0AD"|Server
|
|bgcolor="#DEF0AD"|
|[[Event Scripts]]
|bgcolor="#DEF0AD"|[[Event Scripts]]
|bgcolor="#DEF0AD"|[[Scheduler#Scheduled_Environment|Scheduled]]
|-
|-
|initPlayerLocal.sqf is executed
|bgcolor="#DEF0AD"|initPlayerLocal.sqf is executed
|Client
|bgcolor="#DEF0AD"|Client
|✔
|bgcolor="#DEF0AD"|✔
|[[Event Scripts]]
|bgcolor="#DEF0AD"|[[Event Scripts]]
|bgcolor="#DEF0AD"|[[Scheduler#Scheduled_Environment|Scheduled]]
|-
|-
|initPlayerServer.sqf is executed on the server
|bgcolor="#DEF0AD"|initPlayerServer.sqf is executed on the server
|Client
|bgcolor="#DEF0AD"|Client
|✔
|bgcolor="#DEF0AD"|✔
|[[Event Scripts]]
|bgcolor="#DEF0AD"|[[Event Scripts]]
|bgcolor="#DEF0AD"|[[Scheduler#Scheduled_Environment|Scheduled]]
|-
|-
|Functions with ''postInit'' attribute are called
|Functions with ''postInit'' attribute are called
|All
|All
|
|
|[[Functions Library (Arma 3)]]
|[[Functions Library (Arma 3)]]
|[[Scheduler#Scheduled_Environment|Scheduled]]<ref name="enginewaits"/>
|-
|-
|"BIS_fnc_init" variable is set to true
|"BIS_fnc_init" variable is set to true
|All
|All
|✔
|✔
|
|
|
|-
|-
|init.sqs is executed
|bgcolor="#95DEF0"| init.sqs is executed
|All
|bgcolor="#95DEF0"|All
|✔
|bgcolor="#95DEF0"|✔
|[[Event Scripts]]
|bgcolor="#95DEF0"|[[Event Scripts]]
|bgcolor="#95DEF0"|[[Scheduler#Scheduled_Environment|Scheduled]]
|-
|-
|init.sqf is executed
|bgcolor="#95DEF0"|init.sqf is executed
|All
|bgcolor="#95DEF0"|All
|✔
|bgcolor="#95DEF0"|✔
|[[Event Scripts]]
|bgcolor="#95DEF0"|[[Event Scripts]]
|bgcolor="#95DEF0"|[[Scheduler#Scheduled_Environment|Scheduled]]
|}
|}
[[Category: Arma 3: Editing]]
[[Category: Scripting_Topics ]]

Revision as of 12:20, 3 June 2018

Introduction

Whenever a mission is launched (or joined in multiplayer) certain tasks are performed to ensure the mission's various components are initialized correctly and that everyone is synced in multiplayer games (particularly JIP players). Initialization order refers to the order in which those tasks are executed and it's important to take into account when setting up the start of a mission.

Event Scripts are a key part of a mission's initialization order and will be utilized often when working with SQF.

Arma 3

Take note that the order of initialization is different in single player and multiplayer environments. If an entry is unmarked then it applies to both.

Key
Item Meaning
Single Player Only
Multiplayer Only
Order is not guaranteed

In multiplayer the following is relevant to every machine including the server and headless clients. If the server is non-dedicated then it should be considered both a server and client.

Order of Initialization
Task Applies To JIP Related To Exec Environment
Functions with recompile attribute are recompiled All Functions Library (Arma 3)
Functions with preInit attribute are called All Functions Library (Arma 3) Unscheduled
Object Init Event Handlers are called All Unscheduled
Expressions of Eden Editor entity attributes are called Eden Editor: Configuring Attributes Unscheduled
Object initialization fields are called All Unscheduled
init.sqs is executed Single Player Event Scripts
init.sqf is executed Single Player Event Scripts Scheduled[1]
Expressions of Eden Editor scenario attributes are called All Eden Editor: Configuring Attributes Unscheduled
Persistent functions are called Client BIS_fnc_MP
Modules are initialized All
initServer.sqf is executed Server Event Scripts Scheduled
initPlayerLocal.sqf is executed Client Event Scripts Scheduled
initPlayerServer.sqf is executed on the server Client Event Scripts Scheduled
Functions with postInit attribute are called All Functions Library (Arma 3) Scheduled[1]
"BIS_fnc_init" variable is set to true All
init.sqs is executed All Event Scripts Scheduled
init.sqf is executed All Event Scripts Scheduled
  1. 1.0 1.1 Note 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 ~20secs (postInit), etc.