diff --git a/r5dev/include/gameclasses.h b/r5dev/include/gameclasses.h index bc41c25f..05211aa2 100644 --- a/r5dev/include/gameclasses.h +++ b/r5dev/include/gameclasses.h @@ -505,6 +505,7 @@ namespace GameGlobals void Script_RegisterFunction(void* sqvm, const char* name, const char* helpString, const char* retValType, const char* argTypes, void* funcPtr); void RegisterUIScriptFunctions(void* sqvm); void RegisterClientScriptFunctions(void* sqvm); + void RegisterServerScriptFunctions(void* sqvm); // Init void InitGameGlobals(); diff --git a/r5dev/include/hooks.h b/r5dev/include/hooks.h index 735af5eb..14b2e67f 100644 --- a/r5dev/include/hooks.h +++ b/r5dev/include/hooks.h @@ -26,6 +26,7 @@ namespace Hooks __int64 SQVM_LoadRson(const char* rson_name); bool SQVM_LoadScript(void* sqvm, const char* script_path, const char* script_name, int flag); void SQVM_RegisterOriginFuncs(void* sqvm); + void SQVM_RegisterCreatePlayerTasklist(void* sqvm); using SQVM_WarningFn = __int64(*)(void*, int, int, int*, void**); extern SQVM_WarningFn originalSQVM_Warning; @@ -38,6 +39,9 @@ namespace Hooks using SQVM_RegisterOriginFuncsFn = void(*)(void*); extern SQVM_RegisterOriginFuncsFn originalSQVM_RegisterOriginFuncs; + + using SQVM_RegisterCreatePlayerTasklistFn = void(*)(void*); + extern SQVM_RegisterCreatePlayerTasklistFn originalSQVM_RegisterCreatePlayerTasklist; #pragma endregion #pragma region CServer diff --git a/r5dev/include/patterns.h b/r5dev/include/patterns.h index 9f7eb11f..040b044e 100644 --- a/r5dev/include/patterns.h +++ b/r5dev/include/patterns.h @@ -61,6 +61,9 @@ namespace /*0x140834A00*/ FUNC_AT_ADDRESS(addr_SQVM_RegisterOriginFuncs, void(*)(void*), r5_patterns.PatternSearch("E8 ? ? ? ? 48 8B 0D ? ? ? ? 48 8D 15 ? ? ? ? E8 ? ? ? ? 48 8B 05 ? ? ? ? C7 05 ? ? ? ? ? ? ? ?").FollowNearCall().GetPtr()); + + /*0x140C06B20*/ + FUNC_AT_ADDRESS(addr_SQVM_RegisterCreatePlayerTasklist, void(*)(void*), r5_patterns.PatternSearch("E8 ? ? ? ? 48 8B 0D ? ? ? ? E8 ? ? ? ? 48 8B CB").FollowNearCall().GetPtr()); #pragma endregion #pragma region NetChannel @@ -156,6 +159,7 @@ namespace PRINT_ADDRESS("SQVM_Warning", addr_SQVM_Warning); PRINT_ADDRESS("SQVM_Warning_ReturnAddr", addr_SQVM_Warning_ReturnAddr); PRINT_ADDRESS("SQVM_RegisterOriginFuncs", addr_SQVM_RegisterOriginFuncs); + PRINT_ADDRESS("SQVM_RegisterCreatePlayerTasklist", addr_SQVM_RegisterCreatePlayerTasklist); PRINT_ADDRESS("sq_arrayappend", addr_sq_arrayappend); PRINT_ADDRESS("sq_newarray", addr_sq_newarray); PRINT_ADDRESS("sq_newslot", addr_sq_newslot); diff --git a/r5dev/include/squirrel.h b/r5dev/include/squirrel.h index e49c4dc3..568fb824 100644 --- a/r5dev/include/squirrel.h +++ b/r5dev/include/squirrel.h @@ -4,7 +4,10 @@ char* sq_getstring(void* sqvm, int i); int sq_getinteger(void* sqvm, int i); void sq_pushbool(void* sqvm, int val); + void sq_pushstring(void* sqvm, char* string, int len); +void sq_pushstring(void* sqvm, const char* string, int len); + void sq_pushinteger(void* sqvm, int val); void sq_newarray(void* sqvm, int size); diff --git a/r5dev/src/gameclasses.cpp b/r5dev/src/gameclasses.cpp index 84adec90..44509499 100644 --- a/r5dev/src/gameclasses.cpp +++ b/r5dev/src/gameclasses.cpp @@ -3,6 +3,7 @@ #include "id3dx.h" #include "cgameconsole.h" #include "squirrel.h" +#include <r5net.h> // Need this for a re-factor later. // Interface* interfaces = *reinterpret_cast<Interface**>(0x167F4FA48); @@ -486,12 +487,17 @@ namespace GameGlobals void RegisterUIScriptFunctions(void* sqvm) { - // Script_RegisterFunction(sqvm, "UINativeTest", "native ui function", "void", "", &Script_NativeTest); + //Script_RegisterFunction(sqvm, "UINativeTest", "native ui function", "void", "", &Script_NativeTest); } void RegisterClientScriptFunctions(void* sqvm) { - // Script_RegisterFunction(sqvm, "ClientNativeTest", "native client function", "void", "", &Script_NativeTest); + //Script_RegisterFunction(sqvm, "ClientNativeTest", "native client function", "void", "", &Script_NativeTest); + } + + void RegisterServerScriptFunctions(void* sqvm) + { + //Script_RegisterFunction(sqvm, "ServerNativeTest", "native server function", "void", "", &Script_NativeTest); } void DisconnectClient(CClient* client, const char* reason, unsigned __int8 unk1, char unk2) diff --git a/r5dev/src/hooks/hooks.cpp b/r5dev/src/hooks/hooks.cpp index 78d27de1..cec5aa27 100644 --- a/r5dev/src/hooks/hooks.cpp +++ b/r5dev/src/hooks/hooks.cpp @@ -22,6 +22,7 @@ void Hooks::InstallHooks() MH_CreateHook(addr_SQVM_LoadRson, &Hooks::SQVM_LoadRson, reinterpret_cast<void**>(&originalSQVM_LoadRson)); MH_CreateHook(addr_SQVM_LoadScript, &Hooks::SQVM_LoadScript, reinterpret_cast<void**>(&originalSQVM_LoadScript)); MH_CreateHook(addr_SQVM_RegisterOriginFuncs, &Hooks::SQVM_RegisterOriginFuncs, reinterpret_cast<void**>(&originalSQVM_RegisterOriginFuncs)); + MH_CreateHook(addr_SQVM_RegisterCreatePlayerTasklist, &Hooks::SQVM_RegisterCreatePlayerTasklist, reinterpret_cast<void**>(&originalSQVM_RegisterCreatePlayerTasklist)); /////////////////////////////////////////////////////////////////////////////// // Hook Game Functions @@ -79,6 +80,7 @@ void Hooks::InstallHooks() MH_EnableHook(addr_SQVM_LoadRson); MH_EnableHook(addr_SQVM_LoadScript); MH_EnableHook(addr_SQVM_RegisterOriginFuncs); + MH_EnableHook(addr_SQVM_RegisterCreatePlayerTasklist); /////////////////////////////////////////////////////////////////////////////// // Enable Game hooks @@ -114,6 +116,7 @@ void Hooks::RemoveHooks() MH_RemoveHook(addr_SQVM_LoadRson); MH_RemoveHook(addr_SQVM_LoadScript); MH_RemoveHook(addr_SQVM_RegisterOriginFuncs); + MH_RemoveHook(addr_SQVM_RegisterCreatePlayerTasklist); /////////////////////////////////////////////////////////////////////////////// // Unhook Game Functions diff --git a/r5dev/src/hooks/sqvm.cpp b/r5dev/src/hooks/sqvm.cpp index 5e0d06aa..154acfb0 100644 --- a/r5dev/src/hooks/sqvm.cpp +++ b/r5dev/src/hooks/sqvm.cpp @@ -7,6 +7,7 @@ namespace Hooks SQVM_LoadRsonFn originalSQVM_LoadRson = nullptr; SQVM_LoadScriptFn originalSQVM_LoadScript = nullptr; SQVM_RegisterOriginFuncsFn originalSQVM_RegisterOriginFuncs = nullptr; + SQVM_RegisterCreatePlayerTasklistFn originalSQVM_RegisterCreatePlayerTasklist = nullptr; } static std::ostringstream oss_print; @@ -181,7 +182,8 @@ bool Hooks::SQVM_LoadScript(void* sqvm, const char* script_path, const char* scr return originalSQVM_LoadScript(sqvm, script_path, script_name, flag); } -void Hooks::SQVM_RegisterOriginFuncs(void* sqvm) { +void Hooks::SQVM_RegisterOriginFuncs(void* sqvm) +{ static MemoryAddress UIVM = MemoryAddress(0x14D4151F0); originalSQVM_RegisterOriginFuncs(sqvm); @@ -192,4 +194,11 @@ void Hooks::SQVM_RegisterOriginFuncs(void* sqvm) { else { GameGlobals::RegisterClientScriptFunctions(sqvm); } +} + +void Hooks::SQVM_RegisterCreatePlayerTasklist(void* sqvm) +{ + GameGlobals::RegisterServerScriptFunctions(sqvm); + + originalSQVM_RegisterCreatePlayerTasklist(sqvm); } \ No newline at end of file diff --git a/r5dev/src/squirrel.cpp b/r5dev/src/squirrel.cpp index f0d107e7..584af969 100644 --- a/r5dev/src/squirrel.cpp +++ b/r5dev/src/squirrel.cpp @@ -25,6 +25,11 @@ void sq_pushstring(void* sqvm, char* string, int len) addr_sq_pushstring(sqvm, string, len); } +void sq_pushstring(void* sqvm, const char* string, int len) +{ + addr_sq_pushstring(sqvm, const_cast<char*>(string), len); +} + void sq_pushinteger(void* sqvm, int val) { addr_sq_pushinteger(sqvm, val);