Eddoursul
f2150e94ef
- Cross-runtime build, tested on SE and AE - Intergrated Flat Map Markers and Stay At The System Page - Added tons of sanity checks - Automatically overrides bFreebiesSeen, bInvalidateOlderFiles, and bModManagerMenuEnabled INI values
106 lines
2.7 KiB
C++
106 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include "CheckInvalidForms.h"
|
|
#include <SimpleIni.h>
|
|
|
|
inline const SKSE::LoadInterface* GetLoadInterface(const SKSE::LoadInterface* loadInterface = nullptr)
|
|
{
|
|
const static SKSE::LoadInterface* singleton;
|
|
if (loadInterface) {
|
|
singleton = loadInterface;
|
|
}
|
|
return singleton;
|
|
}
|
|
|
|
inline uint8_t NewGameCount(bool increment = false)
|
|
{
|
|
static uint8_t g_NewGameStarted = 0;
|
|
|
|
if (increment) {
|
|
g_NewGameStarted++;
|
|
}
|
|
|
|
return g_NewGameStarted;
|
|
}
|
|
|
|
inline bool IsSE()
|
|
{
|
|
return GetLoadInterface()->RuntimeVersion().minor() == 5;
|
|
}
|
|
|
|
inline void SetINISettings()
|
|
{
|
|
auto* setting = RE::INIPrefSettingCollection::GetSingleton()->GetSetting("bFreebiesSeen:General");
|
|
if (setting && !setting->GetBool()) {
|
|
setting->data.b = true;
|
|
RE::INIPrefSettingCollection::GetSingleton()->WriteSetting(setting);
|
|
}
|
|
|
|
setting = RE::INISettingCollection::GetSingleton()->GetSetting("bInvalidateOlderFiles:Archive");
|
|
if (setting && !setting->GetBool()) {
|
|
setting->data.b = true;
|
|
RE::INISettingCollection::GetSingleton()->WriteSetting(setting);
|
|
}
|
|
|
|
setting = RE::INISettingCollection::GetSingleton()->GetSetting("bModManagerMenuEnabled:General");
|
|
if (setting && setting->GetBool()) {
|
|
setting->data.b = false;
|
|
RE::INISettingCollection::GetSingleton()->WriteSetting(setting);
|
|
}
|
|
}
|
|
|
|
inline void CheckIncompatibleMods()
|
|
{
|
|
RE::ConsoleLog::GetSingleton()->Print("Loaded SureAI's Enderal: Forgotten Stories | Special Edition port v2.0.12 by Eddoursul et al");
|
|
|
|
CheckWorldspaces();
|
|
CheckSkyrimCells();
|
|
CheckEnderalCells();
|
|
}
|
|
|
|
inline void LoadINI(std::map<std::string, bool>* settings, const char* iniPath)
|
|
{
|
|
for (auto it = settings->begin(); it != settings->end(); it++) {
|
|
logger::info("[DEFAULT] {} = {}", it->first, it->second);
|
|
}
|
|
|
|
if (!std::filesystem::exists(iniPath)) {
|
|
logger::warn("{} does not exist, using default values.", iniPath);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
CSimpleIniA ini;
|
|
ini.SetUnicode(false);
|
|
ini.SetMultiKey(false);
|
|
ini.LoadFile(iniPath);
|
|
|
|
std::list<CSimpleIniA::Entry> keysList;
|
|
ini.GetAllKeys("", keysList);
|
|
|
|
bool bUpdateINI = false;
|
|
for (auto it = settings->begin(); it != settings->end(); it++) {
|
|
bool bExists = false;
|
|
for (const auto& k : keysList) {
|
|
if (it->first == k.pItem) {
|
|
settings->insert_or_assign(k.pItem, ini.GetBoolValue("", k.pItem, settings->at(k.pItem)));
|
|
logger::info("[INI] {} = {}", k.pItem, settings->at(k.pItem));
|
|
bExists = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!bExists) {
|
|
ini.SetBoolValue("", it->first.c_str(), it->second);
|
|
bUpdateINI = true;
|
|
}
|
|
}
|
|
|
|
if (bUpdateINI) {
|
|
logger::info("New settings detected, adding to ArtifactTracker.ini");
|
|
ini.SaveFile(iniPath);
|
|
}
|
|
|
|
} catch (const std::exception& e) {
|
|
logger::error(e.what());
|
|
}
|
|
} |