#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
 
#define ACCESS_WARN ACCESS_KICK
#define WARN_SLAP 2
#define WARN_BURY 4
#define WARN_SLAY 6
#define WARN_KICK 10
 
new STRING_VERSION[MAX_DATA_LENGTH] = "1.0";
 
public admin_warn(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	new WarnTarget[MAX_DATA_LENGTH];
	new TargetName[MAX_NAME_LENGTH];
	new TargetIndex;
	new Text[MAX_TEXT_LENGTH];
	new Reason[MAX_TEXT_LENGTH];
	new WonIDSTR[MAX_DATA_LENGTH];
	new Temp[MAX_DATA_LENGTH];
	new FileSize;
	new Count;
	new Warnings;
 
 	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	/*It filters for a reason for my adminlog plugin*/
	strbreak(Data,WarnTarget,Reason, MAX_DATA_LENGTH);
 
	if (check_user(WarnTarget)==1) {
		get_username(WarnTarget,TargetName,MAX_NAME_LENGTH);
		say_command(User,Command,TargetName);
		if(check_immunity(TargetName)==1) {
			snprintf(Text, MAX_TEXT_LENGTH, "You can't issue a warning to %s, you silly bear.", TargetName);
			say(Text);
		} else {
			get_userindex(TargetName, TargetIndex);
			get_userAuthID(TargetName, WonIDSTR);
			writefile("warnings.ini", WonIDSTR);
 
			FileSize = filesize("warnings.ini");
			Warnings = 0;
			for(Count=1;Count<=FileSize;Count++) {
				readfile("warnings.ini",Temp,Count,MAX_NAME_LENGTH);
				if ( (strcasestr(Temp,WonIDSTR) != -1) ) {
					Warnings++;
				}
			}
			if ( ( Warnings <= WARN_SLAP ) ){
				snprintf(Text, MAX_TEXT_LENGTH, "WARNING #%d has been issued to %s.^n^nPunismet: Slap!",Warnings,TargetName);
				centersay(Text,10,10,250,10);
				slap(TargetName);
			} else if ( ( Warnings > WARN_SLAP ) && ( Warnings <= WARN_BURY ) ){
				snprintf(Text, MAX_TEXT_LENGTH, "WARNING #%d has been issued to %s.^n^nPunishment: Bury!",Warnings,TargetName);
				centersay(Text,10,250,250,10);
				plugin_exec("admin_bury",WonIDSTR);
			} else if ( ( Warnings > WARN_BURY ) && ( Warnings <= WARN_SLAY ) ){
				snprintf(Text, MAX_TEXT_LENGTH, "WARNING #%d has been issued to %s.^n^nPunishment: Slay!",Warnings,TargetName);
				centersay(Text,10,250,10,10);
				slay(TargetName);
			} else if ( ( Warnings > WARN_SLAY ) && ( Warnings <= WARN_KICK ) ){
				snprintf(Text, MAX_TEXT_LENGTH, "WARNING #%d has been issued to %s.^n^nPunishment: Kick!",Warnings,TargetName);
				centersay(Text,10,250,10,10);
				snprintf(Text, MAX_TEXT_LENGTH, "You have been kicked for warning #%d. After %d warnings you will be banned!",Warnings,WARN_KICK);
				message(TargetName, Text);
				kick(TargetName);
			} else if ( ( Warnings > WARN_KICK ) ){
				snprintf(Text, MAX_TEXT_LENGTH, "WARNING #%d has been issued to %s.^n^nPunishment: Ban!",Warnings,TargetName);
				centersay(Text,10,250,10,10);
				ban(TargetName,0,bBanByID);
			} 
		}
	}
	return PLUGIN_CONTINUE;
}
 
public plugin_init() {
	plugin_registerinfo("Admin Warn Plugin","Allows admins to warn and punish players.",STRING_VERSION);
 
	plugin_registercmd("admin_warn","admin_warn",ACCESS_WARN,"admin_warn <target>: Issues warnings sequectially with a punishment to get their attention.");
	return PLUGIN_CONTINUE;
	}