remoteExecCall: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - "</dd> <dt><dt>" to "</dd> <dt><dt>") |
Lou Montana (talk | contribs) m (Text replacement - "<dl class="command_description"> <dt></dt>" to "<dl class="command_description"> <dt></dt>") |
||
Line 97: | Line 97: | ||
<dl class="command_description"> | <dl class="command_description"> | ||
<dt></dt> | <dt></dt> | ||
<dd class="notedate">Posted on July 16, 2015 - 09:17 (UTC)</dd> | <dd class="notedate">Posted on July 16, 2015 - 09:17 (UTC)</dd> |
Revision as of 13:34, 12 June 2021
Description
- Description:
- Asks the server to execute the given function or script command on the given target machine(s). Execution always takes place in the unscheduled environment; suspension is not allowed.
Read Arma 3: Remote Execution for more information about remote execution, security features and JIP techniques. - Groups:
- Multiplayer
Syntax
- Syntax:
- params remoteExecCall [functionName, targets, JIP]
- Parameters:
- params: Anything - The parameter(s) for the function / command specified in the functionName parameter.
- functionName: String - Function or command name.
While any function or command can be used here, only those allowed by CfgRemoteExec will actually be executed. - targets (Optional, default: 0):
- Number (See also Machine network ID) -
- 0: The function / command will be executed globally, i.e. on the server and every connected client, including the machine where remoteExecCall originated.
- 2: The function / command will only be executed on the server.
- Other number: The function / command will be executed on the machine where clientOwner matches the given number.
- Negative number: The effect is inverted: -2 means every client but not the server, -12 means the server and every client, except for the client where clientOwner returns 12.
- Object - The function / command will be executed where the given object is local.
- String - Interpreted as an Identifier (variable name). The function / command will be executed where the object or group identified by the variable with the provided name is local.
- Side - The function / command will be executed on machines where the player is on the specified side.
- Group - The function / command will be executed on machines where the player is in the specified group.
- Array - Array of any combination of the types listed above.
- Number (See also Machine network ID) -
- JIP (Optional, default: false):
- Boolean - If true, a unique JIP ID is generated and the remoteExecCall statement is added to the JIP queue from which it will be executed for every JIP.
- String -
- If the string is empty, it is interpreted as false.
- If the string is in format "Number:Number" (e.g. "0:0"), it is interpreted as a netId (see below).
- Else the string is treated as a custom JIP ID and the remoteExecCall statement is added to the JIP queue, replacing statements that have the same JIP ID.
- Object, Group or netId - The persistent execution of the remoteExecCall statement is attached to the given object or group.
When the object / group is deleted, the remoteExecCall statement is automatically removed from the JIP queue.
See also Example 3 on how to remove statements from the JIP queue. - Return Value:
Alternative Syntax
- Syntax:
- remoteExecCall [functionName, targets, JIP]
- Parameters:
- functionName: String - See the main syntax above for more details.
- targets (Optional, default: 0): Number, Object, String, Side, Group or Array - See the main syntax above for more details.
- JIP (Optional, default: false): Boolean, String, Object, Group or netId - See the main syntax above for more details.
- Return Value:
- nil or String - See the main syntax above for more details.
Examples
- Example 1:
- Execute
hint "Example 1";
on various machines:"Example 1" remoteExecCall ["hint"]; // Executed on all machines. "Example 1" remoteExecCall ["hint", 3]; // Executed only on the first connected client. "Example 1" remoteExecCall ["hint", -2]; // Executed everywhere except on the server.
- Example 2:
- Execute
hint "Example 2";
on various machines and add it to the JIP queue:_result = "Example 2" remoteExecCall ["hint", -2, true]; // _result is a unique JIP ID, e.g. "3_1". _result = "Example 2" remoteExecCall ["hint", -2, "My_JIP_ID"]; // _result is "My_JIP_ID". _result = "Example 2" remoteExecCall ["hint", 0, MyObject]; // _result is the unique netId of MyObject, e.g. "2:3".
Note that if there already was a statement with the JIP ID "My_JIP_ID" in the JIP queue, that statement has now been overwritten. - Example 3:
- Remove statements from the JIP queue:
remoteExecCall ["", "My_JIP_ID"]; // The persistent statement with the JIP ID "My_JIP_ID" is removed from the JIP queue. remoteExecCall ["", MyObject]; // The persistent statement attached to MyObject is removed from the JIP queue.
- Example 4:
- Some more complex examples:
["Open", true] remoteExecCall ["BIS_fnc_arsenal", MyTargetPlayer]; [MyCurator, [[MyObject1, MyObject2], false]] remoteExecCall ["addCuratorEditableObjects", 2];
- Example 5:
- A tricky example: Trying to execute
player setAmmo [primaryWeapon player, 1];
(on machines where the player is in MyGroup). Consider the following statements:{player setAmmo [primaryWeapon player, 1];} remoteExecCall ["call", MyGroup]; // Statement 1 [player, [primaryWeapon player, 1]] remoteExecCall ["setAmmo", MyGroup]; // Statement 2
Both statements look very similar, but only Statement 1 has the intended effect. This is because in Statement 2, the argumentsplayer
andprimaryWeapon player
are not resolved on the target machine(s), but on the machine executing remoteExecCall.
Additional Information
- See also:
- remoteExec remoteExecutedOwner isRemoteExecuted isRemoteExecutedJIP Arma 3: Remote Execution canSuspend BIS_fnc_MP
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 July 16, 2015 - 09:17 (UTC)
- Killzone Kid
-
Removal of persistent call must be in the following format <no argument> remoteExecCall [<empty string>, <JIP id>]. For example:
remoteExecCall ["", "5:8"];
- Posted on December 29, 2015 - 20:31 (UTC)
- AgentRev
-
remoteExec and remoteExecCall are currently filtered by BattlEye's remoteexec.txt, the string analyzed by BE is formatted the same way as the following example's output:
format ["%1 %2", functionName, str params]
If CfgRemoteExec class Functions is set to mode = 1;, the following remoteexec.txt exclusion can be used to safely allow all whitelisted *_fnc_* functions taking an array as parameter to go through:!="\w+?_fnc_\w+? \[[\S\s]*\]"
Any attempt to exploit this exclusion using other RE methods like createUnit will run into "Error Missing ;" without any malicious code being executed. Mod makers should refrain from remote-executing raw commands from clients, as they require individual exclusions, and instead use *_fnc_* functions taking an array as parameter, which are covered by the above exclusion. - Posted on May 10, 2017 - 20:13 (UTC)
- Killzone Kid
-
To remoteExecCall:
titleText ["Test Message", "PLAIN", 1];
Use[["Test Message", "PLAIN", 1]] remoteExecCall ["titleText"];
- Posted on January 17, 2020 - 15:05 (UTC)
- Dscha
-
To send/execute custom functions and pass arguments (in this case to every connected Client, except the dedicated server):
[
[10,0],
{
player setAmmo [primaryWeapon player, (_this select 0)];
player setDamage (_this select 1)];
}
] remoteExecCall ["call", -2];