Custom Events System

What are custom events?

Custom events offer a way to manage your own events in a similar way to public variable events. However, the key thing is that they are easier to use and also manage events on a local level as well as remotely.

Custom events are never handled on JIP. That is, all events broadcast before a player joins are not handled, since they would be out-of-date. For state-changes, which you would want synced on JIP, use the standard publicVariable and addPublicVariableEventHandler commands instead.

Registering a handler for custom events

Generating custom events

Naming custom events

Ensure that you use OFPEC tags in the naming of events, such as "MYTAG_barrelsExploded" if your tag was "MYTAG". This will prevent receipt of unexpected events from other users of the custom events system.

Using CBA's default events

CBA has a number of events that it routinely raises and any script can add a handler and deal with them.

Examples

MP sideChat

sideChat is a command that only has an effect on clients, so rather than check whether we are on a client in the handler, it is best to only add handlers on client machines:
1
2
3
4
if (not isDedicated) then
{
    ["mySideChat", { (_this select 0) sideChat (_this select 1) }] call CBA_fnc_addEventHandler;
};
Later, we want everyone to see a sideChat message:
1
["mySideChat", [player, "Hello, noobs!"]] call CBA_fnc_globalEvent;

Running code without passing parameters

There is no requirement to pass parameters with the event. If no parameters are passed, then the receiving handler will not be passed _this.

Since we only want to create the vehicle on the server, it makes sense to only add a handler on the server:
1
2
3
4
if (isServer) then
{
    ["mySummonUAZ", { "uaz" createVehicle (getMarkerPos "base") }] call CBA_fnc_addEventHandler;
};
Later, the player wants to create a UAZ (perhaps via an action) and runs:
1
["mySummonUAZ"] call CBA_fnc_globalEvent;

By broadcasting a global-, rather than remote-, event, CBA guarantees that the server handles it, even if we are running as the MP host.