1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-04-11 11:31:52 +02:00

mods: Ignore submod conflicts for install, Ignore compatibility patches for enabling

This commit is contained in:
Dydzio 2024-04-20 22:48:54 +02:00
parent 70fad45316
commit c6e4ef2a78
4 changed files with 31 additions and 7 deletions

View File

@ -94,13 +94,13 @@ bool CModEntry::isInstalled() const
bool CModEntry::isVisible() const
{
if (getBaseValue("modType").toString() == "Compatibility")
if (isCompatibilityPatch())
{
if (isSubmod())
return false;
}
if (getBaseValue("modType").toString() == "Translation")
if (isTranslation())
{
// Do not show not installed translation mods to languages other than player language
if (localData.empty() && getBaseValue("language") != QString::fromStdString(settings["general"]["language"].String()) )
@ -115,6 +115,11 @@ bool CModEntry::isTranslation() const
return getBaseValue("modType").toString() == "Translation";
}
bool CModEntry::isCompatibilityPatch() const
{
return getBaseValue("modType").toString() == "Compatibility";
}
bool CModEntry::isSubmod() const
{
return getName().contains('.');

View File

@ -54,8 +54,10 @@ public:
bool isCompatible() const;
// returns true if mod should be visible in Launcher
bool isVisible() const;
// installed and enabled
// returns true if mod type is Translation
bool isTranslation() const;
// returns true if mod type is Compatibility
bool isCompatibilityPatch() const;
// returns true if this is a submod
bool isSubmod() const;

View File

@ -483,10 +483,10 @@ void CModListView::on_comboBox_currentIndexChanged(int index)
QStringList CModListView::findInvalidDependencies(QString mod)
{
QStringList ret;
for(QString requrement : modModel->getRequirements(mod))
for(QString requirement : modModel->getRequirements(mod))
{
if(!modModel->hasMod(requrement))
ret += requrement;
if(!modModel->hasMod(requirement) && !modModel->hasMod(requirement.split(QChar('.'), Qt::SkipEmptyParts)[0]))
ret += requirement;
}
return ret;
}
@ -614,6 +614,20 @@ void CModListView::on_installButton_clicked()
auto mod = modModel->getMod(name);
if(!mod.isInstalled())
downloadFile(name + ".zip", mod.getValue("download").toString(), "mods", mbToBytes(mod.getValue("downloadSize").toDouble()));
else if(!mod.isEnabled())
enableModByName(name);
}
for(auto & name : modModel->getMod(modName).getConflicts())
{
auto mod = modModel->getMod(name);
if(mod.isEnabled())
{
//TODO: consider reverse dependencies disabling
//TODO: consider if it may be possible for subdependencies to block disabling conflicting mod?
//TODO: consider if it may be possible to get subconflicts that will block disabling conflicting mod?
disableModByName(name);
}
}
}

View File

@ -195,7 +195,10 @@ bool CModManager::canEnableMod(QString modname)
{
if(!modList->hasMod(modEntry)) // required mod is not available
return addError(modname, QString("Required mod %1 is missing").arg(modEntry));
if(!modList->getMod(modEntry).isEnabled())
CModEntry modData = modList->getMod(modEntry);
if(!modData.isCompatibilityPatch() && !modData.isEnabled())
return addError(modname, QString("Required mod %1 is not enabled").arg(modEntry));
}