mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Squirrel system restructure
Properly decouple squirrel and game code. This makes it easier to reverse engineer more of this squirrel system, and to compile them as individual libraries later on when moving to CMake to significantly decrease compile times.
This commit is contained in:
parent
96ff01575f
commit
75ccebb4b6
@ -28,7 +28,7 @@
|
||||
//#include "client/cdll_engine_int.h"
|
||||
//#include "materialsystem/cmaterialsystem.h"
|
||||
//#include "studiorender/studiorendercontext.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
//#include "bsplib/bsplib.h"
|
||||
//#include "ebisusdk/EbisuSDK.h"
|
||||
#ifndef DEDICATED
|
||||
|
@ -55,11 +55,6 @@
|
||||
#include "server/persistence.h"
|
||||
#include "server/vengineserver_impl.h"
|
||||
#endif // !CLIENT_DLL
|
||||
#include "squirrel/sqinit.h"
|
||||
#include "squirrel/sqapi.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "squirrel/sqscript.h"
|
||||
#include "squirrel/sqstdaux.h"
|
||||
#include "studiorender/studiorendercontext.h"
|
||||
#include "rtech/rtech_game.h"
|
||||
#include "rtech/rtech_utils.h"
|
||||
@ -104,9 +99,15 @@
|
||||
#include "engine/gl_rsurf.h"
|
||||
#include "engine/debugoverlay.h"
|
||||
#endif // !DEDICATED
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstdaux.h"
|
||||
#include "vscript/languages/squirrel_re/vsquirrel.h"
|
||||
#include "vscript/vscript.h"
|
||||
#include "game/shared/util_shared.h"
|
||||
#include "game/shared/usercmd.h"
|
||||
#include "game/shared/animation.h"
|
||||
#include "game/shared/vscript_shared.h"
|
||||
#ifndef CLIENT_DLL
|
||||
#include "game/server/ai_node.h"
|
||||
#include "game/server/ai_network.h"
|
||||
@ -470,13 +471,6 @@ void DetourRegister() // Register detour classes to be searched and hooked.
|
||||
REGISTER(VCL_Main);
|
||||
#endif // !DEDICATED
|
||||
|
||||
// Squirrel
|
||||
REGISTER(VSqInit);
|
||||
REGISTER(VSqapi);
|
||||
REGISTER(HSQVM);
|
||||
REGISTER(VSquirrelVM);
|
||||
REGISTER(VSqStdAux);
|
||||
|
||||
// RTech
|
||||
REGISTER(V_RTechGame);
|
||||
REGISTER(V_RTechUtils);
|
||||
@ -529,6 +523,16 @@ void DetourRegister() // Register detour classes to be searched and hooked.
|
||||
REGISTER(VDebugOverlay); // !TODO: This also needs to be exposed to server dll!!!
|
||||
#endif // !DEDICATED
|
||||
|
||||
// VScript
|
||||
REGISTER(VSquirrel);
|
||||
REGISTER(VScript);
|
||||
REGISTER(VScriptShared);
|
||||
|
||||
// Squirrel
|
||||
REGISTER(VSquirrelAPI);
|
||||
REGISTER(VSquirrelAUX);
|
||||
REGISTER(VSquirrelVM);
|
||||
|
||||
// Game/shared
|
||||
REGISTER(VUserCmd);
|
||||
REGISTER(VAnimation);
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include "engine/client/cl_rcon.h"
|
||||
#include "engine/shared/shared_rcon.h"
|
||||
#include "engine/net.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
#include "common/igameserverdata.h"
|
||||
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
||||
#ifndef CLIENT_DLL
|
||||
#include "game/server/gameinterface.h"
|
||||
#endif // !CLIENT_DLL
|
||||
#include "squirrel/sqinit.h"
|
||||
#include "game/shared/vscript_shared.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: state machine's main processing loop
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "public/iclientthinkable.h"
|
||||
#include "public/iclientunknown.h"
|
||||
#include "public/ihandleentity.h"
|
||||
#include "public/ivscript.h"
|
||||
#include "public/vscript/ivscript.h"
|
||||
|
||||
|
||||
class C_BaseCombatCharacter
|
||||
|
@ -18,9 +18,6 @@
|
||||
#endif // CLIENT_DLL
|
||||
#include "engine/cmodel_bsp.h"
|
||||
#include "engine/host_state.h"
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "squirrel/sqapi.h"
|
||||
#include "squirrel/sqinit.h"
|
||||
#include "networksystem/pylon.h"
|
||||
#ifndef CLIENT_DLL
|
||||
#include "networksystem/bansystem.h"
|
||||
@ -28,8 +25,10 @@
|
||||
#ifndef DEDICATED
|
||||
#include "networksystem/listmanager.h"
|
||||
#endif // !DEDICATED
|
||||
#include "vscript_shared.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
|
||||
namespace VSquirrel
|
||||
namespace VScriptCode
|
||||
{
|
||||
namespace SHARED
|
||||
{
|
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include "squirrel/sqapi.h"
|
||||
#ifndef VSCRIPT_SHARED_H
|
||||
#define VSCRIPT_SHARED_H
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
|
||||
inline CMemory p_Script_Remote_BeginRegisteringFunctions;
|
||||
inline auto Script_Remote_BeginRegisteringFunctions = p_Script_Remote_BeginRegisteringFunctions.RCast<void* (*)(void)>();
|
||||
@ -14,7 +15,7 @@ inline uint32_t* g_nServerRemoteChecksum = nullptr;
|
||||
inline uint32_t* g_nClientRemoteChecksum = nullptr;
|
||||
#endif // !DEDICATED
|
||||
|
||||
namespace VSquirrel
|
||||
namespace VScriptCode
|
||||
{
|
||||
namespace SHARED
|
||||
{
|
||||
@ -68,7 +69,7 @@ namespace VSquirrel
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VSqInit : public IDetour
|
||||
class VScriptShared : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
||||
@ -103,3 +104,5 @@ class VSqInit : public IDetour
|
||||
virtual void Detach(void) const { }
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // !VSCRIPT_SHARED_H
|
@ -31,11 +31,11 @@ History:
|
||||
#include "networksystem/serverlisting.h"
|
||||
#include "networksystem/pylon.h"
|
||||
#include "networksystem/listmanager.h"
|
||||
#include "squirrel/sqinit.h"
|
||||
#include "vpc/keyvalues.h"
|
||||
#include "vstdlib/callback.h"
|
||||
#include "gameui/IBrowser.h"
|
||||
#include "public/edict.h"
|
||||
#include "game/shared/vscript_shared.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
|
@ -21,7 +21,6 @@ History:
|
||||
#include "windows/id3dx.h"
|
||||
#include "windows/console.h"
|
||||
#include "windows/resource.h"
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "gameui/IConsole.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -1,22 +0,0 @@
|
||||
#ifndef IVSCRIPT_H
|
||||
#define IVSCRIPT_H
|
||||
|
||||
enum ScriptLanguage_t
|
||||
{
|
||||
SL_NONE,
|
||||
SL_GAMEMONKEY,
|
||||
SL_SQUIRREL,
|
||||
SL_LUA,
|
||||
SL_PYTHON,
|
||||
|
||||
SL_DEFAULT = SL_SQUIRREL
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DECLARE_POINTER_HANDLE(HSCRIPT);
|
||||
#define INVALID_HSCRIPT ((HSCRIPT)-1)
|
||||
|
||||
#endif // IVSCRIPT_H
|
102
r5dev/public/vscript/ivscript.h
Normal file
102
r5dev/public/vscript/ivscript.h
Normal file
@ -0,0 +1,102 @@
|
||||
#ifndef IVSCRIPT_H
|
||||
#define IVSCRIPT_H
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
#include "tier1/utlvector.h"
|
||||
#include "datamap.h"
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
||||
DECLARE_POINTER_HANDLE(HSCRIPT);
|
||||
#define INVALID_HSCRIPT ((HSCRIPT)-1)
|
||||
|
||||
typedef int ScriptDataType_t;
|
||||
typedef void* ScriptFunctionBindingStorageType_t;
|
||||
|
||||
enum ScriptLanguage_t
|
||||
{
|
||||
SL_NONE,
|
||||
SL_GAMEMONKEY,
|
||||
SL_SQUIRREL,
|
||||
SL_LUA,
|
||||
SL_PYTHON,
|
||||
|
||||
SL_DEFAULT = SL_SQUIRREL
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
||||
enum ExtendedFieldType
|
||||
{
|
||||
FIELD_TYPEUNKNOWN = FIELD_TYPECOUNT,
|
||||
FIELD_TYPEUNKNOWN1, // Unknown field from R2
|
||||
FIELD_TYPEUNKNOWN2, // Unknown field from R5
|
||||
FIELD_CSTRING,
|
||||
FIELD_HSCRIPT,
|
||||
FIELD_VARIANT,
|
||||
FIELD_TYPEUNKNOWN3,
|
||||
FIELD_TYPEUNKNOWN4,
|
||||
FIELD_TYPEUNKNOWN5,
|
||||
FIELD_TYPEUNKNOWN6,
|
||||
FIELD_ASSET,
|
||||
FIELD_OSTRING
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
||||
struct ScriptFuncDescriptor_t
|
||||
{
|
||||
void Init(const SQChar* scriptName, const SQChar* nativeName,
|
||||
const SQChar* description, const SQChar* returnType,
|
||||
const SQChar* parameters)
|
||||
{
|
||||
m_ScriptName = scriptName;
|
||||
m_Function = nativeName;
|
||||
m_Description = description;
|
||||
m_ReturnType = returnType;
|
||||
m_Parameters = parameters;
|
||||
}
|
||||
|
||||
const SQChar* m_ScriptName;
|
||||
const SQChar* m_Function;
|
||||
const SQChar* m_Description;
|
||||
const SQChar* m_ReturnType;
|
||||
const SQChar* m_Parameters;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
||||
struct ScriptFunctionBinding_t
|
||||
{
|
||||
ScriptFuncDescriptor_t m_Descriptor;
|
||||
bool m_bCheckParams;
|
||||
bool unk29; // Last (new) parameter to 'sq_setparamscheck'
|
||||
|
||||
SQInteger m_nDevLevel; // TODO: confirm, this is a guess.
|
||||
const SQChar* m_pszCodeHook;
|
||||
short unk38; // Second last (new) parameter to 'sq_setparamscheck'
|
||||
|
||||
ScriptDataType_t m_ReturnType;
|
||||
CUtlVector<ScriptDataType_t> m_Parameters;
|
||||
ScriptFunctionBindingStorageType_t m_pFunction;
|
||||
|
||||
void Init(
|
||||
const SQChar* scriptName, const SQChar* nativeName,
|
||||
const SQChar* helpString, const SQChar* returnString,
|
||||
const SQChar* parameters, const ScriptDataType_t returnType,
|
||||
const ScriptFunctionBindingStorageType_t function)
|
||||
{
|
||||
m_Descriptor.Init(scriptName, nativeName, helpString, returnString, parameters);
|
||||
m_bCheckParams = false;
|
||||
unk29 = false;
|
||||
|
||||
m_nDevLevel = 0;
|
||||
m_pszCodeHook = nullptr;
|
||||
unk38 = 0;
|
||||
|
||||
m_ReturnType = returnType;
|
||||
m_pFunction = function;
|
||||
}
|
||||
};
|
||||
static_assert(sizeof(ScriptFunctionBinding_t) == 0x68);
|
||||
|
||||
#endif // IVSCRIPT_H
|
@ -1,452 +0,0 @@
|
||||
//=============================================================================//
|
||||
//
|
||||
// Purpose: Script VM
|
||||
//
|
||||
//=============================================================================//
|
||||
#include "core/stdafx.h"
|
||||
#include "tier0/frametask.h"
|
||||
#include "tier1/cvar.h"
|
||||
#include "squirrel/sqapi.h"
|
||||
#include "squirrel/sqinit.h"
|
||||
#include "squirrel/sqscript.h"
|
||||
#include "pluginsystem/modsystem.h"
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers global constant for target context
|
||||
// Input : *v -
|
||||
// *name -
|
||||
// value -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQRESULT Script_RegisterConstant(CSquirrelVM* s, const SQChar* name, SQInteger value)
|
||||
{
|
||||
return v_Script_RegisterConstant(s, name, value);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers and exposes code functions to target context
|
||||
// Input : *s -
|
||||
// *scriptname -
|
||||
// *nativename -
|
||||
// *helpstring -
|
||||
// *returntype -
|
||||
// *arguments -
|
||||
// *functor -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQRESULT Script_RegisterFunction(CSquirrelVM* s, const SQChar* scriptname, const SQChar* nativename,
|
||||
const SQChar* helpstring, const SQChar* returntype, const SQChar* parameters, void* functor)
|
||||
{
|
||||
ScriptFunctionBinding_t binding;
|
||||
binding.Init(scriptname, nativename, helpstring, returntype, parameters, 5, functor);
|
||||
|
||||
SQRESULT results = v_Script_RegisterFunction(s, &binding, 1);
|
||||
return results;
|
||||
}
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers script functions in SERVER context
|
||||
// Input : *s -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_RegisterServerFunctions(CSquirrelVM* s)
|
||||
{
|
||||
Script_RegisterFunction(s, "SDKNativeTest", "Script_SDKNativeTest", "Native SERVER test function", "void", "", &VSquirrel::SHARED::SDKNativeTest);
|
||||
Script_RegisterFunction(s, "GetSDKVersion", "Script_GetSDKVersion", "Gets the SDK version as a string", "string", "", &VSquirrel::SHARED::GetSDKVersion);
|
||||
|
||||
Script_RegisterFunction(s, "GetNumHumanPlayers", "Script_GetNumHumanPlayers", "Gets the number of human players on the server", "int", "", &VSquirrel::SERVER::GetNumHumanPlayers);
|
||||
Script_RegisterFunction(s, "GetNumFakeClients", "Script_GetNumFakeClients", "Gets the number of bot players on the server", "int", "", &VSquirrel::SERVER::GetNumFakeClients);
|
||||
|
||||
Script_RegisterFunction(s, "GetAvailableMaps", "Script_GetAvailableMaps", "Gets an array of all available maps", "array< string >", "", &VSquirrel::SHARED::GetAvailableMaps);
|
||||
Script_RegisterFunction(s, "GetAvailablePlaylists", "Script_GetAvailablePlaylists", "Gets an array of all available playlists", "array< string >", "", &VSquirrel::SHARED::GetAvailablePlaylists);
|
||||
|
||||
Script_RegisterFunction(s, "KickPlayerByName", "Script_KickPlayerByName", "Kicks a player from the server by name", "void", "string", &VSquirrel::SHARED::KickPlayerByName);
|
||||
Script_RegisterFunction(s, "KickPlayerById", "Script_KickPlayerById", "Kicks a player from the server by handle or nucleus id", "void", "string", &VSquirrel::SHARED::KickPlayerById);
|
||||
|
||||
Script_RegisterFunction(s, "BanPlayerByName", "Script_BanPlayerByName", "Bans a player from the server by name", "void", "string", &VSquirrel::SHARED::BanPlayerByName);
|
||||
Script_RegisterFunction(s, "BanPlayerById", "Script_BanPlayerById", "Bans a player from the server by handle or nucleus id", "void", "string", &VSquirrel::SHARED::BanPlayerById);
|
||||
|
||||
Script_RegisterFunction(s, "UnbanPlayer", "Script_UnbanPlayer", "Unbans a player from the server by nucleus id or ip address", "void", "string", &VSquirrel::SHARED::UnbanPlayer);
|
||||
|
||||
Script_RegisterFunction(s, "ShutdownHostGame", "Script_ShutdownHostGame", "Shuts the local host game down", "void", "", &VSquirrel::SHARED::ShutdownHostGame);
|
||||
|
||||
Script_RegisterFunction(s, "IsDedicated", "Script_IsDedicated", "Returns whether this is a dedicated server", "bool", "", &VSquirrel::SERVER::IsDedicated);
|
||||
}
|
||||
#endif // !CLIENT_DLL
|
||||
|
||||
#ifndef DEDICATED
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers script functions in CLIENT context
|
||||
// Input : *s -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_RegisterClientFunctions(CSquirrelVM* s)
|
||||
{
|
||||
Script_RegisterFunction(s, "SDKNativeTest", "Script_SDKNativeTest", "Native CLIENT test function", "void", "", &VSquirrel::SHARED::SDKNativeTest);
|
||||
Script_RegisterFunction(s, "GetSDKVersion", "Script_GetSDKVersion", "Gets the SDK version as a string", "string", "", &VSquirrel::SHARED::GetSDKVersion);
|
||||
|
||||
Script_RegisterFunction(s, "GetAvailableMaps", "Script_GetAvailableMaps", "Gets an array of all available maps", "array< string >", "", &VSquirrel::SHARED::GetAvailableMaps);
|
||||
Script_RegisterFunction(s, "GetAvailablePlaylists", "Script_GetAvailablePlaylists", "Gets an array of all available playlists", "array< string >", "", &VSquirrel::SHARED::GetAvailablePlaylists);
|
||||
|
||||
Script_RegisterFunction(s, "ShutdownHostGame", "Script_ShutdownHostGame", "Shuts the local host game down", "void", "", &VSquirrel::SHARED::ShutdownHostGame);
|
||||
Script_RegisterFunction(s, "IsClientDLL", "Script_IsClientDLL", "Returns whether this build is client only", "bool", "", &VSquirrel::SHARED::IsClientDLL);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers script functions in UI context
|
||||
// Input : *s -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_RegisterUIFunctions(CSquirrelVM* s)
|
||||
{
|
||||
Script_RegisterFunction(s, "SDKNativeTest", "Script_SDKNativeTest", "Native UI test function", "void", "", &VSquirrel::SHARED::SDKNativeTest);
|
||||
Script_RegisterFunction(s, "GetSDKVersion", "Script_GetSDKVersion", "Gets the SDK version as a string", "string", "", &VSquirrel::SHARED::GetSDKVersion);
|
||||
|
||||
Script_RegisterFunction(s, "RefreshServerList", "Script_RefreshServerList", "Refreshes the public server list and returns the count", "int", "", &VSquirrel::UI::RefreshServerCount);
|
||||
|
||||
// Functions for retrieving server browser data
|
||||
Script_RegisterFunction(s, "GetServerName", "Script_GetServerName", "Gets the name of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerName);
|
||||
Script_RegisterFunction(s, "GetServerDescription", "Script_GetServerDescription", "Gets the description of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerDescription);
|
||||
Script_RegisterFunction(s, "GetServerMap", "Script_GetServerMap", "Gets the map of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerMap);
|
||||
Script_RegisterFunction(s, "GetServerPlaylist", "Script_GetServerPlaylist", "Gets the playlist of the server at the specified index of the server list", "string", "int", &VSquirrel::UI::GetServerPlaylist);
|
||||
Script_RegisterFunction(s, "GetServerCurrentPlayers", "Script_GetServerCurrentPlayers", "Gets the current player count of the server at the specified index of the server list", "int", "int", &VSquirrel::UI::GetServerCurrentPlayers);
|
||||
Script_RegisterFunction(s, "GetServerMaxPlayers", "Script_GetServerMaxPlayers", "Gets the max player count of the server at the specified index of the server list", "int", "int", &VSquirrel::UI::GetServerMaxPlayers);
|
||||
Script_RegisterFunction(s, "GetServerCount", "Script_GetServerCount", "Gets the number of public servers", "int", "", &VSquirrel::UI::GetServerCount);
|
||||
|
||||
// Misc main menu functions
|
||||
Script_RegisterFunction(s, "GetPromoData", "Script_GetPromoData", "Gets promo data for specified slot type", "string", "int", &VSquirrel::UI::GetPromoData);
|
||||
|
||||
// Functions for creating servers
|
||||
Script_RegisterFunction(s, "CreateServer", "Script_CreateServer", "Starts server with the specified settings", "void", "string, string, string, string, int", &VSquirrel::UI::CreateServer);
|
||||
Script_RegisterFunction(s, "IsServerActive", "Script_IsServerActive", "Returns whether the server is active", "bool", "", &VSquirrel::SHARED::IsServerActive);
|
||||
|
||||
// Functions for connecting to servers
|
||||
Script_RegisterFunction(s, "ConnectToServer", "Script_ConnectToServer", "Joins server by ip address and encryption key", "void", "string, string", &VSquirrel::UI::ConnectToServer);
|
||||
Script_RegisterFunction(s, "ConnectToListedServer", "Script_ConnectToListedServer", "Joins listed server by index", "void", "int", &VSquirrel::UI::ConnectToListedServer);
|
||||
Script_RegisterFunction(s, "ConnectToHiddenServer", "Script_ConnectToHiddenServer", "Joins hidden server by token", "void", "string", &VSquirrel::UI::ConnectToHiddenServer);
|
||||
|
||||
Script_RegisterFunction(s, "GetHiddenServerName", "Script_GetHiddenServerName", "Gets hidden server name by token", "string", "string", &VSquirrel::UI::GetHiddenServerName);
|
||||
Script_RegisterFunction(s, "GetAvailableMaps", "Script_GetAvailableMaps", "Gets an array of all available maps", "array< string >", "", &VSquirrel::SHARED::GetAvailableMaps);
|
||||
Script_RegisterFunction(s, "GetAvailablePlaylists", "Script_GetAvailablePlaylists", "Gets an array of all available playlists", "array< string >", "", &VSquirrel::SHARED::GetAvailablePlaylists);
|
||||
#ifndef CLIENT_DLL
|
||||
Script_RegisterFunction(s, "KickPlayerByName", "Script_KickPlayerByName", "Kicks a player from the server by name", "void", "string", &VSquirrel::SHARED::KickPlayerByName);
|
||||
Script_RegisterFunction(s, "KickPlayerById", "Script_KickPlayerById", "Kicks a player from the server by handle or nucleus id", "void", "string", &VSquirrel::SHARED::KickPlayerById);
|
||||
|
||||
Script_RegisterFunction(s, "BanPlayerByName", "Script_BanPlayerByName", "Bans a player from the server by name", "void", "string", &VSquirrel::SHARED::BanPlayerByName);
|
||||
Script_RegisterFunction(s, "BanPlayerById", "Script_BanPlayerById", "Bans a player from the server by handle or nucleus id", "void", "string", &VSquirrel::SHARED::BanPlayerById);
|
||||
|
||||
Script_RegisterFunction(s, "UnbanPlayer", "Script_UnbanPlayer", "Unbans a player from the server by nucleus id or ip address", "void", "string", &VSquirrel::SHARED::UnbanPlayer);
|
||||
#endif // !CLIENT_DLL
|
||||
Script_RegisterFunction(s, "ShutdownHostGame", "Script_ShutdownHostGame", "Shuts the local host game down", "void", "", &VSquirrel::SHARED::ShutdownHostGame);
|
||||
Script_RegisterFunction(s, "IsClientDLL", "Script_IsClientDLL", "Returns whether this build is client only", "bool", "", &VSquirrel::SHARED::IsClientDLL);
|
||||
}
|
||||
#endif // !DEDICATED
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Initialises a Squirrel VM instance
|
||||
// Output : True on success, false on failure
|
||||
//---------------------------------------------------------------------------------
|
||||
bool CSquirrelVM_Init(CSquirrelVM* s, SQCONTEXT context, float curTime)
|
||||
{
|
||||
v_CSquirrelVM_Init(s, context, curTime);
|
||||
|
||||
DevMsg((eDLL_T)context, "Created %s VM: '0x%p'\n", s->GetVM()->_sharedstate->_contextname, s);
|
||||
|
||||
switch (context)
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
g_pServerScript = s;
|
||||
Script_RegisterServerFunctions(s);
|
||||
break;
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
g_pClientScript = s;
|
||||
Script_RegisterClientFunctions(s);
|
||||
break;
|
||||
case SQCONTEXT::UI:
|
||||
g_pUIScript = s;
|
||||
Script_RegisterUIFunctions(s);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
return true; // original func always returns true
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Returns the script VM pointer by context
|
||||
// Input : context -
|
||||
// Output : SQVM*
|
||||
//---------------------------------------------------------------------------------
|
||||
CSquirrelVM* Script_GetScriptHandle(const SQCONTEXT context)
|
||||
{
|
||||
switch (context)
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
return g_pServerScript;
|
||||
#endif // !CLIENT_DLL
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
return g_pClientScript;
|
||||
case SQCONTEXT::UI:
|
||||
return g_pUIScript;
|
||||
#endif // !DEDICATED
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: destroys the signal entry list head
|
||||
// Input : *s -
|
||||
// v -
|
||||
// f -
|
||||
// Output : true on success, false otherwise
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool Script_DestroySignalEntryListHead(CSquirrelVM* s, HSQUIRRELVM v, SQFloat f)
|
||||
{
|
||||
SQBool result = v_Script_DestroySignalEntryListHead(s, v, f);
|
||||
Script_RegisterConstant(s, "DEVELOPER", developer->GetInt());
|
||||
return result;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: prints the global include file the compiler loads for loading scripts
|
||||
// Input : *szRsonName -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQInteger Script_LoadRson(const SQChar* rsonfile)
|
||||
{
|
||||
DevMsg(eDLL_T::ENGINE, "Loading RSON: '%s'\n", rsonfile);
|
||||
return v_Script_LoadRson(rsonfile);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: prints the scripts the compiler loads from global include to be compiled
|
||||
// Input : *v -
|
||||
// *path -
|
||||
// *name -
|
||||
// flags -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool Script_LoadScript(HSQUIRRELVM v, const SQChar* path, const SQChar* name, SQInteger flags)
|
||||
{
|
||||
// search for mod path identifier so the mod can decide where the file is
|
||||
const char* modPath = strstr(path, MOD_SCRIPT_PATH_IDENTIFIER);
|
||||
|
||||
if (modPath)
|
||||
path = &modPath[7]; // skip "::MOD::"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return v_Script_LoadScript(v, path, name, flags);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: parses rson data to get an array of scripts to compile
|
||||
// Input :
|
||||
//---------------------------------------------------------------------------------
|
||||
bool Script_ParseCompileListRSON(SQCONTEXT context, const char* compileListPath, RSON::Node_t* rson, char** scriptArray, int* pScriptCount, char** precompiledScriptArray, int precompiledScriptCount)
|
||||
{
|
||||
return v_Script_ParseCompileListRSON(context, compileListPath, rson, scriptArray, pScriptCount, precompiledScriptArray, precompiledScriptCount);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Compiles and executes input code on target VM by context
|
||||
// Input : *code -
|
||||
// context -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_Execute(const SQChar* code, const SQCONTEXT context)
|
||||
{
|
||||
if (!ThreadInMainThread())
|
||||
{
|
||||
const string scode(code);
|
||||
g_TaskScheduler->Dispatch([scode, context]()
|
||||
{
|
||||
Script_Execute(scode.c_str(), context);
|
||||
}, 0);
|
||||
|
||||
return; // Only run in main thread.
|
||||
}
|
||||
|
||||
CSquirrelVM* s = Script_GetScriptHandle(context);
|
||||
if (!s)
|
||||
{
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "Attempted to run %s script with no handle to VM\n", SQVM_GetContextName(context));
|
||||
return;
|
||||
}
|
||||
|
||||
HSQUIRRELVM v = s->GetVM();
|
||||
if (!v)
|
||||
{
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "Attempted to run %s script while VM isn't initialized\n", SQVM_GetContextName(context));
|
||||
return;
|
||||
}
|
||||
|
||||
SQBufState bufState = SQBufState(code);
|
||||
SQRESULT compileResult = sq_compilebuffer(v, &bufState, "console", -1);
|
||||
|
||||
if (SQ_SUCCEEDED(compileResult))
|
||||
{
|
||||
sq_pushroottable(v);
|
||||
SQRESULT callResult = sq_call(v, 1, false, false);
|
||||
|
||||
if (!SQ_SUCCEEDED(callResult))
|
||||
{
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "Failed to execute %s script \"%s\"\n", SQVM_GetContextName(context), code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Script_SetCompilingVM(CSquirrelVM* vm, RSON::Node_t* rson)
|
||||
{
|
||||
switch (vm->GetContext())
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
{
|
||||
v_Script_SetCompilingVM_SV(vm->GetContext(), rson);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
case SQCONTEXT::UI:
|
||||
{
|
||||
v_Script_SetCompilingVM_UICL(vm->GetContext(), rson);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void CSquirrelVM::CompileModScripts()
|
||||
{
|
||||
for (auto& mod : g_pModSystem->GetModList())
|
||||
{
|
||||
if (!mod.IsEnabled())
|
||||
continue;
|
||||
|
||||
if (!mod.m_bHasScriptCompileList)
|
||||
continue;
|
||||
|
||||
RSON::Node_t* rson = mod.LoadScriptCompileList(); // allocs parsed rson buffer
|
||||
|
||||
if (!rson)
|
||||
Error(GetVM()->GetNativePrintContext(), EXIT_FAILURE, "%s: Failed to load RSON file %s\n", __FUNCTION__, mod.GetScriptCompileListPath().string().c_str());
|
||||
|
||||
const char* scriptPathArray[1024];
|
||||
int scriptCount = 0;
|
||||
|
||||
Script_SetCompilingVM(this, rson);
|
||||
|
||||
if (Script_ParseCompileListRSON(
|
||||
GetContext(),
|
||||
mod.GetScriptCompileListPath().string().c_str(),
|
||||
rson,
|
||||
(char**)scriptPathArray, &scriptCount,
|
||||
nullptr, 0))
|
||||
{
|
||||
std::vector<char*> newScriptPaths;
|
||||
for (int i = 0; i < scriptCount; ++i)
|
||||
{
|
||||
// add "::MOD::" to the start of the script path so it can be identified from Script_LoadScript later
|
||||
// this is so we can avoid script naming conflicts by removing the engine's forced directory of "scripts/vscripts/"
|
||||
// and adding the mod path to the start
|
||||
std::string scriptPath = MOD_SCRIPT_PATH_IDENTIFIER + (mod.GetBasePath() / "scripts/vscripts/" / scriptPathArray[i]).string();
|
||||
char* pszScriptPath = _strdup(scriptPath.c_str());
|
||||
|
||||
// normalise slash direction
|
||||
V_FixSlashes(pszScriptPath);
|
||||
|
||||
newScriptPaths.emplace_back(pszScriptPath);
|
||||
scriptPathArray[i] = pszScriptPath;
|
||||
}
|
||||
|
||||
switch (GetVM()->GetContext())
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
{
|
||||
v_CSquirrelVM_CompileScriptsFromArray_SV(this, GetContext(), (char**)scriptPathArray, scriptCount);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
case SQCONTEXT::UI:
|
||||
{
|
||||
v_CSquirrelVM_CompileScriptsFromArray_UICL(this, GetContext(), (char**)scriptPathArray, scriptCount);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// clean up our allocated script paths
|
||||
for (char* path : newScriptPaths)
|
||||
{
|
||||
delete path;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO[rexx]: clean up allocated RSON memory. example @ 1408B18E2
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifndef DEDICATED
|
||||
bool CSquirrelVM::CompileClientScripts(CSquirrelVM* vm)
|
||||
{
|
||||
HSQUIRRELVM v = vm->GetVM();
|
||||
DevMsg(v->GetNativePrintContext(), (char*)"Loading and compiling script lists\n");
|
||||
|
||||
vm->CompileModScripts();
|
||||
|
||||
return v_CSquirrelVM_CompileClientScripts(vm);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
bool CSquirrelVM::CompileServerScripts(int numPrecompiled)
|
||||
{
|
||||
HSQUIRRELVM v = g_pServerScript->GetVM();
|
||||
|
||||
DevMsg(v->GetNativePrintContext(), (char*)"Loading and compiling script lists\n");
|
||||
|
||||
g_pServerScript->CompileModScripts();
|
||||
|
||||
return v_CSquirrelVM_CompileServerScripts(numPrecompiled);
|
||||
}
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void VSquirrelVM::Attach() const
|
||||
{
|
||||
DetourAttach((LPVOID*)&v_Script_RegisterConstant, &Script_RegisterConstant);
|
||||
DetourAttach((LPVOID*)&v_CSquirrelVM_Init, &CSquirrelVM_Init);
|
||||
DetourAttach((LPVOID*)&v_Script_DestroySignalEntryListHead, &Script_DestroySignalEntryListHead);
|
||||
DetourAttach((LPVOID*)&v_Script_LoadRson, &Script_LoadRson);
|
||||
DetourAttach((LPVOID*)&v_Script_LoadScript, &Script_LoadScript);
|
||||
|
||||
#ifndef DEDICATED
|
||||
DetourAttach((LPVOID*)&v_CSquirrelVM_CompileClientScripts, &CSquirrelVM::CompileClientScripts);
|
||||
#endif
|
||||
#ifndef CLIENT_DLL
|
||||
DetourAttach((LPVOID*)&v_CSquirrelVM_CompileServerScripts, &CSquirrelVM::CompileServerScripts);
|
||||
#endif
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
void VSquirrelVM::Detach() const
|
||||
{
|
||||
DetourDetach((LPVOID*)&v_Script_RegisterConstant, &Script_RegisterConstant);
|
||||
|
||||
DetourDetach((LPVOID*)&v_CSquirrelVM_Init, &CSquirrelVM_Init);
|
||||
DetourDetach((LPVOID*)&v_Script_DestroySignalEntryListHead, &Script_DestroySignalEntryListHead);
|
||||
DetourDetach((LPVOID*)&v_Script_LoadRson, &Script_LoadRson);
|
||||
DetourDetach((LPVOID*)&v_Script_LoadScript, &Script_LoadScript);
|
||||
|
||||
#ifndef DEDICATED
|
||||
DetourDetach((LPVOID*)&v_CSquirrelVM_CompileClientScripts, &CSquirrelVM::CompileClientScripts);
|
||||
#endif
|
||||
#ifndef CLIENT_DLL
|
||||
DetourDetach((LPVOID*)&v_CSquirrelVM_CompileServerScripts, &CSquirrelVM::CompileServerScripts);
|
||||
#endif
|
||||
}
|
@ -1,221 +0,0 @@
|
||||
#pragma once
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "vpc/rson.h"
|
||||
|
||||
#define MOD_SCRIPT_PATH_IDENTIFIER "::MOD::"
|
||||
|
||||
struct ScriptFunctionBinding_t
|
||||
{
|
||||
const SQChar* _scriptname; // 00
|
||||
const SQChar* _nativename; // 08
|
||||
const SQChar* _helpstring; // 10
|
||||
const SQChar* _returntype; // 18
|
||||
const SQChar* _parameters; // 20
|
||||
bool _checkparams; // 28
|
||||
bool unk29; // 29
|
||||
std::int16_t padding1; // 2A
|
||||
SQInteger unk2c; // 2C
|
||||
const SQChar* _codehook; // 30
|
||||
SQInteger unk38; // 38
|
||||
SQInteger _nparamscheck; // 3C
|
||||
CUtlVector<ScriptDataType_t> _vector;// 'm_pFunction' in original code; pending refactor.
|
||||
const void* _functor; // 60
|
||||
|
||||
void Init(
|
||||
const SQChar* scriptname, const SQChar* nativename,
|
||||
const SQChar* helpstring, const SQChar* returntype,
|
||||
const SQChar* parameters, const SQInteger nparamscheck,
|
||||
const void* functor)
|
||||
{
|
||||
_scriptname = scriptname;
|
||||
_nativename = nativename;
|
||||
_helpstring = helpstring;
|
||||
_returntype = returntype;
|
||||
_parameters = parameters;
|
||||
_checkparams = false;
|
||||
unk29 = false;
|
||||
padding1 = 0;
|
||||
unk2c = 0;
|
||||
_codehook = nullptr;
|
||||
unk38 = 0;
|
||||
_nparamscheck = nparamscheck;
|
||||
_functor = functor;
|
||||
}
|
||||
};
|
||||
static_assert(sizeof(ScriptFunctionBinding_t) == 0x68);
|
||||
|
||||
#pragma pack(push, 4)
|
||||
class CSquirrelVM
|
||||
{
|
||||
public:
|
||||
FORCEINLINE HSQUIRRELVM GetVM() const { return m_sqVM; }
|
||||
FORCEINLINE SQCONTEXT GetContext() const { return m_iContext; }
|
||||
|
||||
void CompileModScripts();
|
||||
|
||||
#ifndef DEDICATED
|
||||
static bool CompileClientScripts(CSquirrelVM* vm);
|
||||
#endif
|
||||
#ifndef CLIENT_DLL
|
||||
static bool CompileServerScripts(int numPrecompiled);
|
||||
#endif
|
||||
|
||||
private:
|
||||
SQChar pad0[0x8];
|
||||
HSQUIRRELVM m_sqVM;
|
||||
SQChar pad1[0x8];
|
||||
SQInteger m_nFlags;
|
||||
SQChar pad2[4];
|
||||
SQChar pad3[16];
|
||||
#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
|
||||
SQChar pad4[4];
|
||||
#endif
|
||||
SQInteger m_nTick;
|
||||
SQCONTEXT m_iContext; // 0x38
|
||||
#if !defined (GAMEDLL_S2) && !defined (GAMEDLL_S3)
|
||||
SQChar pad6[4];
|
||||
#endif
|
||||
void* m_pCompareFunc;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
inline CMemory p_Script_RegisterFunction;
|
||||
inline auto v_Script_RegisterFunction = p_Script_RegisterFunction.RCast<SQRESULT(*)(CSquirrelVM* s, ScriptFunctionBinding_t* binding, SQInteger a1)>();
|
||||
|
||||
inline CMemory p_Script_RegisterConstant;
|
||||
inline auto v_Script_RegisterConstant = p_Script_RegisterConstant.RCast<SQRESULT(*)(CSquirrelVM* s, const SQChar* name, SQInteger value)>();
|
||||
|
||||
inline CMemory p_CSquirrelVM_Init;
|
||||
inline auto v_CSquirrelVM_Init = p_CSquirrelVM_Init.RCast<bool(__fastcall*)(CSquirrelVM * s, SQCONTEXT context, float curtime)>();
|
||||
|
||||
inline CMemory p_Script_DestroySignalEntryListHead;
|
||||
inline auto v_Script_DestroySignalEntryListHead = p_Script_DestroySignalEntryListHead.RCast<SQBool(*)(CSquirrelVM* s, HSQUIRRELVM v, SQFloat f)>();
|
||||
|
||||
inline CMemory p_Script_LoadRson;
|
||||
inline auto v_Script_LoadRson = p_Script_LoadRson.RCast<SQInteger(*)(const SQChar* rsonfile)>();
|
||||
|
||||
inline CMemory p_Script_LoadScript;
|
||||
inline auto v_Script_LoadScript = p_Script_LoadScript.RCast<SQBool(*)(HSQUIRRELVM v, const SQChar* path, const SQChar* name, SQInteger flags)>();
|
||||
|
||||
#ifndef DEDICATED
|
||||
inline CMemory p_CSquirrelVM_CompileClientScripts;
|
||||
inline auto v_CSquirrelVM_CompileClientScripts = p_CSquirrelVM_CompileClientScripts.RCast<bool(__fastcall*)(CSquirrelVM* vm)>();
|
||||
|
||||
inline CMemory p_CSquirrelVM_CompileScriptsFromArray_UICL;
|
||||
inline auto v_CSquirrelVM_CompileScriptsFromArray_UICL = p_CSquirrelVM_CompileScriptsFromArray_UICL.RCast<bool(__fastcall*)(CSquirrelVM* vm, SQCONTEXT context, char** scriptArray, int scriptCount)>();
|
||||
|
||||
inline CMemory p_Script_SetCompilingVM_UICL;
|
||||
inline auto v_Script_SetCompilingVM_UICL = p_Script_SetCompilingVM_UICL.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t * rson)>();
|
||||
#endif
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
inline CMemory p_CSquirrelVM_CompileServerScripts;
|
||||
inline auto v_CSquirrelVM_CompileServerScripts = p_CSquirrelVM_CompileServerScripts.RCast<bool(__fastcall*)(int numPrecompiled)>();
|
||||
|
||||
inline CMemory p_CSquirrelVM_CompileScriptsFromArray_SV;
|
||||
inline auto v_CSquirrelVM_CompileScriptsFromArray_SV = p_CSquirrelVM_CompileScriptsFromArray_SV.RCast<bool(__fastcall*)(CSquirrelVM* vm, SQCONTEXT context, char** scriptArray, int scriptCount)>();
|
||||
|
||||
inline CMemory p_Script_SetCompilingVM_SV;
|
||||
inline auto v_Script_SetCompilingVM_SV = p_Script_SetCompilingVM_SV.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t * rson)>();
|
||||
#endif
|
||||
|
||||
inline CMemory p_Script_ParseCompileListRSON;
|
||||
inline auto v_Script_ParseCompileListRSON = p_Script_ParseCompileListRSON.RCast<bool(__fastcall*)(SQCONTEXT ctx, const char* compileListPath, RSON::Node_t* rson, char** scriptArray, int* pScriptCount, char** precompiledScriptArray, int precompiledScriptCount)>();
|
||||
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
inline CSquirrelVM* g_pServerScript;
|
||||
#endif // !CLIENT_DLL
|
||||
|
||||
#ifndef DEDICATED
|
||||
inline CSquirrelVM* g_pClientScript;
|
||||
inline CSquirrelVM* g_pUIScript;
|
||||
#endif // !DEDICATED
|
||||
|
||||
SQRESULT Script_RegisterConstant(CSquirrelVM* s, const SQChar* name, SQInteger value);
|
||||
SQRESULT Script_RegisterFunction(CSquirrelVM* s, const SQChar* scriptname, const SQChar* nativename,
|
||||
const SQChar* helpstring, const SQChar* returntype, const SQChar* arguments, void* functor);
|
||||
void Script_RegisterServerFunctions(CSquirrelVM* s);
|
||||
void Script_RegisterClientFunctions(CSquirrelVM* s);
|
||||
void Script_RegisterUIFunctions(CSquirrelVM* s);
|
||||
|
||||
CSquirrelVM* Script_GetScriptHandle(const SQCONTEXT context);
|
||||
|
||||
SQInteger Script_LoadRson(const SQChar* rsonfile);
|
||||
SQBool Script_LoadScript(HSQUIRRELVM v, const SQChar* path, const SQChar* name, SQInteger flags);
|
||||
|
||||
bool Script_ParseCompileListRSON(SQCONTEXT context, const char* compileListPath, RSON::Node_t* rson, char** scriptArray, int* pScriptCount, char** precompiledScriptArray, int precompiledScriptCount);
|
||||
|
||||
void Script_Execute(const SQChar* code, const SQCONTEXT context);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VSquirrelVM : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
||||
LogFunAdr("Script_RegisterConstant", p_Script_RegisterConstant.GetPtr());
|
||||
LogFunAdr("Script_RegisterFunction", p_Script_RegisterFunction.GetPtr());
|
||||
LogFunAdr("Script_DestroySignalEntryListHead", p_Script_DestroySignalEntryListHead.GetPtr());
|
||||
LogFunAdr("Script_LoadRson", p_Script_LoadRson.GetPtr());
|
||||
LogFunAdr("Script_LoadScript", p_Script_LoadScript.GetPtr());
|
||||
}
|
||||
virtual void GetFun(void) const
|
||||
{
|
||||
p_Script_RegisterConstant = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 30 4C 8B");
|
||||
p_Script_RegisterFunction = g_GameDll.FindPatternSIMD("48 83 EC 38 45 0F B6 C8");
|
||||
|
||||
p_CSquirrelVM_Init = g_GameDll.FindPatternSIMD("E8 ? ? ? ? 0F 28 74 24 ? 48 89 1D ? ? ? ?").FollowNearCallSelf();
|
||||
|
||||
p_Script_DestroySignalEntryListHead = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 56 57 41 56 48 83 EC 50 44 8B 42");
|
||||
p_Script_LoadRson = g_GameDll.FindPatternSIMD("4C 8B DC 49 89 5B 08 57 48 81 EC A0 ?? ?? ?? 33");
|
||||
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
|
||||
p_Script_LoadScript = g_GameDll.FindPatternSIMD("48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 48 89 4C 24 08 55 41 54 41 55 41 56 41 57 48 8D 6C");
|
||||
#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
|
||||
p_Script_LoadScript = g_GameDll.FindPatternSIMD("48 8B C4 48 89 48 08 55 41 56 48 8D 68");
|
||||
#endif
|
||||
v_Script_RegisterConstant = p_Script_RegisterConstant.RCast<SQRESULT(*)(CSquirrelVM*, const SQChar*, SQInteger)>(); /*48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 30 4C 8B*/
|
||||
v_Script_RegisterFunction = p_Script_RegisterFunction.RCast<SQRESULT(*)(CSquirrelVM*, ScriptFunctionBinding_t*, SQInteger)>(); /*48 83 EC 38 45 0F B6 C8*/
|
||||
|
||||
v_CSquirrelVM_Init = p_CSquirrelVM_Init.RCast<bool(__fastcall*)(CSquirrelVM* s, SQCONTEXT context, float curtime)>();
|
||||
v_Script_DestroySignalEntryListHead = p_Script_DestroySignalEntryListHead.RCast<SQBool(*)(CSquirrelVM*, HSQUIRRELVM, SQFloat)>();/*48 89 5C 24 ?? 48 89 6C 24 ?? 56 57 41 56 48 83 EC 50 44 8B 42*/
|
||||
v_Script_LoadRson = p_Script_LoadRson.RCast<SQInteger(*)(const SQChar*)>(); /*4C 8B DC 49 89 5B 08 57 48 81 EC A0 00 00 00 33*/
|
||||
v_Script_LoadScript = p_Script_LoadScript.RCast<SQBool(*)(HSQUIRRELVM, const SQChar*, const SQChar*, SQInteger)>(); /*48 8B C4 48 89 48 08 55 41 56 48 8D 68*/
|
||||
|
||||
#ifndef DEDICATED
|
||||
// cl/ui scripts.rson compiling
|
||||
p_CSquirrelVM_CompileClientScripts = g_GameDll.FindPatternSIMD("E8 ? ? ? ? 88 05 ? ? ? ? 33 C0").FollowNearCallSelf();
|
||||
v_CSquirrelVM_CompileClientScripts = p_CSquirrelVM_CompileClientScripts.RCast<bool(__fastcall*)(CSquirrelVM*)>();
|
||||
|
||||
p_CSquirrelVM_CompileScriptsFromArray_UICL = g_GameDll.FindPatternSIMD("E8 ? ? ? ? 44 0F B6 F0 48 85 DB").FollowNearCallSelf();
|
||||
v_CSquirrelVM_CompileScriptsFromArray_UICL = p_CSquirrelVM_CompileScriptsFromArray_UICL.RCast<bool(__fastcall*)(CSquirrelVM* vm, SQCONTEXT context, char** scriptArray, int scriptCount)>();
|
||||
|
||||
p_Script_SetCompilingVM_UICL = g_GameDll.FindString("Expected bool value for \"IsTestMap\" in \"%s\"\n").FindPatternSelf("48 89", CMemory::Direction::UP, 100);
|
||||
v_Script_SetCompilingVM_UICL = p_Script_SetCompilingVM_UICL.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t* rson)>();
|
||||
#endif
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
// sv scripts.rson compiling
|
||||
p_CSquirrelVM_CompileServerScripts = g_GameDll.FindPatternSIMD("E8 ? ? ? ? 33 DB 88 05 ? ? ? ? ").FollowNearCallSelf();
|
||||
v_CSquirrelVM_CompileServerScripts = p_CSquirrelVM_CompileServerScripts.RCast<bool(__fastcall*)(int)>();
|
||||
|
||||
p_CSquirrelVM_CompileScriptsFromArray_SV = g_GameDll.FindPatternSIMD("E8 ? ? ? ? 0F B6 F0 48 85 DB").FollowNearCallSelf();
|
||||
v_CSquirrelVM_CompileScriptsFromArray_SV = p_CSquirrelVM_CompileScriptsFromArray_SV.RCast<bool(__fastcall*)(CSquirrelVM* vm, SQCONTEXT context, char** scriptArray, int scriptCount)>();
|
||||
|
||||
p_Script_SetCompilingVM_SV = g_GameDll.FindString("Expected bool value for \"IsTestMap\" in \"%s\"\n", 2).FindPatternSelf("48 89", CMemory::Direction::UP, 100);
|
||||
v_Script_SetCompilingVM_SV = p_Script_SetCompilingVM_SV.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t * rson)>();
|
||||
#endif
|
||||
|
||||
p_Script_ParseCompileListRSON = g_GameDll.FindPatternSIMD("4C 89 4C 24 ? 55 41 56");
|
||||
v_Script_ParseCompileListRSON = p_Script_ParseCompileListRSON.RCast<bool(__fastcall*)(SQCONTEXT, const char*, RSON::Node_t*, char**, int*, char**, int)>();
|
||||
|
||||
|
||||
}
|
||||
virtual void GetVar(void) const
|
||||
{
|
||||
}
|
||||
virtual void GetCon(void) const { }
|
||||
virtual void Attach(void) const;
|
||||
virtual void Detach(void) const;
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
@ -1,51 +0,0 @@
|
||||
#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)
|
||||
|
||||
#define SQ_SUSPEND_FLAG -666
|
||||
#define SQ_TAILCALL_FLAG -777
|
||||
#define DONT_FALL_BACK 666
|
||||
//#define EXISTS_FALL_BACK -1
|
||||
|
||||
#define GET_FLAG_RAW 0x00000001
|
||||
#define GET_FLAG_DO_NOT_RAISE_ERROR 0x00000002
|
||||
|
||||
typedef char SQChar;
|
||||
typedef float SQFloat;
|
||||
typedef long SQInteger;
|
||||
typedef unsigned long SQUnsignedInteger;
|
||||
typedef void* SQFunctor;
|
||||
|
||||
typedef SQUnsignedInteger SQBool;
|
||||
typedef SQInteger SQRESULT;
|
||||
|
||||
typedef int ScriptDataType_t;
|
||||
|
||||
enum class SQCONTEXT : SQInteger
|
||||
{
|
||||
SERVER = 0,
|
||||
CLIENT,
|
||||
UI,
|
||||
NONE
|
||||
};
|
||||
|
||||
constexpr const char* s_SqContext[4] =
|
||||
{
|
||||
"SERVER",
|
||||
"CLIENT",
|
||||
"UI",
|
||||
"NONE"
|
||||
};
|
||||
|
||||
constexpr const char* s_ScriptContext[4] =
|
||||
{
|
||||
"Script(S):",
|
||||
"Script(C):",
|
||||
"Script(U):",
|
||||
"Script(X):"
|
||||
};
|
||||
#endif // SQTYPE_H
|
@ -24,7 +24,7 @@
|
||||
#if defined( _X360 )
|
||||
#include "xbox/xbox_console.h"
|
||||
#endif
|
||||
#include "squirrel/sqstdaux.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstdaux.h"
|
||||
#endif // !NETCONSOLE
|
||||
std::mutex g_LogMutex;
|
||||
|
||||
|
@ -100,10 +100,7 @@ class VRSON : public IDetour
|
||||
|
||||
RSON_LoadFromBuffer = p_RSON_LoadFromBuffer.RCast< RSON::Node_t * (__fastcall*)(const char* bufName, char* buf, RSON::eFieldType rootType, __int64 a4, void* a5)>();
|
||||
}
|
||||
virtual void GetVar(void) const
|
||||
{
|
||||
|
||||
}
|
||||
virtual void GetVar(void) const { }
|
||||
virtual void GetCon(void) const { }
|
||||
virtual void Attach(void) const { }
|
||||
virtual void Detach(void) const { }
|
||||
|
@ -75,6 +75,7 @@
|
||||
<ClCompile Include="..\game\shared\collisionproperty.cpp" />
|
||||
<ClCompile Include="..\game\shared\entitylist_base.cpp" />
|
||||
<ClCompile Include="..\game\shared\util_shared.cpp" />
|
||||
<ClCompile Include="..\game\shared\vscript_shared.cpp" />
|
||||
<ClCompile Include="..\inputsystem\inputsystem.cpp" />
|
||||
<ClCompile Include="..\launcher\IApplication.cpp" />
|
||||
<ClCompile Include="..\launcher\launcher.cpp" />
|
||||
@ -131,11 +132,6 @@
|
||||
<ClCompile Include="..\rtech\rtech_game.cpp" />
|
||||
<ClCompile Include="..\rtech\rui\rui.cpp" />
|
||||
<ClCompile Include="..\rtech\stryder\stryder.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqinit.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqscript.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqstdaux.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="..\thirdparty\imgui\misc\imgui_utility.cpp" />
|
||||
<ClCompile Include="..\tier0\commandline.cpp" />
|
||||
<ClCompile Include="..\tier0\cpu.cpp" />
|
||||
@ -174,6 +170,11 @@
|
||||
<ClCompile Include="..\vphysics\physics_collide.cpp" />
|
||||
<ClCompile Include="..\vphysics\QHull.cpp" />
|
||||
<ClCompile Include="..\vpklib\packedstore.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\sqstdlib\sqstdaux.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\vsquirrel.cpp" />
|
||||
<ClCompile Include="..\vscript\vscript.cpp" />
|
||||
<ClCompile Include="..\vstdlib\autocompletefilelist.cpp" />
|
||||
<ClCompile Include="..\vstdlib\callback.cpp" />
|
||||
<ClCompile Include="..\vstdlib\completion.cpp" />
|
||||
@ -270,6 +271,7 @@
|
||||
<ClInclude Include="..\game\shared\takedamageinfo.h" />
|
||||
<ClInclude Include="..\game\shared\usercmd.h" />
|
||||
<ClInclude Include="..\game\shared\util_shared.h" />
|
||||
<ClInclude Include="..\game\shared\vscript_shared.h" />
|
||||
<ClInclude Include="..\inputsystem\ButtonCode.h" />
|
||||
<ClInclude Include="..\inputsystem\inputsystem.h" />
|
||||
<ClInclude Include="..\launcher\IApplication.h" />
|
||||
@ -358,7 +360,6 @@
|
||||
<ClInclude Include="..\public\isnapshotmgr.h" />
|
||||
<ClInclude Include="..\public\isurfacesystem.h" />
|
||||
<ClInclude Include="..\public\ivrenderview.h" />
|
||||
<ClInclude Include="..\public\ivscript.h" />
|
||||
<ClInclude Include="..\public\materialsystem\shader_vcs_version.h" />
|
||||
<ClInclude Include="..\public\model_types.h" />
|
||||
<ClInclude Include="..\public\networkvar.h" />
|
||||
@ -425,13 +426,6 @@
|
||||
<ClInclude Include="..\rtech\rtech_game.h" />
|
||||
<ClInclude Include="..\rtech\rui\rui.h" />
|
||||
<ClInclude Include="..\rtech\stryder\stryder.h" />
|
||||
<ClInclude Include="..\squirrel\sqapi.h" />
|
||||
<ClInclude Include="..\squirrel\sqinit.h" />
|
||||
<ClInclude Include="..\squirrel\sqscript.h" />
|
||||
<ClInclude Include="..\squirrel\sqstate.h" />
|
||||
<ClInclude Include="..\squirrel\sqstdaux.h" />
|
||||
<ClInclude Include="..\squirrel\sqtype.h" />
|
||||
<ClInclude Include="..\squirrel\sqvm.h" />
|
||||
<ClInclude Include="..\studiorender\studiorendercontext.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\detours.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\detver.h" />
|
||||
@ -529,6 +523,12 @@
|
||||
<ClInclude Include="..\vpc\rson.h" />
|
||||
<ClInclude Include="..\vphysics\QHull.h" />
|
||||
<ClInclude Include="..\vpklib\packedstore.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstate.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstdaux.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\squirrel.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqvm.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\vsquirrel.h" />
|
||||
<ClInclude Include="..\vscript\vscript.h" />
|
||||
<ClInclude Include="..\vstdlib\autocompletefilelist.h" />
|
||||
<ClInclude Include="..\vstdlib\callback.h" />
|
||||
<ClInclude Include="..\vstdlib\completion.h" />
|
||||
|
@ -37,9 +37,6 @@
|
||||
<Filter Include="sdk\networksystem">
|
||||
<UniqueIdentifier>{1dd9c7b9-1abc-412a-8e85-928c0d017beb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\squirrel">
|
||||
<UniqueIdentifier>{10a04e38-fd13-476b-92ea-ebbe60803ef6}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="thirdparty">
|
||||
<UniqueIdentifier>{7977cef5-28c7-40ca-be44-394d9f1b75de}</UniqueIdentifier>
|
||||
</Filter>
|
||||
@ -235,6 +232,24 @@
|
||||
<Filter Include="sdk\engine\shared">
|
||||
<UniqueIdentifier>{bef90121-4004-47a7-b338-a41ca8078c12}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript">
|
||||
<UniqueIdentifier>{d5557b58-8087-492b-9533-5a1dfc6343fd}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages">
|
||||
<UniqueIdentifier>{5bf8626a-6284-41ad-87e1-8b71f172a8d3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re">
|
||||
<UniqueIdentifier>{df576a65-b36a-4ec9-85e2-323013dcc28c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\include">
|
||||
<UniqueIdentifier>{98d73628-844c-410a-8e4e-7110df82ec6c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\sqstdlib">
|
||||
<UniqueIdentifier>{88ac540f-8a32-4197-b135-b81d474114a6}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\squirrel">
|
||||
<UniqueIdentifier>{6d8704d4-c50e-4eca-81bf-d3f01afcf84c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\client\cdll_engine_int.cpp">
|
||||
@ -273,12 +288,6 @@
|
||||
<ClCompile Include="..\launcher\IApplication.cpp">
|
||||
<Filter>sdk\launcher</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqvm.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqapi.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vgui\vgui_fpspanel.cpp">
|
||||
<Filter>sdk\vgui</Filter>
|
||||
</ClCompile>
|
||||
@ -321,9 +330,6 @@
|
||||
<ClCompile Include="..\mathlib\IceKey.cpp">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqinit.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vpklib\packedstore.cpp">
|
||||
<Filter>sdk\vpklib</Filter>
|
||||
</ClCompile>
|
||||
@ -468,9 +474,6 @@
|
||||
<ClCompile Include="..\game\shared\animation.cpp">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqstdaux.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\engine\clockdriftmgr.cpp">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClCompile>
|
||||
@ -492,9 +495,6 @@
|
||||
<ClCompile Include="..\tier1\strtools.cpp">
|
||||
<Filter>sdk\tier1</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqscript.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\mathlib\sha1.cpp">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClCompile>
|
||||
@ -696,6 +696,24 @@
|
||||
<ClCompile Include="..\engine\shared\shared_rcon.cpp">
|
||||
<Filter>sdk\engine\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\game\shared\vscript_shared.cpp">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\vscript.cpp">
|
||||
<Filter>sdk\vscript</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\vsquirrel.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqapi.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqvm.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\sqstdlib\sqstdaux.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\sqstdlib</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\client\cdll_engine_int.h">
|
||||
@ -746,12 +764,6 @@
|
||||
<ClInclude Include="..\networksystem\sm_protocol.h">
|
||||
<Filter>sdk\networksystem</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqapi.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqvm.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\thirdparty\detours\include\detver.h">
|
||||
<Filter>thirdparty\detours\include</Filter>
|
||||
</ClInclude>
|
||||
@ -821,9 +833,6 @@
|
||||
<ClInclude Include="..\mathlib\parallel_for.h">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqinit.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\core\resource.h">
|
||||
<Filter>core</Filter>
|
||||
</ClInclude>
|
||||
@ -1034,9 +1043,6 @@
|
||||
<ClInclude Include="..\rtech\stryder\stryder.h">
|
||||
<Filter>sdk\rtech\rui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqtype.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\inetchannel.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
@ -1244,9 +1250,6 @@
|
||||
<ClInclude Include="..\thirdparty\nlohmann\detail\output\binary_writer.hpp">
|
||||
<Filter>thirdparty\nlohmann\detail\output</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqstdaux.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\engine\framesnapshot.h">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClInclude>
|
||||
@ -1262,9 +1265,6 @@
|
||||
<ClInclude Include="..\public\inetmsghandler.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqstate.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\engine\client\client.h">
|
||||
<Filter>sdk\engine\client</Filter>
|
||||
</ClInclude>
|
||||
@ -1283,9 +1283,6 @@
|
||||
<ClInclude Include="..\vpc\kvleaktrace.h">
|
||||
<Filter>sdk\vpc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqscript.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\mathlib\sha1.h">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClInclude>
|
||||
@ -1358,9 +1355,6 @@
|
||||
<ClInclude Include="..\public\icliententity.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\ivscript.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\iconcommand.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
@ -1760,6 +1754,27 @@
|
||||
<ClInclude Include="..\engine\shared\base_rcon.h">
|
||||
<Filter>sdk\engine\shared</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\game\shared\vscript_shared.h">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\vscript.h">
|
||||
<Filter>sdk\vscript</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\vsquirrel.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\squirrel.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqvm.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstate.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstdaux.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\shared\resource\lockedserver.png">
|
||||
|
@ -285,6 +285,7 @@
|
||||
<ClInclude Include="..\game\shared\takedamageinfo.h" />
|
||||
<ClInclude Include="..\game\shared\usercmd.h" />
|
||||
<ClInclude Include="..\game\shared\util_shared.h" />
|
||||
<ClInclude Include="..\game\shared\vscript_shared.h" />
|
||||
<ClInclude Include="..\launcher\IApplication.h" />
|
||||
<ClInclude Include="..\launcher\launcher.h" />
|
||||
<ClInclude Include="..\launcher\prx.h" />
|
||||
@ -358,7 +359,6 @@
|
||||
<ClInclude Include="..\public\iservernetworkable.h" />
|
||||
<ClInclude Include="..\public\iserverunknown.h" />
|
||||
<ClInclude Include="..\public\isnapshotmgr.h" />
|
||||
<ClInclude Include="..\public\ivscript.h" />
|
||||
<ClInclude Include="..\public\model_types.h" />
|
||||
<ClInclude Include="..\public\networkvar.h" />
|
||||
<ClInclude Include="..\public\playerstate.h" />
|
||||
@ -425,13 +425,6 @@
|
||||
<ClInclude Include="..\rtech\stryder\stryder.h" />
|
||||
<ClInclude Include="..\server\persistence.h" />
|
||||
<ClInclude Include="..\server\vengineserver_impl.h" />
|
||||
<ClInclude Include="..\squirrel\sqapi.h" />
|
||||
<ClInclude Include="..\squirrel\sqinit.h" />
|
||||
<ClInclude Include="..\squirrel\sqscript.h" />
|
||||
<ClInclude Include="..\squirrel\sqstate.h" />
|
||||
<ClInclude Include="..\squirrel\sqstdaux.h" />
|
||||
<ClInclude Include="..\squirrel\sqtype.h" />
|
||||
<ClInclude Include="..\squirrel\sqvm.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\detours.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\detver.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\idetour.h" />
|
||||
@ -522,6 +515,12 @@
|
||||
<ClInclude Include="..\vpc\rson.h" />
|
||||
<ClInclude Include="..\vphysics\QHull.h" />
|
||||
<ClInclude Include="..\vpklib\packedstore.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstate.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstdaux.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\squirrel.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqvm.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\vsquirrel.h" />
|
||||
<ClInclude Include="..\vscript\vscript.h" />
|
||||
<ClInclude Include="..\vstdlib\autocompletefilelist.h" />
|
||||
<ClInclude Include="..\vstdlib\callback.h" />
|
||||
<ClInclude Include="..\vstdlib\completion.h" />
|
||||
@ -586,6 +585,7 @@
|
||||
<ClCompile Include="..\game\shared\collisionproperty.cpp" />
|
||||
<ClCompile Include="..\game\shared\entitylist_base.cpp" />
|
||||
<ClCompile Include="..\game\shared\util_shared.cpp" />
|
||||
<ClCompile Include="..\game\shared\vscript_shared.cpp" />
|
||||
<ClCompile Include="..\launcher\IApplication.cpp" />
|
||||
<ClCompile Include="..\launcher\launcher.cpp" />
|
||||
<ClCompile Include="..\launcher\prx.cpp" />
|
||||
@ -640,11 +640,6 @@
|
||||
<ClCompile Include="..\rtech\stryder\stryder.cpp" />
|
||||
<ClCompile Include="..\server\persistence.cpp" />
|
||||
<ClCompile Include="..\server\vengineserver_impl.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqinit.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqscript.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqstdaux.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="..\tier0\commandline.cpp" />
|
||||
<ClCompile Include="..\tier0\cpu.cpp" />
|
||||
<ClCompile Include="..\tier0\cputopology.cpp" />
|
||||
@ -676,6 +671,11 @@
|
||||
<ClCompile Include="..\vphysics\physics_collide.cpp" />
|
||||
<ClCompile Include="..\vphysics\QHull.cpp" />
|
||||
<ClCompile Include="..\vpklib\packedstore.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\sqstdlib\sqstdaux.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\vsquirrel.cpp" />
|
||||
<ClCompile Include="..\vscript\vscript.cpp" />
|
||||
<ClCompile Include="..\vstdlib\autocompletefilelist.cpp" />
|
||||
<ClCompile Include="..\vstdlib\callback.cpp" />
|
||||
<ClCompile Include="..\vstdlib\completion.cpp" />
|
||||
|
@ -28,9 +28,6 @@
|
||||
<Filter Include="sdk\server">
|
||||
<UniqueIdentifier>{8786ae3f-91d3-4eb8-89b7-e2135d143faa}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\squirrel">
|
||||
<UniqueIdentifier>{e88d652e-34a0-44a0-a886-8861315c5b4f}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\tier0">
|
||||
<UniqueIdentifier>{9dc16eaa-182b-42ea-9524-8cc8421829b6}</UniqueIdentifier>
|
||||
</Filter>
|
||||
@ -184,6 +181,24 @@
|
||||
<Filter Include="sdk\engine\shared">
|
||||
<UniqueIdentifier>{4bccf09c-4f8b-4d7e-ab72-54fd8c1fb5cf}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript">
|
||||
<UniqueIdentifier>{b63095aa-67e5-4b31-bcfe-05fa3129e463}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages">
|
||||
<UniqueIdentifier>{5d42095d-1e80-46a9-ac69-8bf90d465576}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re">
|
||||
<UniqueIdentifier>{827424d4-205c-4b16-8014-395a7bb9ff59}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\include">
|
||||
<UniqueIdentifier>{368a28a5-fc39-4b8d-9d5c-c3c6367460c6}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\sqstdlib">
|
||||
<UniqueIdentifier>{d124ed64-2bcf-4234-b17c-58fed3737c5c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\squirrel">
|
||||
<UniqueIdentifier>{4cdd5e98-d7f6-4109-9d68-f060bea42e99}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\common\opcodes.h">
|
||||
@ -240,12 +255,6 @@
|
||||
<ClInclude Include="..\server\vengineserver_impl.h">
|
||||
<Filter>sdk\server</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqapi.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqvm.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\thirdparty\detours\include\detours.h">
|
||||
<Filter>thirdparty\detours\include</Filter>
|
||||
</ClInclude>
|
||||
@ -279,9 +288,6 @@
|
||||
<ClInclude Include="..\mathlib\parallel_for.h">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqinit.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\tier0\interface.h">
|
||||
<Filter>sdk\tier0</Filter>
|
||||
</ClInclude>
|
||||
@ -489,9 +495,6 @@
|
||||
<ClInclude Include="..\materialsystem\cmaterialsystem.h">
|
||||
<Filter>sdk\materialsystem</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqtype.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\inetchannel.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
@ -672,9 +675,6 @@
|
||||
<ClInclude Include="..\thirdparty\nlohmann\detail\macro_scope.hpp">
|
||||
<Filter>thirdparty\nlohmann\detail</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqstdaux.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\engine\framesnapshot.h">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClInclude>
|
||||
@ -690,9 +690,6 @@
|
||||
<ClInclude Include="..\public\inetmsghandler.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqstate.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\engine\client\client.h">
|
||||
<Filter>sdk\engine\client</Filter>
|
||||
</ClInclude>
|
||||
@ -714,9 +711,6 @@
|
||||
<ClInclude Include="..\vpc\kvleaktrace.h">
|
||||
<Filter>sdk\vpc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqscript.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\mathlib\sha1.h">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClInclude>
|
||||
@ -768,9 +762,6 @@
|
||||
<ClInclude Include="..\tier0\memstd.h">
|
||||
<Filter>sdk\tier0</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\ivscript.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\iconvar.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
@ -1155,6 +1146,27 @@
|
||||
<ClInclude Include="..\engine\shared\shared_rcon.h">
|
||||
<Filter>sdk\engine\shared</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\vscript.h">
|
||||
<Filter>sdk\vscript</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\vsquirrel.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstdaux.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\squirrel.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqvm.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstate.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\game\shared\vscript_shared.h">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\common\opcodes.cpp">
|
||||
@ -1196,12 +1208,6 @@
|
||||
<ClCompile Include="..\server\vengineserver_impl.cpp">
|
||||
<Filter>sdk\server</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqapi.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqvm.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vpc\IAppSystem.cpp">
|
||||
<Filter>sdk\vpc</Filter>
|
||||
</ClCompile>
|
||||
@ -1217,9 +1223,6 @@
|
||||
<ClCompile Include="..\mathlib\IceKey.cpp">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqinit.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vpklib\packedstore.cpp">
|
||||
<Filter>sdk\vpklib</Filter>
|
||||
</ClCompile>
|
||||
@ -1346,9 +1349,6 @@
|
||||
<ClCompile Include="..\game\shared\animation.cpp">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqstdaux.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\engine\clockdriftmgr.cpp">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClCompile>
|
||||
@ -1373,9 +1373,6 @@
|
||||
<ClCompile Include="..\tier1\strtools.cpp">
|
||||
<Filter>sdk\tier1</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqscript.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\mathlib\sha1.cpp">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClCompile>
|
||||
@ -1562,6 +1559,24 @@
|
||||
<ClCompile Include="..\engine\shared\shared_rcon.cpp">
|
||||
<Filter>sdk\engine\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\vscript.cpp">
|
||||
<Filter>sdk\vscript</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\vsquirrel.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\sqstdlib\sqstdaux.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\sqstdlib</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqapi.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqvm.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\game\shared\vscript_shared.cpp">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\Dedicated.def" />
|
||||
|
@ -91,6 +91,7 @@
|
||||
<ClCompile Include="..\game\shared\collisionproperty.cpp" />
|
||||
<ClCompile Include="..\game\shared\entitylist_base.cpp" />
|
||||
<ClCompile Include="..\game\shared\util_shared.cpp" />
|
||||
<ClCompile Include="..\game\shared\vscript_shared.cpp" />
|
||||
<ClCompile Include="..\inputsystem\inputsystem.cpp" />
|
||||
<ClCompile Include="..\launcher\IApplication.cpp" />
|
||||
<ClCompile Include="..\launcher\launcher.cpp" />
|
||||
@ -150,11 +151,6 @@
|
||||
<ClCompile Include="..\rtech\stryder\stryder.cpp" />
|
||||
<ClCompile Include="..\server\persistence.cpp" />
|
||||
<ClCompile Include="..\server\vengineserver_impl.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqinit.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqscript.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqstdaux.cpp" />
|
||||
<ClCompile Include="..\squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="..\thirdparty\imgui\misc\imgui_utility.cpp" />
|
||||
<ClCompile Include="..\tier0\commandline.cpp" />
|
||||
<ClCompile Include="..\tier0\cpu.cpp" />
|
||||
@ -193,6 +189,11 @@
|
||||
<ClCompile Include="..\vphysics\physics_collide.cpp" />
|
||||
<ClCompile Include="..\vphysics\QHull.cpp" />
|
||||
<ClCompile Include="..\vpklib\packedstore.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\sqstdlib\sqstdaux.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqapi.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqvm.cpp" />
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\vsquirrel.cpp" />
|
||||
<ClCompile Include="..\vscript\vscript.cpp" />
|
||||
<ClCompile Include="..\vstdlib\autocompletefilelist.cpp" />
|
||||
<ClCompile Include="..\vstdlib\callback.cpp" />
|
||||
<ClCompile Include="..\vstdlib\completion.cpp" />
|
||||
@ -312,6 +313,7 @@
|
||||
<ClInclude Include="..\game\shared\takedamageinfo.h" />
|
||||
<ClInclude Include="..\game\shared\usercmd.h" />
|
||||
<ClInclude Include="..\game\shared\util_shared.h" />
|
||||
<ClInclude Include="..\game\shared\vscript_shared.h" />
|
||||
<ClInclude Include="..\inputsystem\ButtonCode.h" />
|
||||
<ClInclude Include="..\inputsystem\inputsystem.h" />
|
||||
<ClInclude Include="..\launcher\IApplication.h" />
|
||||
@ -410,7 +412,6 @@
|
||||
<ClInclude Include="..\public\isnapshotmgr.h" />
|
||||
<ClInclude Include="..\public\isurfacesystem.h" />
|
||||
<ClInclude Include="..\public\ivrenderview.h" />
|
||||
<ClInclude Include="..\public\ivscript.h" />
|
||||
<ClInclude Include="..\public\materialsystem\shader_vcs_version.h" />
|
||||
<ClInclude Include="..\public\model_types.h" />
|
||||
<ClInclude Include="..\public\networkvar.h" />
|
||||
@ -473,6 +474,7 @@
|
||||
<ClInclude Include="..\public\utility\sigcache.h" />
|
||||
<ClInclude Include="..\public\utility\utility.h" />
|
||||
<ClInclude Include="..\public\utility\vtable.h" />
|
||||
<ClInclude Include="..\public\vscript\ivscript.h" />
|
||||
<ClInclude Include="..\public\worldsize.h" />
|
||||
<ClInclude Include="..\rtech\rtech_utils.h" />
|
||||
<ClInclude Include="..\rtech\rtech_game.h" />
|
||||
@ -480,13 +482,6 @@
|
||||
<ClInclude Include="..\rtech\stryder\stryder.h" />
|
||||
<ClInclude Include="..\server\persistence.h" />
|
||||
<ClInclude Include="..\server\vengineserver_impl.h" />
|
||||
<ClInclude Include="..\squirrel\sqapi.h" />
|
||||
<ClInclude Include="..\squirrel\sqinit.h" />
|
||||
<ClInclude Include="..\squirrel\sqscript.h" />
|
||||
<ClInclude Include="..\squirrel\sqstate.h" />
|
||||
<ClInclude Include="..\squirrel\sqstdaux.h" />
|
||||
<ClInclude Include="..\squirrel\sqtype.h" />
|
||||
<ClInclude Include="..\squirrel\sqvm.h" />
|
||||
<ClInclude Include="..\studiorender\studiorendercontext.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\detours.h" />
|
||||
<ClInclude Include="..\thirdparty\detours\include\detver.h" />
|
||||
@ -583,6 +578,12 @@
|
||||
<ClInclude Include="..\vpc\rson.h" />
|
||||
<ClInclude Include="..\vphysics\QHull.h" />
|
||||
<ClInclude Include="..\vpklib\packedstore.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstate.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstdaux.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\squirrel.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqvm.h" />
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\vsquirrel.h" />
|
||||
<ClInclude Include="..\vscript\vscript.h" />
|
||||
<ClInclude Include="..\vstdlib\autocompletefilelist.h" />
|
||||
<ClInclude Include="..\vstdlib\callback.h" />
|
||||
<ClInclude Include="..\vstdlib\completion.h" />
|
||||
|
@ -40,9 +40,6 @@
|
||||
<Filter Include="sdk\server">
|
||||
<UniqueIdentifier>{525505fd-c8bb-453c-8cce-e11123499ae9}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\squirrel">
|
||||
<UniqueIdentifier>{10a04e38-fd13-476b-92ea-ebbe60803ef6}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="thirdparty">
|
||||
<UniqueIdentifier>{7977cef5-28c7-40ca-be44-394d9f1b75de}</UniqueIdentifier>
|
||||
</Filter>
|
||||
@ -244,6 +241,27 @@
|
||||
<Filter Include="sdk\engine\shared">
|
||||
<UniqueIdentifier>{f3335ce8-0956-4d3c-9d12-ca2bd5646d8c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\public\vscript">
|
||||
<UniqueIdentifier>{306af380-9492-405e-975f-b4d8f8edb33c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript">
|
||||
<UniqueIdentifier>{06713de9-e726-48d4-876f-6be67af39e24}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages">
|
||||
<UniqueIdentifier>{0cf85fa4-0555-46fa-85d3-810380aa3278}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re">
|
||||
<UniqueIdentifier>{5d93bf0c-25a1-486d-bdf8-4de0f2bf1b7d}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\squirrel">
|
||||
<UniqueIdentifier>{8ae5d70b-05b8-46db-8546-0a1d0cd207f2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\sqstdlib">
|
||||
<UniqueIdentifier>{d4aaa740-265b-4125-8b3d-9439a3d4bdf8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="sdk\vscript\languages\squirrel_re\include">
|
||||
<UniqueIdentifier>{e0afe585-b0c4-4647-af69-1fa709d7e080}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\client\vengineclient_impl.cpp">
|
||||
@ -288,12 +306,6 @@
|
||||
<ClCompile Include="..\server\vengineserver_impl.cpp">
|
||||
<Filter>sdk\server</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqvm.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqapi.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vgui\vgui_fpspanel.cpp">
|
||||
<Filter>sdk\vgui</Filter>
|
||||
</ClCompile>
|
||||
@ -336,9 +348,6 @@
|
||||
<ClCompile Include="..\mathlib\IceKey.cpp">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqinit.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vpklib\packedstore.cpp">
|
||||
<Filter>sdk\vpklib</Filter>
|
||||
</ClCompile>
|
||||
@ -492,9 +501,6 @@
|
||||
<ClCompile Include="..\game\shared\animation.cpp">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqstdaux.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\engine\clockdriftmgr.cpp">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClCompile>
|
||||
@ -522,9 +528,6 @@
|
||||
<ClCompile Include="..\tier1\strtools.cpp">
|
||||
<Filter>sdk\tier1</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\squirrel\sqscript.cpp">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\mathlib\sha1.cpp">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClCompile>
|
||||
@ -762,6 +765,24 @@
|
||||
<ClCompile Include="..\engine\shared\shared_rcon.cpp">
|
||||
<Filter>sdk\engine\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\vscript.cpp">
|
||||
<Filter>sdk\vscript</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\game\shared\vscript_shared.cpp">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqvm.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\squirrel\sqapi.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\squirrel</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\sqstdlib\sqstdaux.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\sqstdlib</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vscript\languages\squirrel_re\vsquirrel.cpp">
|
||||
<Filter>sdk\vscript\languages\squirrel_re</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\client\cdll_engine_int.h">
|
||||
@ -818,12 +839,6 @@
|
||||
<ClInclude Include="..\server\vengineserver_impl.h">
|
||||
<Filter>sdk\server</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqapi.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqvm.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\thirdparty\detours\include\detver.h">
|
||||
<Filter>thirdparty\detours\include</Filter>
|
||||
</ClInclude>
|
||||
@ -893,9 +908,6 @@
|
||||
<ClInclude Include="..\mathlib\parallel_for.h">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqinit.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\core\resource.h">
|
||||
<Filter>core</Filter>
|
||||
</ClInclude>
|
||||
@ -1124,9 +1136,6 @@
|
||||
<ClInclude Include="..\rtech\stryder\stryder.h">
|
||||
<Filter>sdk\rtech\stryder</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqtype.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\inetchannel.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
@ -1334,9 +1343,6 @@
|
||||
<ClInclude Include="..\thirdparty\nlohmann\detail\output\binary_writer.hpp">
|
||||
<Filter>thirdparty\nlohmann\detail\output</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqstdaux.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\engine\clockdriftmgr.h">
|
||||
<Filter>sdk\engine</Filter>
|
||||
</ClInclude>
|
||||
@ -1352,9 +1358,6 @@
|
||||
<ClInclude Include="..\public\inetmsghandler.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqstate.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\engine\server\sv_main.h">
|
||||
<Filter>sdk\engine\server</Filter>
|
||||
</ClInclude>
|
||||
@ -1382,9 +1385,6 @@
|
||||
<ClInclude Include="..\vpc\kvleaktrace.h">
|
||||
<Filter>sdk\vpc</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\squirrel\sqscript.h">
|
||||
<Filter>sdk\squirrel</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\mathlib\sha1.h">
|
||||
<Filter>sdk\mathlib</Filter>
|
||||
</ClInclude>
|
||||
@ -1466,9 +1466,6 @@
|
||||
<ClInclude Include="..\public\iclientrenderable.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\ivscript.h">
|
||||
<Filter>sdk\public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\game\client\viewrender.h">
|
||||
<Filter>sdk\game\client</Filter>
|
||||
</ClInclude>
|
||||
@ -1931,6 +1928,30 @@
|
||||
<ClInclude Include="..\engine\shared\shared_rcon.h">
|
||||
<Filter>sdk\engine\shared</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\public\vscript\ivscript.h">
|
||||
<Filter>sdk\public\vscript</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\vscript.h">
|
||||
<Filter>sdk\vscript</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\game\shared\vscript_shared.h">
|
||||
<Filter>sdk\game\shared</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstdaux.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\squirrel.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqstate.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\include\sqvm.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vscript\languages\squirrel_re\vsquirrel.h">
|
||||
<Filter>sdk\vscript\languages\squirrel_re</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\shared\resource\lockedserver.png">
|
||||
|
@ -1,6 +1,6 @@
|
||||
#ifndef SQSTATE_H
|
||||
#define SQSTATE_H
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "squirrel.h"
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct SQSharedState
|
@ -1,5 +1,5 @@
|
||||
#pragma once
|
||||
#include "sqtype.h"
|
||||
#include "squirrel.h"
|
||||
#include "sqvm.h"
|
||||
|
||||
extern bool g_bSQAuxError;
|
||||
@ -13,7 +13,7 @@ inline CMemory p_sqstd_aux_badlogic;
|
||||
inline auto v_sqstd_aux_badlogic = p_sqstd_aux_badlogic.RCast<SQInteger(*)(HSQUIRRELVM v, __m128i* a2, __m128i* a3)>();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VSqStdAux : public IDetour
|
||||
class VSquirrelAUX : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
@ -1,6 +1,32 @@
|
||||
#pragma once
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#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)
|
||||
|
||||
#define SQ_SUSPEND_FLAG -666
|
||||
#define SQ_TAILCALL_FLAG -777
|
||||
#define DONT_FALL_BACK 666
|
||||
//#define EXISTS_FALL_BACK -1
|
||||
|
||||
#define GET_FLAG_RAW 0x00000001
|
||||
#define GET_FLAG_DO_NOT_RAISE_ERROR 0x00000002
|
||||
|
||||
typedef char SQChar;
|
||||
typedef float SQFloat;
|
||||
typedef long SQInteger;
|
||||
typedef unsigned long SQUnsignedInteger;
|
||||
typedef void* SQFunctor;
|
||||
|
||||
typedef SQUnsignedInteger SQBool;
|
||||
typedef SQInteger SQRESULT;
|
||||
|
||||
typedef int ScriptDataType_t;
|
||||
|
||||
typedef struct SQVM* HSQUIRRELVM;
|
||||
struct SQBufState;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
SQRESULT sq_pushroottable(HSQUIRRELVM v);
|
||||
@ -53,7 +79,7 @@ inline CMemory p_sq_call;
|
||||
inline auto v_sq_call = p_sq_call.RCast<SQRESULT(*)(HSQUIRRELVM v, SQInteger params, SQBool retval, SQBool raiseerror)>();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VSqapi : public IDetour
|
||||
class VSquirrelAPI : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
||||
@ -110,3 +136,4 @@ class VSqapi : public IDetour
|
||||
virtual void Detach(void) const;
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#endif // SQTYPE_H
|
@ -1,9 +1,17 @@
|
||||
#pragma once
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "squirrel/sqstate.h"
|
||||
#ifndef DEDICATED
|
||||
#include "client/cdll_engine_int.h"
|
||||
#endif // !DEDICATED
|
||||
#include "squirrel.h"
|
||||
#include "sqstate.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
enum class SQCONTEXT : SQInteger
|
||||
{
|
||||
SERVER = 0,
|
||||
CLIENT,
|
||||
UI,
|
||||
NONE
|
||||
};
|
||||
|
||||
struct SQVM
|
||||
{
|
||||
@ -55,7 +63,6 @@ struct SQVM
|
||||
#endif
|
||||
SQInteger _nnativecalls;
|
||||
};
|
||||
typedef SQVM* HSQUIRRELVM;
|
||||
|
||||
/* ==== SQUIRREL ======================================================================================================================================================== */
|
||||
inline CMemory p_SQVM_PrintFunc;
|
||||
@ -90,7 +97,7 @@ const SQChar* SQVM_GetContextName(SQCONTEXT context);
|
||||
const SQCONTEXT SQVM_GetContextIndex(HSQUIRRELVM v);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class HSQVM : public IDetour
|
||||
class VSquirrelVM : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
@ -6,8 +6,8 @@
|
||||
|
||||
#include "core/stdafx.h"
|
||||
#include "tier0/tslist.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "squirrel/sqstdaux.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstdaux.h"
|
||||
|
||||
bool g_bSQAuxError = false;
|
||||
bool g_bSQAuxBadLogic = false;
|
||||
@ -29,13 +29,13 @@ SQInteger sqstd_aux_badlogic(HSQUIRRELVM v, __m128i* a2, __m128i* a3)
|
||||
return results;
|
||||
}
|
||||
|
||||
void VSqStdAux::Attach() const
|
||||
void VSquirrelAUX::Attach() const
|
||||
{
|
||||
DetourAttach(&v_sqstd_aux_printerror, &sqstd_aux_printerror);
|
||||
DetourAttach(&v_sqstd_aux_badlogic, &sqstd_aux_badlogic);
|
||||
}
|
||||
|
||||
void VSqStdAux::Detach() const
|
||||
void VSquirrelAUX::Detach() const
|
||||
{
|
||||
DetourDetach(&v_sqstd_aux_printerror, &sqstd_aux_printerror);
|
||||
DetourDetach(&v_sqstd_aux_badlogic, &sqstd_aux_badlogic);
|
@ -5,8 +5,8 @@
|
||||
//=============================================================================//
|
||||
|
||||
#include "core/stdafx.h"
|
||||
#include "squirrel/sqapi.h"
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
SQChar* sq_getstring(HSQUIRRELVM v, SQInteger i)
|
||||
@ -86,7 +86,7 @@ SQRESULT sq_call(HSQUIRRELVM v, SQInteger params, SQBool retval, SQBool raiseerr
|
||||
return v_sq_call(v, params, retval, raiseerror);
|
||||
}
|
||||
|
||||
void VSqapi::Attach() const
|
||||
void VSquirrelAPI::Attach() const
|
||||
{
|
||||
DetourAttach(&v_sq_pushroottable, &sq_pushroottable);
|
||||
DetourAttach(&v_sq_pushbool, &sq_pushbool);
|
||||
@ -101,7 +101,7 @@ void VSqapi::Attach() const
|
||||
DetourAttach(&v_sq_call, &sq_call);
|
||||
}
|
||||
|
||||
void VSqapi::Detach() const
|
||||
void VSquirrelAPI::Detach() const
|
||||
{
|
||||
DetourDetach(&v_sq_pushroottable, &sq_pushroottable);
|
||||
DetourDetach(&v_sq_pushbool, &sq_pushbool);
|
@ -17,11 +17,10 @@
|
||||
#include "vgui/vgui_debugpanel.h"
|
||||
#include "gameui/IConsole.h"
|
||||
#endif // !DEDICATED
|
||||
#include "squirrel/sqtype.h"
|
||||
#include "squirrel/sqvm.h"
|
||||
#include "squirrel/sqinit.h"
|
||||
#include "squirrel/sqstdaux.h"
|
||||
#include "squirrel/sqstate.h"
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstate.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstdaux.h"
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: prints the output of each VM to the console
|
||||
@ -213,7 +212,7 @@ const SQCONTEXT SQVM_GetContextIndex(HSQUIRRELVM v)
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void HSQVM::Attach() const
|
||||
void VSquirrelVM::Attach() const
|
||||
{
|
||||
DetourAttach((LPVOID*)&v_SQVM_PrintFunc, &SQVM_PrintFunc);
|
||||
DetourAttach((LPVOID*)&v_SQVM_WarningFunc, &SQVM_WarningFunc);
|
||||
@ -221,7 +220,7 @@ void HSQVM::Attach() const
|
||||
DetourAttach((LPVOID*)&v_SQVM_LogicError, &SQVM_LogicError);
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
void HSQVM::Detach() const
|
||||
void VSquirrelVM::Detach() const
|
||||
{
|
||||
DetourDetach((LPVOID*)&v_SQVM_PrintFunc, &SQVM_PrintFunc);
|
||||
DetourDetach((LPVOID*)&v_SQVM_WarningFunc, &SQVM_WarningFunc);
|
208
r5dev/vscript/languages/squirrel_re/vsquirrel.cpp
Normal file
208
r5dev/vscript/languages/squirrel_re/vsquirrel.cpp
Normal file
@ -0,0 +1,208 @@
|
||||
//===============================================================================//
|
||||
//
|
||||
// Purpose: VSquirrel VM
|
||||
//
|
||||
//===============================================================================//
|
||||
#include "core/stdafx.h"
|
||||
#include "tier1/cvar.h"
|
||||
#include "vscript/vscript.h"
|
||||
#include "vsquirrel.h"
|
||||
#include "pluginsystem/modsystem.h"
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Initialises a Squirrel VM instance
|
||||
// Output : True on success, false on failure
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool CSquirrelVM::Init(CSquirrelVM* s, SQCONTEXT context, SQFloat curTime)
|
||||
{
|
||||
// original func always returns true, added check just in case.
|
||||
if (!v_CSquirrelVM_Init(s, context, curTime))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
DevMsg((eDLL_T)context, "Created %s VM: '0x%p'\n", s->GetVM()->_sharedstate->_contextname, s);
|
||||
|
||||
switch (context)
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
g_pServerScript = s;
|
||||
Script_RegisterServerFunctions(s);
|
||||
break;
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
g_pClientScript = s;
|
||||
Script_RegisterClientFunctions(s);
|
||||
break;
|
||||
case SQCONTEXT::UI:
|
||||
g_pUIScript = s;
|
||||
Script_RegisterUIFunctions(s);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: destroys the signal entry list head
|
||||
// Input : *s -
|
||||
// v -
|
||||
// f -
|
||||
// Output : true on success, false otherwise
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool CSquirrelVM::DestroySignalEntryListHead(CSquirrelVM* s, HSQUIRRELVM v, SQFloat f)
|
||||
{
|
||||
SQBool result = v_CSquirrelVM_DestroySignalEntryListHead(s, v, f);
|
||||
s->RegisterConstant("DEVELOPER", developer->GetInt());
|
||||
return result;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers a global constant
|
||||
// Input : *name -
|
||||
// value -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQRESULT CSquirrelVM::RegisterConstant(const SQChar* name, SQInteger value)
|
||||
{
|
||||
return v_CSquirrelVM_RegisterConstant(this, name, value);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers a code function
|
||||
// Input : *s -
|
||||
// *scriptName -
|
||||
// *nativeName -
|
||||
// *helpString -
|
||||
// *returnString -
|
||||
// *parameters -
|
||||
// *function -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQRESULT CSquirrelVM::RegisterFunction(const SQChar* scriptName, const SQChar* nativeName,
|
||||
const SQChar* helpString, const SQChar* returnString, const SQChar* parameters, void* function)
|
||||
{
|
||||
ScriptFunctionBinding_t binding;
|
||||
binding.Init(scriptName, nativeName, helpString, returnString, parameters, 5, function);
|
||||
|
||||
SQRESULT results = v_CSquirrelVM_RegisterFunction(this, &binding, 1);
|
||||
return results;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: sets current VM as the global precompiler
|
||||
// Input : *name -
|
||||
// value -
|
||||
//---------------------------------------------------------------------------------
|
||||
void CSquirrelVM::SetAsCompiler(RSON::Node_t* rson)
|
||||
{
|
||||
const SQCONTEXT context = GetContext();
|
||||
switch (context)
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
{
|
||||
v_Script_SetServerPrecompiler(context, rson);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
case SQCONTEXT::UI:
|
||||
{
|
||||
v_Script_SetClientPrecompiler(context, rson);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Precompiles mod scripts
|
||||
//---------------------------------------------------------------------------------
|
||||
void CSquirrelVM::CompileModScripts()
|
||||
{
|
||||
for (auto& mod : g_pModSystem->GetModList())
|
||||
{
|
||||
if (!mod.IsEnabled())
|
||||
continue;
|
||||
|
||||
if (!mod.m_bHasScriptCompileList)
|
||||
continue;
|
||||
|
||||
RSON::Node_t* rson = mod.LoadScriptCompileList(); // allocs parsed rson buffer
|
||||
|
||||
if (!rson)
|
||||
Error(GetVM()->GetNativePrintContext(), EXIT_FAILURE, "%s: Failed to load RSON file %s\n", __FUNCTION__, mod.GetScriptCompileListPath().string().c_str());
|
||||
|
||||
const char* scriptPathArray[MAX_PRECOMPILED_SCRIPTS];
|
||||
int scriptCount = 0;
|
||||
|
||||
SetAsCompiler(rson);
|
||||
|
||||
if (Script_ParseScriptList(
|
||||
GetContext(),
|
||||
mod.GetScriptCompileListPath().string().c_str(),
|
||||
rson,
|
||||
(char**)scriptPathArray, &scriptCount,
|
||||
nullptr, 0))
|
||||
{
|
||||
std::vector<char*> newScriptPaths;
|
||||
for (int i = 0; i < scriptCount; ++i)
|
||||
{
|
||||
// add "::MOD::" to the start of the script path so it can be identified from Script_LoadScript later
|
||||
// this is so we can avoid script naming conflicts by removing the engine's forced directory of "scripts/vscripts/"
|
||||
// and adding the mod path to the start
|
||||
std::string scriptPath = MOD_SCRIPT_PATH_IDENTIFIER + (mod.GetBasePath() / "scripts/vscripts/" / scriptPathArray[i]).string();
|
||||
char* pszScriptPath = _strdup(scriptPath.c_str());
|
||||
|
||||
// normalise slash direction
|
||||
V_FixSlashes(pszScriptPath);
|
||||
|
||||
newScriptPaths.emplace_back(pszScriptPath);
|
||||
scriptPathArray[i] = pszScriptPath;
|
||||
}
|
||||
|
||||
switch (GetVM()->GetContext())
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
{
|
||||
v_CSquirrelVM_PrecompileServerScripts(this, GetContext(), (char**)scriptPathArray, scriptCount);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
case SQCONTEXT::UI:
|
||||
{
|
||||
v_CSquirrelVM_PrecompileClientScripts(this, GetContext(), (char**)scriptPathArray, scriptCount);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// clean up our allocated script paths
|
||||
for (char* path : newScriptPaths)
|
||||
{
|
||||
delete path;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO[rexx]: clean up allocated RSON memory. example @ 1408B18E2
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void VSquirrel::Attach() const
|
||||
{
|
||||
DetourAttach((LPVOID*)&v_CSquirrelVM_Init, &CSquirrelVM::Init);
|
||||
DetourAttach((LPVOID*)&v_CSquirrelVM_DestroySignalEntryListHead, &CSquirrelVM::DestroySignalEntryListHead);
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
void VSquirrel::Detach() const
|
||||
{
|
||||
DetourDetach((LPVOID*)&v_CSquirrelVM_Init, &CSquirrelVM::Init);
|
||||
DetourDetach((LPVOID*)&v_CSquirrelVM_DestroySignalEntryListHead, &CSquirrelVM::DestroySignalEntryListHead);
|
||||
}
|
127
r5dev/vscript/languages/squirrel_re/vsquirrel.h
Normal file
127
r5dev/vscript/languages/squirrel_re/vsquirrel.h
Normal file
@ -0,0 +1,127 @@
|
||||
#ifndef VSQUIRREL_H
|
||||
#define VSQUIRREL_H
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstate.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
#include "vscript/ivscript.h"
|
||||
#include "vpc/rson.h"
|
||||
|
||||
#define MAX_PRECOMPILED_SCRIPTS 1024
|
||||
|
||||
#pragma pack(push, 4)
|
||||
class CSquirrelVM
|
||||
{
|
||||
public:
|
||||
static SQBool Init(CSquirrelVM* s, SQCONTEXT context, float curtime);
|
||||
static SQBool DestroySignalEntryListHead(CSquirrelVM* s, HSQUIRRELVM v, SQFloat f);
|
||||
|
||||
void CompileModScripts();
|
||||
void SetAsCompiler(RSON::Node_t* rson);
|
||||
|
||||
SQRESULT RegisterFunction(const SQChar* scriptname, const SQChar* nativename, const SQChar* helpstring, const SQChar* returntype, const SQChar* parameters, void* functor);
|
||||
SQRESULT RegisterConstant(const SQChar* name, SQInteger value);
|
||||
|
||||
FORCEINLINE HSQUIRRELVM GetVM() const { return m_sqVM; }
|
||||
FORCEINLINE SQCONTEXT GetContext() const { return m_iContext; }
|
||||
|
||||
private:
|
||||
SQChar pad0[0x8];
|
||||
HSQUIRRELVM m_sqVM;
|
||||
SQChar pad1[0x8];
|
||||
SQInteger m_nFlags;
|
||||
SQChar pad2[4];
|
||||
SQChar pad3[16];
|
||||
#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
|
||||
SQChar pad4[4];
|
||||
#endif
|
||||
SQInteger m_nTick;
|
||||
SQCONTEXT m_iContext; // 0x38
|
||||
#if !defined (GAMEDLL_S2) && !defined (GAMEDLL_S3)
|
||||
SQChar pad6[4];
|
||||
#endif
|
||||
void* m_pCompareFunc;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
inline CMemory p_CSquirrelVM_Init;
|
||||
inline auto v_CSquirrelVM_Init = p_CSquirrelVM_Init.RCast<bool(__fastcall*)(CSquirrelVM* s, SQCONTEXT context, SQFloat curtime)>();
|
||||
|
||||
inline CMemory p_CSquirrelVM_DestroySignalEntryListHead;
|
||||
inline auto v_CSquirrelVM_DestroySignalEntryListHead = p_CSquirrelVM_DestroySignalEntryListHead.RCast<SQBool(*)(CSquirrelVM* s, HSQUIRRELVM v, SQFloat f)>();
|
||||
|
||||
inline CMemory p_CSquirrelVM_RegisterFunction;
|
||||
inline auto v_CSquirrelVM_RegisterFunction = p_CSquirrelVM_RegisterFunction.RCast<SQRESULT(*)(CSquirrelVM* s, ScriptFunctionBinding_t* binding, SQInteger a1)>();
|
||||
|
||||
inline CMemory p_CSquirrelVM_RegisterConstant;
|
||||
inline auto v_CSquirrelVM_RegisterConstant = p_CSquirrelVM_RegisterConstant.RCast<SQRESULT(*)(CSquirrelVM* s, const SQChar* name, SQInteger value)>();
|
||||
|
||||
#ifndef DEDICATED
|
||||
inline CMemory p_CSquirrelVM_PrecompileClientScripts;
|
||||
inline auto v_CSquirrelVM_PrecompileClientScripts = p_CSquirrelVM_PrecompileClientScripts.RCast<bool(__fastcall*)(CSquirrelVM* vm, SQCONTEXT context, char** scriptArray, int scriptCount)>();
|
||||
#endif
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
inline CMemory p_CSquirrelVM_PrecompileServerScripts;
|
||||
inline auto v_CSquirrelVM_PrecompileServerScripts = p_CSquirrelVM_PrecompileServerScripts.RCast<bool(__fastcall*)(CSquirrelVM* vm, SQCONTEXT context, char** scriptArray, int scriptCount)>();
|
||||
#endif
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
inline CSquirrelVM* g_pServerScript;
|
||||
#endif // !CLIENT_DLL
|
||||
|
||||
#ifndef DEDICATED
|
||||
inline CSquirrelVM* g_pClientScript;
|
||||
inline CSquirrelVM* g_pUIScript;
|
||||
#endif // !DEDICATED
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VSquirrel : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
||||
LogFunAdr("CSquirrelVM::Init", p_CSquirrelVM_Init.GetPtr());
|
||||
LogFunAdr("CSquirrelVM::DestroySignalEntryListHead", p_CSquirrelVM_DestroySignalEntryListHead.GetPtr());
|
||||
|
||||
LogFunAdr("CSquirrelVM::RegisterConstant", p_CSquirrelVM_RegisterConstant.GetPtr());
|
||||
LogFunAdr("CSquirrelVM::RegisterFunction", p_CSquirrelVM_RegisterFunction.GetPtr());
|
||||
#ifndef CLIENT_DLL
|
||||
LogFunAdr("CSquirrelVM::PrecompileServerScripts", p_CSquirrelVM_PrecompileServerScripts.GetPtr());
|
||||
#endif // !CLIENT_DLL
|
||||
#ifndef DEDICATED
|
||||
LogFunAdr("CSquirrelVM::PrecompileClientScripts", p_CSquirrelVM_PrecompileClientScripts.GetPtr());
|
||||
#endif // !DEDICATED
|
||||
}
|
||||
virtual void GetFun(void) const
|
||||
{
|
||||
p_CSquirrelVM_Init = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 0F 28 74 24 ?? 48 89 1D ?? ?? ?? ??").FollowNearCallSelf();
|
||||
v_CSquirrelVM_Init = p_CSquirrelVM_Init.RCast<bool(__fastcall*)(CSquirrelVM*, SQCONTEXT, SQFloat)>();
|
||||
|
||||
p_CSquirrelVM_DestroySignalEntryListHead = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 56 57 41 56 48 83 EC 50 44 8B 42");
|
||||
v_CSquirrelVM_DestroySignalEntryListHead = p_CSquirrelVM_DestroySignalEntryListHead.RCast<SQBool(*)(CSquirrelVM*, HSQUIRRELVM, SQFloat)>();
|
||||
|
||||
p_CSquirrelVM_RegisterConstant = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 30 4C 8B");
|
||||
v_CSquirrelVM_RegisterConstant = p_CSquirrelVM_RegisterConstant.RCast<SQRESULT(*)(CSquirrelVM*, const SQChar*, SQInteger)>();
|
||||
|
||||
p_CSquirrelVM_RegisterFunction = g_GameDll.FindPatternSIMD("48 83 EC 38 45 0F B6 C8");
|
||||
v_CSquirrelVM_RegisterFunction = p_CSquirrelVM_RegisterFunction.RCast<SQRESULT(*)(CSquirrelVM*, ScriptFunctionBinding_t*, SQInteger)>();
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
// sv scripts.rson compiling
|
||||
p_CSquirrelVM_PrecompileServerScripts = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 0F B6 F0 48 85 DB").FollowNearCallSelf();
|
||||
v_CSquirrelVM_PrecompileServerScripts = p_CSquirrelVM_PrecompileServerScripts.RCast<bool(__fastcall*)(CSquirrelVM*, SQCONTEXT, char**, int)>();
|
||||
#endif
|
||||
|
||||
#ifndef DEDICATED
|
||||
// cl/ui scripts.rson compiling
|
||||
p_CSquirrelVM_PrecompileClientScripts = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 44 0F B6 F0 48 85 DB").FollowNearCallSelf();
|
||||
v_CSquirrelVM_PrecompileClientScripts = p_CSquirrelVM_PrecompileClientScripts.RCast<bool(__fastcall*)(CSquirrelVM*, SQCONTEXT, char**, int)>();
|
||||
#endif
|
||||
}
|
||||
virtual void GetVar(void) const { }
|
||||
virtual void GetCon(void) const { }
|
||||
virtual void Attach(void) const;
|
||||
virtual void Detach(void) const;
|
||||
};
|
||||
|
||||
#endif // VSQUIRREL_H
|
306
r5dev/vscript/vscript.cpp
Normal file
306
r5dev/vscript/vscript.cpp
Normal file
@ -0,0 +1,306 @@
|
||||
//=============================================================================//
|
||||
//
|
||||
// Purpose: VScript System
|
||||
//
|
||||
//=============================================================================//
|
||||
#include "core/stdafx.h"
|
||||
#include "tier0/frametask.h"
|
||||
#include "tier0/fasttimer.h"
|
||||
#include "tier1/cvar.h"
|
||||
#include "languages/squirrel_re/vsquirrel.h"
|
||||
#include "vscript/vscript.h"
|
||||
#include "game/shared/vscript_shared.h"
|
||||
#include "pluginsystem/modsystem.h"
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers script functions in SERVER context
|
||||
// Input : *s -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_RegisterServerFunctions(CSquirrelVM* s)
|
||||
{
|
||||
s->RegisterFunction("SDKNativeTest", "Script_SDKNativeTest", "Native SERVER test function", "void", "", &VScriptCode::SHARED::SDKNativeTest);
|
||||
s->RegisterFunction("GetSDKVersion", "Script_GetSDKVersion", "Gets the SDK version as a string", "string", "", &VScriptCode::SHARED::GetSDKVersion);
|
||||
|
||||
s->RegisterFunction("GetNumHumanPlayers", "Script_GetNumHumanPlayers", "Gets the number of human players on the server", "int", "", &VScriptCode::SERVER::GetNumHumanPlayers);
|
||||
s->RegisterFunction("GetNumFakeClients", "Script_GetNumFakeClients", "Gets the number of bot players on the server", "int", "", &VScriptCode::SERVER::GetNumFakeClients);
|
||||
|
||||
s->RegisterFunction("GetAvailableMaps", "Script_GetAvailableMaps", "Gets an array of all available maps", "array< string >", "", &VScriptCode::SHARED::GetAvailableMaps);
|
||||
s->RegisterFunction("GetAvailablePlaylists", "Script_GetAvailablePlaylists", "Gets an array of all available playlists", "array< string >", "", &VScriptCode::SHARED::GetAvailablePlaylists);
|
||||
|
||||
s->RegisterFunction("KickPlayerByName", "Script_KickPlayerByName", "Kicks a player from the server by name", "void", "string", &VScriptCode::SHARED::KickPlayerByName);
|
||||
s->RegisterFunction("KickPlayerById", "Script_KickPlayerById", "Kicks a player from the server by handle or nucleus id", "void", "string", &VScriptCode::SHARED::KickPlayerById);
|
||||
|
||||
s->RegisterFunction("BanPlayerByName", "Script_BanPlayerByName", "Bans a player from the server by name", "void", "string", &VScriptCode::SHARED::BanPlayerByName);
|
||||
s->RegisterFunction("BanPlayerById", "Script_BanPlayerById", "Bans a player from the server by handle or nucleus id", "void", "string", &VScriptCode::SHARED::BanPlayerById);
|
||||
|
||||
s->RegisterFunction("UnbanPlayer", "Script_UnbanPlayer", "Unbans a player from the server by nucleus id or ip address", "void", "string", &VScriptCode::SHARED::UnbanPlayer);
|
||||
|
||||
s->RegisterFunction("ShutdownHostGame", "Script_ShutdownHostGame", "Shuts the local host game down", "void", "", &VScriptCode::SHARED::ShutdownHostGame);
|
||||
|
||||
s->RegisterFunction("IsDedicated", "Script_IsDedicated", "Returns whether this is a dedicated server", "bool", "", &VScriptCode::SERVER::IsDedicated);
|
||||
}
|
||||
#endif // !CLIENT_DLL
|
||||
|
||||
#ifndef DEDICATED
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers script functions in CLIENT context
|
||||
// Input : *s -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_RegisterClientFunctions(CSquirrelVM* s)
|
||||
{
|
||||
s->RegisterFunction("SDKNativeTest", "Script_SDKNativeTest", "Native CLIENT test function", "void", "", &VScriptCode::SHARED::SDKNativeTest);
|
||||
s->RegisterFunction("GetSDKVersion", "Script_GetSDKVersion", "Gets the SDK version as a string", "string", "", &VScriptCode::SHARED::GetSDKVersion);
|
||||
|
||||
s->RegisterFunction("GetAvailableMaps", "Script_GetAvailableMaps", "Gets an array of all available maps", "array< string >", "", &VScriptCode::SHARED::GetAvailableMaps);
|
||||
s->RegisterFunction("GetAvailablePlaylists", "Script_GetAvailablePlaylists", "Gets an array of all available playlists", "array< string >", "", &VScriptCode::SHARED::GetAvailablePlaylists);
|
||||
|
||||
s->RegisterFunction("ShutdownHostGame", "Script_ShutdownHostGame", "Shuts the local host game down", "void", "", &VScriptCode::SHARED::ShutdownHostGame);
|
||||
s->RegisterFunction("IsClientDLL", "Script_IsClientDLL", "Returns whether this build is client only", "bool", "", &VScriptCode::SHARED::IsClientDLL);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: registers script functions in UI context
|
||||
// Input : *s -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_RegisterUIFunctions(CSquirrelVM* s)
|
||||
{
|
||||
s->RegisterFunction("SDKNativeTest", "Script_SDKNativeTest", "Native UI test function", "void", "", &VScriptCode::SHARED::SDKNativeTest);
|
||||
s->RegisterFunction("GetSDKVersion", "Script_GetSDKVersion", "Gets the SDK version as a string", "string", "", &VScriptCode::SHARED::GetSDKVersion);
|
||||
|
||||
s->RegisterFunction("RefreshServerList", "Script_RefreshServerList", "Refreshes the public server list and returns the count", "int", "", &VScriptCode::UI::RefreshServerCount);
|
||||
|
||||
// Functions for retrieving server browser data
|
||||
s->RegisterFunction("GetServerName", "Script_GetServerName", "Gets the name of the server at the specified index of the server list", "string", "int", &VScriptCode::UI::GetServerName);
|
||||
s->RegisterFunction("GetServerDescription", "Script_GetServerDescription", "Gets the description of the server at the specified index of the server list", "string", "int", &VScriptCode::UI::GetServerDescription);
|
||||
s->RegisterFunction("GetServerMap", "Script_GetServerMap", "Gets the map of the server at the specified index of the server list", "string", "int", &VScriptCode::UI::GetServerMap);
|
||||
s->RegisterFunction("GetServerPlaylist", "Script_GetServerPlaylist", "Gets the playlist of the server at the specified index of the server list", "string", "int", &VScriptCode::UI::GetServerPlaylist);
|
||||
s->RegisterFunction("GetServerCurrentPlayers", "Script_GetServerCurrentPlayers", "Gets the current player count of the server at the specified index of the server list", "int", "int", &VScriptCode::UI::GetServerCurrentPlayers);
|
||||
s->RegisterFunction("GetServerMaxPlayers", "Script_GetServerMaxPlayers", "Gets the max player count of the server at the specified index of the server list", "int", "int", &VScriptCode::UI::GetServerMaxPlayers);
|
||||
s->RegisterFunction("GetServerCount", "Script_GetServerCount", "Gets the number of public servers", "int", "", &VScriptCode::UI::GetServerCount);
|
||||
|
||||
// Misc main menu functions
|
||||
s->RegisterFunction("GetPromoData", "Script_GetPromoData", "Gets promo data for specified slot type", "string", "int", &VScriptCode::UI::GetPromoData);
|
||||
|
||||
// Functions for creating servers
|
||||
s->RegisterFunction("CreateServer", "Script_CreateServer", "Starts server with the specified settings", "void", "string, string, string, string, int", &VScriptCode::UI::CreateServer);
|
||||
s->RegisterFunction("IsServerActive", "Script_IsServerActive", "Returns whether the server is active", "bool", "", &VScriptCode::SHARED::IsServerActive);
|
||||
|
||||
// Functions for connecting to servers
|
||||
s->RegisterFunction("ConnectToServer", "Script_ConnectToServer", "Joins server by ip address and encryption key", "void", "string, string", &VScriptCode::UI::ConnectToServer);
|
||||
s->RegisterFunction("ConnectToListedServer", "Script_ConnectToListedServer", "Joins listed server by index", "void", "int", &VScriptCode::UI::ConnectToListedServer);
|
||||
s->RegisterFunction("ConnectToHiddenServer", "Script_ConnectToHiddenServer", "Joins hidden server by token", "void", "string", &VScriptCode::UI::ConnectToHiddenServer);
|
||||
|
||||
s->RegisterFunction("GetHiddenServerName", "Script_GetHiddenServerName", "Gets hidden server name by token", "string", "string", &VScriptCode::UI::GetHiddenServerName);
|
||||
s->RegisterFunction("GetAvailableMaps", "Script_GetAvailableMaps", "Gets an array of all available maps", "array< string >", "", &VScriptCode::SHARED::GetAvailableMaps);
|
||||
s->RegisterFunction("GetAvailablePlaylists", "Script_GetAvailablePlaylists", "Gets an array of all available playlists", "array< string >", "", &VScriptCode::SHARED::GetAvailablePlaylists);
|
||||
#ifndef CLIENT_DLL
|
||||
s->RegisterFunction("KickPlayerByName", "Script_KickPlayerByName", "Kicks a player from the server by name", "void", "string", &VScriptCode::SHARED::KickPlayerByName);
|
||||
s->RegisterFunction("KickPlayerById", "Script_KickPlayerById", "Kicks a player from the server by handle or nucleus id", "void", "string", &VScriptCode::SHARED::KickPlayerById);
|
||||
|
||||
s->RegisterFunction("BanPlayerByName", "Script_BanPlayerByName", "Bans a player from the server by name", "void", "string", &VScriptCode::SHARED::BanPlayerByName);
|
||||
s->RegisterFunction("BanPlayerById", "Script_BanPlayerById", "Bans a player from the server by handle or nucleus id", "void", "string", &VScriptCode::SHARED::BanPlayerById);
|
||||
|
||||
s->RegisterFunction("UnbanPlayer", "Script_UnbanPlayer", "Unbans a player from the server by nucleus id or ip address", "void", "string", &VScriptCode::SHARED::UnbanPlayer);
|
||||
#endif // !CLIENT_DLL
|
||||
s->RegisterFunction("ShutdownHostGame", "Script_ShutdownHostGame", "Shuts the local host game down", "void", "", &VScriptCode::SHARED::ShutdownHostGame);
|
||||
s->RegisterFunction("IsClientDLL", "Script_IsClientDLL", "Returns whether this build is client only", "bool", "", &VScriptCode::SHARED::IsClientDLL);
|
||||
}
|
||||
#endif // !DEDICATED
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Returns the script VM pointer by context
|
||||
// Input : context -
|
||||
//---------------------------------------------------------------------------------
|
||||
CSquirrelVM* Script_GetScriptHandle(const SQCONTEXT context)
|
||||
{
|
||||
switch (context)
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
return g_pServerScript;
|
||||
#endif // !CLIENT_DLL
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
return g_pClientScript;
|
||||
case SQCONTEXT::UI:
|
||||
return g_pUIScript;
|
||||
#endif // !DEDICATED
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: loads the script list, listing scripts to be compiled.
|
||||
// Input : *rsonfile -
|
||||
//---------------------------------------------------------------------------------
|
||||
RSON::Node_t* Script_LoadScriptList(const SQChar* rsonfile)
|
||||
{
|
||||
DevMsg(eDLL_T::ENGINE, "Loading script list: '%s'\n", rsonfile);
|
||||
return v_Script_LoadScriptList(rsonfile);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: loads script files listed in the script list, to be compiled.
|
||||
// Input : *v -
|
||||
// *path -
|
||||
// *name -
|
||||
// flags -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool Script_LoadScriptFile(HSQUIRRELVM v, const SQChar* path, const SQChar* name, SQInteger flags)
|
||||
{
|
||||
// search for mod path identifier so the mod can decide where the file is
|
||||
const char* modPath = strstr(path, MOD_SCRIPT_PATH_IDENTIFIER);
|
||||
|
||||
if (modPath)
|
||||
path = &modPath[sizeof(MOD_SCRIPT_PATH_IDENTIFIER)-1]; // skip "::MOD::"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return v_Script_LoadScriptFile(v, path, name, flags);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: parses rson data to get an array of scripts to compile
|
||||
// Input : context -
|
||||
// *scriptListPath -
|
||||
// *rson -
|
||||
// *scriptArray -
|
||||
// *pScriptCount -
|
||||
// **precompiledScriptArray -
|
||||
// precompiledScriptCount -
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool Script_ParseScriptList(SQCONTEXT context, const char* scriptListPath,
|
||||
RSON::Node_t* rson, char** scriptArray, int* pScriptCount, char** precompiledScriptArray, int precompiledScriptCount)
|
||||
{
|
||||
return v_Script_ParseScriptList(context, scriptListPath, rson, scriptArray, pScriptCount, precompiledScriptArray, precompiledScriptCount);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: precompiles scripts for the given VM
|
||||
// Input : *vm
|
||||
//---------------------------------------------------------------------------------
|
||||
SQBool Script_PrecompileScripts(CSquirrelVM* vm)
|
||||
{
|
||||
HSQUIRRELVM v = vm->GetVM();
|
||||
SQCONTEXT context = vm->GetContext();
|
||||
|
||||
DevMsg(eDLL_T(context), "Starting script compiler...\n");
|
||||
|
||||
CFastTimer timer;
|
||||
timer.Start();
|
||||
|
||||
vm->CompileModScripts();
|
||||
SQBool result = false;
|
||||
|
||||
switch (context)
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
case SQCONTEXT::SERVER:
|
||||
{
|
||||
result = v_Script_PrecompileServerScripts(vm);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
case SQCONTEXT::CLIENT:
|
||||
case SQCONTEXT::UI:
|
||||
{
|
||||
result = v_Script_PrecompileClientScripts(vm);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
timer.End();
|
||||
DevMsg(eDLL_T(context), "Script compiler finished in %lf seconds\n", timer.GetDuration().GetSeconds());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
SQBool Script_PrecompileServerScripts(CSquirrelVM* vm)
|
||||
{
|
||||
return Script_PrecompileScripts(g_pServerScript);
|
||||
}
|
||||
#endif // !CLIENT_DLL
|
||||
|
||||
#ifndef DEDICATED
|
||||
SQBool Script_PrecompileClientScripts(CSquirrelVM* vm)
|
||||
{
|
||||
return Script_PrecompileScripts(vm);
|
||||
}
|
||||
#endif // !DEDICATED
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: Compiles and executes input code on target VM by context
|
||||
// Input : *code -
|
||||
// context -
|
||||
//---------------------------------------------------------------------------------
|
||||
void Script_Execute(const SQChar* code, const SQCONTEXT context)
|
||||
{
|
||||
if (!ThreadInMainThread())
|
||||
{
|
||||
const string scode(code);
|
||||
g_TaskScheduler->Dispatch([scode, context]()
|
||||
{
|
||||
Script_Execute(scode.c_str(), context);
|
||||
}, 0);
|
||||
|
||||
return; // Only run in main thread.
|
||||
}
|
||||
|
||||
CSquirrelVM* s = Script_GetScriptHandle(context);
|
||||
if (!s)
|
||||
{
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "Attempted to run %s script with no handle to VM\n", SQVM_GetContextName(context));
|
||||
return;
|
||||
}
|
||||
|
||||
HSQUIRRELVM v = s->GetVM();
|
||||
if (!v)
|
||||
{
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "Attempted to run %s script while VM isn't initialized\n", SQVM_GetContextName(context));
|
||||
return;
|
||||
}
|
||||
|
||||
SQBufState bufState = SQBufState(code);
|
||||
SQRESULT compileResult = sq_compilebuffer(v, &bufState, "console", -1);
|
||||
|
||||
if (SQ_SUCCEEDED(compileResult))
|
||||
{
|
||||
sq_pushroottable(v);
|
||||
SQRESULT callResult = sq_call(v, 1, false, false);
|
||||
|
||||
if (!SQ_SUCCEEDED(callResult))
|
||||
{
|
||||
Error(eDLL_T::ENGINE, NO_ERROR, "Failed to execute %s script \"%s\"\n", SQVM_GetContextName(context), code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void VScript::Attach() const
|
||||
{
|
||||
DetourAttach((LPVOID*)&v_Script_LoadScriptList, &Script_LoadScriptList);
|
||||
DetourAttach((LPVOID*)&v_Script_LoadScriptFile, &Script_LoadScriptFile);
|
||||
#ifndef CLIENT_DLL
|
||||
DetourAttach((LPVOID*)&v_Script_PrecompileServerScripts, &Script_PrecompileServerScripts);
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
DetourAttach((LPVOID*)&v_Script_PrecompileClientScripts, &Script_PrecompileClientScripts);
|
||||
#endif
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
void VScript::Detach() const
|
||||
{
|
||||
DetourDetach((LPVOID*)&v_Script_LoadScriptList, &Script_LoadScriptList);
|
||||
DetourDetach((LPVOID*)&v_Script_LoadScriptFile, &Script_LoadScriptFile);
|
||||
#ifndef CLIENT_DLL
|
||||
DetourDetach((LPVOID*)&v_Script_PrecompileServerScripts, &Script_PrecompileServerScripts);
|
||||
#endif
|
||||
#ifndef DEDICATED
|
||||
DetourDetach((LPVOID*)&v_Script_PrecompileClientScripts, &Script_PrecompileClientScripts);
|
||||
#endif
|
||||
}
|
105
r5dev/vscript/vscript.h
Normal file
105
r5dev/vscript/vscript.h
Normal file
@ -0,0 +1,105 @@
|
||||
#ifndef VSCRIPT_H
|
||||
#define VSCRIPT_H
|
||||
#include "vscript/languages/squirrel_re/include/squirrel.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqstate.h"
|
||||
#include "vscript/languages/squirrel_re/include/sqvm.h"
|
||||
#include "vscript/ivscript.h"
|
||||
#include "vpc/rson.h"
|
||||
|
||||
#define MOD_SCRIPT_PATH_IDENTIFIER "::MOD::"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Forward declarations
|
||||
//-----------------------------------------------------------------------------
|
||||
class CSquirrelVM;
|
||||
|
||||
inline CMemory p_Script_LoadScriptList;
|
||||
inline auto v_Script_LoadScriptList = p_Script_LoadScriptList.RCast<RSON::Node_t* (*)(const SQChar* rsonfile)>();
|
||||
|
||||
inline CMemory p_Script_LoadScriptFile;
|
||||
inline auto v_Script_LoadScriptFile = p_Script_LoadScriptFile.RCast<SQBool(*)(HSQUIRRELVM v, const SQChar* path, const SQChar* name, SQInteger flags)>();
|
||||
|
||||
inline CMemory p_Script_ParseScriptList;
|
||||
inline auto v_Script_ParseScriptList = p_Script_ParseScriptList.RCast<SQBool(__fastcall*)(SQCONTEXT ctx, const char* scriptListPath, RSON::Node_t* rson, char** scriptArray, int* pScriptCount, char** precompiledScriptArray, int precompiledScriptCount)>();
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
inline CMemory p_Script_PrecompileServerScripts;
|
||||
inline auto v_Script_PrecompileServerScripts = p_Script_PrecompileServerScripts.RCast<SQBool(__fastcall*)(CSquirrelVM* vm /*This parameter is not used internally (the client variant does use it)!*/)>();
|
||||
|
||||
inline CMemory p_Script_SetServerCompiler;
|
||||
inline auto v_Script_SetServerPrecompiler = p_Script_SetServerCompiler.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t* rson)>();
|
||||
#endif
|
||||
|
||||
#ifndef DEDICATED
|
||||
inline CMemory p_Script_PrecompileClientScripts;
|
||||
inline auto v_Script_PrecompileClientScripts = p_Script_PrecompileClientScripts.RCast<SQBool(__fastcall*)(CSquirrelVM* vm)>();
|
||||
|
||||
inline CMemory p_Script_SetClientCompiler;
|
||||
inline auto v_Script_SetClientPrecompiler = p_Script_SetClientCompiler.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t* rson)>();
|
||||
#endif
|
||||
|
||||
void Script_RegisterServerFunctions(CSquirrelVM* s);
|
||||
void Script_RegisterClientFunctions(CSquirrelVM* s);
|
||||
void Script_RegisterUIFunctions(CSquirrelVM* s);
|
||||
|
||||
CSquirrelVM* Script_GetScriptHandle(const SQCONTEXT context);
|
||||
RSON::Node_t* Script_LoadScriptList(const SQChar* rsonfile);
|
||||
SQBool Script_LoadScriptFile(HSQUIRRELVM v, const SQChar* path, const SQChar* name, SQInteger flags);
|
||||
SQBool Script_ParseScriptList(SQCONTEXT context, const char* scriptListPath, RSON::Node_t* rson, char** scriptArray, int* pScriptCount, char** precompiledScriptArray, int precompiledScriptCount);
|
||||
|
||||
void Script_Execute(const SQChar* code, const SQCONTEXT context);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VScript : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
||||
LogFunAdr("Script_LoadScriptList", p_Script_LoadScriptList.GetPtr());
|
||||
LogFunAdr("Script_LoadScriptFile", p_Script_LoadScriptFile.GetPtr());
|
||||
LogFunAdr("Script_ParseScriptList", p_Script_ParseScriptList.GetPtr());
|
||||
#ifndef CLIENT_DLL
|
||||
LogFunAdr("Script_PrecompileServerInit", p_Script_PrecompileServerScripts.GetPtr());
|
||||
LogFunAdr("Script_SetServerCompiler", p_Script_SetServerCompiler.GetPtr());
|
||||
#endif // !CLIENT_DLL
|
||||
#ifndef DEDICATED
|
||||
LogFunAdr("Script_PrecompileClientInit", p_Script_PrecompileClientScripts.GetPtr());
|
||||
LogFunAdr("Script_SetClientCompiler", p_Script_SetClientCompiler.GetPtr());
|
||||
#endif // !DEDICATED
|
||||
}
|
||||
virtual void GetFun(void) const
|
||||
{
|
||||
p_Script_LoadScriptList = g_GameDll.FindPatternSIMD("4C 8B DC 49 89 5B 08 57 48 81 EC A0 ?? ?? ?? 33");
|
||||
v_Script_LoadScriptList = p_Script_LoadScriptList.RCast<RSON::Node_t* (*)(const SQChar*)>();
|
||||
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
|
||||
p_Script_LoadScript = g_GameDll.FindPatternSIMD("48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 48 89 4C 24 08 55 41 54 41 55 41 56 41 57 48 8D 6C");
|
||||
#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
|
||||
p_Script_LoadScriptFile = g_GameDll.FindPatternSIMD("48 8B C4 48 89 48 08 55 41 56 48 8D 68");
|
||||
#endif
|
||||
v_Script_LoadScriptFile = p_Script_LoadScriptFile.RCast<SQBool(*)(HSQUIRRELVM, const SQChar*, const SQChar*, SQInteger)>();
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
p_Script_PrecompileServerScripts = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 33 DB 88 05 ?? ?? ?? ??").FollowNearCallSelf();
|
||||
v_Script_PrecompileServerScripts = p_Script_PrecompileServerScripts.RCast<SQBool(__fastcall*)(CSquirrelVM*)>();
|
||||
|
||||
p_Script_SetServerCompiler = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 48 8D 84 24 ?? ?? ?? ?? 44 89 64 24 ?? 4C 89 64 24 ?? 4C 8D 8C 24 ?? ?? ?? ?? 4C 8B C5").FollowNearCallSelf();
|
||||
v_Script_SetServerPrecompiler = p_Script_SetServerCompiler.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t* rson)>();
|
||||
#endif // !CLIENT_DLL
|
||||
#ifndef DEDICATED
|
||||
p_Script_PrecompileClientScripts = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 88 05 ?? ?? ?? ?? 33 C0").FollowNearCallSelf();
|
||||
v_Script_PrecompileClientScripts = p_Script_PrecompileClientScripts.RCast<SQBool(__fastcall*)(CSquirrelVM*)>();
|
||||
|
||||
p_Script_SetClientCompiler = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 48 8D 84 24 ?? ?? ?? ?? 44 89 64 24 ?? 4C 89 64 24 ?? 4C 8D 8C 24 ?? ?? ?? ?? 4C 8B C6").FollowNearCallSelf();
|
||||
v_Script_SetClientPrecompiler = p_Script_SetClientCompiler.RCast<void(__fastcall*)(SQCONTEXT ctx, RSON::Node_t* rson)>();
|
||||
#endif // !DEDICATED
|
||||
|
||||
p_Script_ParseScriptList = g_GameDll.FindPatternSIMD("4C 89 4C 24 ?? 55 41 56");
|
||||
v_Script_ParseScriptList = p_Script_ParseScriptList.RCast<SQBool(__fastcall*)(SQCONTEXT, const SQChar*, RSON::Node_t*, char**, int*, char**, int)>();
|
||||
}
|
||||
virtual void GetVar(void) const { }
|
||||
virtual void GetCon(void) const { }
|
||||
virtual void Attach(void) const;
|
||||
virtual void Detach(void) const;
|
||||
};
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // VSCRIPT_H
|
@ -31,7 +31,7 @@
|
||||
#include "filesystem/basefilesystem.h"
|
||||
#include "filesystem/filesystem.h"
|
||||
#include "vpklib/packedstore.h"
|
||||
#include "squirrel/sqscript.h"
|
||||
#include "vscript/vscript.h"
|
||||
#include "ebisusdk/EbisuSDK.h"
|
||||
#ifndef DEDICATED
|
||||
#include "gameui/IBrowser.h"
|
||||
|
Loading…
x
Reference in New Issue
Block a user