All pastes #558862 Raw Edit

Mine

public text v1 · immutable
·published 2007-06-11 15:05 UTC
rendered paste body
{$VERSION 2.6.0}
type
	TEvulPlayer = record
	 Nick,IP: String;
	 Level: Byte;
	end;

const
  BADWORD_LIST = 'scripts/badwords.txt';
  PUNISH_KICK = 2;
  PUNISH_BAN = 4;
  PUNISH_BAN_TIME = 180;
  PUNISH_WARN_MSG = 'Stop Swearing!';
  PUNISH_KICK_MSG = 'You have been warned! KICKED!';
  PUNISH_BAN_MSG = 'Enough is enough! BANNED!';
var
  BadWords: TStringArray;
  EvulPlayers: Array of TEvulPlayer;
  

procedure SayToID(Const ID:integer;const Text:String);
begin
if (ID=255) then WriteLn(Text)
else SayToPlayer(ID,Text);
end;

procedure LoadBadWords;
begin
	BadWords:= xsplit(ReadFile(BADWORD_LIST),#13#10);
	if BadWords[ArrayHigh(BadWords)] = '' then
		SetArrayLength(BadWords,ArrayHigh(BadWords));
end;

procedure ActivateServer();
begin
	ThreadFunc([],'LoadBadWords');
end;

procedure AddBadWord(const ID: Byte; BadWord: String);
begin
	BadWord:=LowerCase(Trim(BadWord));
	WriteLnFile(BADWORD_LIST,BadWord);
	SetArrayLength(BadWords,GetArrayLength(BadWords)+1);
	BadWords[ArrayHigh(BadWords)]:= BadWord;
	SayToID(ID,'Badword "'+BadWord+'" added');
end;

procedure DelBadWord(const ID: Byte; BadWord: String);
var
	i,z:integer;
	s:string;
	found: Boolean;
begin
	BadWord:=LowerCase(Trim(BadWord));
	for i:=0 to ArrayHigh(BadWords) do begin
  		if (BadWord=BadWords[i]) then begin
  			for z:=i to ArrayHigh(BadWords)-1 do begin
  				BadWords[z]:= BadWords[z+1];
  			end;
  			SetArrayLength(BadWords,ArrayHigh(BadWords));
  			Found:= true;
  			break;
  		end;
  	end	
  	if Found then begin
  		for i:=0 to ArrayHigh(BadWords) do begin
			s:=s+BadWords[i]+chr(13)+chr(10);
		end;
		WriteFile(BADWORD_LIST,s);
		SayToID(ID,'BadWord "'+BadWord+'" deleted');
	end else SayToID(ID,'BadWord "'+BadWord+ ' not found');
end;

function OnCommand(ID: Byte; Text: string): boolean;
begin
  //NOTE: This function will be called when an admin types a / command.
  Result := false; // Return true if you want to ignore the command typed.
  if (Copy(Text,1,11) = '/addbadword') then AddBadWord(ID,Copy(Text,13,200)) 
  else if (Copy(Text,1,11) = '/delbadword') then DelBadWord(ID,Copy(Text,13,200));
end;

//NETWORKCORE.PAS

procedure ForgiveEvuls;
var
	i,z:Integer;
begin
	for i:=0 to GetArrayLength(EvulPlayers)-1 do begin
		if EvulPlayers[i].Level = 1 then begin
			for z:=i to GetArrayLength(EvulPlayers)-2 do begin
				EvulPlayers[z]:= EvulPlayers[z+1];
			end;
			SetArrayLength(EvulPlayers,GetArrayLength(EvulPlayers)-1);
		end else
			EvulPlayers[i].Level := EvulPlayers[i].Level -1;
	end;
end;

procedure OnMapChange(NewMap: string);
begin
	ThreadFunc([],'ForgiveEvuls');
end;

procedure PunishEvulPlayer(ID: Byte);
var
	i,z:integer;
	sIP,sNick:String;
	Found: Boolean;
begin
	sIP:= IDToIP(ID);
	sNick:= IDtoName(ID);
	
	for i:=0 to GetArrayLength(EvulPlayers)-1 do begin
		if ((sIP = EvulPlayers[i].IP) or (sNick = EvulPlayers[i].Nick)) then begin
			EvulPlayers[i].Level := EvulPlayers[i].Level + 1;
			if (PUNISH_BAN <= EvulPlayers[i].Level) then begin
				SayToID(ID,PUNISH_BAN_MSG);
				BanPlayer(ID,PUNISH_BAN_TIME);
			end else if (PUNISH_KICK <= EvulPlayers[i].Level) then begin
				SayToID(ID,PUNISH_KICK_MSG);
				KickPlayer(ID);
			end else begin
				Command('/kill '+IntToStr(ID));
				SayToID(ID,PUNISH_WARN_MSG);
			end;
			Found:= True;
			break;
		end;	
	end;
	if not found then begin
		SetArrayLength(EvulPlayers,GetArrayLength(EvulPlayers)+1);
		z:= GetArrayLength(EvulPlayers)-1;
		EvulPLayers[z].Nick:= sNick;
		EvulPLayers[z].IP:= sIP;
		EvulPLayers[z].Level:= 1;	
		Command('/kill '+IntToStr(ID));
		SayToID(ID,PUNISH_WARN_MSG);
	end;
end;

procedure CheckBadWords(const ID:Byte; var Text:String);
var
	i: integer;
begin
	for i:=0 to ArrayHigh(BadWords) do begin
		if MaskCheck(Text,BadWords[i]) then begin
			PunishEvulPlayer(ID);
			break;
		end;
	end;
end;

procedure OnPlayerSpeak(ID: byte; Text: string);
begin
	ThreadFunc([ID,Lowercase(Text)],'CheckBadWords');
end;