From 299a17cd2698c8b40ac20f415bc5a798d05aefb7 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 21 Jun 2008 07:35:58 +0000 Subject: [PATCH] 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 --- core/CoreConfig.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/core/CoreConfig.cpp b/core/CoreConfig.cpp index 6693f731..4255d277 100644 --- a/core/CoreConfig.cpp +++ b/core/CoreConfig.cpp @@ -54,20 +54,19 @@ CoreConfig g_CoreConfig; bool g_bConfigsExecd = false; bool g_bServerExecd = false; bool g_bGotServerStart = false; +bool g_bGotTrigger = false; ConCommand *g_pExecPtr = NULL; ConVar *g_ServerCfgFile = NULL; 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 -bool __SourceHook_FHRemoveConCommandDispatch(void *,bool,class fastdelegate::FastDelegate1); -int __SourceHook_FHAddConCommandDispatch(void *,enum SourceHook::ISourceHook::AddHookMode,bool,class fastdelegate::FastDelegate1); -void Hook_ExecDispatch(const CCommand &cmd) +SH_DECL_EXTERN1_void(ConCommand, Dispatch, SH_NOATTRIB, false, const CCommand &); +void Hook_ExecDispatchPre(const CCommand &cmd) #else extern bool __SourceHook_FHAddConCommandDispatch(void *,bool,class fastdelegate::FastDelegate0); extern bool __SourceHook_FHRemoveConCommandDispatch(void *,bool,class fastdelegate::FastDelegate0); -void Hook_ExecDispatch() +void Hook_ExecDispatchPre() #endif { #if !defined ORANGEBOX_BUILD @@ -75,10 +74,24 @@ void Hook_ExecDispatch() #endif const char *arg = cmd.Arg(1); + if (!g_bServerExecd && arg != NULL && 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; CheckAndFinalizeConfigs(); } @@ -112,7 +125,8 @@ void CoreConfig::OnSourceModShutdown() 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; } } @@ -139,7 +153,8 @@ void CoreConfig::OnSourceModLevelChange(const char *mapName) g_pExecPtr = (ConCommand *)pBase; 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 { @@ -152,6 +167,7 @@ void CoreConfig::OnSourceModLevelChange(const char *mapName) g_bConfigsExecd = false; g_bServerExecd = false; g_bGotServerStart = false; + g_bGotTrigger = false; } void CoreConfig::OnRootConsoleCommand(const char *cmdname, const CCommand &command)