//fnc__handleNetEvent.sqf // internal handler for net events #include "script_component.hpp" private ["_eventName", "_eventArgs", "_eventNames", "_eventIndex", "_eventTargets", "_sentEvents", "_owner", "_serverFlagged", "_events"]; //IGNORE_PRIVATE_WARNING("_handleNetEvent"); PARAMS_2(_eventType,_event); if (_eventType == "ACEg") then { _eventName = _event select 0; _eventArgs = _event select 1; _eventNames = GVAR(events) select 0; _eventIndex = _eventNames find _eventName; if (_eventIndex != -1) then { _events = (GVAR(events) select 1) select _eventIndex; #ifdef DEBUG_EVENTS diag_log text format[ARR_2("* Net Event %1",_eventName)]; diag_log text format[ARR_2(" args=%1",_eventArgs)]; #endif { if (!isNil "_x") then { _eventArgs call CALLSTACK_NAMED(_x, format[ARR_3("Net Event %1 ID: %2",_eventName,_forEachIndex)]); #ifdef DEBUG_EVENTS_CALLSTACK diag_log text format[ARR_2(" ID: %1",_forEachIndex)]; #endif }; } forEach _events; }; }; if (_eventType == "ACEc") then { if (isServer) then { _eventName = _event select 0; _eventTargets = _event select 1; _eventArgs = _event select 2; _sentEvents = []; if (!IS_ARRAY(_eventTargets)) then { _eventTargets = [_eventTargets]; }; //If not multiplayer, and there are targets, then just run localy if ((!isMultiplayer) && {(count _eventTargets) > 0}) exitWith { ACEg = [_eventName, _eventArgs]; ["ACEg", ACEg] call FUNC(_handleNetEvent); }; _serverFlagged = false; { _owner = _x; if (IS_OBJECT(_x)) then { _owner = owner _x; }; if (!(_owner in _sentEvents)) then { PUSH(_sentEvents, _owner); ACEg = [_eventName, _eventArgs]; if (isDedicated || {_x != ACE_player}) then { if (isDedicated && {local _x} && {!_serverFlagged}) then { _serverFlagged = true; ["ACEg", ACEg] call FUNC(_handleNetEvent); } else { _owner publicVariableClient "ACEg"; }; } else { ["ACEg", ACEg] call FUNC(_handleNetEvent); }; }; } forEach _eventTargets; }; };