aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDedicatedTest/scriptmodmenu.cpp
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-07-29 02:57:31 +0100
committerBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-07-29 02:57:31 +0100
commit30e67549449a0ffbb58f7fc736bdd9e4ce7ec9d5 (patch)
treef6a53098ce2489829f8428ea1714d666cc6901ef /NorthstarDedicatedTest/scriptmodmenu.cpp
parenta5a937d19fcb51fe4168345d09596784e174726e (diff)
downloadNorthstarLauncher-30e67549449a0ffbb58f7fc736bdd9e4ce7ec9d5.tar.gz
NorthstarLauncher-30e67549449a0ffbb58f7fc736bdd9e4ce7ec9d5.zip
add script api for mods and add temp fix for scripts.rson not loading right
Diffstat (limited to 'NorthstarDedicatedTest/scriptmodmenu.cpp')
-rw-r--r--NorthstarDedicatedTest/scriptmodmenu.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/NorthstarDedicatedTest/scriptmodmenu.cpp b/NorthstarDedicatedTest/scriptmodmenu.cpp
new file mode 100644
index 00000000..f65b3a8c
--- /dev/null
+++ b/NorthstarDedicatedTest/scriptmodmenu.cpp
@@ -0,0 +1,124 @@
+#include "pch.h"
+#include "scriptmodmenu.h"
+#include "modmanager.h"
+#include "squirrel.h"
+
+// array<string> NSGetModNames()
+SQInteger SQ_GetModNames(void* sqvm)
+{
+ ClientSq_newarray(sqvm, 0);
+
+ for (Mod* mod : g_ModManager->m_loadedMods)
+ {
+ ClientSq_pushstring(sqvm, mod->Name.c_str(), -1);
+ ClientSq_arrayappend(sqvm, -2);
+ }
+
+ return 1;
+}
+
+// string NSGetModDescriptionByModName(string modName)
+SQInteger SQ_GetModDescription(void* sqvm)
+{
+ const SQChar* modName = ClientSq_getstring(sqvm, 1);
+
+ // manual lookup, not super performant but eh not a big deal
+ for (Mod* mod : g_ModManager->m_loadedMods)
+ {
+ if (!mod->Name.compare(modName))
+ {
+ ClientSq_pushstring(sqvm, mod->Description.c_str(), -1);
+ return 1;
+ }
+ }
+
+ return 0; // return null
+}
+
+// string NSGetModVersionByModName(string modName)
+SQInteger SQ_GetModVersion(void* sqvm)
+{
+ const SQChar* modName = ClientSq_getstring(sqvm, 1);
+
+ // manual lookup, not super performant but eh not a big deal
+ for (Mod* mod : g_ModManager->m_loadedMods)
+ {
+ if (!mod->Name.compare(modName))
+ {
+ ClientSq_pushstring(sqvm, mod->Version.c_str(), -1);
+ return 1;
+ }
+ }
+
+ return 0; // return null
+}
+
+// string NSGetModDownloadLinkByModName(string modName)
+SQInteger SQ_GetModDownloadLink(void* sqvm)
+{
+ const SQChar* modName = ClientSq_getstring(sqvm, 1);
+
+ // manual lookup, not super performant but eh not a big deal
+ for (Mod* mod : g_ModManager->m_loadedMods)
+ {
+ if (!mod->Name.compare(modName))
+ {
+ ClientSq_pushstring(sqvm, mod->DownloadLink.c_str(), -1);
+ return 1;
+ }
+ }
+
+ return 0; // return null
+}
+
+// int NSGetModLoadPriority(string modName)
+SQInteger SQ_GetModLoadPriority(void* sqvm)
+{
+ const SQChar* modName = ClientSq_getstring(sqvm, 1);
+
+ // manual lookup, not super performant but eh not a big deal
+ for (Mod* mod : g_ModManager->m_loadedMods)
+ {
+ if (!mod->Name.compare(modName))
+ {
+ ClientSq_pushinteger(sqvm, mod->LoadPriority);
+ return 1;
+ }
+ }
+
+ return 0; // return null
+}
+
+// array<string> NSGetModConvarsByModName(string modName)
+SQInteger SQ_GetModConvars(void* sqvm)
+{
+ const SQChar* modName = ClientSq_getstring(sqvm, 1);
+ ClientSq_newarray(sqvm, 0);
+
+ // manual lookup, not super performant but eh not a big deal
+ for (Mod* mod : g_ModManager->m_loadedMods)
+ {
+ if (!mod->Name.compare(modName))
+ {
+ for (ModConVar* cvar : mod->ConVars)
+ {
+ ClientSq_pushstring(sqvm, cvar->Name.c_str(), -1);
+ ClientSq_arrayappend(sqvm, -2);
+ }
+
+ return 1;
+ }
+ }
+
+ return 1; // return empty array
+}
+
+void InitialiseScriptModMenu(HMODULE baseAddress)
+{
+ g_UISquirrelManager->AddFuncRegistration("array<string>", "NSGetModNames", "", "Returns the names of all loaded mods", SQ_GetModNames);
+ g_UISquirrelManager->AddFuncRegistration("string", "NSGetModDescriptionByModName", "asset modName", "Returns a given mod's description", SQ_GetModDescription);
+ g_UISquirrelManager->AddFuncRegistration("string", "NSGetModVersionByModName", "string modName", "Returns a given mod's version", SQ_GetModVersion);
+ g_UISquirrelManager->AddFuncRegistration("string", "NSGetModDownloadLinkByModName", "string modName", "Returns a given mod's download link", SQ_GetModVersion);
+ g_UISquirrelManager->AddFuncRegistration("int", "NSGetModLoadPriority", "string modName", "Returns a given mod's load priority", SQ_GetModLoadPriority);
+ g_UISquirrelManager->AddFuncRegistration("array<string>", "NSGetModConvarsByModName", "string modName", "Returns the names of all a given mod's cvars", SQ_GetModConvars);
+} \ No newline at end of file