Allow non-silent chat triggers to go through OnClientSayCommand (bug 5926, r=psychonic).

This commit is contained in:
SystematicMania 2014-02-27 20:22:01 -05:00
parent b99ab3d1d2
commit c679b97e5f

View File

@ -64,7 +64,7 @@ ChatTriggers::ChatTriggers() : m_pSayCmd(NULL), m_bWillProcessInPost(false),
m_PubTriggerSize = 1; m_PubTriggerSize = 1;
m_PrivTriggerSize = 1; m_PrivTriggerSize = 1;
m_bIsChatTrigger = false; m_bIsChatTrigger = false;
m_bPluginIgnored = false; m_bPluginIgnored = true;
#if SOURCE_ENGINE == SE_EPISODEONE #if SOURCE_ENGINE == SE_EPISODEONE
m_bIsINS = false; m_bIsINS = false;
#endif #endif
@ -207,7 +207,7 @@ void ChatTriggers::OnSayCommand_Pre()
int client = g_ConCmds.GetCommandClient(); int client = g_ConCmds.GetCommandClient();
m_bIsChatTrigger = false; m_bIsChatTrigger = false;
m_bWasFloodedMessage = false; m_bWasFloodedMessage = false;
m_bPluginIgnored = false; m_bPluginIgnored = true;
const char *args = command.ArgS(); const char *args = command.ArgS();
@ -224,12 +224,11 @@ void ChatTriggers::OnSayCommand_Pre()
/* The server console cannot do this */ /* The server console cannot do this */
if (client == 0) if (client == 0)
{ {
cell_t res = CallOnClientSayCommand(client); if (CallOnClientSayCommand(client) >= Pl_Handled)
if (res >= Pl_Handled)
{ {
m_bPluginIgnored = (res >= Pl_Stop);
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} }
RETURN_META(MRES_IGNORED); RETURN_META(MRES_IGNORED);
} }
@ -304,15 +303,12 @@ void ChatTriggers::OnSayCommand_Pre()
m_bWillProcessInPost = true; m_bWillProcessInPost = true;
} }
cell_t res = CallOnClientSayCommand(client); if (is_silent && (m_bIsChatTrigger || (g_bSupressSilentFails && pPlayer->GetAdminId() != INVALID_ADMIN_ID)))
if (res >= Pl_Handled)
{ {
m_bPluginIgnored = (res >= Pl_Stop);
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} }
if (is_silent && (m_bIsChatTrigger || (g_bSupressSilentFails && pPlayer->GetAdminId() != INVALID_ADMIN_ID))) if (CallOnClientSayCommand(client) >= Pl_Handled)
{ {
RETURN_META(MRES_SUPERCEDE); RETURN_META(MRES_SUPERCEDE);
} }
@ -346,11 +342,7 @@ void ChatTriggers::OnSayCommand_Post()
SetReplyTo(old); SetReplyTo(old);
} }
if (m_bPluginIgnored) if (!m_bPluginIgnored && m_pOnClientSayCmd_Post->GetFunctionCount() != 0)
{
m_bPluginIgnored = false;
}
else if (!m_bWasFloodedMessage && !m_bIsChatTrigger && m_pOnClientSayCmd_Post->GetFunctionCount() != 0)
{ {
m_pOnClientSayCmd_Post->PushCell(client); m_pOnClientSayCmd_Post->PushCell(client);
m_pOnClientSayCmd_Post->PushString(m_Arg0Backup); m_pOnClientSayCmd_Post->PushString(m_Arg0Backup);
@ -439,13 +431,16 @@ bool ChatTriggers::PreProcessTrigger(edict_t *pEdict, const char *args, bool is_
cell_t ChatTriggers::CallOnClientSayCommand(int client) cell_t ChatTriggers::CallOnClientSayCommand(int client)
{ {
cell_t res = Pl_Continue; cell_t res = Pl_Continue;
if (!m_bIsChatTrigger && m_pOnClientSayCmd->GetFunctionCount() != 0) if (m_pOnClientSayCmd->GetFunctionCount() != 0)
{ {
m_pOnClientSayCmd->PushCell(client); m_pOnClientSayCmd->PushCell(client);
m_pOnClientSayCmd->PushString(m_Arg0Backup); m_pOnClientSayCmd->PushString(m_Arg0Backup);
m_pOnClientSayCmd->PushString(m_ArgSBackup); m_pOnClientSayCmd->PushString(m_ArgSBackup);
m_pOnClientSayCmd->Execute(&res); m_pOnClientSayCmd->Execute(&res);
} }
m_bPluginIgnored = (res >= Pl_Stop);
return res; return res;
} }