All pastes #1040946 Raw Edit

sBanMachine

public cpp v1 · immutable
#1040946 ·published 2008-06-07 02:36 UTC
rendered paste body
/*															«Created/Scripted by Seif»..........................................................	X = DONE                                            ..	% = PROGRESSION                                     ..	- = CANCELED                                        ..	----------------TO DO LIST--------------            ..	X 	IP Banning System                           	..	X 	Name Banning System                           	..	X 	Range Banning System                            ..........................................................*//*x---------------------------------Important-------------------------------------x*///**INCLUDES**//#include <a_samp>//**PRAGMAS**////**MISC**///*x---------------------------------Defining-------------------------------------x*///**COLORS*//#define GREEN 0x21DD00FF#define RED 0xE60000FF#define ADMIN_RED 0xFB0000FF#define YELLOW 0xFFFF00FF#define ORANGE 0xF97804FF#define LIGHTRED 0xFF8080FF#define LIGHTBLUE 0x00C2ECFF#define PURPLE 0xB360FDFF#define PLAYER_COLOR 0xFFFFFFFF#define BLUE 0x1229FAFF#define LIGHTGREEN 0x38FF06FF#define DARKPINK 0xE100E1FF#define DARKGREEN 0x008040FF#define ANNOUNCEMENT 0x6AF7E1FF#define COLOR_SYSTEM 0xEFEFF7AA#define GRAY 0xCECECEFF#define give return//**MISC**////**VARIABLES**//new player[24];new ip[20];new File:file;new filestr[128];new lines;new ban[128];new ban2[128];new giveplayerid;new string[128];//**FORWARDS**///*x---------------------------------CallBacks-------------------------------------x*/stock IsNumeric(const num[]){	for (new i = 0, j = strlen(num); i < j; i++)	if (num[i] > '9' || num[i] < '0')    return 0;	return 1;}ReturnUser(text[], playerid = INVALID_PLAYER_ID){	new pos = 0;	while (text[pos] < 0x21)	{		if (text[pos] == 0) return INVALID_PLAYER_ID;		pos++;	}	new userid = INVALID_PLAYER_ID;	if (IsNumeric(text[pos]))	{		userid = strval(text[pos]);		if (userid >=0 && userid < MAX_PLAYERS)		{			if(!IsPlayerConnected(userid))				userid = INVALID_PLAYER_ID;			else return userid;		}	}	new len = strlen(text[pos]);	new count = 0;	new pname[MAX_PLAYER_NAME];	for (new i = 0; i < MAX_PLAYERS; i++)	{		if (IsPlayerConnected(i))		{			GetPlayerName(i, pname, sizeof (pname));			if (strcmp(pname, text[pos], true, len) == 0)			{				if (len == strlen(pname)) return i;				else				{					count++;					userid = i;				}			}		}	}	if (count != 1)	{		if (playerid != INVALID_PLAYER_ID)		{			if (count) SendClientMessage(playerid, COLOR_SYSTEM, "There are multiple users, enter full playername.");			else SendClientMessage(playerid, COLOR_SYSTEM, "Playername not found.");		}		userid = INVALID_PLAYER_ID;	}	return userid;}stock strtok(const str[], &index,seperator=' '){	new length = strlen(str);	new offset = index;	new result[128];	while ((index < length) && (str[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))	{		result[index - offset] = str[index];		index++;	}	result[index - offset] = EOS;	if ((index < length) && (str[index] == seperator))	{		index++;	}	return result;}stock SendClientMessageToAdmins(color, msg[]){	for(new i = 0; i < MAX_PLAYERS; i++)	{		if(IsPlayerConnected(i))		{			if (IsPlayerAdmin(i))			{				SendClientMessage(i, color, msg);				printf("%s", string);			}		}	}	return 1;}public OnFilterScriptInit(){	print("<|-----------------------------------------|>");	print(" |[FS] .:[ - Ban System by  Seif - ]:. [FS]|");	print("<|-----------------------------------------|>");	if (fexist("Bans.txt")) return true;	else fopen("Bans.txt",io_write);	return true;}public OnFilterScriptExit(){	if (file) fclose(file);	return true;}public OnPlayerConnect(playerid){	BanCheck(playerid);	return true;}public OnPlayerCommandText(playerid, cmdtext[]){	new tmp[128],idx;	new cmd[128];	cmd = strtok(cmdtext,idx);	if (strcmp(cmd,"/ban", true) == 0)	{	    if (IsPlayerAdmin(playerid))		{			new reason[128],str[128],namez[24],name1[24];	    	tmp = strtok(cmdtext,idx);			if(!strlen(tmp))			{				SendClientMessage(playerid,ORANGE,"USAGE: /ban [name/ip] [reason]");				SendClientMessage(playerid,ORANGE,"FUNCTION: Will ban the player's name/IP following by a reason. !! DO NOT ENTER THE ID !!");				SendClientMessage(playerid,ORANGE,"HELP: Please enter a name or IP. If you're trying to execute a range ban...");				SendClientMessage(playerid,ORANGE,"HELP: ...then make sure you got a valid player IP( /ip ) and replace some characters by * (NOT ALL)");				return 1;			}            new length = strlen(cmdtext);			while ((idx < length) && (cmdtext[idx] <= ' '))			{				idx++;			}			new offset = idx;			while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))			{				reason[idx - offset] = cmdtext[idx];				idx++;			}			reason[idx - offset] = EOS;	    	if(!strlen(reason))			{				SendClientMessage(playerid,ORANGE,"USAGE: /ban [name/ip] [reason]");				SendClientMessage(playerid,RED,"ERROR: You must enter a reason for the ban!");				return 1;			}			file = fopen("Bans.txt",io_append);			if (file)			{			    format(str,128,"%s\r\n",tmp);			    fwrite(file,str);			    fclose(file);			}			new count = 0;			for(new i=0;i<MAX_PLAYERS;i++)			{			    if (IsPlayerConnected(i))	   			{					GetPlayerName(i,namez,24);					GetPlayerName(playerid,name1,24);					GetPlayerIp(i,ip,sizeof(ip));					if (strcmp(tmp, namez,true)==0)					{						format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name1,namez,reason);						SendClientMessageToAll(ADMIN_RED,str);						Kick(i);					}					else if(strcmp(tmp,ip,true)==0)					{					    format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name1,namez,reason);						SendClientMessageToAll(ADMIN_RED,str);						format(str,128,"|- Banned IP: [ %s ] -|",ip);						SendClientMessageToAdmins(ADMIN_RED,str);						Kick(i);					}				}				else				{				    GetPlayerIp(i,ip,sizeof(ip));					if (!IsPlayerConnected(i) && strfind(tmp,".",true) != -1 && count == 0)					{					    GetPlayerName(playerid,name1,24);						format(str,128,"|- Banned IP: [ %s ] by %s. [Reason: %s] -|",tmp,name1,reason);						SendClientMessageToAdmins(ADMIN_RED,str);					}					else if (!IsPlayerConnected(i) && count == 0)					{					    for(new index = 1; index <= 128; index++)						if (tmp[index] != '.')						{					    	GetPlayerName(playerid,name1,24);							format(str,128,"|- Banned Name: [ %s ] by %s. [Reason: %s] -|",tmp,name1,reason);							SendClientMessageToAdmins(ADMIN_RED,str);							break;						}					}					count++;				}			}		}		return true;	}	if (strcmp(cmd,"/idban", true) == 0)	{	    if (IsPlayerAdmin(playerid))		{			new reason[128],targetid,target[MAX_PLAYER_NAME],str[128];	    	tmp = strtok(cmdtext,idx);	    	targetid = ReturnUser(tmp);			if(!strlen(tmp))			{				SendClientMessage(playerid,ORANGE,"USAGE: /idban [partofname/id] [reason]");				SendClientMessage(playerid,ORANGE,"FUNCTION: Will ban the player's IP following by a reason. ID supported and name supported only");				return 1;			}			if (!IsPlayerConnected(targetid) || targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid,RED,"ERROR: Invalid player or player not connected");            new length = strlen(cmdtext);			while ((idx < length) && (cmdtext[idx] <= ' '))			{				idx++;			}			new offset = idx;			while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))			{				reason[idx - offset] = cmdtext[idx];				idx++;			}			reason[idx - offset] = EOS;	    	if(!strlen(reason))			{				SendClientMessage(playerid,ORANGE,"USAGE: /idban [partofname/id] [reason]");				SendClientMessage(playerid,RED,"ERROR: You must enter a reason for the ban!");				return 1;			}			GetPlayerIp(targetid,ip,sizeof(ip));			file = fopen("Bans.txt",io_append);			if (file)			{			    format(str,128,"%s\r\n",ip);			    fwrite(file,str);			    fclose(file);			}			GetPlayerName(playerid,player,24);			GetPlayerName(targetid,target,24);			format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",player,target,reason);			SendClientMessageToAll(ADMIN_RED,str);			Kick(targetid);		}		return true;	}	if(strcmp(cmd, "/ip", true) == 0)	{		if (IsPlayerAdmin(playerid))		{			tmp = strtok(cmdtext,idx);			if(!strlen(tmp))			{				SendClientMessage(playerid, ORANGE, "USAGE: /ip [playerid]");				SendClientMessage(playerid, ORANGE, "FUNCTION: Will view a player's IP.");				return 1;			}			giveplayerid = ReturnUser(tmp);			if(IsPlayerConnected(giveplayerid))			{				new giveplayer[24];				GetPlayerIp(giveplayerid,ip,15);				GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));				format(string, sizeof(string), "-| %s's IP: %s |-", giveplayer,ip);				SendClientMessage(playerid,LIGHTBLUE, string);			}			else			{				format(string, sizeof(string), "%d is not an active player.", giveplayerid);				SendClientMessage(playerid, RED, string);			}		}		else return SendClientMessage(playerid, RED, "You are not an admin.");		return true;	}	return false;}stock BanCheck(playerid){    GetPlayerName(playerid,player,24);	GetPlayerIp(playerid,ip,sizeof(ip));	format(ban,sizeof(ban),"%s",ip);	strdel(ban,strlen(ban)-2,strlen(ban));	format(ban2,128,"%s**",ban);	file = fopen("Bans.txt",io_read);	if (file)	{	    while(fread(file,filestr,sizeof(filestr)))	    {	        lines++;	    	if (strfind(filestr, player, true) != -1 || strfind(filestr, ip, true) != -1 || strfind(filestr, ban2, true) != -1)	    	{	    	    SendClientMessage(playerid, ADMIN_RED, "|- You are banned from this server -|");	    	    return Kick(playerid);	    	}		}	}	return true;}