Fixed documentation typos in dbi.inc (
bug 3587).
3 * =============================================================================
5 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
32 #include "sm_globals.h"
35 #include "concmd_cleaner.h"
36 #include "sm_stringutil.h"
37 #include "sourcemm_api.h"
38 #include "compat_wrappers.h"
40 #if SOURCE_ENGINE >= SE_ORANGEBOX
41 SH_DECL_HOOK1_void(ICvar, UnregisterConCommand, SH_NOATTRIB, 0, ConCommandBase *);
44 using namespace SourceHook;
48 ConCommandBase *pBase;
49 IConCommandTracker *cls;
53 List<ConCommandInfo *> tracked_bases;
55 ConCommandBase *FindConCommandBase(const char *name);
57 class ConCommandCleaner : public SMGlobalClass
60 #if SOURCE_ENGINE >= SE_ORANGEBOX
61 void OnSourceModAllInitialized()
63 SH_ADD_HOOK_MEMFUNC(ICvar, UnregisterConCommand, icvar, this, &ConCommandCleaner::UnlinkConCommandBase, false);
66 void OnSourceModShutdown()
68 SH_REMOVE_HOOK_MEMFUNC(ICvar, UnregisterConCommand, icvar, this, &ConCommandCleaner::UnlinkConCommandBase, false);
72 void UnlinkConCommandBase(ConCommandBase *pBase)
74 ConCommandInfo *pInfo;
75 List<ConCommandInfo *>::iterator iter = tracked_bases.begin();
79 while (iter != tracked_bases.end())
81 if ((*iter)->pBase == pBase)
84 iter = tracked_bases.erase(iter);
85 pInfo->cls->OnUnlinkConCommandBase(pBase, pBase->GetName(), true);
96 while (iter != tracked_bases.end())
98 /* This is just god-awful! */
99 if (FindCommandBase((*iter)->name) != (*iter)->pBase)
102 iter = tracked_bases.erase(iter);
103 pInfo->cls->OnUnlinkConCommandBase(pBase, pInfo->name, false);
114 void AddTarget(ConCommandBase *pBase, IConCommandTracker *cls)
116 ConCommandInfo *info = new ConCommandInfo;
120 strncopy(info->name, pBase->GetName(), sizeof(info->name));
122 tracked_bases.push_back(info);
125 void RemoveTarget(ConCommandBase *pBase, IConCommandTracker *cls)
127 List<ConCommandInfo *>::iterator iter;
128 ConCommandInfo *pInfo;
130 iter = tracked_bases.begin();
131 while (iter != tracked_bases.end())
134 if (pInfo->pBase == pBase && pInfo->cls == cls)
137 iter = tracked_bases.erase(iter);
147 void TrackConCommandBase(ConCommandBase *pBase, IConCommandTracker *me)
149 s_ConCmdTracker.AddTarget(pBase, me);
152 void UntrackConCommandBase(ConCommandBase *pBase, IConCommandTracker *me)
154 s_ConCmdTracker.RemoveTarget(pBase, me);
157 void Global_OnUnlinkConCommandBase(ConCommandBase *pBase)
159 s_ConCmdTracker.UnlinkConCommandBase(pBase);