From 5edc46c99425a83940eb827d105acbe2a83c18f7 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Thu, 19 May 2016 19:11:28 -0400 Subject: [PATCH] Don't enable FileExists hook (SendFile forward) on TF2 servers with Replay. (#512) It will crash. See PR #493 for details. --- extensions/sdktools/extension.cpp | 1 + extensions/sdktools/hooks.cpp | 20 ++++++++++++++++++++ extensions/sdktools/hooks.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/extensions/sdktools/extension.cpp b/extensions/sdktools/extension.cpp index 7b3b7c0d..428ab93f 100644 --- a/extensions/sdktools/extension.cpp +++ b/extensions/sdktools/extension.cpp @@ -313,6 +313,7 @@ void SDKTools::OnCoreMapStart(edict_t *pEdictList, int edictCount, int clientMax { InitTeamNatives(); GetResourceEntity(); + g_Hooks.OnMapStart(); } bool SDKTools::QueryRunning(char *error, size_t maxlength) diff --git a/extensions/sdktools/hooks.cpp b/extensions/sdktools/hooks.cpp index 89b3e736..a9ef37be 100644 --- a/extensions/sdktools/hooks.cpp +++ b/extensions/sdktools/hooks.cpp @@ -111,6 +111,15 @@ void CHookManager::Shutdown() sharesys->DropCapabilityProvider(myself, this, FEATURECAP_PLAYERRUNCMD_11PARAMS); } +void CHookManager::OnMapStart() +{ + m_bFSTranHookWarned = false; +#if SOURCE_ENGINE == SE_TF2 + static ConVarRef replay_enable("replay_enable"); + m_bReplayEnabled = replay_enable.GetBool(); +#endif +} + void CHookManager::OnClientConnect(int client) { NetChannelHook(client); @@ -238,6 +247,17 @@ void CHookManager::NetChannelHook(int client) size_t iter; /* Initial Hook */ +#if SOURCE_ENGINE == SE_TF2 + if (m_bReplayEnabled) + { + if (!m_bFSTranHookWarned) + { + g_pSM->LogError(myself, "OnFileSend hooks are not currently working on TF2 servers with Replay enabled."); + m_bFSTranHookWarned = true; + } + } + else +#endif if (!m_netChannelHooks.length()) { CVTableHook filehook(basefilesystem); diff --git a/extensions/sdktools/hooks.h b/extensions/sdktools/hooks.h index 50c3cd6a..6009e058 100644 --- a/extensions/sdktools/hooks.h +++ b/extensions/sdktools/hooks.h @@ -49,6 +49,7 @@ public: void OnClientConnect(int client); void OnClientPutInServer(int client); void PlayerRunCmd(CUserCmd *ucmd, IMoveHelper *moveHelper); + void OnMapStart(); public: /* NetChannel/Related Hooks */ bool FileExists(const char *filename, const char *pathID); #if SOURCE_ENGINE >= SE_ALIENSWARM || SOURCE_ENGINE == SE_LEFT4DEAD || SOURCE_ENGINE == SE_LEFT4DEAD2 @@ -75,6 +76,8 @@ private: ke::Vector m_runUserCmdHooks; ke::Vector m_netChannelHooks; INetChannel *m_pActiveNetChannel; + bool m_bFSTranHookWarned = false; + bool m_bReplayEnabled = false; }; extern CHookManager g_Hooks;