mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Separate SQVM function namespaces per VM type
* Separate based on VM type instead. * Allow compilation for DEDICATED.
This commit is contained in:
parent
4da14d7dde
commit
f909635526
@ -59,7 +59,6 @@
|
||||
<ClCompile Include="server\server.cpp" />
|
||||
<ClCompile Include="squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="squirrel\sqinit.cpp" />
|
||||
<ClCompile Include="squirrel\sqnativefunctions.cpp" />
|
||||
<ClCompile Include="squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="thirdparty\detours\src\creatwth.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
@ -266,7 +265,6 @@
|
||||
<ClInclude Include="server\server.h" />
|
||||
<ClInclude Include="squirrel\sqapi.h" />
|
||||
<ClInclude Include="squirrel\sqinit.h" />
|
||||
<ClInclude Include="squirrel\sqnativefunctions.h" />
|
||||
<ClInclude Include="squirrel\sqvm.h" />
|
||||
<ClInclude Include="thirdparty\detours\include\detours.h" />
|
||||
<ClInclude Include="thirdparty\detours\include\detver.h" />
|
||||
|
@ -405,9 +405,6 @@
|
||||
<ClCompile Include="core\logdef.cpp">
|
||||
<Filter>core</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="squirrel\sqnativefunctions.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="client\cdll_engine_int.h">
|
||||
@ -1049,9 +1046,6 @@
|
||||
<ClInclude Include="core\assert.h">
|
||||
<Filter>core</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="squirrel\sqnativefunctions.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="r5dev.def" />
|
||||
|
@ -1,8 +1,295 @@
|
||||
//=============================================================================//
|
||||
//
|
||||
// Create new functions here
|
||||
// Purpose: Expose native code to VScript API
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Create functions here under the target VM namespace. If the function has to
|
||||
// be registered for 2 or more VM's, put them under the 'SHARED' namespace.
|
||||
// Ifdef them out for 'DEDICATED' if the target VM's do not include 'SERVER'.
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#include "core/stdafx.h"
|
||||
#include "sqinit.h"
|
||||
#include "engine/sys_utils.h"
|
||||
#include "squirrel/sqapi.h"
|
||||
#include "squirrel/sqinit.h"
|
||||
|
||||
#ifndef DEDICATED
|
||||
#include "gameui/IBrowser.h" // TODO: create dedicated class for exposing server utils to ImGui and UI VM.
|
||||
#endif // !DEDICATED
|
||||
|
||||
namespace VSquirrel
|
||||
{
|
||||
namespace SHARED
|
||||
{
|
||||
SQRESULT Script_NativeTest(void* sqvm)
|
||||
{
|
||||
// Function code goes here.
|
||||
return SQ_OK;
|
||||
}
|
||||
}
|
||||
namespace SERVER
|
||||
{
|
||||
}
|
||||
#ifndef DEDICATED
|
||||
namespace CLIENT
|
||||
{
|
||||
}
|
||||
namespace UI
|
||||
{
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get server's current server name from serverlist index
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerName(void* sqvm)
|
||||
{
|
||||
int iServerIndex = hsq_getinteger(sqvm, 1);
|
||||
std::string svServerName = g_pIBrowser->m_vServerList[iServerIndex].svServerName;
|
||||
|
||||
hsq_pushstring(sqvm, svServerName.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get server's current playlist via serverlist index
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerPlaylist(void* sqvm)
|
||||
{
|
||||
int iServerIndex = hsq_getinteger(sqvm, 1);
|
||||
std::string svServerPlaylist = g_pIBrowser->m_vServerList[iServerIndex].svPlaylist;
|
||||
|
||||
hsq_pushstring(sqvm, svServerPlaylist.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get server's current map via serverlist index
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerMap(void* sqvm)
|
||||
{
|
||||
int iServerIndex = hsq_getinteger(sqvm, 1);
|
||||
std::string svServerMapName = g_pIBrowser->m_vServerList[iServerIndex].svMapName;
|
||||
|
||||
hsq_pushstring(sqvm, svServerMapName.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get current server count from pylon
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerCount(void* sqvm)
|
||||
{
|
||||
g_pIBrowser->GetServerList(); // Refresh svListing list.
|
||||
|
||||
hsq_pushinteger(sqvm, g_pIBrowser->m_vServerList.size());
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: expose SDK version to the UI SQVM
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetSDKVersion(void* sqvm)
|
||||
{
|
||||
hsq_pushstring(sqvm, g_pR5net->GetSDKVersion().c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get promo data for serverbrowser panels
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetPromoData(void* sqvm)
|
||||
{
|
||||
enum class R5RPromoData : int
|
||||
{
|
||||
PromoLargeTitle,
|
||||
PromoLargeDesc,
|
||||
PromoLeftTitle,
|
||||
PromoLeftDesc,
|
||||
PromoRightTitle,
|
||||
PromoRightDesc
|
||||
};
|
||||
|
||||
R5RPromoData ePromoIndex = (R5RPromoData)hsq_getinteger(sqvm, 1);
|
||||
|
||||
std::string svPromo = std::string();
|
||||
|
||||
switch (ePromoIndex)
|
||||
{
|
||||
case R5RPromoData::PromoLargeTitle:
|
||||
{
|
||||
svPromo = "Welcome To R5Reloaded!";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoLargeDesc:
|
||||
{
|
||||
svPromo = "Make sure to join the discord! discord.gg/r5reloaded";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoLeftTitle:
|
||||
{
|
||||
svPromo = "Yes";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoLeftDesc:
|
||||
{
|
||||
svPromo = "Your ad could be here";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoRightTitle:
|
||||
{
|
||||
svPromo = "Yes2";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoRightDesc:
|
||||
{
|
||||
svPromo = "Yes3";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
svPromo = "You should not see this.";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
hsq_pushstring(sqvm, svPromo.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: set netchannel encryption key and connect to server
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT SetEncKeyAndConnect(void* sqvm)
|
||||
{
|
||||
int iServerIndex = hsq_getinteger(sqvm, 1);
|
||||
|
||||
g_pIBrowser->ConnectToServer(g_pIBrowser->m_vServerList[iServerIndex].svIpAddress, g_pIBrowser->m_vServerList[iServerIndex].svPort, g_pIBrowser->m_vServerList[iServerIndex].svEncryptionKey);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: create server via native serverbrowser entries
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT CreateServerFromMenu(void* sqvm)
|
||||
{
|
||||
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);
|
||||
|
||||
if (svServerName.empty() || svServerMapName.empty() || svServerPlaylist.empty())
|
||||
return SQ_OK;
|
||||
|
||||
// Adjust browser settings.
|
||||
g_pIBrowser->m_Server.svPlaylist = svServerPlaylist;
|
||||
g_pIBrowser->m_Server.svMapName = svServerMapName;
|
||||
g_pIBrowser->m_Server.svServerName = svServerName;
|
||||
g_pIBrowser->eServerVisibility = eServerVisibility;
|
||||
|
||||
// Launch server.
|
||||
g_pIBrowser->LaunchServer();
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: request token from pylon and join server with result.
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT JoinPrivateServerFromMenu(void* sqvm)
|
||||
{
|
||||
std::string svHiddenServerRequestMessage = std::string();
|
||||
|
||||
std::string svToken = hsq_getstring(sqvm, 1);
|
||||
|
||||
ServerListing svListing;
|
||||
bool result = g_pR5net->GetServerByToken(svListing, svHiddenServerRequestMessage, svToken); // Send szToken connect request.
|
||||
if (result)
|
||||
{
|
||||
g_pIBrowser->ConnectToServer(svListing.svIpAddress, svListing.svPort, svListing.svEncryptionKey);
|
||||
}
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: get response from private server request
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetPrivateServerMessage(void* sqvm)
|
||||
{
|
||||
std::string svHiddenServerRequestMessage = std::string();
|
||||
|
||||
std::string svToken = hsq_getstring(sqvm, 1);
|
||||
|
||||
ServerListing serverListing;
|
||||
bool result = g_pR5net->GetServerByToken(serverListing, svHiddenServerRequestMessage, svToken); // Send szToken connect request.
|
||||
if (!serverListing.svServerName.empty())
|
||||
{
|
||||
svHiddenServerRequestMessage = "Found Server: " + serverListing.svServerName;
|
||||
|
||||
hsq_pushstring(sqvm, svHiddenServerRequestMessage.c_str(), -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
svHiddenServerRequestMessage = "Error: Server Not Found";
|
||||
|
||||
hsq_pushstring(sqvm, svHiddenServerRequestMessage.c_str(), -1);
|
||||
}
|
||||
|
||||
DevMsg(eDLL_T::UI, "GetPrivateServeMessage response: %s\n", svHiddenServerRequestMessage.c_str());
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: connect to server from native server browser entries
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT ConnectToIPFromMenu(void* sqvm)
|
||||
{
|
||||
std::string svIpAddr = hsq_getstring(sqvm, 1);
|
||||
std::string svEncKey = hsq_getstring(sqvm, 2);
|
||||
|
||||
if (svIpAddr.empty() || svEncKey.empty())
|
||||
return SQ_OK;
|
||||
|
||||
DevMsg(eDLL_T::UI, "Connecting to server with connection string '%s' and encryption key '%s'\n", svIpAddr, svEncKey);
|
||||
|
||||
g_pIBrowser->ConnectToServer(svIpAddr, svEncKey);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: return all available map
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetAvailableMaps(void* sqvm)
|
||||
{
|
||||
std::vector<std::string> vsvMapList = g_pIBrowser->m_vszMapFileNameList;
|
||||
|
||||
if (vsvMapList.empty())
|
||||
{
|
||||
DevMsg(eDLL_T::UI, "Available maps is empty!!!\n");
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
DevMsg(eDLL_T::UI, "Requesting an array of '%i' available maps from script\n", vsvMapList.size());
|
||||
|
||||
hsq_newarray(sqvm, 0);
|
||||
|
||||
for (auto& it : vsvMapList)
|
||||
{
|
||||
hsq_pushstring(sqvm, it.c_str(), -1);
|
||||
hsq_arrayappend(sqvm, -2);
|
||||
}
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
}
|
||||
#endif // !DEDICATED
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
#pragma once
|
||||
#include "squirrel/sqapi.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
@ -8,6 +9,37 @@ namespace
|
||||
std::uint32_t* g_nRemoteFunctionCallsChecksum = reinterpret_cast<std::uint32_t*>(p_Script_Remote_BeginRegisteringFunctions.FindPatternSelf("89 05", ADDRESS::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x2, 0x6).GetPtr());
|
||||
}
|
||||
|
||||
namespace VSquirrel
|
||||
{
|
||||
namespace SHARED
|
||||
{
|
||||
SQRESULT Script_NativeTest(void* sqvm);
|
||||
}
|
||||
namespace SERVER
|
||||
{
|
||||
}
|
||||
#ifndef DEDICATED
|
||||
namespace CLIENT
|
||||
{
|
||||
}
|
||||
namespace UI
|
||||
{
|
||||
SQRESULT GetServerName(void* sqvm);
|
||||
SQRESULT GetServerPlaylist(void* sqvm);
|
||||
SQRESULT GetServerMap(void* sqvm);
|
||||
SQRESULT GetServerCount(void* sqvm);
|
||||
SQRESULT GetSDKVersion(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);
|
||||
}
|
||||
#endif // !DEDICATED
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class HSqInit : public IDetour
|
||||
{
|
||||
|
@ -1,265 +0,0 @@
|
||||
#include "core/stdafx.h"
|
||||
#include "squirrel/sqnativefunctions.h"
|
||||
|
||||
#include "engine/sys_utils.h"
|
||||
#include "gameui/IBrowser.h"
|
||||
|
||||
namespace SQNativeFunctions
|
||||
{
|
||||
namespace IBrowser
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get servers current server name from serverlist index
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerName(void* sqvm)
|
||||
{
|
||||
int svIndex = hsq_getinteger(sqvm, 1);
|
||||
std::string szSvName = g_pIBrowser->m_vServerList[svIndex].svServerName;
|
||||
|
||||
hsq_pushstring(sqvm, szSvName.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get servers current playlist via serverlist index
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerPlaylist(void* sqvm)
|
||||
{
|
||||
int svIndex = hsq_getinteger(sqvm, 1);
|
||||
std::string szSvPlaylist = g_pIBrowser->m_vServerList[svIndex].svPlaylist;
|
||||
|
||||
hsq_pushstring(sqvm, szSvPlaylist.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get servers current map via serverlist index
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerMap(void* sqvm)
|
||||
{
|
||||
int svIndex = hsq_getinteger(sqvm, 1);
|
||||
std::string szSvMapName = g_pIBrowser->m_vServerList[svIndex].svMapName;
|
||||
|
||||
hsq_pushstring(sqvm, szSvMapName.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get current server count from pylon
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetServerCount(void* sqvm)
|
||||
{
|
||||
g_pIBrowser->GetServerList(); // Refresh svListing list.
|
||||
|
||||
hsq_pushinteger(sqvm, g_pIBrowser->m_vServerList.size());
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: expose SDK version to SQ
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetSDKVersion(void* sqvm)
|
||||
{
|
||||
hsq_pushstring(sqvm, g_pR5net->GetSDKVersion().c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Purpose: get promo data for serverbrowser panels
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetPromoData(void* sqvm)
|
||||
{
|
||||
enum class R5RPromoData : int
|
||||
{
|
||||
PromoLargeTitle,
|
||||
PromoLargeDesc,
|
||||
PromoLeftTitle,
|
||||
PromoLeftDesc,
|
||||
PromoRightTitle,
|
||||
PromoRightDesc
|
||||
};
|
||||
|
||||
R5RPromoData ePromoIndex = (R5RPromoData)hsq_getinteger(sqvm, 1);
|
||||
|
||||
std::string szPromo = std::string();
|
||||
|
||||
switch (ePromoIndex)
|
||||
{
|
||||
case R5RPromoData::PromoLargeTitle:
|
||||
{
|
||||
szPromo = "Welcome To R5Reloaded!";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoLargeDesc:
|
||||
{
|
||||
szPromo = "Make sure to join the discord! discord.gg/r5reloaded";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoLeftTitle:
|
||||
{
|
||||
szPromo = "Yes";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoLeftDesc:
|
||||
{
|
||||
szPromo = "Your ad could be here";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoRightTitle:
|
||||
{
|
||||
szPromo = "Yes2";
|
||||
break;
|
||||
}
|
||||
case R5RPromoData::PromoRightDesc:
|
||||
{
|
||||
szPromo = "Yes3";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
szPromo = "You should not see this.";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
hsq_pushstring(sqvm, szPromo.c_str(), -1);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: set netchannel encryption key and connect to server
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT SetEncKeyAndConnect(void* sqvm)
|
||||
{
|
||||
int svIndex = hsq_getinteger(sqvm, 1);
|
||||
|
||||
g_pIBrowser->ConnectToServer(g_pIBrowser->m_vServerList[svIndex].svIpAddress, g_pIBrowser->m_vServerList[svIndex].svPort, g_pIBrowser->m_vServerList[svIndex].svEncryptionKey);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: create server via native serverbrowser entries
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT CreateServerFromMenu(void* sqvm)
|
||||
{
|
||||
std::string szSvName = hsq_getstring(sqvm, 1);
|
||||
std::string szSvMapName = hsq_getstring(sqvm, 2);
|
||||
std::string szSvPlaylist = hsq_getstring(sqvm, 3);
|
||||
EServerVisibility eSvVisibility = (EServerVisibility)hsq_getinteger(sqvm, 4);
|
||||
|
||||
if (szSvName.empty() || szSvMapName.empty() || szSvPlaylist.empty())
|
||||
return SQ_OK;
|
||||
|
||||
// Adjust browser settings.
|
||||
g_pIBrowser->m_Server.svPlaylist = szSvPlaylist;
|
||||
g_pIBrowser->m_Server.svMapName = szSvMapName;
|
||||
g_pIBrowser->m_Server.svServerName = szSvName;
|
||||
g_pIBrowser->eServerVisibility = eSvVisibility;
|
||||
|
||||
// Launch server.
|
||||
g_pIBrowser->LaunchServer();
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// // Purpose: request token from pylon and join server with result.
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT JoinPrivateServerFromMenu(void* sqvm)
|
||||
{
|
||||
std::string szHiddenServerRequestMessage = std::string();
|
||||
|
||||
std::string szToken = hsq_getstring(sqvm, 1);
|
||||
|
||||
ServerListing svListing;
|
||||
bool result = g_pR5net->GetServerByToken(svListing, szHiddenServerRequestMessage, szToken); // Send szToken connect request.
|
||||
if (result)
|
||||
{
|
||||
g_pIBrowser->ConnectToServer(svListing.svIpAddress, svListing.svPort, svListing.svEncryptionKey);
|
||||
}
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: get response from private server request
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetPrivateServerMessage(void* sqvm)
|
||||
{
|
||||
std::string szHiddenServerRequestMessage = std::string();
|
||||
|
||||
std::string szToken = hsq_getstring(sqvm, 1);
|
||||
|
||||
ServerListing slServer;
|
||||
bool result = g_pR5net->GetServerByToken(slServer, szHiddenServerRequestMessage, szToken); // Send szToken connect request.
|
||||
if (!slServer.svServerName.empty())
|
||||
{
|
||||
szHiddenServerRequestMessage = "Found Server: " + slServer.svServerName;
|
||||
|
||||
hsq_pushstring(sqvm, szHiddenServerRequestMessage.c_str(), -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
szHiddenServerRequestMessage = "Error: Server Not Found";
|
||||
|
||||
hsq_pushstring(sqvm, szHiddenServerRequestMessage.c_str(), -1);
|
||||
}
|
||||
|
||||
DevMsg(eDLL_T::UI, "GetPrivateServeMessage response: %s\n", szHiddenServerRequestMessage.c_str());
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: connect to server from native server browser entries
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT ConnectToIPFromMenu(void* sqvm)
|
||||
{
|
||||
std::string szIP = hsq_getstring(sqvm, 1);
|
||||
std::string szEncKey = hsq_getstring(sqvm, 2);
|
||||
|
||||
if (szIP.empty() || szEncKey.empty())
|
||||
return SQ_OK;
|
||||
|
||||
DevMsg(eDLL_T::UI, "Connecting to server with connection string %s and encryptionkey %s\n", szIP, szEncKey);
|
||||
|
||||
g_pIBrowser->ConnectToServer(szIP, szEncKey);
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: return all available map
|
||||
//-----------------------------------------------------------------------------
|
||||
SQRESULT GetAvailableMaps(void* sqvm)
|
||||
{
|
||||
std::vector<std::string> mapList = g_pIBrowser->m_vszMapFileNameList;
|
||||
|
||||
if (mapList.empty())
|
||||
{
|
||||
DevMsg(eDLL_T::UI, "Available maps is empty!!!\n");
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
DevMsg(eDLL_T::UI, "Requesting an array of %i available maps from script\n", mapList.size());
|
||||
|
||||
hsq_newarray(sqvm, 0);
|
||||
|
||||
for (auto& it : mapList)
|
||||
{
|
||||
hsq_pushstring(sqvm, it.c_str(), -1);
|
||||
hsq_arrayappend(sqvm, -2);
|
||||
}
|
||||
|
||||
return SQ_OK;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
#pragma once
|
||||
#include "squirrel/sqapi.h"
|
||||
|
||||
namespace SQNativeFunctions
|
||||
{
|
||||
namespace IBrowser
|
||||
{
|
||||
SQRESULT GetServerName(void* sqvm);
|
||||
SQRESULT GetServerPlaylist(void* sqvm);
|
||||
SQRESULT GetServerMap(void* sqvm);
|
||||
SQRESULT GetServerCount(void* sqvm);
|
||||
SQRESULT GetSDKVersion(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);
|
||||
}
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
#include "vgui/CEngineVGui.h"
|
||||
#include "gameui/IConsole.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "squirrel/sqnativefunctions.h"
|
||||
#include "squirrel/sqinit.h"
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: prints the output of each VM to the console
|
||||
@ -226,6 +226,9 @@ bool HSQVM_LoadScript(void* sqvm, const char* szScriptPath, const char* szScript
|
||||
return SQVM_LoadScript(sqvm, szScriptPath, szScriptName, nFlag);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers and exposes code functions to target VM's
|
||||
//---------------------------------------------------------------------------------
|
||||
void HSQVM_RegisterFunction(void* sqvm, const char* szName, const char* szHelpString, const char* szRetValType, const char* szArgTypes, void* pFunction)
|
||||
{
|
||||
SQFuncRegistration* sqFunc = new SQFuncRegistration();
|
||||
@ -240,48 +243,53 @@ void HSQVM_RegisterFunction(void* sqvm, const char* szName, const char* szHelpSt
|
||||
SQVM_RegisterFunc(sqvm, sqFunc, 1);
|
||||
}
|
||||
|
||||
int HSQVM_NativeTest(void* sqvm)
|
||||
{
|
||||
// Function code goes here.
|
||||
return 1;
|
||||
}
|
||||
|
||||
void RegisterUIScriptFunctions(void* sqvm)
|
||||
{
|
||||
#ifndef DEDICATED
|
||||
HSQVM_RegisterFunction(sqvm, "UINativeTest", "native ui test function", "void", "", &HSQVM_NativeTest);
|
||||
|
||||
// functions for retrieving server browser data
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerName", "get name of the server at the specified index of the server list", "string", "int", &SQNativeFunctions::IBrowser::GetServerName);
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerPlaylist", "get playlist of the server at the specified index of the server list", "string", "int", &SQNativeFunctions::IBrowser::GetServerPlaylist);
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerMap", "get map of the server at the specified index of the server list", "string", "int", &SQNativeFunctions::IBrowser::GetServerMap);
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerCount", "get number of public servers", "int", "", &SQNativeFunctions::IBrowser::GetServerCount);
|
||||
|
||||
// misc main menu functions
|
||||
HSQVM_RegisterFunction(sqvm, "GetSDKVersion", "get sdk version as a string", "string", "", &SQNativeFunctions::IBrowser::GetSDKVersion);
|
||||
HSQVM_RegisterFunction(sqvm, "GetPromoData", "get promo data for specified slot type", "string", "int", &SQNativeFunctions::IBrowser::GetPromoData);
|
||||
|
||||
// functions for connecting to servers
|
||||
HSQVM_RegisterFunction(sqvm, "CreateServer", "start server with the specified settings", "void", "string,string,string,int", &SQNativeFunctions::IBrowser::CreateServerFromMenu);
|
||||
HSQVM_RegisterFunction(sqvm, "SetEncKeyAndConnect", "set the encryption key to that of the specified server and connects to it", "void", "int", &SQNativeFunctions::IBrowser::SetEncKeyAndConnect);
|
||||
HSQVM_RegisterFunction(sqvm, "JoinPrivateServerFromMenu", "join private server by token", "void", "string", &SQNativeFunctions::IBrowser::JoinPrivateServerFromMenu);
|
||||
HSQVM_RegisterFunction(sqvm, "GetPrivateServerMessage", "get private server join status message", "string", "string", &SQNativeFunctions::IBrowser::GetPrivateServerMessage);
|
||||
HSQVM_RegisterFunction(sqvm, "ConnectToIPFromMenu", "join server by ip and encryption key", "void", "string,string", &SQNativeFunctions::IBrowser::ConnectToIPFromMenu);
|
||||
|
||||
HSQVM_RegisterFunction(sqvm, "GetAvailableMaps", "gets an array of all the available maps that can be used to host a server", "array<string>", "", &SQNativeFunctions::IBrowser::GetAvailableMaps);
|
||||
#endif
|
||||
}
|
||||
|
||||
void RegisterClientScriptFunctions(void* sqvm)
|
||||
{
|
||||
HSQVM_RegisterFunction(sqvm, "ClientNativeTest", "native client function", "void", "", &HSQVM_NativeTest);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers SERVER script functions
|
||||
//---------------------------------------------------------------------------------
|
||||
void RegisterServerScriptFunctions(void* sqvm)
|
||||
{
|
||||
HSQVM_RegisterFunction(sqvm, "ServerNativeTest", "native server function", "void", "", &HSQVM_NativeTest);
|
||||
HSQVM_RegisterFunction(sqvm, "ServerNativeTest", "Native SERVER test function", "void", "", &VSquirrel::SHARED::Script_NativeTest);
|
||||
}
|
||||
|
||||
#ifndef DEDICATED
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers CLIENT script functions
|
||||
//---------------------------------------------------------------------------------
|
||||
void RegisterClientScriptFunctions(void* sqvm)
|
||||
{
|
||||
HSQVM_RegisterFunction(sqvm, "ClientNativeTest", "Native CLIENT test function", "void", "", &VSquirrel::SHARED::Script_NativeTest);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers UI script functions
|
||||
//---------------------------------------------------------------------------------
|
||||
void RegisterUIScriptFunctions(void* sqvm)
|
||||
{
|
||||
HSQVM_RegisterFunction(sqvm, "UINativeTest", "Native UI test function", "void", "", &VSquirrel::SHARED::Script_NativeTest);
|
||||
|
||||
// functions for retrieving server browser data
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerName", "Gets the name of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerName);
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerPlaylist", "Gets the playlist of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerPlaylist);
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerMap", "Gets the map of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerMap);
|
||||
HSQVM_RegisterFunction(sqvm, "GetServerCount", "Gets the number of public servers", "int", "", &VSquirrel::UI::GetServerCount);
|
||||
|
||||
// misc main menu functions
|
||||
HSQVM_RegisterFunction(sqvm, "GetSDKVersion", "Gets the SDK version as a string", "string", "", &VSquirrel::UI::GetSDKVersion);
|
||||
HSQVM_RegisterFunction(sqvm, "GetPromoData", "Gets promo data for specified slot type", "string", "int", &VSquirrel::UI::GetPromoData);
|
||||
|
||||
// functions for connecting to servers
|
||||
HSQVM_RegisterFunction(sqvm, "CreateServer", "Start server with the specified settings", "void", "string,string,string,int", &VSquirrel::UI::CreateServerFromMenu);
|
||||
HSQVM_RegisterFunction(sqvm, "SetEncKeyAndConnect", "Set the encryption key to that of the specified server and connects to it", "void", "int", &VSquirrel::UI::SetEncKeyAndConnect);
|
||||
HSQVM_RegisterFunction(sqvm, "JoinPrivateServerFromMenu", "Joins private server by token", "void", "string", &VSquirrel::UI::JoinPrivateServerFromMenu);
|
||||
HSQVM_RegisterFunction(sqvm, "GetPrivateServerMessage", "Gets private server join status message", "string", "string", &VSquirrel::UI::GetPrivateServerMessage);
|
||||
HSQVM_RegisterFunction(sqvm, "ConnectToIPFromMenu", "Joins server by ip and encryption key", "void", "string,string", &VSquirrel::UI::ConnectToIPFromMenu);
|
||||
|
||||
HSQVM_RegisterFunction(sqvm, "GetAvailableMaps", "Gets an array of all the available maps that can be used to host a server", "array<string>", "", &VSquirrel::UI::GetAvailableMaps);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Origin functions are the last to be registered in the UI VM, we register anything ours below
|
||||
//---------------------------------------------------------------------------------
|
||||
void HSQVM_RegisterOriginFuncs(void* sqvm)
|
||||
{
|
||||
if (sqvm == *p_SQVM_UIVM.RCast<void**>())
|
||||
@ -291,6 +299,7 @@ void HSQVM_RegisterOriginFuncs(void* sqvm)
|
||||
|
||||
return SQVM_RegisterOriginFuncs(sqvm);
|
||||
}
|
||||
#endif // !DEDICATED
|
||||
|
||||
void SQVM_Attach()
|
||||
{
|
||||
@ -298,7 +307,9 @@ void SQVM_Attach()
|
||||
DetourAttach((LPVOID*)&SQVM_WarningFunc, &HSQVM_WarningFunc);
|
||||
DetourAttach((LPVOID*)&SQVM_LoadRson, &HSQVM_LoadRson);
|
||||
DetourAttach((LPVOID*)&SQVM_LoadScript, &HSQVM_LoadScript);
|
||||
#ifndef DEDICATED
|
||||
DetourAttach((LPVOID*)&SQVM_RegisterOriginFuncs, &HSQVM_RegisterOriginFuncs);
|
||||
#endif // !DEDICATED
|
||||
}
|
||||
|
||||
void SQVM_Detach()
|
||||
@ -307,7 +318,9 @@ void SQVM_Detach()
|
||||
DetourDetach((LPVOID*)&SQVM_WarningFunc, &HSQVM_WarningFunc);
|
||||
DetourDetach((LPVOID*)&SQVM_LoadRson, &HSQVM_LoadRson);
|
||||
DetourDetach((LPVOID*)&SQVM_LoadScript, &HSQVM_LoadScript);
|
||||
#ifndef DEDICATED
|
||||
DetourDetach((LPVOID*)&SQVM_RegisterOriginFuncs, &HSQVM_RegisterOriginFuncs);
|
||||
#endif // !DEDICATED
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1,5 +1,11 @@
|
||||
#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)
|
||||
|
||||
struct SQFuncRegistration
|
||||
{
|
||||
const char* m_szScriptName; // 00
|
||||
@ -43,12 +49,6 @@ const static std::string SQVM_ANSI_LOG_T[4] =
|
||||
"\u001b[90mScript(X):"
|
||||
};
|
||||
|
||||
typedef int SQRESULT;
|
||||
#define SQ_OK (1)
|
||||
#define SQ_ERROR (-1)
|
||||
#define SQ_FAILED(res) (res<0)
|
||||
#define SQ_SUCCEEDED(res) (res>=0)
|
||||
|
||||
namespace
|
||||
{
|
||||
/* ==== SQUIRREL ======================================================================================================================================================== */
|
||||
@ -86,7 +86,6 @@ void* HSQVM_LoadRson(const char* szRsonName);
|
||||
bool HSQVM_LoadScript(void* sqvm, const char* szScriptPath, const char* szScriptName, int nFlags);
|
||||
|
||||
void HSQVM_RegisterFunction(void* sqvm, const char* szName, const char* szHelpString, const char* szRetValType, const char* szArgTypes, void* pFunction);
|
||||
int HSQVM_NativeTest(void* sqvm);
|
||||
void HSQVM_RegisterOriginFuncs(void* sqvm);
|
||||
|
||||
void SQVM_Attach();
|
||||
@ -97,12 +96,14 @@ class HSQVM : public IDetour
|
||||
{
|
||||
virtual void debugp()
|
||||
{
|
||||
std::cout << "| FUN: SQVM_PrintFunc : 0x" << std::hex << std::uppercase << p_SQVM_PrintFunc.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_WarningFunc : 0x" << std::hex << std::uppercase << p_SQVM_WarningFunc.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_WarningCmd : 0x" << std::hex << std::uppercase << p_SQVM_WarningCmd.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_LoadScript : 0x" << std::hex << std::uppercase << p_SQVM_LoadScript.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_LoadRson : 0x" << std::hex << std::uppercase << p_SQVM_LoadRson.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_RegisterFunc : 0x" << std::hex << std::uppercase << p_SQVM_RegisterFunc.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_PrintFunc : 0x" << std::hex << std::uppercase << p_SQVM_PrintFunc.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_WarningFunc : 0x" << std::hex << std::uppercase << p_SQVM_WarningFunc.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_WarningCmd : 0x" << std::hex << std::uppercase << p_SQVM_WarningCmd.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_LoadScript : 0x" << std::hex << std::uppercase << p_SQVM_LoadScript.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_LoadRson : 0x" << std::hex << std::uppercase << p_SQVM_LoadRson.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_RegisterFunc : 0x" << std::hex << std::uppercase << p_SQVM_RegisterFunc.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_CreateUIVM : 0x" << std::hex << std::uppercase << p_SQVM_CreateUIVM.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "| FUN: SQVM_RegisterOriginFuncs : 0x" << std::hex << std::uppercase << p_SQVM_RegisterOriginFuncs.GetPtr() << std::setw(npad) << " |" << std::endl;
|
||||
std::cout << "+----------------------------------------------------------------+" << std::endl;
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user