aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/mods
diff options
context:
space:
mode:
Diffstat (limited to 'NorthstarDLL/mods')
-rw-r--r--NorthstarDLL/mods/modmanager.cpp28
-rw-r--r--NorthstarDLL/mods/modmanager.h3
2 files changed, 26 insertions, 5 deletions
diff --git a/NorthstarDLL/mods/modmanager.cpp b/NorthstarDLL/mods/modmanager.cpp
index 6310b7ec..e37df6e5 100644
--- a/NorthstarDLL/mods/modmanager.cpp
+++ b/NorthstarDLL/mods/modmanager.cpp
@@ -11,7 +11,7 @@
#include "rapidjson/error/en.h"
#include "rapidjson/document.h"
#include "rapidjson/ostreamwrapper.h"
-#include "rapidjson/writer.h"
+#include "rapidjson/prettywriter.h"
#include <filesystem>
#include <fstream>
#include <string>
@@ -198,6 +198,9 @@ Mod::Mod(fs::path modDir, char* jsonBuf)
if (scriptObj["ServerCallback"].HasMember("After") && scriptObj["ServerCallback"]["After"].IsString())
callback.AfterCallback = scriptObj["ServerCallback"]["After"].GetString();
+ if (scriptObj["ServerCallback"].HasMember("Destroy") && scriptObj["ServerCallback"]["Destroy"].IsString())
+ callback.DestroyCallback = scriptObj["ServerCallback"]["Destroy"].GetString();
+
script.Callbacks.push_back(callback);
}
@@ -212,6 +215,9 @@ Mod::Mod(fs::path modDir, char* jsonBuf)
if (scriptObj["ClientCallback"].HasMember("After") && scriptObj["ClientCallback"]["After"].IsString())
callback.AfterCallback = scriptObj["ClientCallback"]["After"].GetString();
+ if (scriptObj["ClientCallback"].HasMember("Destroy") && scriptObj["ClientCallback"]["Destroy"].IsString())
+ callback.DestroyCallback = scriptObj["ClientCallback"]["Destroy"].GetString();
+
script.Callbacks.push_back(callback);
}
@@ -226,6 +232,9 @@ Mod::Mod(fs::path modDir, char* jsonBuf)
if (scriptObj["UICallback"].HasMember("After") && scriptObj["UICallback"]["After"].IsString())
callback.AfterCallback = scriptObj["UICallback"]["After"].GetString();
+ if (scriptObj["UICallback"].HasMember("Destroy") && scriptObj["UICallback"]["Destroy"].IsString())
+ callback.DestroyCallback = scriptObj["UICallback"]["Destroy"].GetString();
+
script.Callbacks.push_back(callback);
}
@@ -354,6 +363,7 @@ void ModManager::LoadMods()
// ensure dirs exist
fs::remove_all(GetCompiledAssetsPath());
fs::create_directories(GetModFolderPath());
+ fs::create_directories(GetRemoteModFolderPath());
m_DependencyConstants.clear();
@@ -374,9 +384,13 @@ void ModManager::LoadMods()
}
// get mod directories
- for (fs::directory_entry dir : fs::directory_iterator(GetModFolderPath()))
- if (fs::exists(dir.path() / "mod.json"))
- modDirs.push_back(dir.path());
+ std::filesystem::directory_iterator classicModsDir = fs::directory_iterator(GetModFolderPath());
+ std::filesystem::directory_iterator remoteModsDir = fs::directory_iterator(GetRemoteModFolderPath());
+
+ for (std::filesystem::directory_iterator modIterator : {classicModsDir, remoteModsDir})
+ for (fs::directory_entry dir : modIterator)
+ if (fs::exists(dir.path() / "mod.json"))
+ modDirs.push_back(dir.path());
for (fs::path modDir : modDirs)
{
@@ -750,7 +764,7 @@ void ModManager::UnloadMods()
std::ofstream writeStream(GetNorthstarPrefix() + "/enabledmods.json");
rapidjson::OStreamWrapper writeStreamWrapper(writeStream);
- rapidjson::Writer<rapidjson::OStreamWrapper> writer(writeStreamWrapper);
+ rapidjson::PrettyWriter<rapidjson::OStreamWrapper> writer(writeStreamWrapper);
m_EnabledModsCfg.Accept(writer);
// do we need to dealloc individual entries in m_loadedMods? idk, rework
@@ -805,6 +819,10 @@ fs::path GetModFolderPath()
{
return fs::path(GetNorthstarPrefix() + MOD_FOLDER_SUFFIX);
}
+fs::path GetRemoteModFolderPath()
+{
+ return fs::path(GetNorthstarPrefix() + REMOTE_MOD_FOLDER_SUFFIX);
+}
fs::path GetCompiledAssetsPath()
{
return fs::path(GetNorthstarPrefix() + COMPILED_ASSETS_SUFFIX);
diff --git a/NorthstarDLL/mods/modmanager.h b/NorthstarDLL/mods/modmanager.h
index ded6ff06..369eb07b 100644
--- a/NorthstarDLL/mods/modmanager.h
+++ b/NorthstarDLL/mods/modmanager.h
@@ -41,6 +41,8 @@ struct ModScriptCallback
std::string BeforeCallback;
// called after the codecallback has finished executing
std::string AfterCallback;
+ // called right before the vm is destroyed.
+ std::string DestroyCallback;
};
struct ModScript
@@ -161,6 +163,7 @@ class ModManager
};
fs::path GetModFolderPath();
+fs::path GetRemoteModFolderPath();
fs::path GetCompiledAssetsPath();
extern ModManager* g_pModManager;