1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-14 10:12:59 +02:00
vcmi/lib/modding/ActiveModsInSaveList.cpp
Andrii Danylchenko 39e19f79f4 Fix #3754, #2316
2024-04-27 13:57:50 +03:00

59 lines
1.7 KiB
C++

/*
* ActiveModsInSaveList.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "ActiveModsInSaveList.h"
#include "../VCMI_Lib.h"
#include "CModInfo.h"
#include "CModHandler.h"
#include "ModIncompatibility.h"
VCMI_LIB_NAMESPACE_BEGIN
std::vector<TModID> ActiveModsInSaveList::getActiveGameplayAffectingMods()
{
std::vector<TModID> result;
for (auto const & entry : VLC->modh->getActiveMods())
if (VLC->modh->getModInfo(entry).checkModGameplayAffecting())
result.push_back(entry);
return result;
}
const ModVerificationInfo & ActiveModsInSaveList::getVerificationInfo(TModID mod)
{
return VLC->modh->getModInfo(mod).getVerificationInfo();
}
void ActiveModsInSaveList::verifyActiveMods(const std::map<TModID, ModVerificationInfo> & modList)
{
auto comparison = ModVerificationInfo::verifyListAgainstLocalMods(modList);
std::vector<TModID> missingMods;
std::vector<TModID> excessiveMods;
for (auto const & compared : comparison)
{
if (compared.second == ModVerificationStatus::NOT_INSTALLED)
missingMods.push_back(modList.at(compared.first).name);
if (compared.second == ModVerificationStatus::DISABLED)
missingMods.push_back(VLC->modh->getModInfo(compared.first).getVerificationInfo().name);
if (compared.second == ModVerificationStatus::EXCESSIVE)
excessiveMods.push_back(VLC->modh->getModInfo(compared.first).getVerificationInfo().name);
}
if(!missingMods.empty() || !excessiveMods.empty())
throw ModIncompatibility(missingMods, excessiveMods);
}
VCMI_LIB_NAMESPACE_END