@@ -98,19 +98,6 @@ CServerCommandManager* GetServerCommand(const char* szName,
9898 return manager;
9999}
100100
101- // -----------------------------------------------------------------------------
102- // Removes a CServerCommandManager instance for the given name.
103- // -----------------------------------------------------------------------------
104- void RemoveCServerCommandManager (const char * szName)
105- {
106- ServerCommandMap::iterator iter;
107- if (find_manager<ServerCommandMap, ServerCommandMap::iterator>(g_ServerCommandMap, szName, iter))
108- {
109- delete iter->second ;
110- g_ServerCommandMap.erase (iter);
111- }
112- }
113-
114101// -----------------------------------------------------------------------------
115102// Returns a CServerCommandManager instance.
116103// -----------------------------------------------------------------------------
@@ -121,8 +108,17 @@ CServerCommandManager* CServerCommandManager::CreateCommand(const char* szName,
121108 char * szNameCopy = strdup (szName);
122109 char * szHelpTextCopy = NULL ;
123110
124- // FInd if the command already exists
125- ConCommandBase* pConCommand = g_pCVar->FindCommandBase (szName);
111+ // Find if the command already exists
112+ ConCommandBase* pBase = g_pCVar->FindCommandBase (szName);
113+ if (pBase && !pBase->IsCommand ()) {
114+ BOOST_RAISE_EXCEPTION (
115+ PyExc_ValueError,
116+ " Failed to create ConCommand(\" %s\" ) because a ConVar with the same name already exists." ,
117+ szName
118+ )
119+ }
120+
121+ ConCommand *pConCommand = static_cast <ConCommand *>(pBase);
126122 if ( pConCommand )
127123 {
128124 // Store the current command's help text and flags
@@ -147,7 +143,7 @@ CServerCommandManager* CServerCommandManager::CreateCommand(const char* szName,
147143// -----------------------------------------------------------------------------
148144// CServerCommandManager constructor.
149145// -----------------------------------------------------------------------------
150- CServerCommandManager::CServerCommandManager (ConCommandBase * pConCommand,
146+ CServerCommandManager::CServerCommandManager (ConCommand * pConCommand,
151147 const char * szName, const char * szHelpText, int iFlags):
152148 ConCommand(szName, (FnCommandCallback_t)NULL, szHelpText, iFlags),
153149 m_pOldCommand(pConCommand)
@@ -209,17 +205,18 @@ void CServerCommandManager::RemoveCallback( PyObject* pCallable, HookType_t type
209205{
210206 object oCallable = object (handle<>(borrowed (pCallable)));
211207 m_vecCallables[type]->UnregisterListener (pCallable);
212- if ( !m_vecCallables[HOOKTYPE_PRE]->GetCount () && !m_vecCallables[HOOKTYPE_POST]->GetCount () )
213- {
214- RemoveCServerCommandManager (m_Name);
215- }
216208}
217209
218210// -----------------------------------------------------------------------------
219211// Calls all callables for the command when it is called on the server.
220212// -----------------------------------------------------------------------------
221213void CServerCommandManager::Dispatch ( const CCommand& command )
222214{
215+ if (!m_vecCallables[HOOKTYPE_PRE]->GetCount () && !m_vecCallables[HOOKTYPE_POST]->GetCount () && !m_pOldCommand) {
216+ Msg (" Unknown command \" %s\"\n " , m_Name);
217+ return ;
218+ }
219+
223220 bool block = false ;
224221
225222 // Pre hook callbacks
@@ -240,10 +237,7 @@ void CServerCommandManager::Dispatch( const CCommand& command )
240237 if (m_pOldCommand)
241238 {
242239 if (m_pOldCommand->IsCommand ()) {
243- static_cast <ConCommand *>(m_pOldCommand)->Dispatch (command);
244- }
245- else {
246- static_cast <ConVar *>(m_pOldCommand)->SetValue (command.ArgS ());
240+ m_pOldCommand->Dispatch (command);
247241 }
248242 }
249243
0 commit comments