mirror of
https://github.com/R2Northstar/NorthstarLauncher
synced 2026-08-23 20:26:04 -04:00
Fix broken squirrel function hooks (#869)
* Add checks for func overrides * Fix incorrect sq function hook strings
This commit is contained in:
parent
4184cd34eb
commit
7739bef15d
2 changed files with 20 additions and 4 deletions
|
|
@ -262,8 +262,9 @@ REPLACE_SQFUNC(GetDataTableColumnByName, (ScriptContext::UI | ScriptContext::CLI
|
|||
return SQRESULT_NOTNULL;
|
||||
}
|
||||
|
||||
// int function GetDataTableRowCount( var datatable )
|
||||
REPLACE_SQFUNC(GetDataTableRowCount, (ScriptContext::UI | ScriptContext::CLIENT | ScriptContext::SERVER))
|
||||
// this function has casing that is inconsistent with the others...
|
||||
// int function GetDatatableRowCount( var datatable )
|
||||
REPLACE_SQFUNC(GetDatatableRowCount, (ScriptContext::UI | ScriptContext::CLIENT | ScriptContext::SERVER))
|
||||
{
|
||||
CSVData** pData;
|
||||
uint64_t typeId;
|
||||
|
|
@ -466,7 +467,7 @@ REPLACE_SQFUNC(GetDataTableRowMatchingStringValue, (ScriptContext::UI | ScriptCo
|
|||
}
|
||||
|
||||
// int function GetDataTableRowMatchingAssetValue( var datatable, int col, asset value )
|
||||
REPLACE_SQFUNC(GetDataTableMatchingAssetValue, (ScriptContext::UI | ScriptContext::CLIENT | ScriptContext::SERVER))
|
||||
REPLACE_SQFUNC(GetDataTableRowMatchingAssetValue, (ScriptContext::UI | ScriptContext::CLIENT | ScriptContext::SERVER))
|
||||
{
|
||||
CSVData** pData;
|
||||
uint64_t typeId;
|
||||
|
|
|
|||
|
|
@ -474,6 +474,15 @@ int64_t __fastcall RegisterSquirrelFunctionHook(CSquirrelVM* sqvm, SQFuncRegistr
|
|||
return g_pSquirrel<context>->RegisterSquirrelFunc(sqvm, funcReg, unknown);
|
||||
}
|
||||
|
||||
template <ScriptContext context> void CheckFuncOverrides()
|
||||
{
|
||||
for (auto& [name, func] : g_pSquirrel<context>->m_funcOverrides)
|
||||
{
|
||||
if (!g_pSquirrel<context>->m_funcOriginals.count(name))
|
||||
g_pSquirrel<context>->logger->error("Failed to replace SQ function '{}' as it doesn't exist.", name);
|
||||
}
|
||||
}
|
||||
|
||||
template <ScriptContext context> bool (*CallScriptInitCallback)(void* sqvm, const char* callback);
|
||||
template <ScriptContext context> bool __fastcall CallScriptInitCallbackHook(void* sqvm, const char* callback)
|
||||
{
|
||||
|
|
@ -490,6 +499,12 @@ template <ScriptContext context> bool __fastcall CallScriptInitCallbackHook(void
|
|||
else if (context == ScriptContext::SERVER)
|
||||
bShouldCallCustomCallbacks = !strcmp(callback, "CodeCallback_MapSpawn");
|
||||
|
||||
// check that all func overrides for this VM have been registered properly
|
||||
if (realContext == ScriptContext::UI)
|
||||
CheckFuncOverrides<ScriptContext::UI>();
|
||||
else
|
||||
CheckFuncOverrides<context>();
|
||||
|
||||
if (bShouldCallCustomCallbacks)
|
||||
{
|
||||
for (Mod mod : g_pModManager->m_LoadedMods)
|
||||
|
|
@ -562,7 +577,7 @@ template <ScriptContext context> void StubUnsafeSQFuncs()
|
|||
g_pSquirrel<context>->AddFuncOverride("DevTextBufferWrite", SQ_StubbedFunc<context>);
|
||||
g_pSquirrel<context>->AddFuncOverride("DevTextBufferClear", SQ_StubbedFunc<context>);
|
||||
g_pSquirrel<context>->AddFuncOverride("DevTextBufferDumpToFile", SQ_StubbedFunc<context>);
|
||||
g_pSquirrel<context>->AddFuncOverride("Dev_CommandLineAddParam", SQ_StubbedFunc<context>);
|
||||
g_pSquirrel<context>->AddFuncOverride("Dev_CommandLineAddParm", SQ_StubbedFunc<context>);
|
||||
g_pSquirrel<context>->AddFuncOverride("DevP4Checkout", SQ_StubbedFunc<context>);
|
||||
g_pSquirrel<context>->AddFuncOverride("DevP4Add", SQ_StubbedFunc<context>);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue