#include "starfieldgameplugins.h" #include #include #include using namespace MOBase; StarfieldGamePlugins::StarfieldGamePlugins(MOBase::IOrganizer* organizer) : CreationGamePlugins(organizer) {} bool StarfieldGamePlugins::mediumPluginsAreSupported() { return true; } bool StarfieldGamePlugins::blueprintPluginsAreSupported() { return true; } void StarfieldGamePlugins::writePluginList(const IPluginList* pluginList, const QString& filePath) { if (m_Organizer->managedGame()->loadOrderMechanism() != MOBase::IPluginGame::LoadOrderMechanism::PluginsTxt) { return; } SafeWriteFile file(filePath); QStringEncoder encoder(QStringConverter::Encoding::System); file->resize(0); file->write(encoder.encode( "# This file was automatically generated by Mod Organizer.\r\n")); bool invalidFileNames = false; int writtenCount = 0; QStringList plugins = pluginList->pluginNames(); std::sort(plugins.begin(), plugins.end(), [pluginList](const QString& lhs, const QString& rhs) { return pluginList->priority(lhs) < pluginList->priority(rhs); }); QStringList PrimaryPlugins = organizer()->managedGame()->primaryPlugins(); QStringList DLCPlugins = organizer()->managedGame()->DLCPlugins(); QSet ManagedMods = QSet(PrimaryPlugins.begin(), PrimaryPlugins.end()); QSet DLCSet = QSet(DLCPlugins.begin(), DLCPlugins.end()); ManagedMods.subtract(DLCSet); PrimaryPlugins.append(QList(ManagedMods.begin(), ManagedMods.end())); // TODO: do not write plugins in OFFICIAL_FILES container for (const QString& pluginName : plugins) { if (!PrimaryPlugins.contains(pluginName, Qt::CaseInsensitive) && !pluginList->isBlueprintFlagged(pluginName) && !pluginName.startsWith(m_Organizer->managedGame()->blueprintPrefix(), Qt::CaseInsensitive)) { if (pluginList->state(pluginName) == IPluginList::STATE_ACTIVE) { auto result = encoder.encode(pluginName); if (encoder.hasError()) { invalidFileNames = true; qCritical("invalid plugin name %s", qUtf8Printable(pluginName)); } else { file->write("*"); file->write(result); } file->write("\r\n"); ++writtenCount; } else { auto result = encoder.encode(pluginName); if (encoder.hasError()) { invalidFileNames = true; qCritical("invalid plugin name %s", qUtf8Printable(pluginName)); } else { file->write(result); } file->write("\r\n"); ++writtenCount; } } } if (invalidFileNames) { reportError(QObject::tr("Some of your plugins have invalid names! These " "plugins can not be loaded by the game. Please see " "mo_interface.log for a list of affected plugins " "and rename them.")); } file->commit(); } QStringList StarfieldGamePlugins::readPluginList(MOBase::IPluginList* pluginList) { if (m_Organizer->managedGame()->loadOrderMechanism() == MOBase::IPluginGame::LoadOrderMechanism::PluginsTxt) { return CreationGamePlugins::readPluginList(pluginList); } return {}; }