mirror of
https://github.com/ModOrganizer2/modorganizer-game_fallout4.git
synced 2026-07-27 14:00:37 -07:00
Check for sTestFile entries
This commit is contained in:
+97
-5
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user