#include "script_component.hpp" ["CBA_settingsInitialized", { GVAR(availableModes) = [[0,1,2], [1,2], [0], [1], [2]] select GVAR(restrictModes); GVAR(availableVisions) = [[-2,-1,0,1], [-2,-1], [-2,0,1], [-2]] select GVAR(restrictVisions); }] call CBA_fnc_addEventHandler; if (isServer) then { // Create a radio channel for any spectators to text chat in GVAR(channel) = radioChannelCreate [[0.729,0.149,0.098,1],"Spectator","Spectator (%UNIT_NAME)",[]]; publicVariable QGVAR(channel); // Used by the template to transfer zeus to virtual unit // Commands must be ran on server [QGVAR(transferZeus),{ unassignCurator (_this select 1); // Can only re-assign when ready [ {isNull getAssignedCuratorUnit (_this select 0)}, {(_this select 0) assignCurator (_this select 1)}, _this ] call CBA_fnc_waitUntilAndExecute; }] call CBA_fnc_addEventHandler; }; // A virtual spectator cannot exist without an interface if (hasInterface) then { // Local player (not ACE_Player) must be initalized to check [ { !isNull player }, { if (player isKindOf QGVAR(virtual)) then { [true] call FUNC(setSpectator); }; } ] call CBA_fnc_waitUntilAndExecute; }; ["ace_spectator", {GETMVAR(GVAR(isSet),false)}] call CBA_fnc_registerFeatureCamera;