BIS fnc MP: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - "bis_fnc_" to "BIS_fnc_") |
Lou Montana (talk | contribs) |
||
Line 116: | Line 116: | ||
<dt class="note">[[User:Killzone_Kid|Killzone_Kid]]</dt> | <dt class="note">[[User:Killzone_Kid|Killzone_Kid]]</dt> | ||
<dd class="note"> | <dd class="note"> | ||
If you need to achieve a single global execution of an existing function on all PCs including your own, the syntax could not be any more simple than: [arguments, functionname] [[call]] [[BIS_fnc_MP]]; This is particularly useful with commands such as [[switchMove]] where the command effect is [[local]]. | If you need to achieve a single global execution of an existing function on all PCs including your own, the syntax could not be any more simple than: [arguments, functionname] [[call]] [[BIS_fnc_MP]]; This is particularly useful with commands such as [[switchMove]] where the command effect is [[Multiplayer Scripting#Locality|local]]. | ||
For example to make sure animation is played on every PC, first define a global function on every PC (maybe inside init.sqf): | For example to make sure animation is played on every PC, first define a global function on every PC (maybe inside init.sqf): |
Revision as of 17:09, 21 June 2021
Take On Helicopters
Arma 3
Description
- Description:
- Send function for remote execution (and executes locally if conditions are met).
- Execution:
- call
- Groups:
- Multiplayer
Syntax
- Syntax:
- [params, functionName, target, isSpawn, isPersistent] call BIS_fnc_MP
- Parameters:
- params: Anything - function params
- functionName: String - function name
- target: Object - function will be executed only where unit is local [default: everyone]
- isSpawn: Boolean - true for calling function using 'spawn' command (otherwise 'call' is used) [default: false]
- isPersistent: Boolean - true for persistent call (will be called now and for every JIP client) [default: false]
- Return Value:
- Array - sent packet
Examples
- Example 1:
- Log a message for every connected player:
["Imma spamming your log!", "BIS_fnc_log"] call BIS_fnc_MP;
- Example 2:
- Send a message containing "Hello World" to every player, including the ones who joins later using JIP:
[["Hello World"], "BIS_fnc_guiMessage", nil, true, true] call BIS_fnc_MP;
Additional Information
- See also:
- remoteExecremoteExecCallBIS_fnc_MPexec
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Description
- Description:
- Send function for remote execution (and executes locally if conditions are met).
- Execution:
- call
- Groups:
- Multiplayer
Syntax
- Syntax:
- [params, functionName, target, isPersistent, isCall] call BIS_fnc_MP
- Parameters:
- params: Anything - function arguments. Variables can be local.
- functionName: String - function or scripting command name.
- target:
- Object - the function will be executed only where unit is local [default: everyone]
- String - the function will be executed only where object or group defined by the variable with passed name is local
- Boolean - true to execute on each machine (including the one where the function was called from), false to execute it on server only
- Number - function will be executed only on client with the given owner ID
- Side - function will be executed only on clients where the player is on the specified side
- Group - function will be executed only on clients where the player is in the specified group
- Array - array of targets of types listed above
- isPersistent: Boolean - true for persistent call (will be called now and for every JIP client) [default: false]
- isCall: Boolean - (optional) true if function should be called on target machine, false to spawn it [default: false]
- Return Value:
- Array - sent packet
Examples
- Example 1:
// Logs a message for every player on the server. ["Imma spamming your log!", "BIS_fnc_log"] call BIS_fnc_MP;
- Example 2:
// Send a hint containing "Hello World" to every player, including the ones who joins later using JIP. ["Hello World", "hint", true, true] call BIS_fnc_MP;
- Example 3:
// Executes playerConnected.sqf script on server every time a player joins the game. [[[],"playerConnected.sqf"], "BIS_fnc_execVM", false, true] call BIS_fnc_MP;
- Example 4:
// Adds action to every player including JIP. "..." = further optional arguments (see addAction) [[player, ["My Action Title", "myAction.sqf", ...]], "addAction", true, true] call BIS_fnc_MP;
Additional Information
- See also:
- BIS_fnc_MPexec Remote Execution
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
- Posted on 2 April, 2013
- Fireball
-
Note that the function you provide as argument is *not* transferred to the remote client or server.
You will have to use either
- functions defined in global namespace
- functions defined depending on where you want to execute them; in server or/and client code if you separate it using conditions on isServer or local player
- pre-defined BIS functions
["myScript.sqf","BIS_fnc_execVM",true,true] call BIS_fnc_MP;
Or transfer code as parameter (not recommended) like that:[{hint "Hello World!";},"BIS_fnc_spawn", true, true] call BIS_fnc_MP;
- Posted on 5 July, 2013
- kylania
- Posted on 10 December, 2013
- Killzone_Kid
-
If you need to achieve a single global execution of an existing function on all PCs including your own, the syntax could not be any more simple than: [arguments, functionname] call BIS_fnc_MP; This is particularly useful with commands such as switchMove where the command effect is local.
For example to make sure animation is played on every PC, first define a global function on every PC (maybe inside init.sqf):
switchMoveEverywhere = compileFinal " _this select 0 switchMove (_this select 1); ";
Then execute BIS_fnc_MP on only one PC which will in return execute switchMoveEverywhere function everywhere:[ [ player, "AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft" ], "switchMoveEverywhere" ] call BIS_fnc_MP;
- Posted on May 23, 2015 - 21:47 (UTC)
- Waffle SS.
-
Adding onto what Killzone_Kid said, a custom function isn't necessary when using only a single command.
[ [ player,"AmovPercMstpSrasWrflDnon_AadjPpneMstpSrasWrflDleft"], "switchMove" ] call BIS_fnc_MP;
- Posted on June 8, 2015 - 12:08 (UTC)
- Warka
-
1.50
- From version 1.50 the function BIS_fnc_mp will use the engine based remote execution.
- This will positively affect its performance, namely processing speed and amount of transferred data.
- The syntax and functionality of BIS_fnc_mp will remain same to retain the backward compatibility.
- To prevent abusing of the remoteExec and remoteExecCall commands the BIS_fnc_mp will use, the content authors will be able to define the operation modes as well as white-lists for commands/functions for clients and server separately.
- White-lists defined in CfgRemoteExecCommands and CfgRemoteExecFunctions won't be supported from 1.48 as they will be replaced by the new structure more powerful and detailed structure: CfgRemoteExec.
- Posted on July 20, 2015 - 21:07 (UTC)
- Waffle SS.
- Pay close attention to where and when you call BIS_fnc_MP. If you use it on the server during init, it will probably run before the player is loaded into the server, and the player behaves more like a JIP. Either waiting for the briefing to end (time > 0), or using the JIP parameter in BIS_fnc_MP are two ways of getting around this issue.