From 5d6f25bcc57146ca699ebb01853f23f382c74123 Mon Sep 17 00:00:00 2001 From: EladNLG Date: Thu, 25 Apr 2024 17:59:49 +0300 Subject: [PATCH 1/4] Add CreateScriptInstance --- primedev/squirrel/squirrel.cpp | 4 +++- primedev/squirrel/squirrel.h | 17 +++++++++++++++++ primedev/squirrel/squirrelclasstypes.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/primedev/squirrel/squirrel.cpp b/primedev/squirrel/squirrel.cpp index 41a6a782f..1ee0ed27e 100644 --- a/primedev/squirrel/squirrel.cpp +++ b/primedev/squirrel/squirrel.cpp @@ -22,7 +22,7 @@ std::shared_ptr getSquirrelLoggerByContext(ScriptContext context) case ScriptContext::UI: return NS::log::SCRIPT_UI; case ScriptContext::CLIENT: - return NS::log::SCRIPT_CL; + return NS::log::SCRIPT_CL;_CalcWeaponMods case ScriptContext::SERVER: return NS::log::SCRIPT_SV; default: @@ -712,6 +712,7 @@ ON_DLL_LOAD_RELIESON("client.dll", ClientSquirrel, ConCommand, (CModule module)) g_pSquirrel->__sq_GetEntityConstant_CBaseEntity = module.Offset(0x3E49B0).RCast(); g_pSquirrel->__sq_getentityfrominstance = module.Offset(0x114F0).RCast(); + g_pSquirrel->__sq_createscriptinstance = module.Offset(0xC20E0).RCast(); g_pSquirrel->__sq_GetEntityConstant_CBaseEntity = g_pSquirrel->__sq_GetEntityConstant_CBaseEntity; g_pSquirrel->__sq_getentityfrominstance = g_pSquirrel->__sq_getentityfrominstance; @@ -805,6 +806,7 @@ ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module)) g_pSquirrel->__sq_GetEntityConstant_CBaseEntity = module.Offset(0x418AF0).RCast(); g_pSquirrel->__sq_getentityfrominstance = module.Offset(0x1E920).RCast(); + g_pSquirrel->__sq_createscriptinstance = module.Offset(0x43F2F0).RCast(); g_pSquirrel->logger = NS::log::SCRIPT_SV; // Message buffer stuff diff --git a/primedev/squirrel/squirrel.h b/primedev/squirrel/squirrel.h index 0c1f24d36..cea6ca5d3 100644 --- a/primedev/squirrel/squirrel.h +++ b/primedev/squirrel/squirrel.h @@ -115,6 +115,7 @@ class SquirrelManagerBase sq_getfunctionType __sq_getfunction; sq_getentityfrominstanceType __sq_getentityfrominstance; + sq_createscriptinstanceType __sq_createscriptinstance; sq_GetEntityConstantType __sq_GetEntityConstant_CBaseEntity; sq_pushnewstructinstanceType __sq_pushnewstructinstance; @@ -399,6 +400,22 @@ template class SquirrelManager : public virtual Squirrel return _call(m_pSQVM->sqvm, (SQInteger)functionVector.size()); } + template SQRESULT Call(SQObject* obj, Args... args) + { + pushobject(m_pSQVM->sqvm, functionobj); // Push the function object + pushroottable(m_pSQVM->sqvm); // Push root table + + FunctionVector functionVector; + SqRecurseArgs(functionVector, args...); + + for (auto& v : functionVector) + { + v(); + } + + return _call(m_pSQVM->sqvm, (SQInteger)functionVector.size()); + } + #pragma endregion public: diff --git a/primedev/squirrel/squirrelclasstypes.h b/primedev/squirrel/squirrelclasstypes.h index 91c3c4683..3a39c957e 100644 --- a/primedev/squirrel/squirrelclasstypes.h +++ b/primedev/squirrel/squirrelclasstypes.h @@ -227,6 +227,7 @@ typedef SQRESULT (*sq_setuserdatatypeidType)(HSquirrelVM* sqvm, SQInteger iStack // sq misc entity funcs typedef void* (*sq_getentityfrominstanceType)(CSquirrelVM* sqvm, SQObject* pInstance, char** ppEntityConstant); +typedef SQObject* (*sq_createscriptinstanceType)(void* ent); typedef char** (*sq_GetEntityConstantType)(); typedef int (*sq_getfunctionType)(HSquirrelVM* sqvm, const char* name, SQObject* returnObj, const char* signature); From 7b86b5b093dd65bec639b7f8f0eaed5fbc8e1e9a Mon Sep 17 00:00:00 2001 From: EladNLG Date: Thu, 25 Apr 2024 18:04:44 +0300 Subject: [PATCH 2/4] Format Fix --- primedev/squirrel/squirrel.cpp | 2 +- primedev/squirrel/squirrel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/primedev/squirrel/squirrel.cpp b/primedev/squirrel/squirrel.cpp index 1ee0ed27e..dd5f0f959 100644 --- a/primedev/squirrel/squirrel.cpp +++ b/primedev/squirrel/squirrel.cpp @@ -22,7 +22,7 @@ std::shared_ptr getSquirrelLoggerByContext(ScriptContext context) case ScriptContext::UI: return NS::log::SCRIPT_UI; case ScriptContext::CLIENT: - return NS::log::SCRIPT_CL;_CalcWeaponMods + return NS::log::SCRIPT_CL; case ScriptContext::SERVER: return NS::log::SCRIPT_SV; default: diff --git a/primedev/squirrel/squirrel.h b/primedev/squirrel/squirrel.h index cea6ca5d3..1c4b245ff 100644 --- a/primedev/squirrel/squirrel.h +++ b/primedev/squirrel/squirrel.h @@ -404,7 +404,7 @@ template class SquirrelManager : public virtual Squirrel { pushobject(m_pSQVM->sqvm, functionobj); // Push the function object pushroottable(m_pSQVM->sqvm); // Push root table - + FunctionVector functionVector; SqRecurseArgs(functionVector, args...); From ca221ab411459f9bc5b2fd61d7c6b067daa8f240 Mon Sep 17 00:00:00 2001 From: EladNLG Date: Thu, 25 Apr 2024 18:07:12 +0300 Subject: [PATCH 3/4] Remove unrelated, not-working code --- primedev/squirrel/squirrel.h | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/primedev/squirrel/squirrel.h b/primedev/squirrel/squirrel.h index 1c4b245ff..f2d4fd2c9 100644 --- a/primedev/squirrel/squirrel.h +++ b/primedev/squirrel/squirrel.h @@ -400,22 +400,6 @@ template class SquirrelManager : public virtual Squirrel return _call(m_pSQVM->sqvm, (SQInteger)functionVector.size()); } - template SQRESULT Call(SQObject* obj, Args... args) - { - pushobject(m_pSQVM->sqvm, functionobj); // Push the function object - pushroottable(m_pSQVM->sqvm); // Push root table - - FunctionVector functionVector; - SqRecurseArgs(functionVector, args...); - - for (auto& v : functionVector) - { - v(); - } - - return _call(m_pSQVM->sqvm, (SQInteger)functionVector.size()); - } - #pragma endregion public: From 9c40a940586cfb82408316b4bd785d8e09d9ccb4 Mon Sep 17 00:00:00 2001 From: EladNLG Date: Thu, 25 Apr 2024 18:20:16 +0300 Subject: [PATCH 4/4] Fix SQMessageBufferPushArg --- primedev/squirrel/squirrel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primedev/squirrel/squirrel.h b/primedev/squirrel/squirrel.h index f2d4fd2c9..a2593947a 100644 --- a/primedev/squirrel/squirrel.h +++ b/primedev/squirrel/squirrel.h @@ -448,7 +448,7 @@ inline VoidFunction SQMessageBufferPushArg(Vector3& arg) { // Vectors template inline VoidFunction SQMessageBufferPushArg(SQObject* arg) { - return [arg]{ g_pSquirrel->pushSQObject(g_pSquirrel->m_pSQVM->sqvm, arg); }; + return [arg]{ g_pSquirrel->pushobject(g_pSquirrel->m_pSQVM->sqvm, arg); }; } // Ints template