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);