<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.soldat.pl/index.php?action=history&amp;feed=atom&amp;title=Simple_SpamMeter</id>
		<title>Simple SpamMeter - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.soldat.pl/index.php?action=history&amp;feed=atom&amp;title=Simple_SpamMeter"/>
		<link rel="alternate" type="text/html" href="https://wiki.soldat.pl/index.php?title=Simple_SpamMeter&amp;action=history"/>
		<updated>2026-05-26T01:27:53Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.soldat.pl/index.php?title=Simple_SpamMeter&amp;diff=38&amp;oldid=prev</id>
		<title>Freeman: Created page with &quot;===Script by Spkka (using xsplit by KeYDoN)===  &lt;source lang=&quot;pascal&quot;&gt; //CONSTANTS const MAXPLAYER = 16; MAXSPAM = 100;  //VARIABLES var spamMeter: array [1..MAXPLAYER] of int...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat.pl/index.php?title=Simple_SpamMeter&amp;diff=38&amp;oldid=prev"/>
				<updated>2012-08-14T16:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;===Script by Spkka (using xsplit by KeYDoN)===  &amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt; //CONSTANTS const MAXPLAYER = 16; MAXSPAM = 100;  //VARIABLES var spamMeter: array [1..MAXPLAYER] of int...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Script by Spkka (using xsplit by KeYDoN)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
//CONSTANTS&lt;br /&gt;
const&lt;br /&gt;
MAXPLAYER = 16;&lt;br /&gt;
MAXSPAM = 100;&lt;br /&gt;
&lt;br /&gt;
//VARIABLES&lt;br /&gt;
var&lt;br /&gt;
spamMeter: array [1..MAXPLAYER] of integer;&lt;br /&gt;
badWords: string;&lt;br /&gt;
GOOD, BAD: longint;&lt;br /&gt;
&lt;br /&gt;
//XSPLIT&lt;br /&gt;
function xsplit(const source: string; const delimiter: string):TStringArray;&lt;br /&gt;
var&lt;br /&gt;
	i,x,d:integer;&lt;br /&gt;
	s:string;&lt;br /&gt;
begin&lt;br /&gt;
	d:=length(delimiter);&lt;br /&gt;
	x:=0;&lt;br /&gt;
	i:=1;&lt;br /&gt;
	SetArrayLength(Result,1);&lt;br /&gt;
	while(i&amp;lt;=length(source)) do&lt;br /&gt;
	begin&lt;br /&gt;
		s:=Copy(source,i,d);   	&lt;br /&gt;
&lt;br /&gt;
	    	if(s=delimiter) then &lt;br /&gt;
		begin&lt;br /&gt;
	    		i:=i+d;		&lt;br /&gt;
	    		inc(x,1);&lt;br /&gt;
	    		SetArrayLength(result,x+1);&lt;br /&gt;
	    	end else &lt;br /&gt;
		begin  	     &lt;br /&gt;
	    		result[x]:= result[x]+copy(s,1,1);&lt;br /&gt;
	    		inc(i,1);&lt;br /&gt;
	  	end&lt;br /&gt;
	end&lt;br /&gt;
	if Result[ArrayHigh(Result)]='' then SetArrayLength(result,x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ACTIVATESERVER&lt;br /&gt;
procedure ActivateServer();&lt;br /&gt;
var&lt;br /&gt;
	b: byte;&lt;br /&gt;
begin&lt;br /&gt;
	GOOD := $EE00FF00;&lt;br /&gt;
	BAD := $FFFF4444;&lt;br /&gt;
&lt;br /&gt;
	for b := 1 to MAXPLAYER do&lt;br /&gt;
	begin&lt;br /&gt;
		//set spammeter for all id's to 0.&lt;br /&gt;
		spamMeter[b] := 0;&lt;br /&gt;
	end&lt;br /&gt;
	//read the badword file.&lt;br /&gt;
	//file should be in soldatserver/badwords/badwords.txt&lt;br /&gt;
	badWords := ReadFile('/badwords/badwords.txt');&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//APPONIDLE&lt;br /&gt;
procedure AppOnIdle(Ticks: integer);&lt;br /&gt;
var &lt;br /&gt;
	i: byte;&lt;br /&gt;
begin&lt;br /&gt;
	//this will count down the spammeter with 1 per ID per second.&lt;br /&gt;
	for i := 1 to MAXPLAYER do&lt;br /&gt;
	begin&lt;br /&gt;
		spamMeter[i] := spamMeter[i] - 1;&lt;br /&gt;
	end	&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ONPLAYERSPEAK&lt;br /&gt;
procedure OnPlayerSpeak(ID: byte; Text: string);&lt;br /&gt;
var &lt;br /&gt;
	nick: string;&lt;br /&gt;
	numText: integer;&lt;br /&gt;
	b: byte;&lt;br /&gt;
	txts: TStringArray;&lt;br /&gt;
begin	&lt;br /&gt;
	//this will split the text by spaces.&lt;br /&gt;
	txts := xsplit( Text, ' ' );&lt;br /&gt;
	numText := Arrayhigh( txts );&lt;br /&gt;
	for b := 0 to numText do&lt;br /&gt;
	begin&lt;br /&gt;
		//check if text input contains a bad word.&lt;br /&gt;
		if Containsstring(badWords,lowercase(txts[b])) = true then&lt;br /&gt;
		begin&lt;br /&gt;
			//if so add 25 to spammeter.&lt;br /&gt;
			spamMeter[ID] := spamMeter[ID] + 25;&lt;br /&gt;
			//if spammeter is bigger then the max allowed spam, ban player.		&lt;br /&gt;
			if spamMeter[ID] &amp;gt; MAXSPAM then&lt;br /&gt;
			begin&lt;br /&gt;
				nick := (getPlayerStat(ID,'Name'));&lt;br /&gt;
				//ban with the reason spamming.&lt;br /&gt;
				BanPlayerReason(ID,0,nick+' spamming');&lt;br /&gt;
				spamMeter[ID] := 0;&lt;br /&gt;
			end else&lt;br /&gt;
			begin&lt;br /&gt;
				//if the spammeter is bigger then 30 alert player for spamming.&lt;br /&gt;
				if spamMeter[ID] &amp;gt; 30 then&lt;br /&gt;
				begin&lt;br /&gt;
					WriteConsole(ID,'Stop spamming the server!',BAD);&lt;br /&gt;
					WriteConsole(ID,'Spamming results in a permanent ban!',BAD);&lt;br /&gt;
				end&lt;br /&gt;
			end		&lt;br /&gt;
		exit;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ONLEAVEGAME&lt;br /&gt;
procedure OnLeaveGame(ID, Team: byte; Kicked: boolean);&lt;br /&gt;
begin&lt;br /&gt;
	//reset the spammeter from the player that is leaving.&lt;br /&gt;
	spamMeter[ID] := 0;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Templates]]&lt;/div&gt;</summary>
		<author><name>Freeman</name></author>	</entry>

	</feed>