Allow non-silent chat triggers to go through OnClientSayCommand (bug 5926, r=psychonic).
Allow non-silent chat triggers to go through OnClientSayCommand (
bug 5926, r=psychonic).
1.1 --- a/core/ChatTriggers.cpp Thu Feb 27 09:53:57 2014 -0500
1.2 +++ b/core/ChatTriggers.cpp Thu Feb 27 20:22:01 2014 -0500
1.3 @@ -64,7 +64,7 @@
1.4 m_PubTriggerSize = 1;
1.5 m_PrivTriggerSize = 1;
1.6 m_bIsChatTrigger = false;
1.7 - m_bPluginIgnored = false;
1.8 + m_bPluginIgnored = true;
1.9 #if SOURCE_ENGINE == SE_EPISODEONE
1.10 m_bIsINS = false;
1.11 #endif
1.12 @@ -207,10 +207,10 @@
1.13 int client = g_ConCmds.GetCommandClient();
1.14 m_bIsChatTrigger = false;
1.15 m_bWasFloodedMessage = false;
1.16 - m_bPluginIgnored = false;
1.17 + m_bPluginIgnored = true;
1.18
1.19 const char *args = command.ArgS();
1.20 -
1.21 +
1.22 if (!args)
1.23 {
1.24 RETURN_META(MRES_IGNORED);
1.25 @@ -224,12 +224,11 @@
1.26 /* The server console cannot do this */
1.27 if (client == 0)
1.28 {
1.29 - cell_t res = CallOnClientSayCommand(client);
1.30 - if (res >= Pl_Handled)
1.31 + if (CallOnClientSayCommand(client) >= Pl_Handled)
1.32 {
1.33 - m_bPluginIgnored = (res >= Pl_Stop);
1.34 RETURN_META(MRES_SUPERCEDE);
1.35 }
1.36 +
1.37 RETURN_META(MRES_IGNORED);
1.38 }
1.39
1.40 @@ -304,15 +303,12 @@
1.41 m_bWillProcessInPost = true;
1.42 }
1.43
1.44 - cell_t res = CallOnClientSayCommand(client);
1.45 -
1.46 - if (res >= Pl_Handled)
1.47 + if (is_silent && (m_bIsChatTrigger || (g_bSupressSilentFails && pPlayer->GetAdminId() != INVALID_ADMIN_ID)))
1.48 {
1.49 - m_bPluginIgnored = (res >= Pl_Stop);
1.50 RETURN_META(MRES_SUPERCEDE);
1.51 }
1.52
1.53 - if (is_silent && (m_bIsChatTrigger || (g_bSupressSilentFails && pPlayer->GetAdminId() != INVALID_ADMIN_ID)))
1.54 + if (CallOnClientSayCommand(client) >= Pl_Handled)
1.55 {
1.56 RETURN_META(MRES_SUPERCEDE);
1.57 }
1.58 @@ -335,7 +331,7 @@
1.59 {
1.60 /* Reset this for re-entrancy */
1.61 m_bWillProcessInPost = false;
1.62 -
1.63 +
1.64 /* Execute the cached command */
1.65 unsigned int old = SetReplyTo(SM_REPLY_CHAT);
1.66 #if SOURCE_ENGINE == SE_DOTA
1.67 @@ -346,12 +342,8 @@
1.68 SetReplyTo(old);
1.69 }
1.70
1.71 - if (m_bPluginIgnored)
1.72 + if (!m_bPluginIgnored && m_pOnClientSayCmd_Post->GetFunctionCount() != 0)
1.73 {
1.74 - m_bPluginIgnored = false;
1.75 - }
1.76 - else if (!m_bWasFloodedMessage && !m_bIsChatTrigger && m_pOnClientSayCmd_Post->GetFunctionCount() != 0)
1.77 - {
1.78 m_pOnClientSayCmd_Post->PushCell(client);
1.79 m_pOnClientSayCmd_Post->PushString(m_Arg0Backup);
1.80 m_pOnClientSayCmd_Post->PushString(m_ArgSBackup);
1.81 @@ -404,7 +396,7 @@
1.82 {
1.83 return false;
1.84 }
1.85 -
1.86 +
1.87 prepended = true;
1.88 }
1.89
1.90 @@ -420,7 +412,7 @@
1.91 } else {
1.92 len = strncopy(m_ToExecute, args, sizeof(m_ToExecute));
1.93 }
1.94 -
1.95 +
1.96 /* Check if we need to strip a quote */
1.97 if (is_quoted)
1.98 {
1.99 @@ -439,13 +431,16 @@
1.100 cell_t ChatTriggers::CallOnClientSayCommand(int client)
1.101 {
1.102 cell_t res = Pl_Continue;
1.103 - if (!m_bIsChatTrigger && m_pOnClientSayCmd->GetFunctionCount() != 0)
1.104 + if (m_pOnClientSayCmd->GetFunctionCount() != 0)
1.105 {
1.106 m_pOnClientSayCmd->PushCell(client);
1.107 m_pOnClientSayCmd->PushString(m_Arg0Backup);
1.108 m_pOnClientSayCmd->PushString(m_ArgSBackup);
1.109 m_pOnClientSayCmd->Execute(&res);
1.110 }
1.111 +
1.112 + m_bPluginIgnored = (res >= Pl_Stop);
1.113 +
1.114 return res;
1.115 }
1.116