added chat trigger detection

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401475
This commit is contained in:
David Anderson 2007-09-24 15:06:10 +00:00
parent e4728b0413
commit a8aa9d2d7f
5 changed files with 28 additions and 1 deletions

View File

@ -52,6 +52,7 @@ ChatTriggers::ChatTriggers() : m_pSayCmd(NULL), m_bWillProcessInPost(false),
m_PrivTrigger = sm_strdup("/");
m_PubTriggerSize = 1;
m_PrivTriggerSize = 1;
m_bIsChatTrigger = false;
}
ChatTriggers::~ChatTriggers()
@ -141,6 +142,7 @@ void ChatTriggers::OnSourceModShutdown()
void ChatTriggers::OnSayCommand_Pre()
{
int client = g_ConCmds.GetCommandClient();
m_bIsChatTrigger = false;
/* The server console cannot do this */
if (client == 0)
@ -190,6 +192,8 @@ void ChatTriggers::OnSayCommand_Pre()
RETURN_META(MRES_IGNORED);
}
m_bIsChatTrigger = true;
/**
* We'll execute it in post.
*/
@ -208,6 +212,7 @@ void ChatTriggers::OnSayCommand_Pre()
void ChatTriggers::OnSayCommand_Post()
{
m_bIsChatTrigger = false;
if (m_bWillProcessInPost)
{
/* Reset this for re-entrancy */
@ -308,3 +313,8 @@ unsigned int ChatTriggers::GetReplyTo()
{
return m_ReplyTo;
}
bool ChatTriggers::IsChatTrigger()
{
return m_bIsChatTrigger;
}

View File

@ -57,6 +57,7 @@ private: //ConCommand
public:
unsigned int GetReplyTo();
unsigned int SetReplyTo(unsigned int reply);
bool IsChatTrigger();
private:
bool PreProcessTrigger(edict_t *pEdict, const char *args, bool is_quoted);
private:
@ -68,6 +69,7 @@ private:
size_t m_PrivTriggerSize;
bool m_bWillProcessInPost;
bool m_bTriggerWasSilent;
bool m_bIsChatTrigger;
unsigned int m_ReplyTo;
char m_ToExecute[300];
};

View File

@ -996,6 +996,11 @@ static cell_t CheckCommandAccess(IPluginContext *pContext, const cell_t *params)
return g_ConCmds.CheckCommandAccess(params[1], cmd, bits) ? 1 : 0;
}
static cell_t IsChatTrigger(IPluginContext *pContext, const cell_t *params)
{
return g_ChatTriggers.IsChatTrigger() ? 1 : 0;
}
REGISTER_NATIVES(consoleNatives)
{
{"CreateConVar", sm_CreateConVar},
@ -1037,5 +1042,6 @@ REGISTER_NATIVES(consoleNatives)
{"ReadCommandIterator", ReadCommandIterator},
{"CheckCommandAccess", CheckCommandAccess},
{"FakeClientCommandEx", FakeClientCommandEx},
{"IsChatTrigger", IsChatTrigger},
{NULL, NULL}
};

View File

@ -81,7 +81,7 @@ public OnPluginStart()
public Action:Command_SayChat(client, args)
{
decl String:text[192];
if (GetCmdArgString(text, sizeof(text)) < 1)
if (IsChatTrigger() || GetCmdArgString(text, sizeof(text)) < 1)
{
return Plugin_Continue;
}

View File

@ -230,6 +230,15 @@ native ReplySource:GetCmdReplySource();
*/
native ReplySource:SetCmdReplySource(ReplySource:source);
/**
* Returns whether the current say hook is a chat trigger.
*
* This function is only meaningful inside say or say_team hooks.
*
* @return True if a chat trigger, false otherwise.
*/
native bool:IsChatTrigger();
/**
* Displays usage of an admin command to users depending on the
* setting of the sm_show_activity cvar. Additionally, the client