diff --git a/src/game_features.cpp b/src/game_features.cpp index bc083bc8..9505c8dc 100644 --- a/src/game_features.cpp +++ b/src/game_features.cpp @@ -45,20 +45,29 @@ class GameFeatures::CombinedModDataChecker : public ModDataChecker { m_fixer = nullptr; - for (auto& modDataChecker : m_modDataCheckers) { + // go through the available mod-data checker, if any returns valid, we also + // return valid, otherwise, return the first one that is fixable + for (const auto& modDataChecker : m_modDataCheckers) { auto check = modDataChecker->dataLooksValid(fileTree); switch (check) { case CheckReturn::FIXABLE: - m_fixer = modDataChecker; - [[fallthrough]]; + // only update fixer if there is not one with higher priority + if (!m_fixer) { + m_fixer = modDataChecker; + } + break; case CheckReturn::VALID: + // clear fixer if one were found before and return VALID, not mandatory + // but cleaner + m_fixer = nullptr; return CheckReturn::VALID; case CheckReturn::INVALID: break; } } - return CheckReturn::INVALID; + + return m_fixer ? CheckReturn::FIXABLE : CheckReturn::INVALID; } std::shared_ptr @@ -100,7 +109,6 @@ class GameFeatures::CombinedModDataContent : public ModDataContent std::make_move_iterator(contents.end())); // increase offset for next mod data content - offset += contents.size(); } } diff --git a/src/gamefeaturesproxy.cpp b/src/gamefeaturesproxy.cpp index 3adac353..1c833a2f 100644 --- a/src/gamefeaturesproxy.cpp +++ b/src/gamefeaturesproxy.cpp @@ -28,7 +28,7 @@ bool GameFeaturesProxy::registerFeature(MOBase::IPluginGame* game, bool GameFeaturesProxy::registerFeature(std::shared_ptr feature, int priority, bool replace) { - return registerFeature({}, feature, priority, replace); + return registerFeature(QStringList(), feature, priority, replace); } bool GameFeaturesProxy::unregisterFeature(std::shared_ptr feature)