Check for sTestFile entries

This commit is contained in:
Liderate
2023-12-02 19:22:27 -05:00
parent 5b11f242e5
commit ca0cf621bd
2 changed files with 116 additions and 11 deletions
+97 -5
View File
@@ -112,6 +112,19 @@ QList<PluginSetting> GameFallout4::settings() const
return QList<PluginSetting>();
}
MappingType GameFallout4::mappings() const
{
MappingType result;
if (testFilePlugins().isEmpty()) {
for (const QString& profileFile : { "plugins.txt", "loadorder.txt" }) {
result.push_back({ m_Organizer->profilePath() + "/" + profileFile,
localAppFolder() + "/" + gameShortName() + "/" + profileFile,
false });
}
}
return result;
}
void GameFallout4::initializeProfile(const QDir &path, ProfileSettings settings) const
{
if (settings.testFlag(IPluginGame::MODS)) {
@@ -151,11 +164,44 @@ QString GameFallout4::steamAPPId() const
return "377160";
}
QStringList GameFallout4::primaryPlugins() const {
QStringList plugins = {"fallout4.esm", "dlcrobot.esm", "dlcworkshop01.esm", "dlccoast.esm", "dlcworkshop02.esm",
"dlcworkshop03.esm", "dlcnukaworld.esm", "dlcultrahighresolution.esm"};
QStringList GameFallout4::testFilePlugins() const
{
QStringList plugins;
if (m_Organizer != nullptr && m_Organizer->profile() != nullptr) {
QString customIni(
m_Organizer->profile()->absoluteIniFilePath("Fallout4Custom.ini"));
if (QFile(customIni).exists()) {
for (int i = 1; i <= 10; ++i) {
QString setting("sTestFile");
setting += std::to_string(i);
WCHAR value[MAX_PATH];
DWORD length = ::GetPrivateProfileStringW(
L"General", setting.toStdWString().c_str(), L"", value, MAX_PATH,
customIni.toStdWString().c_str());
if (length && wcscmp(value, L"") != 0) {
QString plugin = QString::fromWCharArray(value, length);
if (!plugin.isEmpty() && !plugins.contains(plugin))
plugins.append(plugin);
}
}
}
}
return plugins;
}
plugins.append(CCPlugins());
QStringList GameFallout4::primaryPlugins() const
{
QStringList plugins = {"fallout4.esm", "dlcrobot.esm",
"dlcworkshop01.esm", "dlccoast.esm",
"dlcworkshop02.esm", "dlcworkshop03.esm",
"dlcnukaworld.esm", "dlcultrahighresolution.esm"};
auto testPlugins = testFilePlugins();
if (loadOrderMechanism() == LoadOrderMechanism::None) {
plugins << testPlugins;
} else {
plugins << CCPlugins();
}
return plugins;
}
@@ -213,9 +259,18 @@ QStringList GameFallout4::CCPlugins() const
return plugins;
}
IPluginGame::SortMechanism GameFallout4::sortMechanism() const
{
if (!testFilePresent())
return IPluginGame::SortMechanism::LOOT;
return IPluginGame::SortMechanism::NONE;
}
IPluginGame::LoadOrderMechanism GameFallout4::loadOrderMechanism() const
{
return IPluginGame::LoadOrderMechanism::PluginsTxt;
if (!testFilePresent())
return IPluginGame::LoadOrderMechanism::PluginsTxt;
return IPluginGame::LoadOrderMechanism::None;
}
int GameFallout4::nexusModOrganizerID() const
@@ -227,3 +282,40 @@ int GameFallout4::nexusGameID() const
{
return 1151;
}
// Start Diagnose
std::vector<unsigned int> GameFallout4::activeProblems() const
{
std::vector<unsigned int> result;
if (m_Organizer->managedGame() == this) {
if (testFilePresent())
result.push_back(PROBLEM_TEST_FILE);
}
return result;
}
bool GameFallout4::testFilePresent() const
{
if (!testFilePlugins().isEmpty())
return true;
return false;
}
QString GameFallout4::shortDescription(unsigned int key) const
{
switch (key) {
case PROBLEM_TEST_FILE:
return tr("sTestFile entries are present");
}
}
QString GameFallout4::fullDescription(unsigned int key) const {
switch (key) {
case PROBLEM_TEST_FILE: {
return tr("<p>You have sTestFile settings in your "
"Fallout4Custom.ini. These must be removed or "
"the game will not read the plugins.txt file. "
"Management is disabled.</p>");
}
}
}
+19 -6
View File
@@ -3,24 +3,26 @@
#include "gamegamebryo.h"
#include "iplugindiagnose.h"
#include <QObject>
#include <QtGlobal>
class GameFallout4 : public GameGamebryo
class GameFallout4 : public GameGamebryo, public MOBase::IPluginDiagnose
{
Q_OBJECT
Q_INTERFACES(MOBase::IPlugin MOBase::IPluginGame MOBase::IPluginDiagnose)
Q_PLUGIN_METADATA(IID "org.tannin.GameFallout4" FILE "gamefallout4.json")
public:
GameFallout4();
virtual bool init(MOBase::IOrganizer *moInfo) override;
public: // IPluginGame interface
public:
QStringList testFilePlugins() const;
public: // IPluginGame interface
virtual QString gameName() const override;
virtual void detectGame() override;
virtual QList<MOBase::ExecutableInfo> executables() const override;
@@ -34,25 +36,36 @@ public: // IPluginGame interface
virtual QStringList iniFiles() const override;
virtual QStringList DLCPlugins() const override;
virtual QStringList CCPlugins() const override;
virtual SortMechanism sortMechanism() const override;
virtual LoadOrderMechanism loadOrderMechanism() const override;
virtual int nexusModOrganizerID() const override;
virtual int nexusGameID() const override;
public: // IPluginDiagnose interface
virtual std::vector<unsigned int> activeProblems() const override;
virtual QString shortDescription(unsigned int key) const override;
virtual QString fullDescription(unsigned int key) const override;
virtual bool hasGuidedFix(unsigned int key) const override { return false; }
virtual void startGuidedFix(unsigned int key) const override {}
public: // IPlugin interface
virtual QString name() const override;
virtual QString localizedName() const override;
virtual QString author() const override;
virtual QString description() const override;
virtual MOBase::VersionInfo version() const override;
virtual QList<MOBase::PluginSetting> settings() const override;
virtual MappingType mappings() const override;
protected:
std::shared_ptr<const GamebryoSaveGame> makeSaveGame(QString filePath) const override;
QString savegameExtension() const override;
QString savegameSEExtension() const override;
private:
bool testFilePresent() const;
private:
static const unsigned int PROBLEM_TEST_FILE = 1;
};
#endif // GAMEFallout4_H