aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/squirrel/squirrel.h
diff options
context:
space:
mode:
Diffstat (limited to 'NorthstarDLL/squirrel/squirrel.h')
-rw-r--r--NorthstarDLL/squirrel/squirrel.h28
1 files changed, 25 insertions, 3 deletions
diff --git a/NorthstarDLL/squirrel/squirrel.h b/NorthstarDLL/squirrel/squirrel.h
index 51fa93b3..82825b3c 100644
--- a/NorthstarDLL/squirrel/squirrel.h
+++ b/NorthstarDLL/squirrel/squirrel.h
@@ -1,9 +1,9 @@
#pragma once
-#include "logging/logging.h"
#include "squirrelclasstypes.h"
#include "squirrelautobind.h"
#include "core/math/vector.h"
+#include "mods/modmanager.h"
// stolen from ttf2sdk: sqvm types
typedef float SQFloat;
@@ -39,8 +39,6 @@ const char* SQTypeNameFromID(const int iTypeId);
ScriptContext ScriptContextFromString(std::string string);
-std::shared_ptr<ColoredLogger> getSquirrelLoggerByContext(ScriptContext context);
-
namespace NS::log
{
template <ScriptContext context> std::shared_ptr<spdlog::logger> squirrel_logger();
@@ -98,6 +96,8 @@ class SquirrelManagerBase
sq_getthisentityType __sq_getthisentity;
sq_getobjectType __sq_getobject;
+ sq_stackinfosType __sq_stackinfos;
+
sq_createuserdataType __sq_createuserdata;
sq_setuserdatatypeidType __sq_setuserdatatypeid;
sq_getfunctionType __sq_getfunction;
@@ -230,6 +230,28 @@ class SquirrelManagerBase
return __sq_getasset(sqvm, stackpos, result);
}
+ inline long long sq_stackinfos(HSquirrelVM* sqvm, int level, SQStackInfos& out)
+ {
+ return __sq_stackinfos(sqvm, level, &out, sqvm->_callstacksize);
+ }
+
+ inline Mod* getcallingmod(HSquirrelVM* sqvm, int depth = 0)
+ {
+ SQStackInfos stackInfo {};
+ if (1 + depth >= sqvm->_callstacksize)
+ {
+ return nullptr;
+ }
+ sq_stackinfos(sqvm, 1 + depth, stackInfo);
+ std::string sourceName = stackInfo._sourceName;
+ std::replace(sourceName.begin(), sourceName.end(), '/', '\\');
+ std::string filename = "scripts\\vscripts\\" + sourceName;
+ if (auto res = g_pModManager->m_ModFiles.find(filename); res != g_pModManager->m_ModFiles.end())
+ {
+ return res->second.m_pOwningMod;
+ }
+ return nullptr;
+ }
template <typename T> inline SQRESULT getuserdata(HSquirrelVM* sqvm, const SQInteger stackpos, T* data, uint64_t* typeId)
{
return __sq_getuserdata(sqvm, stackpos, (void**)data, typeId); // this sometimes crashes idk