/* * Author: commy2 * Used to execute the checkPBOs module without placing the module. Don't use this together with the module. * Checks PBO versions and compares to the one running on server. * * Arguments: * 0: Mode * 0 = Warn once * 1 = Warn permanently * 2 = Kick * 1: Check all PBOs? (default: false) * 2: Whitelist (default: "") * * Return Value: * None * * Example: * [0, false, ""] call ace_common_fnc_checkPBOs * * Public: Yes */ #include "script_component.hpp" params ["_mode", ["_checkAll", false], ["_whitelist", "", [""]]]; TRACE_3("params",_mode,_checkAll,_whitelist); //lowercase and convert whiteList String into array of strings: _whitelist = toLower _whitelist; _whitelist = _whitelist splitString "[,""']"; TRACE_1("Array",_whitelist); ACE_Version_CheckAll = _checkAll; ACE_Version_Whitelist = _whitelist; if (!_checkAll) exitWith {}; //ACE is checked by FUNC(checkFiles) if (!isServer) then { [{ if (isNil "ACE_Version_ClientErrors") exitWith {}; ACE_Version_ClientErrors params ["_missingAddon", "_missingAddonServer", "_oldVersionClient", "_oldVersionServer"]; (_this select 0) params ["_mode", "_checkAll", "_whitelist"]; // Display error message. if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then { private _text = "[ACE] Version mismatch:

"; private _error = format ["ACE version mismatch: %1: ", profileName]; if (_missingAddon) then { _text = _text + "Detected missing addon on client
"; _error = _error + "Missing file(s); "; }; if (_missingAddonServer) then { _text = _text + "Detected missing addon on server
"; _error = _error + "Additional file(s); "; }; if (_oldVersionClient) then { _text = _text + "Detected old client version
"; _error = _error + "Older version; "; }; if (_oldVersionServer) then { _text = _text + "Detected old server version
"; _error = _error + "Newer version; "; }; //[QGVAR(systemChatGlobal), _error] call CBA_fnc_globalEvent; ERROR(_error); if (_mode < 2) then { _text = composeText [lineBreak, parseText format ["%1", _text]]; private _rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer; _rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true]; disableSerialization; private _ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint"; _ctrlHint ctrlSetStructuredText _text; if (_mode == 0) then { [{ params ["_rscLayer"]; TRACE_2("Hiding Error message after 10 seconds",time,_rscLayer); _rscLayer cutFadeOut 0.2; }, [_rscLayer], 10] call CBA_fnc_waitAndExecute; }; }; if (_mode == 2) then { [{alive player}, { // To be able to show list if using checkAll params ["_text"]; TRACE_2("Player is alive, showing msg and exiting",time,_text); _text = composeText [parseText format ["%1", _text]]; ["[ACE] ERROR", _text, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); }, [_text]] call CBA_fnc_waitUntilAndExecute; }; }; [_this select 1] call CBA_fnc_removePerFrameHandler; }, 1, [_mode, _checkAll, _whitelist]] call CBA_fnc_addPerFrameHandler; }; if (_checkAll) then { 0 spawn COMPILE_FILE(scripts\checkVersionNumber); // @todo };