I'm trying to make an anti-spam plugin. The basic ideea behind this is that if a player types the same message in chat 3 times in less than 10 seconds, he will be gagged.
The issue that I'm experiencing however is that if another player types anything in chat, the player who spammed won't get gagged anymore. For example if :
Player1: sourcemod
Player1: sourcemod
Player2: anything
Player1: sourcemod --> Player1 will not get gagged, although he spammed.
Basically what I need to make this work properly, is a way of temporarily storing the player's previous message.
Any help would be really appreciated.
Code here:
PHP Code:
#include <sourcemod>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required
char spamcount[MAXPLAYERS + 1] = { 0, ... };
char playermessage[200];
char samemessage[200];
public Plugin myinfo =
{
name = "Anti-Spam",
author = "FAQU",
description = "Gags the player for sending the same message 3 times in less than 10 seconds."
};
public void OnPluginStart()
{
HookEvent("player_say", OnPlayerSay);
}
public void OnClientPutInServer(int client)
{
ResetSpamCount(client);
}
public void OnClientDisconnect(int client)
{
ResetSpamCount(client);
}
public Action OnPlayerSay(Handle event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(GetEventInt(event, "userid"));
GetEventString(event, "text", playermessage, sizeof(playermessage));
if (spamcount[client] == 0)
{
strcopy(samemessage, sizeof(samemessage), playermessage);
spamcount[client]++;
CreateTimer(10.0, Timer_ResetLimit, client);
return Plugin_Handled;
}
if (spamcount[client] == 1)
{
GetEventString(event, "text", playermessage, sizeof(playermessage));
if (StrEqual(playermessage, samemessage))
{
spamcount[client]++;
}
return Plugin_Handled;
}
if (spamcount[client] == 2)
{
GetEventString(event, "text", playermessage, sizeof(playermessage));
if (StrEqual(playermessage, samemessage))
{
ServerCommand("sm_gag %N", client);
ResetSpamCount(client);
}
return Plugin_Handled;
}
else
return Plugin_Handled;
}
public Action Timer_ResetLimit(Handle timer, int client)
{
ResetSpamCount(client);
}
void ResetSpamCount(int client)
{
spamcount[client] = 0;
}