fix for amb1776 - regression on orangebox, OnConfigsExecuted wouldn't execute

--HG--
branch : sourcemod-1.0.x
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/branches/sourcemod-1.0.x%402265
This commit is contained in:
David Anderson 2008-06-21 07:35:58 +00:00
parent 3edc824bc2
commit 299a17cd26

View File

@ -54,20 +54,19 @@ CoreConfig g_CoreConfig;
bool g_bConfigsExecd = false; bool g_bConfigsExecd = false;
bool g_bServerExecd = false; bool g_bServerExecd = false;
bool g_bGotServerStart = false; bool g_bGotServerStart = false;
bool g_bGotTrigger = false;
ConCommand *g_pExecPtr = NULL; ConCommand *g_pExecPtr = NULL;
ConVar *g_ServerCfgFile = NULL; ConVar *g_ServerCfgFile = NULL;
void CheckAndFinalizeConfigs(); void CheckAndFinalizeConfigs();
/* :TODO: use PM's new macros. this is a fast patch so I don't have time to look them up. */
#if defined ORANGEBOX_BUILD #if defined ORANGEBOX_BUILD
bool __SourceHook_FHRemoveConCommandDispatch(void *,bool,class fastdelegate::FastDelegate1<class CCommand const &,void>); SH_DECL_EXTERN1_void(ConCommand, Dispatch, SH_NOATTRIB, false, const CCommand &);
int __SourceHook_FHAddConCommandDispatch(void *,enum SourceHook::ISourceHook::AddHookMode,bool,class fastdelegate::FastDelegate1<class CCommand const &,void>); void Hook_ExecDispatchPre(const CCommand &cmd)
void Hook_ExecDispatch(const CCommand &cmd)
#else #else
extern bool __SourceHook_FHAddConCommandDispatch(void *,bool,class fastdelegate::FastDelegate0<void>); extern bool __SourceHook_FHAddConCommandDispatch(void *,bool,class fastdelegate::FastDelegate0<void>);
extern bool __SourceHook_FHRemoveConCommandDispatch(void *,bool,class fastdelegate::FastDelegate0<void>); extern bool __SourceHook_FHRemoveConCommandDispatch(void *,bool,class fastdelegate::FastDelegate0<void>);
void Hook_ExecDispatch() void Hook_ExecDispatchPre()
#endif #endif
{ {
#if !defined ORANGEBOX_BUILD #if !defined ORANGEBOX_BUILD
@ -75,10 +74,24 @@ void Hook_ExecDispatch()
#endif #endif
const char *arg = cmd.Arg(1); const char *arg = cmd.Arg(1);
if (!g_bServerExecd if (!g_bServerExecd
&& arg != NULL && arg != NULL
&& strcmp(arg, g_ServerCfgFile->GetString()) == 0) && strcmp(arg, g_ServerCfgFile->GetString()) == 0)
{ {
g_bGotTrigger = true;
}
}
#if defined ORANGEBOX_BUILD
void Hook_ExecDispatchPost(const CCommand &cmd)
#else
void Hook_ExecDispatchPost()
#endif
{
if (g_bGotTrigger)
{
g_bGotTrigger = false;
g_bServerExecd = true; g_bServerExecd = true;
CheckAndFinalizeConfigs(); CheckAndFinalizeConfigs();
} }
@ -112,7 +125,8 @@ void CoreConfig::OnSourceModShutdown()
if (g_pExecPtr != NULL) if (g_pExecPtr != NULL)
{ {
SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, g_pExecPtr, Hook_ExecDispatch, true); SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, g_pExecPtr, Hook_ExecDispatchPre, false);
SH_REMOVE_HOOK_STATICFUNC(ConCommand, Dispatch, g_pExecPtr, Hook_ExecDispatchPost, true);
g_pExecPtr = NULL; g_pExecPtr = NULL;
} }
} }
@ -139,7 +153,8 @@ void CoreConfig::OnSourceModLevelChange(const char *mapName)
g_pExecPtr = (ConCommand *)pBase; g_pExecPtr = (ConCommand *)pBase;
if (g_pExecPtr != NULL) if (g_pExecPtr != NULL)
{ {
SH_ADD_HOOK_STATICFUNC(ConCommand, Dispatch, g_pExecPtr, Hook_ExecDispatch, true); SH_ADD_HOOK_STATICFUNC(ConCommand, Dispatch, g_pExecPtr, Hook_ExecDispatchPre, false);
SH_ADD_HOOK_STATICFUNC(ConCommand, Dispatch, g_pExecPtr, Hook_ExecDispatchPost, true);
} }
else else
{ {
@ -152,6 +167,7 @@ void CoreConfig::OnSourceModLevelChange(const char *mapName)
g_bConfigsExecd = false; g_bConfigsExecd = false;
g_bServerExecd = false; g_bServerExecd = false;
g_bGotServerStart = false; g_bGotServerStart = false;
g_bGotTrigger = false;
} }
void CoreConfig::OnRootConsoleCommand(const char *cmdname, const CCommand &command) void CoreConfig::OnRootConsoleCommand(const char *cmdname, const CCommand &command)