From a8aa9d2d7fbcb4209581590fbe1f0258103dbe54 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 24 Sep 2007 15:06:10 +0000 Subject: [PATCH] added chat trigger detection --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401475 --- core/ChatTriggers.cpp | 10 ++++++++++ core/ChatTriggers.h | 2 ++ core/smn_console.cpp | 6 ++++++ plugins/basechat.sp | 2 +- plugins/include/console.inc | 9 +++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/ChatTriggers.cpp b/core/ChatTriggers.cpp index f0206607..fbe99f07 100644 --- a/core/ChatTriggers.cpp +++ b/core/ChatTriggers.cpp @@ -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; +} diff --git a/core/ChatTriggers.h b/core/ChatTriggers.h index aafdb3d5..297deb3c 100644 --- a/core/ChatTriggers.h +++ b/core/ChatTriggers.h @@ -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]; }; diff --git a/core/smn_console.cpp b/core/smn_console.cpp index 9ef2fc8a..508040a5 100644 --- a/core/smn_console.cpp +++ b/core/smn_console.cpp @@ -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} }; diff --git a/plugins/basechat.sp b/plugins/basechat.sp index 69d9d37e..faf91f06 100644 --- a/plugins/basechat.sp +++ b/plugins/basechat.sp @@ -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; } diff --git a/plugins/include/console.inc b/plugins/include/console.inc index 8bf6c99d..26f88171 100644 --- a/plugins/include/console.inc +++ b/plugins/include/console.inc @@ -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