/*
 *        Cancel AdminMod votes (Vsay, Map and Kick)
 *
 * ORIGINAL CREDITS
 *    Admin mod script. Copyright (C) 2000, Alfred Reynolds.
 * $Id: plugin_base.sma,v 1.2.2.3 2001/10/24 00:53:57 darope Exp $
 *
 * ENHANCEMENTS BY
 *    Caveman ICQ 70710878
 *    V. 1.2
 *
*/
 
/* This is a base plugin for Admin Mod; it doesn't do anything fancy. */
 
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
 
/*Chenge this to define the level of admins able to cancle the vote*/
#define ACCESS_CANCELMAPVOTE 64
 
new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.26";
 
new flag;
 
public admin_cancel_vote(HLCommand,HLData,HLUserName,UserIndex) {
	new Text[MAX_TEXT_LENGTH];
 
	flag=1;	
	snprintf(Text, MAX_TEXT_LENGTH, "Admin attempting to cancel vote");
	say(Text);
	return PLUGIN_CONTINUE;
}
 
public admin_vote_kick(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new Text[MAX_TEXT_LENGTH];
	new User[MAX_NAME_LENGTH];
	new strAuthID[MAX_AUTHID_LENGTH];
 
	if (vote_allowed()!=1) {
		selfmessage( "Vote not allowed at this time.");
		return PLUGIN_HANDLED;
	}
 
	flag = 0;
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	if (check_user(Data) == 1) {
		new real_user[MAX_NAME_LENGTH];
		get_username(Data,real_user,MAX_NAME_LENGTH);
		say_command(User,Command,Data);
		if(check_immunity(real_user)!=0) {
			snprintf(Text, MAX_TEXT_LENGTH, "Laf. You can't kick %s, you silly bear.", real_user);
			say(Text);
		} else {
			snprintf(Text, MAX_TEXT_LENGTH, "Kick %s?", real_user);
			if(getvar("sv_lan")==1) {
				vote(Text,"Yes","No","HandleKickVote",real_user);
			} else {
				get_userAuthID(real_user,strAuthID);
				vote(Text,"Yes","No","HandleKickVote",strAuthID);
			}
		}
	} else {
		selfmessage("Unrecognized user name ");
		selfmessage(Data);
	}
	return PLUGIN_HANDLED;
}
 
/* Handle a kick vote's results. */
public HandleKickVote(WinningOption,HLUser,VoteCount,UserCount) {
	new strNumber[MAX_NUMBER_LENGTH];
	new Text[MAX_TEXT_LENGTH];
	new VoteUser[MAX_DATA_LENGTH];
	convert_string(HLUser,VoteUser,MAX_DATA_LENGTH);
 
	if (flag==0){
		if (WinningOption == 1) {
			new Ratio = getvar("kick_ratio");
			if (VoteCount >= Ratio*UserCount/100) {
				snprintf(Text, MAX_TEXT_LENGTH, "%s was kicked due to a vote.", VoteUser);
				say(Text);
				message(VoteUser,"You have been kicked due to a vote.");
				kick(VoteUser);
			} else {
				numtostr(Ratio*UserCount/100,strNumber);
				snprintf(Text, MAX_TEXT_LENGTH, "Kick vote succeeded, but not enough votes for kick (needed %s)",strNumber);
				say(Text);
			}
		} else {
			say("Kick vote failed.");
		}
	} else {
		snprintf(Text, MAX_TEXT_LENGTH, "Vote succesfully canceled by Admin");
  		say(Text);
		flag = 0;
  	}
}
 
public admin_vote_map(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new Text[MAX_TEXT_LENGTH];
	new User[MAX_NAME_LENGTH];
 
	if (vote_allowed()!=1) {
		selfmessage( "Vote not allowed at this time.");
		return PLUGIN_HANDLED;
	}
 
	flag = 0;
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	if (valid_map(Data) == 1) {
		snprintf(Text, MAX_TEXT_LENGTH, "Change map to %s?", Data);
		log(Text);
		vote(Text,"Yes","No","HandleMapVote",Data);
	} else {
		selfmessage("Bad map name");
		selfmessage(Data);
	}
	return PLUGIN_HANDLED;
}
 
/* Handle a map vote's results. */
public HandleMapVote(WinningOption,HLMap,VoteCount,UserCount) {
	new strNumber[MAX_NUMBER_LENGTH];
	new Text[MAX_TEXT_LENGTH];
	new VoteMap[MAX_DATA_LENGTH];
	convert_string(HLMap,VoteMap,MAX_DATA_LENGTH);
	new sTimelimit[10];
	getstrvar("mp_timelimit", sTimelimit, 10);
 
	if (flag==0){
		if (WinningOption == 1) {
			new Ratio = getvar("map_ratio");
			if (VoteCount >= Ratio*UserCount/100) {
				snprintf(Text, MAX_TEXT_LENGTH, "Changing map to %s due to vote.", VoteMap);
				say(Text);
				changelevel( VoteMap, 4);
				//set_timer("ChangeMap",2,1,VoteMap);
			} else {
				numtostr(Ratio*UserCount/100,strNumber);
				snprintf(Text, MAX_TEXT_LENGTH, "Map vote succeeded, but not enough votes for change (needed %s)", strNumber);
				say(Text);
			}
		} else {
			say("Map vote failed.");
		}
	} else {
		snprintf(Text, MAX_TEXT_LENGTH, "Vote succesfully canceled by Admin");
  		say(Text);
		flag = 0;
	}
}
 
public admin_vsay(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
 
	flag = 0;
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
 
	if (vote_allowed()!=1) {
		selfmessage( "Vote not allowed at this time.");
		return PLUGIN_HANDLED;
	}
 
	log_command(User,Command,Data);
	vote(Data,"Yes","No","HandleVsay", Data);
	return PLUGIN_HANDLED;
}
 
public HandleVsay(WinningOption,HLData,VoteCount,UserCount) {
	new Data[MAX_DATA_LENGTH];
	new Text[MAX_TEXT_LENGTH];
 
	if (flag==0){
		convert_string(HLData,Data,MAX_DATA_LENGTH);
		snprintf(Text, MAX_TEXT_LENGTH, "^"%s^": Option #%i won with %i / %i votes.", Data, WinningOption, VoteCount, UserCount);
		say(Text);
	} else {
		snprintf(Text, MAX_TEXT_LENGTH, "Vote succesfully canceled by Admin");
		say(Text);
		flag = 0;
	}
}
 
public plugin_init() {
	plugin_registerinfo("Caveys Enhanced Vote System 1.1","Basic AdminMod votes with the option to cancel them",STRING_VERSION);
 
	plugin_registercmd("admin_cancel_vote","admin_cancel_vote",ACCESS_CANCELMAPVOTE,"admin_cancel_vote : Cancels a current vote");
	plugin_registercmd("admin_vote_kick","admin_vote_kick",ACCESS_VOTE_KICK,"admin_vote_kick <target>: Starts a vote to kick target.");
	plugin_registercmd("admin_vote_map","admin_vote_map",ACCESS_ALL,"admin_vote_kick <target>: Starts a vote to kick target.");
	plugin_registercmd("admin_vsay","admin_vsay",ACCESS_SAY,"admin_vsay <question>: Presents question as a vote.");
 
	return PLUGIN_CONTINUE;
}