mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2025-03-22 13:19:40 +01:00
Hammered vsp bridge into core-legacy.
This commit is contained in:
parent
0e05b948fd
commit
0078277720
@ -210,7 +210,7 @@ void CPluginManager::SetVSPAsLoaded()
|
||||
continue;
|
||||
}
|
||||
(*event).got_vsp = true;
|
||||
(*event).event->OnVSPListening(&g_VspListener);
|
||||
(*event).event->OnVSPListening(g_pRealVspCallbacks);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -406,8 +406,8 @@ CPluginManager::CPlugin *CPluginManager::_Load(const char *file, PluginId source
|
||||
//if (pl->m_API->GetApiVersion() >= 4)
|
||||
pl->m_API->AllPluginsLoaded();
|
||||
}
|
||||
if (g_VspListener.IsRootLoadMethod()
|
||||
|| (g_VspListener.IsLoaded() && g_SmmAPI.VSPEnabled()))
|
||||
if (g_bIsBridgedAsVsp ||
|
||||
(g_VspListener.IsLoaded() && g_SmmAPI.VSPEnabled()))
|
||||
{
|
||||
SourceHook::List<CPluginEventHandler>::iterator event;
|
||||
for (event = pl->m_Events.begin();
|
||||
@ -415,11 +415,9 @@ CPluginManager::CPlugin *CPluginManager::_Load(const char *file, PluginId source
|
||||
event++)
|
||||
{
|
||||
if (pl->m_API->GetApiVersion() < 10 || (*event).got_vsp)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
(*event).got_vsp = true;
|
||||
(*event).event->OnVSPListening(&g_VspListener);
|
||||
(*event).event->OnVSPListening(g_pRealVspCallbacks);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -475,7 +475,7 @@ void CSmmAPI::LoadAsVSP()
|
||||
void CSmmAPI::EnableVSPListener()
|
||||
{
|
||||
/* If GameInit already passed and we're not already enabled or loaded, go ahead and LoadAsVSP load */
|
||||
if (bGameInit && !m_VSP && !g_VspListener.IsLoaded() && !g_VspListener.IsRootLoadMethod())
|
||||
if (bGameInit && !m_VSP && !g_VspListener.IsLoaded() && !g_bIsBridgedAsVsp)
|
||||
{
|
||||
LoadAsVSP();
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ OPT_FLAGS = -O2 -funroll-loops -s -pipe
|
||||
GCC4_FLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
|
||||
DEBUG_FLAGS = -g -ggdb3
|
||||
CPP = gcc-4.1
|
||||
BINARY = server_i486.so
|
||||
BINARY = metamod.1.ep1.so
|
||||
|
||||
HL2PUB = $(HL2SDK)/public
|
||||
HL2LIB = $(HL2SDK)/linux_sdk
|
||||
@ -22,12 +22,13 @@ OBJECTS = oslink.cpp \
|
||||
sourcemm.cpp \
|
||||
CPlugin.cpp \
|
||||
vsp_listener.cpp \
|
||||
vsp_bridge.cpp \
|
||||
sourcehook/sourcehook.cpp
|
||||
|
||||
LINK = $(HL2LIB)/tier1_i486.a vstdlib_i486.so tier0_i486.so -static-libgcc
|
||||
|
||||
INCLUDE = -I. -I$(HL2PUB) -I$(HL2PUB)/dlls -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 \
|
||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I. -Isourcehook
|
||||
-I$(HL2PUB)/vstdlib -I$(HL2SDK)/tier1 -I. -Isourcehook -I../loader
|
||||
|
||||
ifeq "$(DEBUG)" "true"
|
||||
BIN_DIR = Debug
|
||||
|
@ -120,7 +120,7 @@ CON_COMMAND(meta, "Metamod:Source Menu")
|
||||
|
||||
int args = e->Cmd_Argc();
|
||||
|
||||
if (g_VspListener.IsRootLoadMethod() && !g_bLevelChanged)
|
||||
if (g_bIsBridgedAsVsp && !g_bLevelChanged)
|
||||
{
|
||||
CONMSG("WARNING: You must change the map to activate Metamod:Source.\n");
|
||||
return;
|
||||
@ -141,7 +141,7 @@ CON_COMMAND(meta, "Metamod:Source Menu")
|
||||
return;
|
||||
} else if (strcmp(command, "version") == 0) {
|
||||
CONMSG("Metamod:Source version %s\n", SOURCEMM_VERSION);
|
||||
if (g_VspListener.IsRootLoadMethod())
|
||||
if (g_bIsBridgedAsVsp)
|
||||
{
|
||||
CONMSG("Loaded As: Valve Server Plugin\n");
|
||||
}
|
||||
|
@ -1 +0,0 @@
|
||||
../sourcehook/sourcehook.cpp
|
@ -68,7 +68,7 @@ const char VSPIFACE_002[] = "ISERVERPLUGINCALLBACKS002";
|
||||
const char GAMEINFO_PATH[] = "|gameinfo_path|";
|
||||
IFileSystem *baseFs = NULL;
|
||||
bool g_bLevelChanged = false;
|
||||
|
||||
IServerPluginCallbacks *g_pRealVspCallbacks = &g_VspListener;
|
||||
|
||||
void ClearGamedllList();
|
||||
|
||||
@ -309,20 +309,13 @@ bool AlternatelyLoadMetamod(CreateInterfaceFn ifaceFactory, CreateInterfaceFn se
|
||||
bool GameInit_handler()
|
||||
{
|
||||
if (bGameInit)
|
||||
{
|
||||
RETURN_META_VALUE(MRES_IGNORED, true);
|
||||
}
|
||||
|
||||
if (g_SmmAPI.VSPEnabled() && !g_VspListener.IsRootLoadMethod())
|
||||
{
|
||||
if (g_SmmAPI.VSPEnabled() && !g_bIsBridgedAsVsp)
|
||||
g_SmmAPI.LoadAsVSP();
|
||||
}
|
||||
|
||||
if (g_VspListener.IsRootLoadMethod())
|
||||
{
|
||||
if (g_bIsBridgedAsVsp)
|
||||
DoInitialPluginLoads();
|
||||
//gaben
|
||||
}
|
||||
|
||||
bGameInit = true;
|
||||
|
||||
@ -354,8 +347,9 @@ SMM_API void *CreateInterface(const char *iface, int *ret)
|
||||
/* We check these separately because we can't reply
|
||||
* unless our interface version really matches.
|
||||
*/
|
||||
if ((strcmp(iface, VSPIFACE_002) == 0)
|
||||
|| strcmp(iface, VSPIFACE_001) == 0)
|
||||
if (!g_bIsBridgedAsVsp &&
|
||||
(strcmp(iface, VSPIFACE_002) == 0 ||
|
||||
strcmp(iface, VSPIFACE_001) == 0))
|
||||
{
|
||||
if (ret)
|
||||
{
|
||||
@ -365,7 +359,7 @@ SMM_API void *CreateInterface(const char *iface, int *ret)
|
||||
}
|
||||
|
||||
/* If we're a VSP, bypass this by default */
|
||||
if (g_VspListener.IsRootLoadMethod())
|
||||
if (g_bIsBridgedAsVsp)
|
||||
{
|
||||
IFACE_MACRO(g_GameDll.factory, GameDLL);
|
||||
}
|
||||
|
@ -90,6 +90,9 @@ struct EngineInfo
|
||||
|
||||
bool AlternatelyLoadMetamod(CreateInterfaceFn ifaceFactory, CreateInterfaceFn serverFactory);
|
||||
|
||||
extern IServerPluginCallbacks *g_pRealVspCallbacks;
|
||||
extern bool g_bIsBridgedAsVsp;
|
||||
|
||||
/** @brief Global variable for GameDLL info */
|
||||
extern GameDllInfo g_GameDll;
|
||||
|
||||
|
@ -12,29 +12,14 @@
|
||||
#include "CPlugin.h"
|
||||
#include "concommands.h"
|
||||
|
||||
SH_DECL_HOOK0_void(ConCommand, Dispatch, SH_NOATTRIB, false);
|
||||
|
||||
using namespace SourceMM;
|
||||
|
||||
VSPListener g_VspListener;
|
||||
ConCommand *g_plugin_unload = NULL;
|
||||
bool g_bIsTryingToUnload;
|
||||
|
||||
void InterceptPluginUnloads()
|
||||
{
|
||||
g_bIsTryingToUnload = true;
|
||||
}
|
||||
|
||||
void InterceptPluginUnloads_Post()
|
||||
{
|
||||
g_bIsTryingToUnload = false;
|
||||
}
|
||||
|
||||
VSPListener::VSPListener()
|
||||
{
|
||||
m_Loaded = false;
|
||||
m_Loadable = false;
|
||||
m_bIsRootLoadMethod = false;
|
||||
}
|
||||
|
||||
void VSPListener::ClientActive(edict_t *pEntity)
|
||||
@ -108,25 +93,8 @@ void VSPListener::ServerActivate(edict_t *pEdictList, int edictCount, int client
|
||||
|
||||
void VSPListener::Unload()
|
||||
{
|
||||
if (g_bIsTryingToUnload)
|
||||
{
|
||||
Error("Metamod:Source cannot be unloaded from VSP mode. Use \"meta unload\" to unload specific plugins.\n");
|
||||
return;
|
||||
}
|
||||
if (IsRootLoadMethod())
|
||||
{
|
||||
if (g_plugin_unload != NULL)
|
||||
{
|
||||
SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, g_plugin_unload, InterceptPluginUnloads, false);
|
||||
SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, g_plugin_unload, InterceptPluginUnloads_Post, true);
|
||||
g_plugin_unload = NULL;
|
||||
}
|
||||
g_SMConVarAccessor.UnloadMetamodCommands();
|
||||
UnloadMetamod(false);
|
||||
}
|
||||
m_Loadable = true;
|
||||
m_Loaded = false;
|
||||
m_bIsRootLoadMethod = false;
|
||||
}
|
||||
|
||||
void VSPListener::SetLoadable(bool set)
|
||||
@ -134,61 +102,16 @@ void VSPListener::SetLoadable(bool set)
|
||||
m_Loadable = set;
|
||||
}
|
||||
|
||||
bool VSPListener::IsRootLoadMethod()
|
||||
{
|
||||
return m_bIsRootLoadMethod;
|
||||
}
|
||||
|
||||
bool VSPListener::Load(CreateInterfaceFn interfaceFactory, CreateInterfaceFn gameServerFactory)
|
||||
{
|
||||
if (m_Loaded)
|
||||
{
|
||||
if (m_Loaded || !m_Loadable)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_Loadable && !g_GameDll.loaded)
|
||||
{
|
||||
/* New loading mechanism, do a bunch o' stuff! */
|
||||
m_bIsRootLoadMethod = true;
|
||||
m_Loaded = true;
|
||||
SetLoadable(false);
|
||||
if (!AlternatelyLoadMetamod(interfaceFactory, gameServerFactory))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ConCommandBase *pBase = g_Engine.icvar->GetCommands();
|
||||
while (pBase != NULL)
|
||||
{
|
||||
if (pBase->IsCommand() && strcmp(pBase->GetName(), "plugin_unload") == 0)
|
||||
{
|
||||
g_plugin_unload = (ConCommand *)pBase;
|
||||
break;
|
||||
}
|
||||
pBase = const_cast<ConCommandBase *>(pBase->GetNext());
|
||||
}
|
||||
|
||||
if (g_plugin_unload != NULL)
|
||||
{
|
||||
SH_ADD_HOOK_STATICFUNC(ConCommand, Dispatch, g_plugin_unload, InterceptPluginUnloads, false);
|
||||
SH_ADD_HOOK_STATICFUNC(ConCommand, Dispatch, g_plugin_unload, InterceptPluginUnloads_Post, true);
|
||||
}
|
||||
|
||||
/* Ho ho ho... if we get here, set a new cvar version. */
|
||||
extern ConVar metamod_version;
|
||||
char buffer[255];
|
||||
|
||||
UTIL_Format(buffer, sizeof(buffer), "%sV", metamod_version.GetString());
|
||||
metamod_version.SetValue(buffer);
|
||||
}
|
||||
|
||||
m_Loaded = true;
|
||||
SetLoadable(false);
|
||||
|
||||
if (!m_bIsRootLoadMethod)
|
||||
{
|
||||
g_PluginMngr.SetVSPAsLoaded();
|
||||
}
|
||||
g_PluginMngr.SetVSPAsLoaded();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -39,13 +39,12 @@ public:
|
||||
public:
|
||||
bool IsLoaded();
|
||||
void SetLoadable(bool loadable);
|
||||
bool IsRootLoadMethod();
|
||||
private:
|
||||
bool m_Loaded;
|
||||
bool m_Loadable;
|
||||
bool m_bIsRootLoadMethod;
|
||||
};
|
||||
|
||||
extern VSPListener g_VspListener;
|
||||
|
||||
#endif //_INCLUDE_SOURCEMM_VSPLISTENER_H_
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user