From ee62922df0ce9d7dc46907dc11e6c06ac16e7860 Mon Sep 17 00:00:00 2001 From: Zepheris Date: Sun, 4 Mar 2018 02:45:39 -0700 Subject: [PATCH] Added Mod Checker --- .../a3_infiSTAR_Exile/EXILE_AHAT_CONFIG.hpp | 1 + mpmissions/Exile.Altis.pbo | Bin 4210039 -> 4255906 bytes .../XM8/Apps/modchecker/modChecker.paa | Bin 0 -> 22016 bytes .../XM8/Apps/modchecker/onClose.sqf | 0 .../ExAdClient/XM8/Apps/modchecker/onLoad.sqf | 35 ++++ .../ExAdClient/XM8/Apps/modchecker/onOpen.sqf | 54 ++++++ .../XM8/Apps/modchecker/xm8modChecker.sqf | 20 +++ .../addons/modChecker/displayConfig.hpp | 53 ++++++ .../modChecker/init/modCheckerDisplay.sqf | 71 ++++++++ .../addons/modChecker/init/modCheckerInit.sqf | 33 ++++ .../addons/modChecker/modConfig.hpp | 158 ++++++++++++++++++ mpmissions/Exile.Altis/config.cpp | 11 +- mpmissions/Exile.Altis/initPlayerLocal.sqf | 10 ++ 13 files changed, 445 insertions(+), 1 deletion(-) create mode 100644 mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/modChecker.paa create mode 100644 mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onClose.sqf create mode 100644 mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onLoad.sqf create mode 100644 mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onOpen.sqf create mode 100644 mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/xm8modChecker.sqf create mode 100644 mpmissions/Exile.Altis/addons/modChecker/displayConfig.hpp create mode 100644 mpmissions/Exile.Altis/addons/modChecker/init/modCheckerDisplay.sqf create mode 100644 mpmissions/Exile.Altis/addons/modChecker/init/modCheckerInit.sqf create mode 100644 mpmissions/Exile.Altis/addons/modChecker/modConfig.hpp diff --git a/@ExileServer/addons/a3_infiSTAR_Exile/EXILE_AHAT_CONFIG.hpp b/@ExileServer/addons/a3_infiSTAR_Exile/EXILE_AHAT_CONFIG.hpp index 4fbcedd..8faf409 100644 --- a/@ExileServer/addons/a3_infiSTAR_Exile/EXILE_AHAT_CONFIG.hpp +++ b/@ExileServer/addons/a3_infiSTAR_Exile/EXILE_AHAT_CONFIG.hpp @@ -810,6 +810,7 @@ allowedIDDs[] = 5501,5502,5503,5504,5505,5506,5507, // BRAma Cookbook -1339,-1340, // custom infiSTAR dialogs (some editor & a private chat menu) 86000, // xsSpawn above the last number 46 + 999999, //modChecker /* main idd - never delete it */ 46 diff --git a/mpmissions/Exile.Altis.pbo b/mpmissions/Exile.Altis.pbo index bc92ca02bfb4b5b8a9d38e4a7748c1787896c16a..2e9a7f9e45fe95277b9a4c0d6e70a4022c383e00 100644 GIT binary patch delta 34014 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

;Q1tPcrj+gv#Mw*M_TUd6 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 ZfzQr-@!Nsh5;X5z+cN*$Bj=C2@t+6EhX4Qo delta 444 zcmXxaJ4iwS7=~fbF*CDH7ww*vb~7`z?4nkdTI3KEMiMR|W^mB5)S$M)!Ns8(PLN9! zhz-$TaONNfDQIh`AzB@5Fq4F!FTo!k{&)B;KSE@_a7Z4EN>0dEoXh`dm)0DzLj*T*i&X$5HYh*W$*+J#j@QmUucvD5YUj8sg_c zYhRElW%K){jdhFFK38fp?QxfS#f&oBOj}Ny+ePoV1FYbiunAd)B%e;hX@+Fe3|H(q z%f8Nv!fI<7@Sq&{Pyqs{1R+#GHBeB)s;#xYPgbI*zE;E0TpiSd2*l6;jnD+m&;qT{ z2JIk$4(Nm~kb(@lp$B@Q5Bfn41E7FGP{I(XKn)rgh7r)hD2%~4On?sbV1P-Of@v_a c(cDb7ApQ;RQL!Uw^7if7kn}4q@=Q+h2NNE~p8x;= diff --git a/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/modChecker.paa b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/modChecker.paa new file mode 100644 index 0000000000000000000000000000000000000000..544a39dadd7388793388c98429f560de883d9fc4 GIT binary patch literal 22016 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 Mq#|A+5C{GL0X6Rws{jB1 literal 0 HcmV?d00001 diff --git a/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onClose.sqf b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onClose.sqf new file mode 100644 index 0000000..e69de29 diff --git a/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onLoad.sqf b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onLoad.sqf new file mode 100644 index 0000000..a8213d0 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onLoad.sqf @@ -0,0 +1,35 @@ +/* + onLoad.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +params["_display","_slide","_idc"]; + +_pW = 0.025; +_pH = 0.04; +_leftCol = 0; +_leftColW = 12.8; +_rightCol = _leftCol + _leftColW + 2; +_rightColW = _leftColW + 3; +_margin = 0.2; + +_slideClass = "ExAd_ModChecker"; + +[_display,_slide,([_slideClass,"backButton"] call ExAd_fnc_getNextIDC),[27 * _pW, 17 * _pH, 6 * _pW, 1 * _pH],'["extraApps", 1] call ExileClient_gui_xm8_slide;',"Go Back"] call ExAd_fnc_createButton; + +_newParent = [_display,_slide,([_slideClass,"ctrlGrp"] call ExAd_fnc_getNextIDC),[_leftCol * _pW, 1 * _pH, (_leftColW + _rightCol + 6) * _pW, 16 * _pH]] call ExAd_fnc_createCtrlGrp; +[_display,_newParent,([_slideClass,"strTxt"] call ExAd_fnc_getNextIDC),[_leftCol * _pW, 1.5 * _pH, (_leftColW + _rightCol + 5) * _pW, 15 * _pH],"","PuristaMedium",1,"#ffffff","right",1] call ExAd_fnc_createStructuredText; + +true \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onOpen.sqf b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onOpen.sqf new file mode 100644 index 0000000..6a4a35e --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/onOpen.sqf @@ -0,0 +1,54 @@ +// ********************************************************************************************************** +// * This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// * https://creativecommons.org/licenses/by-sa/4.0/ +// ********************************************************************************************************** +// @file Name: xm8modChecker.sqf +// @file Author: jmayr2000 (from exilemod.com) + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT TOUCH UNDER THIS LINE IF DON'T KNOW WHAT ARE YOU DOING +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +private["_display","_message","_strTxt","_pos"]; + +try +{ + _message = preprocessFileLineNumbers "ExAdClient\XM8\Apps\ModChecker\xm8modChecker.sqf"; + _message = _message select [(_message find "ExAdClient") + (count "ExAdClient\XM8\Apps\ModChecker\xm8modChecker.sqf") + 1]; + + if(count _message == 0)exitWith{ + throw "No server info provided"; + }; + +disableSerialization; +[ + "", + 0, + 0.2, + 10, + 0, + 0, + 8 +] spawn BIS_fnc_dynamicText; + +#include "..\..\..\..\addons\modChecker\displayConfig.hpp" + + _display = uiNameSpace getVariable ["RscExileXM8", displayNull]; + if(isNull _display)exitWith{ + throw "XM8 not loaded!"; + }; + + _strTxt = [_display,"ExAd_ModChecker","strTxt"] call ExAd_fnc_getAppCtrl; + _strTxt ctrlSetStructuredText parseText format[_message]; + + _pos = ctrlPosition _strTxt; + _strTxt ctrlSetPosition [_pos select 0, _pos select 1, _pos select 2, ctrlTextHeight _strTxt]; + _strTxt ctrlcommit 0; + ([_display,"ExAd_ModChecker","strTxt"] call ExAd_fnc_getAppCtrl) ctrlEnable true; +} +catch +{ + ["ErrorTitleAndText", ["ExAd - Mod Checker", _exception]] call ExileClient_gui_toaster_addTemplateToast; + ["extraApps", 1] call ExileClient_gui_xm8_slide +} + diff --git a/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/xm8modChecker.sqf b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/xm8modChecker.sqf new file mode 100644 index 0000000..f7813d7 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/XM8/Apps/modchecker/xm8modChecker.sqf @@ -0,0 +1,20 @@ +// ********************************************************************************************************** +// * This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// * https://creativecommons.org/licenses/by-sa/4.0/ +// ********************************************************************************************************** +// @file Name: xm8modChecker.sqf +// @file Author: jmayr2000 and NRZ7 (www.standarol.com) + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT TOUCH UNDER THIS LINE IF DON'T KNOW WHAT ARE YOU DOING +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +errorLevel = 0; // Do not touch. Set errors to 0 before run modChecker.sqf + +#include "..\..\..\..\addons\modChecker\modConfig.hpp" + +if (errorLevel > 0) then { + warnMessage = "Some is WRONG with your MODS
"; // General error message + } else { + warnMessage = "All MODS are FINE
"; // All mods are loaded message + }; diff --git a/mpmissions/Exile.Altis/addons/modChecker/displayConfig.hpp b/mpmissions/Exile.Altis/addons/modChecker/displayConfig.hpp new file mode 100644 index 0000000..0799a27 --- /dev/null +++ b/mpmissions/Exile.Altis/addons/modChecker/displayConfig.hpp @@ -0,0 +1,53 @@ +// ********************************************************************************************************** +// * This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// * https://creativecommons.org/licenses/by-sa/4.0/ +// ********************************************************************************************************** +// @file Name: modmodCheckerDisplay.sqf +// @file Author: NRZ7 (www.standarol.com) and Repentz +// @description: This script is a UI launched by modmodChecker.sqf. If any mod is not loaded, pop's a screen with detailed information and clickable community links (modmodCheckerDisplay.sqf). +// You can configure custom messages and links to your community guides. + + +///////////////////////////////////////////////////////////////////////////////////////////// +// DISPLAY HEADER +///////////////////////////////////////////////////////////////////////////////////////////// + +_message = ""; +_message = _message + "
"; +_message = _message + "Welcome to Mod modChecker
"; +_message = _message + "______________________________________________________________________________________

"; +_message = _message + warnMessage; +_message = _message + "
"; + + +///////////////////////////////////////////////////////////////////////////////////////////// +// MOD CONFIG PART HERE +// Remember to add-delete-modify the same mod variable names used in modmodCheckerConfig.hpp +///////////////////////////////////////////////////////////////////////////////////////////// +//_message = _message + modCheckExile; +//_message = _message + modCheckEsseker; +//_message = _message + modCheckRyan; +//_message = _message + modCheckWeapons; +//_message = _message + modCheckVehicles; +//_message = _message + modCheckUnits; +//_message = _message + modCheckTerrain; +_message = _message + modCheckCBA; +_message = _message + modCheckEN; +_message = _message + modCheckAR; +_message = _message + modCheckAUR; +_message = _message + modCheckBVFL; +_message = _message + modCheckNVG; +_message = _message + modCheckAG; +//_message = message + modCheckYOURMOD; + + +///////////////////////////////////////////////////////////////////////////////////////////// +// Custom message with community links - MODIFY HERE +///////////////////////////////////////////////////////////////////////////////////////////// + +_message = _message + "
"; +_message = _message + "If you get any error, please, read the following links

"; +_message = _message + "Download the mods from Steam Workshop Only click on Subscribe!
"; +_message = _message + "The mod list is only viewable by friends. Make sure you've befriended Zepheris96

"; +// _message = message + "Easy add more lines like this"; +// _message = _message + "You can easy add ANY LINK! And unlimited number of lines.
"; \ No newline at end of file diff --git a/mpmissions/Exile.Altis/addons/modChecker/init/modCheckerDisplay.sqf b/mpmissions/Exile.Altis/addons/modChecker/init/modCheckerDisplay.sqf new file mode 100644 index 0000000..365db4a --- /dev/null +++ b/mpmissions/Exile.Altis/addons/modChecker/init/modCheckerDisplay.sqf @@ -0,0 +1,71 @@ +// ********************************************************************************************************** +// * This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// * https://creativecommons.org/licenses/by-sa/4.0/ +// ********************************************************************************************************** +// @file Name: modCheckerDisplay.sqf +// @file Author: NRZ7 (www.standarol.com) +// @description: This script is a UI launched by modchecker.sqf. If any mod is not loaded, pop's a screen with detailed information and clickable community links (modCheckerDisplay.sqf). +// You can configure custom messages and links to your community guides. + +/* + Some code is from + File: rules.sqf + For exile edited by Repentz + Link: http://www.exilemod.com/topic/10375-advanced-server-rules-for-xm8/ +*/ + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT TOUCH UNDER THIS LINE IF DON'T KNOW WHAT ARE YOU DOING +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +if ((firstCheck == 0) && (errorLevel > 0)) then { player allowdamage false }; // God Mode ON to avoid die and close dialog only if ModCheckerDisplay is auto executed. + +disableSerialization; +[ + "", + 0, + 0.2, + 10, + 0, + 0, + 8 +] spawn BIS_fnc_dynamicText; + +createDialog "RscDisplayWelcome"; + +_display = findDisplay 999999; // 999999 needed to whitelist in infistar if you are using this. +_text1 = _display displayCtrl 1100; +_buttonSpoiler = _display displayctrl 2400; +_textSpoiler = _display displayctrl 1101; +_text2 = _display displayCtrl 1102; + +#include "..\displayConfig.hpp" + +//Fill only the first text +_text1 ctrlSetStructuredText (parseText _message); + +//Resize StructuredText component to display the scrollbar if needed +_positionText1 = ctrlPosition _text1; +_yText1 = _positionText1 select 1; +_hText1 = ctrlTextHeight _text1; +_text1 ctrlSetPosition [_positionText1 select 0, _yText1, _positionText1 select 2, _hText1]; +_text1 ctrlcommit 0; +//Hide second text, spoiler text and button +_buttonSpoiler ctrlSetFade 1; +_buttonSpoiler ctrlCommit 0; +_buttonSpoiler ctrlEnable false; +_textSpoiler ctrlSetFade 1; +_textSpoiler ctrlCommit 0; +_text2 ctrlSetFade 1; +_text2 ctrlCommit 0; + +//Waith until dialog is closed and kick the player if a required mod is not loaded. +waitUntil {!dialog }; +if (errorLevel > 90) then // non requiered addons have level 1. Requiered addons have error level 99. + { + endMission "LOSER" + } + else + { + firstCheck = 1; player allowDamage true // Disables God Mode protection and set mods as checked. + }; \ No newline at end of file diff --git a/mpmissions/Exile.Altis/addons/modChecker/init/modCheckerInit.sqf b/mpmissions/Exile.Altis/addons/modChecker/init/modCheckerInit.sqf new file mode 100644 index 0000000..e99d23a --- /dev/null +++ b/mpmissions/Exile.Altis/addons/modChecker/init/modCheckerInit.sqf @@ -0,0 +1,33 @@ +// ********************************************************************************************************** +// * This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// * https://creativecommons.org/licenses/by-sa/4.0/ +// ********************************************************************************************************** +// @file Name: modChecker.sqf +// @file Author: NRZ7 (www.standarol.com) +// @description: This script check the mods loaded by the client. If any mod is not loaded, pop's a screen with detailed information and clickable community links (modCheckerDisplay.sqf). +// You can configure requiered addons (error 99) or optional addons (error 1). If any required mod fails, the client load "You Loose" screen after close the dialog. +// + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT TOUCH UNDER THIS LINE IF DON'T KNOW WHAT ARE YOU DOING +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +errorLevel = 0; + +#include "..\modConfig.hpp" + +if (errorLevel > 0) then { + warnMessage = "Some is WRONG with your MODS
"; + } else { + warnMessage = "All MODS are FINE
"; + }; + +if ((errorLevel == 0) && (firstCheck == 0)) then { + firstCheck = 1 // Do nothing + } else { + execVM "addons\modChecker\init\modCheckerDisplay.sqf" + }; + +// execVM "addons\modChecker\init\modCheckerDisplay.sqf" + + diff --git a/mpmissions/Exile.Altis/addons/modChecker/modConfig.hpp b/mpmissions/Exile.Altis/addons/modChecker/modConfig.hpp new file mode 100644 index 0000000..c10b015 --- /dev/null +++ b/mpmissions/Exile.Altis/addons/modChecker/modConfig.hpp @@ -0,0 +1,158 @@ +// ********************************************************************************************************** +// * This project is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// * https://creativecommons.org/licenses/by-sa/4.0/ +// ********************************************************************************************************** +// @file Name: modmodChecker.sqf +// @file Author: NRZ7 (www.standarol.com) +// @description: This script modCheck the mods loaded by the client. If any mod is not loaded, pop's a screen with detailed information and clickable community links (modmodCheckerDisplay.sqf). +// You can configure requiered addons (error 99) or optional addons (error 1). If any required mod fails, the client load "You Loose" screen after close the dialog. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Exile_Client Example - READ TO UNDERSTAND - DO NOT TOUCH - READ - DO NOT TOUCH - READ - DO NOT TOUCH +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Change "Exile_Client" to name of the CfgPatches from desired mod. +// You can find under editor. ("Tools" - "Config Viewer" - "Configfile" - "CfgPatches") +if (isClass(configFile >> "CfgPatches" >> "Exile_Client")) then + { +// Change modCheckExile to your desired and unique mod variable name +// Change "Exile Mod is" to your mod string. For advanced users, can change size, color, allign, etc. + modCheckExile = "Exile Mod is found!
"; + } else { +// Change "Exile Mod is" to your mod string + modCheckExile = "Exile Mod is NOT FOUND!
"; +// Set 99 to Required, Set 1 to optional + errorLevel = errorLevel + 99 + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// START OF MODS CONFIG - EDIT OR DELETE UNDER THIS LINE +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Esseker Example - DELETE OR MODIFY +/*if (isClass(configFile >> "CfgPatches" >> "Esseker")) then + { + modCheckEsseker = "Esseker Map is found!
"; + } else { + modCheckEsseker = "Esseker Map is NOT FOUND!
"; + errorLevel = errorLevel + 99 + }; + +// Zombis & Demonds Example - DELETE OR MODIFY +if (isClass(configFile >> "CfgPatches" >> "Ryanzombies")) then + { + modCheckRyan = "Zombies and Demonds is found!
"; + } else { + modCheckRyan = "Zombies and Demonds is NOT FOUND!
"; + errorLevel = errorLevel + 99 + }; + +// CUP_Weapons Example - DELETE OR MODIFY +if (isClass(configFile >> "CfgPatches" >> "CUP_Weapons_WeaponsCore")) then + { + modCheckWeapons = "CUP Weapons is found!
"; + } else { + modCheckWeapons = "CUP Weapons is NOT FOUND!
"; + errorLevel = errorLevel + 99 + }; + +// CUP_Vehicles Example - DELETE OR MODIFY +if (isClass(configFile >> "CfgPatches" >> "CUP_Vehicles_Core")) then + { + modCheckVehicles = "CUP Vehicles is found!
"; + } else { + modCheckVehicles = "CUP Vehicles is NOT FOUND!
"; + errorLevel = errorLevel + 99 + }; + +// CUP_TerrainCore Example - DELETE OR MODIFY +if (isClass(configFile >> "CfgPatches" >> "CUP_Worlds")) then + { + modCheckTerrain = "CUP Terrain Core is found!
"; + } else { + modCheckTerrain = "CUP Terrain Core is NOT FOUND!
"; + errorLevel = errorLevel + 1 + }; + +// CUP_Units Example - DELETE OR MODIFY +if (isClass(configFile >> "CfgPatches" >> "CUP_Creatures_People_Core")) then + { + modCheckUnits = "CUP Units is found!
"; + } else { + modCheckUnits = "CUP Units is NOT FOUND!
"; + errorLevel = errorLevel + 99 + }; +*/ +// Community Base Addon Example - DELETE OR MODIFY +if (isClass(configFile >> "CfgPatches" >> "CBA_main")) then + { + modCheckCBA = "CBA_A3 is found!
"; + } else { + modCheckCBA = "CBA_A3 is NOT FOUND! (Required)
"; + errorLevel = errorLevel + 99 + }; + +//Enhanced Movement +if (isClass(configFile >> "CfgPatches" >> "BaBe_core")) then + { + modCheckEN = "Enhanced Movement is found!
"; + } else { + modCheckEN = "Enhanced Movement is NOT FOUND! (Not required)
"; + errorLevel = errorLevel + 1 + }; + +//Advanced Rappelling +if (isClass(configFile >> "CfgPatches" >> "AR_AdvancedRappelling")) then + { + modCheckAR = "Advanced Rappelling is found!
"; + } else { + modCheckAR = "Advanced Rappelling is NOT FOUND! (Not required)
"; + errorLevel = errorLevel + 1 + }; + +//Advanced Urban Rappelling +if (isClass(configFile >> "CfgPatches" >> "AUR_AdvancedUrbanRappelling")) then + { + modCheckAUR = "Advanced Urban Rappelling is found!
"; + } else { + modCheckAUR = "Advanced Urban Rappelling is NOT FOUND! (Not required)
"; + errorLevel = errorLevel + 1 + }; + +//bv_flashlight +if (isClass(configFile >> "CfgPatches" >> "bv_flashlight")) then + { + modCheckBVFL = "bv_flashlight is found!
"; + } else { + modCheckBVFL = "bv_flashlight is NOT FOUND! (Required)
"; + errorLevel = errorLevel + 99 + }; + +//lsd_nvg +if (isClass(configFile >> "CfgPatches" >> "lsd_nvg")) then + { + modCheckNVG = "Full Screen NV is found!
"; + } else { + modCheckNVG = "Full Screen NV is NOT FOUND! (Not required)
"; + errorLevel = errorLevel + 1 + }; + +//adjustable Grenades +if (isClass(configFile >> "CfgPatches" >> "vz_a3_adjustableGrenades")) then + { + modCheckAG = "Adjustable Grenades is found!
"; + } else { + modCheckAG = "Adjustable Grenades is NOT FOUND! (Not required)
"; + errorLevel = errorLevel + 1 + }; +// YOU CAN ADD MORE MODS, ADD FOR EACH SOME CODE LIKE THIS + +/* +if (isClass(configFile >> "CfgPatches" >> "YOUR_MOD_CLASSNAME")) then + { + modCheckYOURMOD = "YOUR MOD is found!
"; + } else { + modCheckYOURMOD = "YOUR MOD is NOT FOUND!
"; + errorLevel = errorLevel + 1 + }; +*/ diff --git a/mpmissions/Exile.Altis/config.cpp b/mpmissions/Exile.Altis/config.cpp index 37bcc7e..c5fe64a 100644 --- a/mpmissions/Exile.Altis/config.cpp +++ b/mpmissions/Exile.Altis/config.cpp @@ -2246,7 +2246,7 @@ class CfgVehicleTransport class CfgXM8 { - extraApps[] = {"ExAd_VG","ExAd_CHVD","ExAd_Bike","ExAd_SB","BRAmaRecipes"}; + extraApps[] = {"ExAd_Bike","ExAd_VG","ExAd_CHVD","BRAmaRecipes","ExAd_Bike","ExAd_modChecker"}; class ExAd_VG { @@ -2324,6 +2324,15 @@ class CfgXM8 onLoad = "ExAdClient\XM8\Apps\BRAmaRecipes\onLoad.sqf"; onOpen = "ExAdClient\XM8\Apps\BRAmaRecipes\onOpen.sqf"; }; + class ExAd_modChecker + { + title = "Mod Checker"; + controlID = 99999; + logo = "ExadClient\XM8\Apps\modChecker\modChecker.paa"; + onLoad = "ExAdClient\XM8\Apps\modChecker\onLoad.sqf"; + onOpen = "ExAdClient\XM8\Apps\modChecker\onOpen.sqf"; + onClose = "ExAdClient\XM8\Apps\modChecker\onClose.sqf"; + }; }; class SpawnVehicleItems{ diff --git a/mpmissions/Exile.Altis/initPlayerLocal.sqf b/mpmissions/Exile.Altis/initPlayerLocal.sqf index d816a0f..0902d4e 100644 --- a/mpmissions/Exile.Altis/initPlayerLocal.sqf +++ b/mpmissions/Exile.Altis/initPlayerLocal.sqf @@ -506,3 +506,13 @@ call ExileClient_object_trader_create; 187.428 ] call ExileClient_object_trader_create; + +/////////////////////////////////////////////////////////////////////////// +// MOD CHECKER +/////////////////////////////////////////////////////////////////////////// + +waitUntil {!isNull findDisplay 46 && !isNil 'ExileClientLoadedIn' && getPlayerUID player != ''}; // wait until player is in spawned +uiSleep 3; + +firstCheck = 0; +execVM "addons\modChecker\init\modCheckerInit.sqf";