diff --git a/r5dev/squirrel/sqapi.cpp b/r5dev/squirrel/sqapi.cpp index 0f9671ed..de1108a0 100644 --- a/r5dev/squirrel/sqapi.cpp +++ b/r5dev/squirrel/sqapi.cpp @@ -1,93 +1,94 @@ //=============================================================================// // -// Purpose: Squirrel API +// Purpose: Squirrel API interface to engine // //=============================================================================// #include "core/stdafx.h" #include "squirrel/sqapi.h" +#include "squirrel/sqtype.h" -char* hsq_getstring(void* sqvm, int i) +char* sq_getstring(HSQUIRRELVM* v, int i) { - std::uintptr_t thisptr = reinterpret_cast(sqvm); + std::uintptr_t thisptr = reinterpret_cast(v); return *(char**)(*(std::int64_t*)(thisptr + 0x58) + 0x10 * i + 0x8) + 0x40; } -int hsq_getinteger(void* sqvm, int i) +int sq_getinteger(HSQUIRRELVM* v, int i) { - std::uintptr_t thisptr = reinterpret_cast(sqvm); + std::uintptr_t thisptr = reinterpret_cast(v); return *(int*)(*(std::int64_t*)(thisptr + 0x58) + 0x10 * i + 0x8); } -void hsq_pushbool(void* sqvm, int val) +void sq_pushbool(HSQUIRRELVM* v, int val) { - sq_pushbool(sqvm, val); + v_sq_pushbool(v, val); } -void hsq_pushstring(void* sqvm, const char* string, int len) +void sq_pushstring(HSQUIRRELVM* v, const char* string, int len) { - sq_pushstring(sqvm, const_cast(string), len); + v_sq_pushstring(v, const_cast(string), len); } -void hsq_pushinteger(void* sqvm, int val) +void sq_pushinteger(HSQUIRRELVM* v, int val) { - sq_pushinteger(sqvm, val); + v_sq_pushinteger(v, val); } -void hsq_pushconstant(void* sqvm, const char* name, int val) +void sq_pushconstant(HSQUIRRELVM* v, const char* name, int val) { - sq_pushconstant(sqvm, name, val); + v_sq_pushconstant(v, name, val); } -void hsq_newarray(void* sqvm, int size) +void sq_newarray(HSQUIRRELVM* v, int size) { - sq_newarray(sqvm, size); + v_sq_newarray(v, size); } -void hsq_arrayappend(void* sqvm, int idx) +void sq_arrayappend(HSQUIRRELVM* v, int idx) { - sq_arrayappend(sqvm, idx); + v_sq_arrayappend(v, idx); } -void hsq_newtable(void* sqvm) +void sq_newtable(HSQUIRRELVM* v) { - sq_newtable(sqvm); + v_sq_newtable(v); } -void hsq_newslot(void* sqvm, int idx) +void sq_newslot(HSQUIRRELVM* v, int idx) { - sq_newslot(sqvm, idx); + v_sq_newslot(v, idx); } -void hsq_pushstructure(void* sqvm, const char* name, const char* member, const char* codeclass1, const char* codeclass2) +void sq_pushstructure(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2) { - sq_pushstructure(sqvm, name, member, codeclass1, codeclass2); + v_sq_pushstructure(v, name, member, codeclass1, codeclass2); } void SQAPI_Attach() { - DetourAttach((LPVOID*)&sq_pushbool, &hsq_pushbool); - DetourAttach((LPVOID*)&sq_pushstring, &hsq_pushstring); - DetourAttach((LPVOID*)&sq_pushinteger, &hsq_pushinteger); - DetourAttach((LPVOID*)&sq_pushconstant, &hsq_pushconstant); - DetourAttach((LPVOID*)&sq_newarray, &hsq_newarray); - DetourAttach((LPVOID*)&sq_arrayappend, &hsq_arrayappend); - DetourAttach((LPVOID*)&sq_newtable, &hsq_newtable); - DetourAttach((LPVOID*)&sq_newslot, &hsq_newslot); - DetourAttach((LPVOID*)&sq_pushstructure, &hsq_pushstructure); + DetourAttach((LPVOID*)&v_sq_pushbool, &sq_pushbool); + DetourAttach((LPVOID*)&v_sq_pushstring, &sq_pushstring); + DetourAttach((LPVOID*)&v_sq_pushinteger, &sq_pushinteger); + DetourAttach((LPVOID*)&v_sq_pushconstant, &sq_pushconstant); + DetourAttach((LPVOID*)&v_sq_newarray, &sq_newarray); + DetourAttach((LPVOID*)&v_sq_arrayappend, &sq_arrayappend); + DetourAttach((LPVOID*)&v_sq_newtable, &sq_newtable); + DetourAttach((LPVOID*)&v_sq_newslot, &sq_newslot); + DetourAttach((LPVOID*)&v_sq_pushstructure, &sq_pushstructure); } void SQAPI_Detach() { - DetourDetach((LPVOID*)&sq_pushbool, &hsq_pushbool); - DetourDetach((LPVOID*)&sq_pushstring, &hsq_pushstring); - DetourDetach((LPVOID*)&sq_pushinteger, &hsq_pushinteger); - DetourDetach((LPVOID*)&sq_pushconstant, &hsq_pushconstant); - DetourDetach((LPVOID*)&sq_newarray, &hsq_newarray); - DetourDetach((LPVOID*)&sq_arrayappend, &hsq_arrayappend); - DetourDetach((LPVOID*)&sq_newtable, &hsq_newtable); - DetourDetach((LPVOID*)&sq_newslot, &hsq_newslot); - DetourDetach((LPVOID*)&sq_pushstructure, &hsq_pushstructure); + DetourDetach((LPVOID*)&v_sq_pushbool, &sq_pushbool); + DetourDetach((LPVOID*)&v_sq_pushstring, &sq_pushstring); + DetourDetach((LPVOID*)&v_sq_pushinteger, &sq_pushinteger); + DetourDetach((LPVOID*)&v_sq_pushconstant, &sq_pushconstant); + DetourDetach((LPVOID*)&v_sq_newarray, &sq_newarray); + DetourDetach((LPVOID*)&v_sq_arrayappend, &sq_arrayappend); + DetourDetach((LPVOID*)&v_sq_newtable, &sq_newtable); + DetourDetach((LPVOID*)&v_sq_newslot, &sq_newslot); + DetourDetach((LPVOID*)&v_sq_pushstructure, &sq_pushstructure); } \ No newline at end of file diff --git a/r5dev/squirrel/sqapi.h b/r5dev/squirrel/sqapi.h index fbf8773c..2a5c87e8 100644 --- a/r5dev/squirrel/sqapi.h +++ b/r5dev/squirrel/sqapi.h @@ -1,55 +1,56 @@ #pragma once +#include "squirrel/sqtype.h" namespace { /* ==== SQUIRREL ======================================================================================================================================================== */ ADDRESS p_sq_pushbool = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x83\xEC\x38\x33\xC0\x48\xC7\x44\x24\x20\x08\x00\x00\x01\x48", "xxxxxxxxxxxxxxxx"); - void (*sq_pushbool)(void* sqvm, int val) = (void (*)(void*, int))p_sq_pushbool.GetPtr(); /*48 83 EC 38 33 C0 48 C7 44 24 20 08 00 00 01 48*/ + void (*v_sq_pushbool)(HSQUIRRELVM* v, int val) = (void (*)(HSQUIRRELVM*, int))p_sq_pushbool.GetPtr(); /*48 83 EC 38 33 C0 48 C7 44 24 20 08 00 00 01 48*/ #if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2) ADDRESS p_sq_pushstring = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x56\x48\x83\xEC\x30\x48\x8B\xF1\x48\x85\xD2\x0F\x84\x8C\x00", "xxxxxxxxxxxxxxxx"); - void (*sq_pushstring)(void* sqvm, const char* string, int len) = (void (*)(void*, const char*, int))p_sq_pushstring.GetPtr(); /*40 56 48 83 EC 30 48 8B F1 48 85 D2 0F 84 8C 00*/ + void (*v_sq_pushstring)(HSQUIRRELVM* v, const char* string, int len) = (void (*)(HSQUIRRELVM*, const char*, int))p_sq_pushstring.GetPtr(); /*40 56 48 83 EC 30 48 8B F1 48 85 D2 0F 84 8C 00*/ #elif defined (GAMEDLL_S3) ADDRESS p_sq_pushstring = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x56\x48\x83\xEC\x30\x48\x8B\xF1\x48\x85\xD2\x0F\x84\x8F\x00", "xxxxxxxxxxxxxxxx"); - void (*sq_pushstring)(void* sqvm, const char* string, int len) = (void (*)(void*, const char*, int))p_sq_pushstring.GetPtr(); /*40 56 48 83 EC 30 48 8B F1 48 85 D2 0F 84 8F 00*/ + void (*v_sq_pushstring)(HSQUIRRELVM* v, const char* string, int len) = (void (*)(HSQUIRRELVM*, const char*, int))p_sq_pushstring.GetPtr(); /*40 56 48 83 EC 30 48 8B F1 48 85 D2 0F 84 8F 00*/ #endif ADDRESS p_sq_pushinteger = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x83\xEC\x38\x33\xC0\x48\xC7\x44\x24\x20\x02\x00\x00\x05\x48", "xxxxxxxxxxxxxxxx"); - void (*sq_pushinteger)(void* sqvm, int val) = (void (*)(void*, int))p_sq_pushinteger.GetPtr(); /*48 83 EC 38 33 C0 48 C7 44 24 20 02 00 00 05 48*/ + void (*v_sq_pushinteger)(HSQUIRRELVM* v, int val) = (void (*)(HSQUIRRELVM*, int))p_sq_pushinteger.GetPtr(); /*48 83 EC 38 33 C0 48 C7 44 24 20 02 00 00 05 48*/ ADDRESS p_sq_pushconstant = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x00\x48\x89\x6C\x24\x00\x48\x89\x74\x24\x00\x57\x48\x83\xEC\x30\x4C\x8B", "xxxx?xxxx?xxxx?xxxxxxx"); - void (*sq_pushconstant)(void* sqvm, const char* name, int val) = (void (*)(void*, const char*, int))p_sq_pushconstant.GetPtr(); /*48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 4C 8B*/ + void (*v_sq_pushconstant)(HSQUIRRELVM* v, const char* name, int val) = (void (*)(HSQUIRRELVM*, const char*, int))p_sq_pushconstant.GetPtr(); /*48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 4C 8B*/ ADDRESS p_sq_newarray = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x30\x48\x8B\xD9\x48\xC7\x44\x24\x20\x40", "xxxxxxxxxxxxxxxxxxx"); - void (*sq_newarray)(void* sqvm, int size) = (void (*)(void*, int))p_sq_newarray.GetPtr(); /*48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 C7 44 24 20 40*/ + void (*v_sq_newarray)(HSQUIRRELVM* v, int size) = (void (*)(HSQUIRRELVM*, int))p_sq_newarray.GetPtr(); /*48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 C7 44 24 20 40*/ ADDRESS p_sq_arrayappend = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x53\x48\x83\xEC\x20\x8B\x41\x00\x48\x8B\xD9\x2B\x41\x00\x83\xF8\x02\x7D", "xxxxxxxx?xxxxx?xxxx"); - void (*sq_arrayappend)(void* sqvm, int idx) = (void (*)(void*, int))p_sq_arrayappend.GetPtr(); /*40 53 48 83 EC 20 8B 41 ?? 48 8B D9 2B 41 ?? 83 F8 02 7D*/ + void (*v_sq_arrayappend)(HSQUIRRELVM* v, int idx) = (void (*)(HSQUIRRELVM*, int))p_sq_arrayappend.GetPtr(); /*40 53 48 83 EC 20 8B 41 ?? 48 8B D9 2B 41 ?? 83 F8 02 7D*/ ADDRESS p_sq_newtable = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x30\x48\x8B\xD9\x48\xC7\x44\x24\x20\x20", "xxxxxxxxxxxxxxxxxxx"); - void (*sq_newtable)(void* sqvm) = (void (*)(void*))p_sq_newtable.GetPtr(); /*48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 C7 44 24 20 20*/ + void (*v_sq_newtable)(HSQUIRRELVM* v) = (void (*)(HSQUIRRELVM*))p_sq_newtable.GetPtr(); /*48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 C7 44 24 20 20*/ ADDRESS p_sq_newslot = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x53\x48\x83\xEC\x30\x44\x8B\x49\x00\x48\x8B\xD9\x41\x8B\xC1", "xxxxxxxxx?xxxxxx"); - void (*sq_newslot)(void* sqvm, int idx) = (void (*)(void*, int))p_sq_newslot.GetPtr(); /*40 53 48 83 EC 20 8B 41 ?? 48 8B D9 2B 41 ?? 83 F8 02 7D*/ + void (*v_sq_newslot)(HSQUIRRELVM* v, int idx) = (void (*)(HSQUIRRELVM*, int))p_sq_newslot.GetPtr(); /*40 53 48 83 EC 20 8B 41 ?? 48 8B D9 2B 41 ?? 83 F8 02 7D*/ #if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2) ADDRESS p_sq_pushstructure = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x00\x48\x89\x74\x24\x00\x48\x89\x7C\x24\x00\x4C\x89\x4C\x24\x00\x55\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8B\xEC", "xxxx?xxxx?xxxx?xxxx?xxxxxxxxxxxx"); - void (*sq_pushstructure)(void* sqvm, const char* name, const char* member, const char* codeclass1, const char* codeclass2) = (void (*)(void*, const char*, const char*, const char*, const char*))p_sq_pushstructure.GetPtr(); /*48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 4C 89 4C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC*/ + void (*v_sq_pushstructure)(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2) = (void (*)(HSQUIRRELVM*, const char*, const char*, const char*, const char*))p_sq_pushstructure.GetPtr(); /*48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 4C 89 4C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC*/ #elif defined (GAMEDLL_S3) ADDRESS p_sq_pushstructure = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x5C\x24\x00\x48\x89\x74\x24\x00\x48\x89\x7C\x24\x00\x55\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8B\xEC\x48\x83\xEC\x60\x48\x8B\x59\x60", "xxxx?xxxx?xxxx?xxxxxxxxxxxxxxxxxxxx"); - void (*sq_pushstructure)(void* sqvm, const char* name, const char* member, const char* codeclass1, const char* codeclass2) = (void (*)(void*, const char*, const char*, const char*, const char*))p_sq_pushstructure.GetPtr(); /*48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC 60 48 8B 59 60*/ + void (*v_sq_pushstructure)(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2) = (void (*)(HSQUIRRELVM*, const char*, const char*, const char*, const char*))p_sq_pushstructure.GetPtr(); /*48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC 60 48 8B 59 60*/ #endif } /////////////////////////////////////////////////////////////////////////////// -char* hsq_getstring(void* sqvm, int i); -int hsq_getinteger(void* sqvm, int i); -void hsq_pushbool(void* sqvm, int val); -void hsq_pushstring(void* sqvm, const char* string, int len); -void hsq_pushinteger(void* sqvm, int val); -void hsq_pushconstant(void* sqvm, const char* name, int val); -void hsq_newarray(void* sqvm, int size); -void hsq_arrayappend(void* sqvm, int idx); -void hsq_newtable(void* sqvm); -void hsq_newslot(void* sqvm, int idx); -void hsq_pushstructure(void* sqvm, const char* name, const char* member, const char* codeclass1, const char* codeclass2); +char* sq_getstring(HSQUIRRELVM* v, int i); +int sq_getinteger(HSQUIRRELVM* v, int i); +void sq_pushbool(HSQUIRRELVM* v, int val); +void sq_pushstring(HSQUIRRELVM* v, const char* string, int len); +void sq_pushinteger(HSQUIRRELVM* v, int val); +void sq_pushconstant(HSQUIRRELVM* v, const char* name, int val); +void sq_newarray(HSQUIRRELVM* v, int size); +void sq_arrayappend(HSQUIRRELVM* v, int idx); +void sq_newtable(HSQUIRRELVM* v); +void sq_newslot(HSQUIRRELVM* v, int idx); +void sq_pushstructure(HSQUIRRELVM* v, const char* name, const char* member, const char* codeclass1, const char* codeclass2); void SQAPI_Attach(); void SQAPI_Detach(); diff --git a/r5dev/squirrel/sqinit.cpp b/r5dev/squirrel/sqinit.cpp index be060655..def1b42b 100644 --- a/r5dev/squirrel/sqinit.cpp +++ b/r5dev/squirrel/sqinit.cpp @@ -13,8 +13,10 @@ #include "core/stdafx.h" #include "engine/sys_utils.h" +#include "squirrel/sqtype.h" #include "squirrel/sqapi.h" #include "squirrel/sqinit.h" +#include "networksystem/r5net.h" #ifndef DEDICATED #include "gameui/IBrowser.h" // TODO: create dedicated class for exposing server utils to ImGui and UI VM. @@ -27,7 +29,7 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: SDK test and example body //----------------------------------------------------------------------------- - SQRESULT SDKNativeTest(void* sqvm) + SQRESULT SDKNativeTest(HSQUIRRELVM* v) { // Function code goes here. return SQ_OK; @@ -36,9 +38,9 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: expose SDK version to the VScript API //----------------------------------------------------------------------------- - SQRESULT GetSDKVersion(void* sqvm) + SQRESULT GetSDKVersion(HSQUIRRELVM* v) { - hsq_pushstring(sqvm, g_pR5net->GetSDKVersion().c_str(), -1); + sq_pushstring(v, g_pR5net->GetSDKVersion().c_str(), -1); return SQ_OK; } } @@ -56,12 +58,12 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: get server's current name from serverlist index //----------------------------------------------------------------------------- - SQRESULT GetServerName(void* sqvm) + SQRESULT GetServerName(HSQUIRRELVM* v) { - int iServerIndex = hsq_getinteger(sqvm, 1); + int iServerIndex = sq_getinteger(v, 1); std::string svServerName = g_pIBrowser->m_vServerList[iServerIndex].svServerName; - hsq_pushstring(sqvm, svServerName.c_str(), -1); + sq_pushstring(v, svServerName.c_str(), -1); return SQ_OK; } @@ -69,12 +71,12 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: get server's current playlist via serverlist index //----------------------------------------------------------------------------- - SQRESULT GetServerPlaylist(void* sqvm) + SQRESULT GetServerPlaylist(HSQUIRRELVM* v) { - int iServerIndex = hsq_getinteger(sqvm, 1); + int iServerIndex = sq_getinteger(v, 1); std::string svServerPlaylist = g_pIBrowser->m_vServerList[iServerIndex].svPlaylist; - hsq_pushstring(sqvm, svServerPlaylist.c_str(), -1); + sq_pushstring(v, svServerPlaylist.c_str(), -1); return SQ_OK; } @@ -82,12 +84,12 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: get server's current map via serverlist index //----------------------------------------------------------------------------- - SQRESULT GetServerMap(void* sqvm) + SQRESULT GetServerMap(HSQUIRRELVM* v) { - int iServerIndex = hsq_getinteger(sqvm, 1); + int iServerIndex = sq_getinteger(v, 1); std::string svServerMapName = g_pIBrowser->m_vServerList[iServerIndex].svMapName; - hsq_pushstring(sqvm, svServerMapName.c_str(), -1); + sq_pushstring(v, svServerMapName.c_str(), -1); return SQ_OK; } @@ -95,11 +97,11 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: get current server count from pylon //----------------------------------------------------------------------------- - SQRESULT GetServerCount(void* sqvm) + SQRESULT GetServerCount(HSQUIRRELVM* v) { g_pIBrowser->GetServerList(); // Refresh svListing list. - hsq_pushinteger(sqvm, g_pIBrowser->m_vServerList.size()); + sq_pushinteger(v, g_pIBrowser->m_vServerList.size()); return SQ_OK; } @@ -107,7 +109,7 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: get promo data for serverbrowser panels //----------------------------------------------------------------------------- - SQRESULT GetPromoData(void* sqvm) + SQRESULT GetPromoData(HSQUIRRELVM* v) { enum class R5RPromoData : int { @@ -119,7 +121,7 @@ namespace VSquirrel PromoRightDesc }; - R5RPromoData ePromoIndex = (R5RPromoData)hsq_getinteger(sqvm, 1); + R5RPromoData ePromoIndex = (R5RPromoData)sq_getinteger(v, 1); std::string svPromo = std::string(); @@ -162,7 +164,7 @@ namespace VSquirrel } } - hsq_pushstring(sqvm, svPromo.c_str(), -1); + sq_pushstring(v, svPromo.c_str(), -1); return SQ_OK; } @@ -170,9 +172,9 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: set netchannel encryption key and connect to server //----------------------------------------------------------------------------- - SQRESULT SetEncKeyAndConnect(void* sqvm) + SQRESULT SetEncKeyAndConnect(HSQUIRRELVM* v) { - int iServerIndex = hsq_getinteger(sqvm, 1); + int iServerIndex = sq_getinteger(v, 1); // !TODO: Create glue class instead. g_pIBrowser->ConnectToServer(g_pIBrowser->m_vServerList[iServerIndex].svIpAddress, g_pIBrowser->m_vServerList[iServerIndex].svPort, g_pIBrowser->m_vServerList[iServerIndex].svEncryptionKey); @@ -183,12 +185,12 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: create server via native serverbrowser entries //----------------------------------------------------------------------------- - SQRESULT CreateServerFromMenu(void* sqvm) + SQRESULT CreateServerFromMenu(HSQUIRRELVM* v) { - std::string svServerName = hsq_getstring(sqvm, 1); - std::string svServerMapName = hsq_getstring(sqvm, 2); - std::string svServerPlaylist = hsq_getstring(sqvm, 3); - EServerVisibility eServerVisibility = (EServerVisibility)hsq_getinteger(sqvm, 4); + std::string svServerName = sq_getstring(v, 1); + std::string svServerMapName = sq_getstring(v, 2); + std::string svServerPlaylist = sq_getstring(v, 3); + EServerVisibility eServerVisibility = (EServerVisibility)sq_getinteger(v, 4); if (svServerName.empty() || svServerMapName.empty() || svServerPlaylist.empty()) return SQ_OK; @@ -208,11 +210,11 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: request token from pylon and join server with result. //----------------------------------------------------------------------------- - SQRESULT JoinPrivateServerFromMenu(void* sqvm) + SQRESULT JoinPrivateServerFromMenu(HSQUIRRELVM* v) { std::string svHiddenServerRequestMessage = std::string(); - std::string svToken = hsq_getstring(sqvm, 1); + std::string svToken = sq_getstring(v, 1); ServerListing svListing; bool result = g_pR5net->GetServerByToken(svListing, svHiddenServerRequestMessage, svToken); // Send szToken connect request. @@ -227,11 +229,11 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: get response from private server request //----------------------------------------------------------------------------- - SQRESULT GetPrivateServerMessage(void* sqvm) + SQRESULT GetPrivateServerMessage(HSQUIRRELVM* v) { std::string svHiddenServerRequestMessage = std::string(); - std::string svToken = hsq_getstring(sqvm, 1); + std::string svToken = sq_getstring(v, 1); ServerListing serverListing; bool result = g_pR5net->GetServerByToken(serverListing, svHiddenServerRequestMessage, svToken); // Send szToken connect request. @@ -239,13 +241,13 @@ namespace VSquirrel { svHiddenServerRequestMessage = "Found Server: " + serverListing.svServerName; - hsq_pushstring(sqvm, svHiddenServerRequestMessage.c_str(), -1); + sq_pushstring(v, svHiddenServerRequestMessage.c_str(), -1); } else { svHiddenServerRequestMessage = "Error: Server Not Found"; - hsq_pushstring(sqvm, svHiddenServerRequestMessage.c_str(), -1); + sq_pushstring(v, svHiddenServerRequestMessage.c_str(), -1); } DevMsg(eDLL_T::UI, "GetPrivateServeMessage response: %s\n", svHiddenServerRequestMessage.c_str()); @@ -256,10 +258,10 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: connect to server from native server browser entries //----------------------------------------------------------------------------- - SQRESULT ConnectToIPFromMenu(void* sqvm) + SQRESULT ConnectToIPFromMenu(HSQUIRRELVM* v) { - std::string svIpAddr = hsq_getstring(sqvm, 1); - std::string svEncKey = hsq_getstring(sqvm, 2); + std::string svIpAddr = sq_getstring(v, 1); + std::string svEncKey = sq_getstring(v, 2); if (svIpAddr.empty() || svEncKey.empty()) return SQ_OK; @@ -274,7 +276,7 @@ namespace VSquirrel //----------------------------------------------------------------------------- // Purpose: return all available maps //----------------------------------------------------------------------------- - SQRESULT GetAvailableMaps(void* sqvm) + SQRESULT GetAvailableMaps(HSQUIRRELVM* v) { std::vector vsvMapList = g_pIBrowser->m_vszMapFileNameList; @@ -286,12 +288,12 @@ namespace VSquirrel DevMsg(eDLL_T::UI, "Requesting an array of '%i' available maps from script\n", vsvMapList.size()); - hsq_newarray(sqvm, 0); + sq_newarray(v, 0); for (auto& it : vsvMapList) { - hsq_pushstring(sqvm, it.c_str(), -1); - hsq_arrayappend(sqvm, -2); + sq_pushstring(v, it.c_str(), -1); + sq_arrayappend(v, -2); } return SQ_OK; diff --git a/r5dev/squirrel/sqinit.h b/r5dev/squirrel/sqinit.h index d240b187..b2bb3d26 100644 --- a/r5dev/squirrel/sqinit.h +++ b/r5dev/squirrel/sqinit.h @@ -18,8 +18,8 @@ namespace VSquirrel { namespace SHARED { - SQRESULT SDKNativeTest(void* sqvm); - SQRESULT GetSDKVersion(void* sqvm); + SQRESULT SDKNativeTest(HSQUIRRELVM* v); + SQRESULT GetSDKVersion(HSQUIRRELVM* v); } namespace SERVER { @@ -30,17 +30,17 @@ namespace VSquirrel } namespace UI { - SQRESULT GetServerName(void* sqvm); - SQRESULT GetServerPlaylist(void* sqvm); - SQRESULT GetServerMap(void* sqvm); - SQRESULT GetServerCount(void* sqvm); - SQRESULT GetPromoData(void* sqvm); - SQRESULT SetEncKeyAndConnect(void* sqvm); - SQRESULT CreateServerFromMenu(void* sqvm); - SQRESULT JoinPrivateServerFromMenu(void* sqvm); - SQRESULT GetPrivateServerMessage(void* sqvm); - SQRESULT ConnectToIPFromMenu(void* sqvm); - SQRESULT GetAvailableMaps(void* sqvm); + SQRESULT GetServerName(HSQUIRRELVM* v); + SQRESULT GetServerPlaylist(HSQUIRRELVM* v); + SQRESULT GetServerMap(HSQUIRRELVM* v); + SQRESULT GetServerCount(HSQUIRRELVM* v); + SQRESULT GetPromoData(HSQUIRRELVM* v); + SQRESULT SetEncKeyAndConnect(HSQUIRRELVM* v); + SQRESULT CreateServerFromMenu(HSQUIRRELVM* v); + SQRESULT JoinPrivateServerFromMenu(HSQUIRRELVM* v); + SQRESULT GetPrivateServerMessage(HSQUIRRELVM* v); + SQRESULT ConnectToIPFromMenu(HSQUIRRELVM* v); + SQRESULT GetAvailableMaps(HSQUIRRELVM* v); } #endif // !DEDICATED } diff --git a/r5dev/squirrel/sqtype.h b/r5dev/squirrel/sqtype.h new file mode 100644 index 00000000..e1742e9d --- /dev/null +++ b/r5dev/squirrel/sqtype.h @@ -0,0 +1,57 @@ +#ifndef SQTYPE_H +#define SQTYPE_H + +#define SQ_OK (1) +#define SQ_ERROR (-1) +#define SQ_FAILED(res) (res<0) +#define SQ_SUCCEEDED(res) (res>=0) + +typedef int SQRESULT; +typedef struct SQVM* HSQUIRRELVM; + +enum class SQCONTEXT : int +{ + SERVER = 0, + CLIENT, + UI +}; + +const static std::string SQVM_TYPE_T[3] = +{ + "SERVER", + "CLIENT", + "UI", +}; + +const static std::string SQVM_LOG_T[4] = +{ + "Script(S):", + "Script(C):", + "Script(U):", + "Script(X):" +}; + +const static std::string SQVM_WARNING_LOG_T[4] = +{ + "Script(S):Warning:", + "Script(C):Warning:", + "Script(U):Warning:", + "Script(X):Warning:" +}; + +const static std::string SQVM_ANSI_LOG_T[4] = +{ + "\033[38;2;151;149;187mScript(S):", + "\033[38;2;151;149;163mScript(C):", + "\033[38;2;151;123;136mScript(U):", + "\033[38;2;151;149;163mScript(X):" +}; + +const static std::string SQVM_WARNING_ANSI_LOG_T[4] = +{ + "\033[38;2;151;149;187mScript(S):\033[38;2;255;255;000mWarning:", + "\033[38;2;151;149;163mScript(C):\033[38;2;255;255;000mWarning:", + "\033[38;2;151;123;136mScript(U):\033[38;2;255;255;000mWarning:", + "\033[38;2;151;149;163mScript(X):\033[38;2;255;255;000mWarning:" +}; +#endif // SQTYPE_H diff --git a/r5dev/squirrel/sqvm.h b/r5dev/squirrel/sqvm.h index a6ee2133..82b052f6 100644 --- a/r5dev/squirrel/sqvm.h +++ b/r5dev/squirrel/sqvm.h @@ -1,56 +1,5 @@ #pragma once - -typedef int SQRESULT; -#define SQ_OK (1) -#define SQ_ERROR (-1) -#define SQ_FAILED(res) (res<0) -#define SQ_SUCCEEDED(res) (res>=0) - -enum class SQCONTEXT : int -{ - SERVER = 0, - CLIENT, - UI -}; - -const static std::string SQVM_TYPE_T[3] = -{ - "SERVER", - "CLIENT", - "UI", -}; - -const static std::string SQVM_LOG_T[4] = -{ - "Script(S):", - "Script(C):", - "Script(U):", - "Script(X):" -}; - -const static std::string SQVM_WARNING_LOG_T[4] = -{ - "Script(S):Warning:", - "Script(C):Warning:", - "Script(U):Warning:", - "Script(X):Warning:" -}; - -const static std::string SQVM_ANSI_LOG_T[4] = -{ - "\033[38;2;151;149;187mScript(S):", - "\033[38;2;151;149;163mScript(C):", - "\033[38;2;151;123;136mScript(U):", - "\033[38;2;151;149;163mScript(X):" -}; - -const static std::string SQVM_WARNING_ANSI_LOG_T[4] = -{ - "\033[38;2;151;149;187mScript(S):\033[38;2;255;255;000mWarning:", - "\033[38;2;151;149;163mScript(C):\033[38;2;255;255;000mWarning:", - "\033[38;2;151;123;136mScript(U):\033[38;2;255;255;000mWarning:", - "\033[38;2;151;149;163mScript(X):\033[38;2;255;255;000mWarning:" -}; +#include "squirrel/sqtype.h" struct SQFuncRegistration { @@ -123,7 +72,6 @@ namespace ADDRESS p_SQVM_InitializeCLGlobalScriptStructs = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x48\x89\x74\x24\x00\x48\x89\x7C\x24\x00\x41\x56\x48\x83\xEC\x30\x48\x63\xC2\x48\x8D\x3D\x00\x00\x00\x00", "xxxx?xxxx?xxxxxxxxxxxx????"); int (*SQVM_InitializeCLGlobalScriptStructs)(void* sqvm/**(+8)*/, SQCONTEXT context) = (int (*)(void*, SQCONTEXT))p_SQVM_InitializeCLGlobalScriptStructs.GetPtr(); /*48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC 30 48 63 C2 48 8D 3D ? ? ? ?*/ #endif // !DEDICATED - #if !defined (CLIENT_DLL) && defined (GAMEDLL_S0) || defined (GAMEDLL_S1) ADDRESS p_SQVM_CreateServerVM = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x53\x48\x83\xEC\x50\x48\x8D\x0D\x00\x00\x00\x00", "xxxxxxxxx????"); bool (*SQVM_CreateServerVM)() = (bool(*)())p_SQVM_CreateServerVM.GetPtr(); /*40 53 48 83 EC 50 48 8D 0D ? ? ? ?*/ diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj index 16b7cdf8..f8a42e00 100644 --- a/r5dev/vproj/clientsdk.vcxproj +++ b/r5dev/vproj/clientsdk.vcxproj @@ -175,6 +175,7 @@ + diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters index e3ed0487..c1c697e7 100644 --- a/r5dev/vproj/clientsdk.vcxproj.filters +++ b/r5dev/vproj/clientsdk.vcxproj.filters @@ -1121,6 +1121,9 @@ sdk\rtech\rui + + sdk\squirrel + diff --git a/r5dev/vproj/dedicated.vcxproj b/r5dev/vproj/dedicated.vcxproj index 9264016b..dc3caa5c 100644 --- a/r5dev/vproj/dedicated.vcxproj +++ b/r5dev/vproj/dedicated.vcxproj @@ -195,6 +195,7 @@ + diff --git a/r5dev/vproj/dedicated.vcxproj.filters b/r5dev/vproj/dedicated.vcxproj.filters index 5741b8cb..137e992f 100644 --- a/r5dev/vproj/dedicated.vcxproj.filters +++ b/r5dev/vproj/dedicated.vcxproj.filters @@ -813,6 +813,9 @@ sdk\materialsystem + + sdk\squirrel + diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index 21c1df9f..e132fcfb 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -191,6 +191,7 @@ + diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index 420a9ee7..81f79662 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -1178,6 +1178,9 @@ sdk\engine + + sdk\squirrel +