4
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

115 lines
2.9 KiB

#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 bool IsVR()
{
return GetLoadInterface()->RuntimeVersion() == SKSE::RUNTIME_VR_1_4_15 || GetLoadInterface()->RuntimeVersion() == SKSE::RUNTIME_LATEST_VR;
}
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 v2.0.12 by Eddoursul and contributors");
CheckBlacklist();
CheckWorldspaces();
CheckUnconvertedMap();
CheckSkyrimCells();
CheckEnderalCells();
CheckEnderalContainers();
CheckEnderalNPCs();
}
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());
}
}