Lou Montana/Sandbox – User

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Set "Different machines" presentation to tables)
m (Update w/ links)
 
(116 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Informative|Future [[Multiplayer Scripting]] page}}
[[Category: Sandbox]]
{{SideTOC}}
{{Feature|informative|To go on [[Initialisation Order]].}}
{{Stub}}


== The basics ==
{| 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
 
|-
| [[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 -->


* In Multiplayer, players are connected to a server that distributes information among them.
|-
* The server can be either a dedicated machine, or hosted by a player; in the latter it means the server can have a [[player]] unit.
| [[Arma 3: Functions Library|Functions]] with <syntaxhighlight lang="cpp" inline>preInit</syntaxhighlight> {{Link|Arma 3: Functions Library#Attributes 3|attribute}} are called
* Players can join a game ''after'' it started: they are considered "[[Join In Progress|JIP]]" and scripting should be adapted to them.
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| 2 <!-- Single Player -->
| 2 <!-- Dedicated Server -->
| 2 <!-- Hosted Server -->
| 2 <!-- Multiplayer Client -->
| 2 <!-- JIP MP Client -->


{{Informative|In Singleplayer, the game acts as a player-hosted server ({{Inline code|[[isServer]]}} returns {{Inline code|[[true]]}}).}}
|-
{{Warning|Some commands will '''not''' work in Singleplayer, such as {{Inline code|[[netId]]}}!}}
| Object Init Event Handlers are called
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| 3 <!-- Single Player -->
| 3 <!-- Dedicated Server -->
| 3 <!-- Hosted Server -->
| 3 <!-- Multiplayer Client -->
| {{Icon|unchecked}} <!-- JIP MP Client -->
 
|-
| 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 -->


|-
| 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 -->


== Locality ==
|- style="background-color: #95F0AD"
| [[Event Scripts#init.sqs|init.sqs]] is executed
|
| 6 <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


* '''LOCAL''' is an attribute for the machine where the command/script/function is executed.
|- style="background-color: #95F0AD"
* '''REMOTE''' is an attribute for all the other machines. All clients are remote to a server, for example.
| [[Event Scripts#init.sqf|init.sqf]] is executed
* [[:Category:Scripting_Commands|commands]] arguments and effects can be either '''local''' or '''global''':
| [[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>
** a '''local''' argument means an argument that is processed on the machine where the command is executed
| <!-- Single Player -->
** a '''global''' argument means any unit, even a remote one
| <!-- Dedicated Server -->
** a '''local''' effect means that the effect will only happen on the machine where the command is executed
| <!-- Hosted Server -->
** a '''global''' effect means that all the computers will receive it
| <!-- Multiplayer Client -->
See [[Locality in Multiplayer]] for more information.
| <!-- JIP MP Client -->


=== Different machines ===
{|class="bikitable"
!Machine
!Conditions
|-
|-
|Dedicated Server
| Expressions of [[Eden Editor: Configuring Attributes|Eden Editor scenario attributes]] are called<ref name="playerCommandNotAvailable">[[player]] is not available immediately.</ref>
|{{Inline code|[[isDedicated]]}}
| [[Scheduler#Unscheduled Environment|Unscheduled]]
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->
 
|- style="background-color: #95DEF0"
| Persistent functions are called
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->
 
|-
|-
|Player Server
| [[Modules]] are initialised
|{{Inline code|[[hasInterface]] && [[isServer]]}}
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| {{Icon|unchecked}} <!-- JIP MP Client -->
 
|- style="background-color: #DEF0AD"
| [[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 -->
 
|- 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 -->
 
|- style="background-color: #DEF0AD"
| [[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 -->
 
|-
|-
|Client
| [[Arma 3: Functions Library|Functions]] with <syntaxhighlight lang="cpp" inline>postInit</syntaxhighlight> {{Link|Arma 3: Functions Library#Attributes 3|attribute}} are called
|{{Inline code|[[hasInterface]] && not [[isServer]]}}
| [[Scheduler#Scheduled Environment|Scheduled]]<ref name="enginewaits"/>
|-
| <!-- Single Player -->
|[[Join In Progress|JIP]] Client
| <!-- Dedicated Server -->
|{{Inline code|[[didJIP]]}}
| <!-- Hosted Server -->
|-
| <!-- Multiplayer Client -->
|[[Arma 3 Headless Client|Headless Client]]
| <!-- JIP MP Client -->
|{{Inline code|not [[hasInterface]] && not [[isDedicated]]}}
 
|}
|- style="background-color: #95DEF0"
* If you want to know if the current machine is a server (Dedicated Server or Player Server), use {{Inline code|[[isServer]]}}.
| [[Event Scripts#init.sqs|init.sqs]] is executed
* If you want to know if the current machine has a player (Player Server included), use {{Inline code|[[hasInterface]]}}.
| [[Scheduler#Scheduled Environment|Scheduled]]
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->
 
|- style="background-color: #95DEF0"
| [[Event Scripts#init.sqf|init.sqf]] is executed
| [[Scheduler#Scheduled Environment|Scheduled]]
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


== PublicVariable commands ==
PublicVariable commands allow to send '''global''' variables to specified machines.
* Network reception is guaranteed
* Short variable names should be used for network performance
* These commands shouldn't be used intensely for the same reason
{|
!Command
!Effect
|-
|-
|[[publicVariable]]
| [[remoteExec]]'s [[Multiplayer Scripting#Join In Progress|JIP]] queue
|Set/update a variable value from the local machine to all the other machines (including server)
| {{n/a}}
|-
| {{n/a}} <!-- Single Player -->
|[[publicVariableServer]]
| {{n/a}} <!-- Dedicated Server -->
|Set/update a variable value '''from a client to the server'''
| {{n/a}} <!-- Hosted Server -->
|-
| {{n/a}} <!-- Multiplayer Client -->
|[[publicVariableClient]]
| 42 <!-- JIP MP Client -->
|Set/update a variable value '''from the local machine''' (not necessarily the server) '''to a specific client'''
|}


=== How it works ===
|- style="background-color: #EEE"
The server has the variable {{Inline code|ABC_Score}} to send to everyone, it then uses {{Inline code|[[publicVariable]] "ABC_Score"}} (do not forget the quotes!)<br />
| ''Scenario going''
This sends the variable name and value to the clients.
| {{n/a}}
* If the variable is not yet declared on their machine, it will declare it as well.
| <!-- Single Player -->
* If the variable already exists, '''the value is overridden''' by the server's value.
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


|-
| [[Event Scripts#exit.sqf|exit.sqf]]
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


== Network commands ==
|-
| [[Event Scripts#exit.sqs|exit.sqs]]
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


* [[local]]
|-
* [[netId]]
| {{Link|Arma 3: Mission Event Handlers#Ended|"Ended" Mission Event Handler}}
* [[owner]], [[groupOwner]]
|
* [[remoteExec]]
| <!-- Single Player -->
* [[remoteExecCall]]
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


|-
|  {{Link|Arma 3: Mission Event Handlers#MPEnded|"MPEnded" Mission Event Handler}}
|
| <!-- Single Player -->
| <!-- Dedicated Server -->
| <!-- Hosted Server -->
| <!-- Multiplayer Client -->
| <!-- JIP MP Client -->


|}


== See also ==
* [[Arma 3 Headless Client|Headless Client]]
* [[Locality in Multiplayer]]
* [[:Category:Commands_requiring_server_side_execution|Server-only commands]]


== See Also ==


[[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.