mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
* modsystem v2 initial commit * call CModSystem::Init * clean up custom cvar value handling * add mod script compiling support * add error check to script rson loading yes this error is a duplicate but this one exits the game * fix typo * fix compile error
67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "vpc/keyvalues.h"
|
|
#include "vpc/rson.h"
|
|
#include <filesystem/filesystem.h>
|
|
|
|
class CModAppSystemGroup;
|
|
|
|
|
|
class CModSystem
|
|
{
|
|
public:
|
|
enum eModState : int8_t
|
|
{
|
|
UNLOADED = -1, // loading was unsuccessful (error occurred)
|
|
LOADING = 0, // if mod is being loaded
|
|
DISABLED = 1, // if disabled by user
|
|
ENABLED = 2, // if enabled by user and loaded properly
|
|
};
|
|
|
|
struct ModInstance_t
|
|
{
|
|
ModInstance_t(const fs::path& basePath);
|
|
|
|
inline void SetState(eModState state) { m_iState = state; };
|
|
|
|
inline bool IsEnabled() { return m_iState == eModState::ENABLED; };
|
|
|
|
inline const fs::path& GetBasePath() { return m_BasePath; };
|
|
|
|
inline fs::path GetScriptCompileListPath() { return (m_BasePath / "scripts/vscripts/scripts.rson"); };
|
|
|
|
RSON::Node_t* LoadScriptCompileList()
|
|
{
|
|
return RSON::LoadFromFile(GetScriptCompileListPath().string().c_str());
|
|
};
|
|
|
|
bool m_bHasScriptCompileList; // if this mod has a scripts.rson file that exists
|
|
|
|
string m_szName; // mod display name
|
|
string m_szModID; // internal mod identifier
|
|
fs::path m_BasePath; // path to folder containg all mod files
|
|
string m_szDescription; // mod description
|
|
string m_szVersion; // version string
|
|
|
|
KeyValues* m_SettingsKV;
|
|
|
|
eModState m_iState = eModState::UNLOADED;
|
|
|
|
std::vector<string> m_vszLocalizationFiles;
|
|
};
|
|
|
|
void Init();
|
|
|
|
// load mod enabled/disabled status from file on disk
|
|
void LoadModStatusList();
|
|
void WriteModStatusList();
|
|
|
|
inline vector<ModInstance_t>& GetModList() { return m_vModList; };
|
|
inline std::map<size_t, bool>& GetEnabledList() { return m_vEnabledList; };
|
|
|
|
private:
|
|
vector<ModInstance_t> m_vModList;
|
|
std::map<size_t, bool> m_vEnabledList;
|
|
};
|
|
extern CModSystem* g_pModSystem;
|