diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-08-31 13:22:39 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-08-31 13:22:39 -0600 |
commit | 67a8847e17aa72981bbf3b4c15167cc0ef499da1 (patch) | |
tree | 30b07708a5893712ea1a0bb4835881caa3dd97f7 /src/map/tmw.c | |
parent | 0e36f6e8d82e7cb0f01683454790a7123ea03197 (diff) | |
parent | dbd9d0321c66deeecf01445f8298aa5076391fbd (diff) | |
download | tmwa-67a8847e17aa72981bbf3b4c15167cc0ef499da1.tar.gz tmwa-67a8847e17aa72981bbf3b4c15167cc0ef499da1.tar.bz2 tmwa-67a8847e17aa72981bbf3b4c15167cc0ef499da1.tar.xz tmwa-67a8847e17aa72981bbf3b4c15167cc0ef499da1.zip |
Merge commit 'taw/master'
Diffstat (limited to 'src/map/tmw.c')
-rw-r--r-- | src/map/tmw.c | 67 |
1 files changed, 39 insertions, 28 deletions
diff --git a/src/map/tmw.c b/src/map/tmw.c index 2331a23..25aa55b 100644 --- a/src/map/tmw.c +++ b/src/map/tmw.c @@ -43,41 +43,45 @@ int tmw_CheckChatSpam(struct map_session_data *sd, char* message) { sd->chat_lines_in = 0; } - sd->chat_lines_in++; - - if (message) { - // Penalty for repeating - if (strncmp(sd->chat_lastmsg, message, battle_config.chat_maxline) == 0) - sd->chat_lines_in += battle_config.chat_lame_penalty; + if (now > sd->chat_repeat_reset_due) { + sd->chat_repeat_reset_due = now + (battle_config.chat_spam_threshold * 60); + sd->chat_total_repeats = 0; + } - // Penalty for lame, it can stack on top of the repeat penalty. - if (tmw_CheckChatLameness(sd, message)) - sd->chat_lines_in += battle_config.chat_lame_penalty; + sd->chat_lines_in++; - strncpy((char*)sd->chat_lastmsg, message, battle_config.chat_maxline); + // Penalty for repeats. + if (strncmp(sd->chat_lastmsg, message, tmw_ShorterStrlen(sd->chat_lastmsg, message)) == 0) { + sd->chat_lines_in += battle_config.chat_lame_penalty; + sd->chat_total_repeats++; } else { - // No message means we're checking another type of spam. - // Most other types are pretty lame.. - sd->chat_lines_in += battle_config.chat_lame_penalty; + sd->chat_total_repeats=0; } - if (sd->chat_lines_in >= battle_config.chat_spam_flood) { - sd->chat_lines_in = 0; + // Penalty for lame, it can stack on top of the repeat penalty. + if (tmw_CheckChatLameness(sd, message)) + sd->chat_lines_in += battle_config.chat_lame_penalty; + + strncpy((char*)sd->chat_lastmsg, message, battle_config.chat_maxline); + + if (sd->chat_lines_in >= battle_config.chat_spam_flood || sd->chat_total_repeats >= battle_config.chat_spam_flood) { + sd->chat_lines_in = sd->chat_total_repeats = 0; if (battle_config.chat_spam_ban > 0) { - tmw_GmHackMsg("Spam detected from character '%s' (account: %d)", sd->status.name, sd->status.account_id); - clif_displaymessage(sd->fd, "You have been banned for spamming. Please do not spam."); - tmw_GmHackMsg("This player has been banned for %d hour(s).", battle_config.chat_spam_ban); + tmw_GmHackMsg("%s has been autobanned for chat spam", sd->status.name); + gm_log("server(0,0) Server : @autoban %s %dh (chat spam)", sd->status.name, battle_config.chat_spam_ban); + clif_displaymessage(sd->fd, "You have been banned for spamming. Please do not spam."); chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, battle_config.chat_spam_ban, 0, 0); // type: 2 - ban (year, month, day, hour, minute, second) clif_setwaitclose(sd->fd); } - + return 1; } - if (battle_config.chat_spam_ban && sd->chat_lines_in >= battle_config.chat_spam_warn) { + if (battle_config.chat_spam_ban && + (sd->chat_lines_in >= battle_config.chat_spam_warn || sd->chat_total_repeats >= battle_config.chat_spam_warn)) { clif_displaymessage(sd->fd, "WARNING : You are about to be automaticly banned for spam!"); clif_displaymessage(sd->fd, "WARNING : Please slow down, do not repeat, and do not SHOUT!"); } @@ -85,6 +89,13 @@ int tmw_CheckChatSpam(struct map_session_data *sd, char* message) { return 0; } +// Compares the length of two strings and returns that of the shorter +int tmw_ShorterStrlen(char *s1, char *s2) { + int s1_len = strlen(s1); + int s2_len = strlen(s2); + return(s2_len >= s1_len ? s1_len : s2_len); +} + // Returns true if more than 50% of input message is caps or punctuation int tmw_CheckChatLameness(struct map_session_data *sd, char *message) { @@ -136,14 +147,14 @@ int tmw_CheckTradeSpam(struct map_session_data *sd) { sd->trades_in = 0; if (battle_config.trade_spam_ban > 0) { - tmw_GmHackMsg("Trade spam detected from character '%s' (account: %d)", sd->status.name, sd->status.account_id); - clif_displaymessage(sd->fd, "You have been banned for trade spamming. Please do not trade spam."); - tmw_GmHackMsg("This player has been banned for %d hour(s).", battle_config.trade_spam_ban); + tmw_GmHackMsg("%s has been autobanned for trade spam", sd->status.name); + gm_log("server(0,0) Server : @autoban %s %dh (trade spam)", sd->status.name, battle_config.trade_spam_ban); + clif_displaymessage(sd->fd, "You have been banned for trade spamming. Please do not trade spam."); chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, battle_config.trade_spam_ban, 0, 0); // type: 2 - ban (year, month, day, hour, minute, second) clif_setwaitclose(sd->fd); } - + return 1; } @@ -171,14 +182,14 @@ int tmw_CheckSitSpam(struct map_session_data *sd) { sd->sits_in = 0; if (battle_config.sit_spam_ban > 0) { - tmw_GmHackMsg("Sit spam detected from character '%s' (account: %d)", sd->status.name, sd->status.account_id); - clif_displaymessage(sd->fd, "You have been banned for sit spamming. Please do not sit spam."); - tmw_GmHackMsg("This player has been banned for %d hour(s).", battle_config.sit_spam_ban); + tmw_GmHackMsg("%s has been autobanned for sit spam", sd->status.name); + gm_log("server(0,0) Server : @autoban %s %dh (sit spam)", sd->status.name, battle_config.sit_spam_ban); + clif_displaymessage(sd->fd, "You have been banned for sit spamming. Please do not sit spam."); chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, battle_config.sit_spam_ban, 0, 0); // type: 2 - ban (year, month, day, hour, minute, second) clif_setwaitclose(sd->fd); } - + return 1; } |