added say_team hooks

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40903
This commit is contained in:
David Anderson 2007-06-06 22:37:36 +00:00
parent 7ab88f2020
commit f6a1db7633
2 changed files with 31 additions and 2 deletions

View File

@ -18,6 +18,13 @@ ChatTriggers::ChatTriggers() : m_pSayCmd(NULL), m_bWillProcessInPost(false),
m_PrivTriggerSize = 1; m_PrivTriggerSize = 1;
} }
ChatTriggers::~ChatTriggers()
{
delete [] m_PubTrigger;
m_PubTrigger = NULL;
delete [] m_PrivTrigger;
m_PrivTrigger = NULL;
}
ConfigResult ChatTriggers::OnSourceModConfigChanged(const char *key, ConfigResult ChatTriggers::OnSourceModConfigChanged(const char *key,
const char *value, const char *value,
@ -43,6 +50,7 @@ ConfigResult ChatTriggers::OnSourceModConfigChanged(const char *key,
void ChatTriggers::OnSourceModGameInitialized() void ChatTriggers::OnSourceModGameInitialized()
{ {
unsigned int total = 2;
ConCommandBase *pCmd = icvar->GetCommands(); ConCommandBase *pCmd = icvar->GetCommands();
const char *name; const char *name;
while (pCmd) while (pCmd)
@ -50,10 +58,19 @@ void ChatTriggers::OnSourceModGameInitialized()
if (pCmd->IsCommand()) if (pCmd->IsCommand())
{ {
name = pCmd->GetName(); name = pCmd->GetName();
if (strcmp(name, "say") == 0) if (!m_pSayCmd && strcmp(name, "say") == 0)
{ {
m_pSayCmd = (ConCommand *)pCmd; m_pSayCmd = (ConCommand *)pCmd;
break; if (--total == 0)
{
break;
}
} else if (!m_pSayTeamCmd && strcmp(name, "say_team") == 0) {
m_pSayTeamCmd = (ConCommand *)pCmd;
if (--total == 0)
{
break;
}
} }
} }
pCmd = const_cast<ConCommandBase *>(pCmd->GetNext()); pCmd = const_cast<ConCommandBase *>(pCmd->GetNext());
@ -64,10 +81,20 @@ void ChatTriggers::OnSourceModGameInitialized()
SH_ADD_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Pre, false); SH_ADD_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Pre, false);
SH_ADD_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Post, true); SH_ADD_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Post, true);
} }
if (m_pSayTeamCmd)
{
SH_ADD_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayTeamCmd, this, &ChatTriggers::OnSayCommand_Pre, false);
SH_ADD_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayTeamCmd, this, &ChatTriggers::OnSayCommand_Post, true);
}
} }
void ChatTriggers::OnSourceModShutdown() void ChatTriggers::OnSourceModShutdown()
{ {
if (m_pSayTeamCmd)
{
SH_REMOVE_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayTeamCmd, this, &ChatTriggers::OnSayCommand_Post, true);
SH_REMOVE_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayTeamCmd, this, &ChatTriggers::OnSayCommand_Pre, false);
}
if (m_pSayCmd) if (m_pSayCmd)
{ {
SH_REMOVE_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Post, true); SH_REMOVE_HOOK_MEMFUNC(ConCommand, Dispatch, m_pSayCmd, this, &ChatTriggers::OnSayCommand_Post, true);

View File

@ -11,6 +11,7 @@ class ChatTriggers : public SMGlobalClass
{ {
public: public:
ChatTriggers(); ChatTriggers();
~ChatTriggers();
public: //SMGlobalClass public: //SMGlobalClass
void OnSourceModGameInitialized(); void OnSourceModGameInitialized();
void OnSourceModShutdown(); void OnSourceModShutdown();
@ -29,6 +30,7 @@ private:
bool ProcessTrigger(edict_t *pEdict, const char *args, bool is_quoted); bool ProcessTrigger(edict_t *pEdict, const char *args, bool is_quoted);
private: private:
ConCommand *m_pSayCmd; ConCommand *m_pSayCmd;
ConCommand *m_pSayTeamCmd;
char *m_PubTrigger; char *m_PubTrigger;
size_t m_PubTriggerSize; size_t m_PubTriggerSize;
char *m_PrivTrigger; char *m_PrivTrigger;