aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/games/fallout4/fallout4bsainvalidation.cpp
blob: 771152241dfafe1d044486500d3703ecac9f8602 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "fallout4bsainvalidation.h"

#include "dummybsa.h"
#include "iplugingame.h"
#include "iprofile.h"
#include "registry.h"
#include <imoinfo.h>
#include <utility.h>

#include "gamegamebryo.h"

Fallout4BSAInvalidation::Fallout4BSAInvalidation(MOBase::DataArchives* dataArchives,
                                                 MOBase::IPluginGame const* game)
    : GamebryoBSAInvalidation(dataArchives, "Fallout4Custom.ini", game)
{
  m_IniFileName = "Fallout4Custom.ini";
  m_Game        = game;
}

bool Fallout4BSAInvalidation::isInvalidationBSA(const QString& bsaName)
{
  return false;
}

QString Fallout4BSAInvalidation::invalidationBSAName() const
{
  return "";
}

unsigned long Fallout4BSAInvalidation::bsaVersion() const
{
  return 0x68;
}

bool Fallout4BSAInvalidation::prepareProfile(MOBase::IProfile* profile)
{
  bool dirty          = false;
  QString basePath    = profile->localSettingsEnabled()
                            ? profile->absolutePath()
                            : m_Game->documentsDirectory().absolutePath();
  QString iniFilePath = basePath + "/" + m_IniFileName;

  if (profile->invalidationActive(nullptr)) {
    // write bInvalidateOlderFiles = 1, if needed
    QString bInvalidateOlderFiles = GameGamebryo::readIniValue(
        iniFilePath, "Archive", "bInvalidateOlderFiles", "0");
    if (bInvalidateOlderFiles.toLong() != 1) {
      dirty = true;
      if (!MOBase::WriteRegistryValue("Archive", "bInvalidateOlderFiles", "1",
                                      iniFilePath)) {
        qWarning("failed to override data directory in \"%s\"",
                 qUtf8Printable(m_IniFileName));
      }
    }
    QString sResourceDataDirsFinal = GameGamebryo::readIniValue(
        iniFilePath, "Archive", "sResourceDataDirsFinal", "STRINGS\\");
    if (sResourceDataDirsFinal != "") {
      dirty = true;
      if (!MOBase::WriteRegistryValue("Archive", "sResourceDataDirsFinal", "",
                                      iniFilePath)) {
        qWarning("failed to override data directory in \"%s\"",
                 qUtf8Printable(m_IniFileName));
      }
    }
  }

  return dirty;
}