Difference between revisions of "Multiplayer framework"

From Bohemia Interactive Community
Jump to navigation Jump to search
 
Line 2: Line 2:
  
 
'''Note: this page is a work-in-progress! More info to follow as soon as possible.'''
 
'''Note: this page is a work-in-progress! More info to follow as soon as possible.'''
 +
 +
 +
 +
==Remote script execution (RE)==
 +
On all clients is public variable eventhandler that executes scripts that corresponds to less-than-100-percent-multiplayer-working script commands. One script for one commands, no string sending that will be compiled and executed for the sake of clarity and easiness of creating MP-friendly commands from MP-unfriendly ones by the engine programmers.
 +
 +
===Function===
 +
#Script ''remExWrite.sqf'' is called with parameters that says: '''who executes''', '''upon who''', '''[only where local]''', '''which scripted command''' and '''parameters''' for scripted command on target client follow
 +
#''remExWrite.sqf'' writes in public variable ''remExField''
 +
#Change in ''remExField'' triggers execution of eventhandlers on all clients in the network game (initialized in init.sqf), script ''remExServer.sqf'' interpretes remExField (remExFP resp.)
 +
#(if wanted) ''remExServer.sqf'' calls script (given as argument) on client that runs even handler
 +
 +
Note: remote execution executes script also on calling client (if "loc" flag not set or "loc" set and object is local on caller client)
 +
 +
===Usage===
 +
====How-to====
 +
#Include functions module in your mission
 +
#Wait for global variable "BIS_MPF_InitDone" to be defined (and true)
 +
#In scripts or fsms call: _handler = [...] call RE; (syntax - see below; RE stands for remote execution)
 +
 +
====Format====
 +
_nic = [nil_or_caller, nil_or_target_object,"loc", script_to_execute, par0, par1...] call RE;
 +
_nic = [nil_or_caller, nil_or_target_object,"per", script_to_execute, par0, par1...] call RE;
 +
_nic = [nil_or_caller, nil_or_target_object,"loc" + "per", script_to_execute, par0, par1...] call RE;
 +
 +
*RE...remote execution (short for remExWrite.sqf)
 +
*"loc"...arbitrary parameter - executes remote script only on machine where ''nil_or_target_object'' is local
 +
*"per"...arbitrary parameter - executes remote script even on JIP client connectiong *after* this RE call was executed in MP game
 +
 +
====Examples====
 +
Hint on all clients currently connected to the MP game:
 +
_nic = [nil,nil,rHINT,"Enjoy the game."] call RE;
 +
 +
Setting date on all clients - including JIP clients that will join later after:
 +
_nic = [nil,nil,"per",rSETDATE,2008,9,29,11,35] call RE;
 +
 +
Hint on client where object ''miles'' is local:
 +
  _nic = [nil,miles,"loc",rHINT,"Miles is local here."] call RE;
 +
 +
Hint on client where number 0 from players group is local. If JIP client connects to this slot, he got also his msg displayed:
 +
  _nic = [nil,(units group player) select 0,"loc" + "per",rHINT,"Hint."] call RE;

Revision as of 17:19, 15 July 2009


Note: this page is a work-in-progress! More info to follow as soon as possible.


Remote script execution (RE)

On all clients is public variable eventhandler that executes scripts that corresponds to less-than-100-percent-multiplayer-working script commands. One script for one commands, no string sending that will be compiled and executed for the sake of clarity and easiness of creating MP-friendly commands from MP-unfriendly ones by the engine programmers.

Function

  1. Script remExWrite.sqf is called with parameters that says: who executes, upon who, [only where local], which scripted command and parameters for scripted command on target client follow
  2. remExWrite.sqf writes in public variable remExField
  3. Change in remExField triggers execution of eventhandlers on all clients in the network game (initialized in init.sqf), script remExServer.sqf interpretes remExField (remExFP resp.)
  4. (if wanted) remExServer.sqf calls script (given as argument) on client that runs even handler

Note: remote execution executes script also on calling client (if "loc" flag not set or "loc" set and object is local on caller client)

Usage

How-to

  1. Include functions module in your mission
  2. Wait for global variable "BIS_MPF_InitDone" to be defined (and true)
  3. In scripts or fsms call: _handler = [...] call RE; (syntax - see below; RE stands for remote execution)

Format

_nic = [nil_or_caller, nil_or_target_object,"loc", script_to_execute, par0, par1...] call RE;
_nic = [nil_or_caller, nil_or_target_object,"per", script_to_execute, par0, par1...] call RE;
_nic = [nil_or_caller, nil_or_target_object,"loc" + "per", script_to_execute, par0, par1...] call RE;
  • RE...remote execution (short for remExWrite.sqf)
  • "loc"...arbitrary parameter - executes remote script only on machine where nil_or_target_object is local
  • "per"...arbitrary parameter - executes remote script even on JIP client connectiong *after* this RE call was executed in MP game

Examples

Hint on all clients currently connected to the MP game:

_nic = [nil,nil,rHINT,"Enjoy the game."] call RE;

Setting date on all clients - including JIP clients that will join later after:

_nic = [nil,nil,"per",rSETDATE,2008,9,29,11,35] call RE;

Hint on client where object miles is local:

 _nic = [nil,miles,"loc",rHINT,"Miles is local here."] call RE;

Hint on client where number 0 from players group is local. If JIP client connects to this slot, he got also his msg displayed:

 _nic = [nil,(units group player) select 0,"loc" + "per",rHINT,"Hint."] call RE;