Add Squirrel typedefs

This commit is contained in:
Kawe Mazidjatari 2022-03-29 22:27:56 +02:00
parent 446f13680f
commit 28b1718cb1
12 changed files with 187 additions and 166 deletions

View File

@ -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<std::uintptr_t>(sqvm);
std::uintptr_t thisptr = reinterpret_cast<std::uintptr_t>(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<std::uintptr_t>(sqvm);
std::uintptr_t thisptr = reinterpret_cast<std::uintptr_t>(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<char*>(string), len);
v_sq_pushstring(v, const_cast<char*>(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);
}

View File

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

View File

@ -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<std::string> 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;

View File

@ -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
}

57
r5dev/squirrel/sqtype.h Normal file
View File

@ -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

View File

@ -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 ? ? ? ?*/

View File

@ -175,6 +175,7 @@
<ClInclude Include="..\rtech\stryder\stryder.h" />
<ClInclude Include="..\squirrel\sqapi.h" />
<ClInclude Include="..\squirrel\sqinit.h" />
<ClInclude Include="..\squirrel\sqtype.h" />
<ClInclude Include="..\squirrel\sqvm.h" />
<ClInclude Include="..\studiorender\studiorendercontext.h" />
<ClInclude Include="..\thirdparty\detours\include\detours.h" />

View File

@ -1121,6 +1121,9 @@
<ClInclude Include="..\rtech\stryder\stryder.h">
<Filter>sdk\rtech\rui</Filter>
</ClInclude>
<ClInclude Include="..\squirrel\sqtype.h">
<Filter>sdk\squirrel</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="..\shared\resource\lockedserver.png">

View File

@ -195,6 +195,7 @@
<ClInclude Include="..\server\server.h" />
<ClInclude Include="..\squirrel\sqapi.h" />
<ClInclude Include="..\squirrel\sqinit.h" />
<ClInclude Include="..\squirrel\sqtype.h" />
<ClInclude Include="..\squirrel\sqvm.h" />
<ClInclude Include="..\studiorender\studiorendercontext.h" />
<ClInclude Include="..\thirdparty\detours\include\detours.h" />

View File

@ -813,6 +813,9 @@
<ClInclude Include="..\materialsystem\cmaterialsystem.h">
<Filter>sdk\materialsystem</Filter>
</ClInclude>
<ClInclude Include="..\squirrel\sqtype.h">
<Filter>sdk\squirrel</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\client\IVEngineClient.cpp">

View File

@ -191,6 +191,7 @@
<ClInclude Include="..\server\server.h" />
<ClInclude Include="..\squirrel\sqapi.h" />
<ClInclude Include="..\squirrel\sqinit.h" />
<ClInclude Include="..\squirrel\sqtype.h" />
<ClInclude Include="..\squirrel\sqvm.h" />
<ClInclude Include="..\studiorender\studiorendercontext.h" />
<ClInclude Include="..\thirdparty\detours\include\detours.h" />

View File

@ -1178,6 +1178,9 @@
<ClInclude Include="..\engine\baseserver.h">
<Filter>sdk\engine</Filter>
</ClInclude>
<ClInclude Include="..\squirrel\sqtype.h">
<Filter>sdk\squirrel</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="..\shared\resource\lockedserver.png">