aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/games/starfield/starfieldbsainvalidation.cpp
blob: f6e803b31cd73990f2de280e5e161e3eb875bcd7 (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 "starfieldbsainvalidation.h"

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

#include "gamegamebryo.h"

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

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

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

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

bool StarfieldBSAInvalidation::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;
}