INTERNET PROTOCOL  (IP)
RECEIVER

Supports Multiplayer Game. If You play not hot-seat you may have some problems.
See IP Trigger

OPTIONS

D$; Command to set a player-receiver of your !!IP transfers
  $
= player index (-1 = all)
Comments:
    Now you may transfer vars and call distant functions not only during a battle but also on the map. So to point who you send the vars/call functions to you should set the destination player with this command. This works the same way as for hero's w vars. So if you set !!IP:D, it will be the same until you (or someone else) changes it.
    Note that if you save and then load the game, the state of the destination player is undefined so set it in every trigger that sends data.
    Note also that if you send to all players (-1), all sent vars and distantly called functions will run at every PC in the game even in the current one. So first it runs through all players one by one and the last player sends it to sending initiator. This is a good way to inform all sides about specific changes.
F$1/$2; Send flags
$1 - first flag index to transfer
$2 - last flag index to transfer
(included both)
V$1/$2; Send V vars
$1 - first V variable index to transfer
$2 - last V variable index to transfer
(included both)
W$1/$2; Send hero based W variables
$1 - first W var index to transfer
$2 - last W var index to transfer
(included both)
R; Reset random generator at both sides to the same sequence (do not use this yet).

Some descriptions.
Now during a battle you may pass the values of v vars to the other side and call functions at
the other side. Say, you run a user dependent script (like stack splitting). The script runs at one side
because it runs as a reaction to a human action (mouse click). So all that you change at this
side will not be changed on the other side.

Now you can pass all changed values to the other side not running a script there.
Example.
On the one side you run a mouse event driven script:
...
!!VRv1234:S999;
On the other side v1234 will still keep the old value.
To fix it use:
...
!!VRv1234:S999;
!!IP:V1234/1234;

The last command will immediately send the value of v1234 to the other side.
Now to the second part of the problem. Say you use some specific command that has some
effects on the battlefield (say you cast a spell with ERM).
Again, if it is done only at one side, there will be a problem because it is not done on the
other side. Now you may use a distant call for those cases. This means that you call a function
but it runs not at this local PC but at a distant one (the opponent's PC).
Up to 16 x parameters are transferred.
Example.
On one side you have:
...
!!BMv10:Mi/y5/5;
To make it run correctly you should make some changes:
...
!!BMv10:Mi/y5/5;
!!FU12345:Dv10/i/y5/5;

!?FU12345;
!!BMx1:Mx2/x3/x4;

That is all. How it works. FU:D immediately transfer all x parameters to the other side and
makes a call of FU1234 there. So BMv10:M... command runs at one PC and BMx1:M... at the other
PC. If you pass all in the right order, you will see the same effect at both sides.
Note that you can pass some vars with IP:V command and then call FU:D to pass more than 16 x
parameters to the other side. You can see FU:D command for more information.

Now, an example that you can check (tested):
***********
ZVSE

!?BG0;
!!IF:M^Hi!^;
!!VRv99:S99; !!VRv100:S100; !!VRv101:S101;
!!IP:V99/100;
!!FU123:D1/2/3/4/5;

!?FU123;
!!IF:M^V99=%V99, V100=%V100, V101=%V101, X1=%X1, X2=%X2, X3=%X3, X4=%X4, X5=%X5^;

***********
You will see "Hi!" message at any action of a stack, then you will see a message "V99=99, V100=100, V101=0, X1=1, X2=2, X3=3, X4=4, X5=5" at the other PC. Then you get "Hi!" at the other
PC.
If you continue, you may notice that the next time the message will be: "V99=99, V100=100,
V101=101, X1=1, X2=2, X3=3, X4=4, X5=5
". So v101 is changed. This is because first you send v99
and v100 through the network and call a function that shows a message (and this is why
v101 is 0). But then the BG0 trigger will work out at the defender's side and v101 will be set
to 101.
This example is only an example because in the script:
!?BG0;
!!IF:M^Hi!^;
!!VRv99:S99; !!VRv100:S100; !!VRv101:S101;

will work fine (identical) at both sides.
But if you run a script as a reaction to a human related event (mouse click generally), you
need to think how to transfer changes to the other side.