Reworked ACE_Settings/Module functions to support both dynamically, Added SettingsInitialized

This commit is contained in:
jonpas 2015-05-28 20:49:30 +02:00
parent 1a468cb4ff
commit 86264a7b7d
3 changed files with 88 additions and 106 deletions

View File

@ -253,3 +253,11 @@ if(isMultiplayer && { time > 0 || isNull player } ) then {
};
}, 0, []] call cba_fnc_addPerFrameHandler;
};
["SettingsInitialized", {
[
GVAR(checkPBOsAction),
GVAR(checkPBOsCheckAll),
call compile GVAR(checkPBOsWhitelist)
] call FUNC(checkPBOs)
}] call FUNC(addEventHandler);

View File

@ -1,38 +1,95 @@
/*
* 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.
*
* Argument:
* 0: Mode (Number)
* Arguments:
* 0: Mode <NUMBER>
* 0: Warn once
* 1: Warn permanently
* 2: Kick
* 1: Check all PBOs? (Boolean, optional default: "[]")
* 2: Whitelist (String, optinal default: false)
* 1: Check all PBOs? <BOOL> (Optional - default: "[]")
* 2: Whitelist <STRING> (Optinal - default: false)
*
* Return value:
* None.
* None
*/
#include "script_component.hpp"
private ["_logic"];
private ["_mode", "_checkAll", "_whitelist"];
_this resize 3;
_mode = _this select 0;
_checkAll = if (count _this > 1) then {_this select 1} else {false};
_whitelist = if (count _this > 2) then {_this select 2} else {"[]"};
PARAMS_3(_mode,_checkAll,_whitelist);
_whitelist = [_whitelist, {toLower _this}] call FUNC(map);
if (isNil "_checkAll") then {
_checkAll = false;
ACE_Version_CheckAll = _checkAll;
ACE_Version_Whitelist = _whitelist;
if (!isServer) then {
[_mode, _checkAll, _whitelist] spawn {
private ["_missingAddon", "_missingAddonServer", "_oldVersionClient", "_oldVersionServer", "_text", "_error", "_rscLayer", "_ctrlHint"];
PARAMS_3(_mode,_checkAll,_whitelist);
waitUntil {
sleep 1;
!isNil "ACE_Version_ClientErrors"
};
_missingAddon = ACE_Version_ClientErrors select 0;
_missingAddonServer = ACE_Version_ClientErrors select 1;
_oldVersionClient = ACE_Version_ClientErrors select 2;
_oldVersionServer = ACE_Version_ClientErrors select 3;
// Display error message.
if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then {
_text = "[ACE] Version mismatch:<br/><br/>";
_error = format ["ACE version mismatch: %1: ", profileName];
if (_missingAddon) then {
_text = _text + "Detected missing addon on client<br/>";
_error = _error + "Missing file(s); ";
};
if (_missingAddonServer) then {
_text = _text + "Detected missing addon on server<br/>";
_error = _error + "Additional file(s); ";
};
if (_oldVersionClient) then {
_text = _text + "Detected old client version<br/>";
_error = _error + "Older version; ";
};
if (_oldVersionServer) then {
_text = _text + "Detected old server version<br/>";
_error = _error + "Newer version; ";
};
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
diag_log text _error;
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
disableSerialization;
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
_ctrlHint ctrlSetStructuredText _text;
if (_mode == 0) then {
sleep 10;
_rscLayer cutFadeOut 0.2;
};
if (_mode == 2) then {
sleep 10;
waitUntil {alive player};
[player] call FUNC(adminKick);
};
};
};
};
if (isNil "_whitelist") then {
_whitelist = "[]";
if (_checkAll) then {
0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber);
};
_logic = "Logic" createVehicleLocal [0,0,0];
_logic setVariable ["Action", _mode];
_logic setVariable ["CheckAll", _checkAll];
_logic setVariable ["Whitelist", _whitelist];
[_logic, [], true] call FUNC(moduleCheckPBOs);
deleteVehicle _logic;

View File

@ -1,6 +1,5 @@
/*
* Author: KoffeinFlummi
*
* Initializes the check-PBOs module.
*
* Arguments:
@ -11,9 +10,9 @@
*/
#include "script_component.hpp"
PARAMS_3(_logic,_units,_activated);
if !(isServer) exitWith {};
private ["_mode", "_checkAll", "_whitelist"];
PARAMS_3(_logic,_units,_activated);
if !(_activated) exitWith {};
@ -21,86 +20,4 @@ if !(_activated) exitWith {};
[_logic, QGVAR(checkPBOsCheckAll), "CheckAll" ] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(checkPBOsWhitelist), "Whitelist" ] call EFUNC(common,readSettingFromModule);
_mode = GVAR(checkPBOsAction);
_checkAll = GVAR(checkPBOsCheckAll);
_whitelist = call compile GVAR(checkPBOsWhitelist);
if (isNil "_whitelist") then {
_whitelist = [];
};
_whitelist = [_whitelist, {toLower _this}] call FUNC(map);
ACE_Version_CheckAll = _checkAll;
ACE_Version_Whitelist = _whitelist;
if (!isServer) then {
[_mode, _checkAll, _whitelist] spawn {
private ["_mode", "_checkAll", "_whitelist", "_missingAddon", "_missingAddonServer", "_oldVersionClient", "_oldVersionServer", "_text", "_error", "_rscLayer", "_ctrlHint"];
_mode = _this select 0;
_checkAll = _this select 1;
_whitelist = _this select 2;
waitUntil {
sleep 1;
!isNil "ACE_Version_ClientErrors"
};
_missingAddon = ACE_Version_ClientErrors select 0;
_missingAddonServer = ACE_Version_ClientErrors select 1;
_oldVersionClient = ACE_Version_ClientErrors select 2;
_oldVersionServer = ACE_Version_ClientErrors select 3;
// Display error message.
if (_missingAddon || {_missingAddonServer} || {_oldVersionClient} || {_oldVersionServer}) then {
_text = "[ACE] Version mismatch:<br/><br/>";
_error = format ["ACE version mismatch: %1: ", profileName];
if (_missingAddon) then {
_text = _text + "Detected missing addon on client<br/>";
_error = _error + "Missing file(s); ";
};
if (_missingAddonServer) then {
_text = _text + "Detected missing addon on server<br/>";
_error = _error + "Additional file(s); ";
};
if (_oldVersionClient) then {
_text = _text + "Detected old client version<br/>";
_error = _error + "Older version; ";
};
if (_oldVersionServer) then {
_text = _text + "Detected old server version<br/>";
_error = _error + "Newer version; ";
};
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
diag_log text _error;
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
disableSerialization;
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
_ctrlHint ctrlSetStructuredText _text;
if (_mode == 0) then {
sleep 10;
_rscLayer cutFadeOut 0.2;
};
if (_mode == 2) then {
sleep 10;
waitUntil {alive player};
[player] call FUNC(adminKick);
};
};
};
};
diag_log text format ["[ACE]: Check-PBOs Module Initialized. Mode: %1.", _mode];
if (_checkAll) then {
0 spawn COMPILE_FILE(scripts\Version\checkVersionNumber);
};
diag_log text format ["[ACE]: Check-PBOs Module Initialized. Mode: %1.", GVAR(checkPBOsAction)];