Lou Montana/Sandbox – User
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Move a link) |
Lou Montana (talk | contribs) m (Add Remote Execution) |
||
Line 75: | Line 75: | ||
* If you want to know if the current machine is a server (Dedicated Server or Player Server), use {{Inline code|[[isServer]]}}. | * If you want to know if the current machine is a server (Dedicated Server or Player Server), use {{Inline code|[[isServer]]}}. | ||
* If you want to know if the current machine has a player (Player Server included), use {{Inline code|[[hasInterface]]}}. | * If you want to know if the current machine has a player (Player Server included), use {{Inline code|[[hasInterface]]}}. | ||
== PublicVariable commands == | == PublicVariable commands == | ||
Line 92: | Line 93: | ||
|- | |- | ||
|[[publicVariableClient]] | |[[publicVariableClient]] | ||
|Set/update a variable value '''from the local machine''' (not necessarily the server) '''to a specific client''' | |Set/update a variable value '''from the local machine''' (not necessarily the server) '''to a specific client'''<br />{{Important|The information will be lost if the targeted client disconnects!}} | ||
|} | |} | ||
Line 105: | Line 106: | ||
== | == Remote Execution == | ||
{{arma2}} introduced the (now obsolete) [[Multiplayer framework]], used as follow: | |||
waitUntil{ not isNil "BIS_MPF_InitDone"; }; | |||
[nil, nil, rHINT, "Message to everyone!"] call RE; | |||
{{arma3}} alpha introduced [[BIS_fnc_MP]]: | |||
["Message to everyone, including JIP players!", "hint", true, true] call BIS_fnc_MP; | |||
{{Warning|These two methods above are considered '''OBSOLETE''' as {{arma3}} v1.50 introduced two engine commands: [[remoteExec]] and [[remoteExecCall]].}} | |||
'''{{arma3}} (> v1.50):''' | |||
["Message to everyone, including JIP players!", 0, true] remoteExec ["hint"]; | |||
See [[Arma 3 Remote Execution]] for more information. | |||
Line 117: | Line 125: | ||
* [[Arma 3 Headless Client|Headless Client]] | * [[Arma 3 Headless Client|Headless Client]] | ||
* [[Locality in Multiplayer]] | * [[Locality in Multiplayer]] | ||
* [[:Category: | * [[:Category:Commands by effects and arguments locality|Commands by effects and arguments locality]] | ||
** [[:Category:Commands requiring server side execution|Server-only commands]] | |||
* [[Initialization Order]] | * [[Initialization Order]] | ||
* [[Arma 3 Remote Execution]] | |||
[[Category:Sandbox]] | [[Category:Sandbox]] |
Revision as of 01:58, 27 January 2019
Template:SideTOC Template:Stub
The basics
- 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.
- Players can join a game after it started: they are considered "JIP" and scripting should be adapted to them.
Locality
- LOCAL is an attribute for the machine where the command/script/function is executed.
- REMOTE is an attribute for all the other machines. All clients are remote to a server, for example.
- A player's unit is always local to the player's machine. A dedicated server doesn't have a player unit.
- commands arguments and effects can be either local or global:
- a local argument means an argument that is processed on the machine where the command is executed
- a global argument means any unit, even a remote one
- a local effect means that the effect will only happen on the machine where the command is executed
- a global effect means that all the computers will receive it
See Locality in Multiplayer for more information.
Examples
Code | Arguments | Effect | Description |
---|---|---|---|
remoteUnit setDamage 1;
|
Template:EffArg | Template:EffArg | Any unit (local or remote) will die, and all the computers will know |
localUnit addMagazine "30Rnd_556x45_STANAG";
|
Template:EffArg | Template:EffArg | Only a local unit can have its inventory edited with this command, but all the machines will be notified: if a player looks into the localUnit inventory, the added magazine will be there |
remoteUnit addEventHandler ["FiredMan", { hint "remoteUnit fired"; }];
|
Template:EffArg | Template:EffArg | An event handler can be added to any unit (local or remote), but the code will only execute on the machine that ran the code |
localCamera cameraEffect ["Internal", "Back"];
|
Template:EffArg | Template:EffArg | Only a local camera can be entered, and of course only the local machine will see through this camera – no network traffic is generated here |
Different machines
Machine | Conditions |
---|---|
Dedicated Server | isDedicated
|
Player Server | hasInterface && isServer
|
Client | hasInterface && not isServer
|
JIP Client | didJIP
|
Headless Client | not hasInterface && not isDedicated
|
- If you want to know if the current machine is a server (Dedicated Server or Player Server), use
isServer
. - If you want to know if the current machine has a player (Player Server included), use
hasInterface
.
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 | Set/update a variable value from the local machine to all the other machines (including server) |
publicVariableServer | Set/update a variable value from a client to the server |
publicVariableClient | Set/update a variable value from the local machine (not necessarily the server) to a specific client |
How it works
The server has the variable ABC_Score
to send to everyone, it then uses publicVariable "ABC_Score"
(do not forget the quotes!)
This sends the variable name and value to the clients.
- If the variable is not yet declared on their machine, it will declare it as well.
- If the variable already exists, the value is overridden by the server's value.
- If the variable changes again on the server, it has to be manually publicVariable'd once again!
- A JIP player will synchronise server's public variables before executing init.sqf. See Initialization Order for more information.
- A JIP player will not synchronise publicVariableClient-received variables after he disconnects/reconnects. Only server-known public variables sent with publicVariable will be synchronised.
Remote Execution
Arma 2 introduced the (now obsolete) Multiplayer framework, used as follow:
waitUntil{ not isNil "BIS_MPF_InitDone"; }; [nil, nil, rHINT, "Message to everyone!"] call RE;
Arma 3 alpha introduced BIS_fnc_MP:
["Message to everyone, including JIP players!", "hint", true, true] call BIS_fnc_MP;
Arma 3 (> v1.50):
["Message to everyone, including JIP players!", 0, true] remoteExec ["hint"];
See Arma 3 Remote Execution for more information.