// Monster Manager v 1.0
// Written by BuzzKill   12/17/2002
// Manages voting for Botman's Monster Plugin
// EMAIL:buzzkill@digitalwidget.net
// AIM:buzzkillspree
// UA StatsMe Support Team Member   http://www.unitedadmins.com
// 100-Acre Bloodbath TFC Server -- 66.51.85.240:27016
 
 
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
 
#define ACCESS_MSTRMGR 256
 
new MSTRMGR_TIMER;
new MSTRMGR_ADDRATIO;
new MSTRMGR_REMRATIO;
 
 
new STRING_VERSION[] = "2.51";
 
public StartMstrVote() {
 
	new strDummy[10];	
 
	if (vote_allowed()!=1) {
		log( "[MONSTERMANAGER] Vote not allowed at this time.");
		return PLUGIN_HANDLED;
	}
	if(getvar("monster_spawn")==0) // Monster's aren't running
		vote("Add Monsters?", "Yes", "No", "HandleMstrVoteAdd",strDummy);
	else
		vote("Remove Monsters?", "Yes", "No", "HandleMstrVoteRem",strDummy);
 
	return PLUGIN_HANDLED;
 
}
 
public HandleMstrVoteAdd(WinningOption,HLData,VoteCount,UserCount) {
	new Text[MAX_TEXT_LENGTH];
	new strNumber[MAX_NUMBER_LENGTH];
	new Ratio = MSTRMGR_ADDRATIO;
	new strData[MAX_DATA_LENGTH];
	convert_string(HLData, strData,MAX_DATA_LENGTH);
 
	if (VoteCount >= Ratio*UserCount/100) {	
		if (WinningOption==1) {
			exec("monster_spawn 1");
			centersay("Vote over. Adding monsters...",18,249,244,0);
		} else {
			centersay("Vote over. Monsters will not be added.",18,63,187,239);
		}
	} else {
		numtostr(Ratio*UserCount/100,strNumber);
 
		snprintf(Text, MAX_TEXT_LENGTH, "Vote complete, but not enough votes for change (needed %s).", strNumber);
		centersay(Text,18,63,187,239);
	}
 
	set_timer("StartMstrVote", MSTRMGR_TIMER, 1); 
}
 
public HandleMstrVoteRem(WinningOption,HLData,VoteCount,UserCount) {
	new Text[MAX_TEXT_LENGTH];
	new strNumber[MAX_NUMBER_LENGTH];
	new Ratio = MSTRMGR_REMRATIO;
	new strData[MAX_DATA_LENGTH];
	convert_string(HLData, strData,MAX_DATA_LENGTH);
 
	if (VoteCount >= Ratio*UserCount/100) {	
		if (WinningOption==1) {
			exec("monster_spawn 0");
			centersay("Vote over. Removing monsters...",18,249,244,0);
		} else {
			centersay("Vote over. Monsters will not be removed.",18,63,187,239);
		}
	} else {
		numtostr(Ratio*UserCount/100,strNumber);
 
		snprintf(Text, MAX_TEXT_LENGTH, "Vote complete, but not enough votes for change (needed %s).", strNumber);
		centersay(Text,18,63,187,239);
	}
 
	set_timer("StartMstrVote", MSTRMGR_TIMER, 1); 
}
 
public admin_mstrmgr_timer(HLCommand,HLData,HLUserName,UserIndex) {
 
	new User[MAX_NAME_LENGTH];
	new Data[MAX_TEXT_LENGTH];
	new Command[MAX_TEXT_LENGTH];
	new strMessage[MAX_TEXT_LENGTH];
 
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	convert_string(HLData,Data,MAX_NAME_LENGTH);
	convert_string(HLCommand,Command,MAX_NAME_LENGTH);
 
	if (strlen(Data) > 0) {
		MSTRMGR_TIMER = strtonum(Data);
		set_vaultdata("MSTRMGR_TIMER", Data);
	}
 
	snprintf(strMessage, MAX_TEXT_LENGTH, "[ADMIN] MSTRMGR duration is %d seconds", MSTRMGR_TIMER);
	selfmessage(strMessage);
 
	log_command(User, Command, Data);
 
	return PLUGIN_HANDLED;
}
 
public admin_mstrmgr_add(HLCommand,HLData,HLUserName,UserIndex) {
 
	new User[MAX_NAME_LENGTH];
	new Data[MAX_TEXT_LENGTH];
	new Command[MAX_TEXT_LENGTH];
	new strMessage[MAX_TEXT_LENGTH];
 
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	convert_string(HLData,Data,MAX_NAME_LENGTH);
	convert_string(HLCommand,Command,MAX_NAME_LENGTH);
 
	if (strlen(Data) > 0) {
		MSTRMGR_ADDRATIO = strtonum(Data);
		set_vaultdata("MSTRMGR_ADDRATIO", Data);
	}
 
	snprintf(strMessage, MAX_TEXT_LENGTH, "[ADMIN] MSTRMGR add ratio is %d percent", MSTRMGR_ADDRATIO);
	selfmessage(strMessage);
 
	log_command(User, Command, Data);
 
	return PLUGIN_HANDLED;
}
 
public admin_mstrmgr_rem(HLCommand,HLData,HLUserName,UserIndex) {
 
	new User[MAX_NAME_LENGTH];
	new Data[MAX_TEXT_LENGTH];
	new Command[MAX_TEXT_LENGTH];
	new strMessage[MAX_TEXT_LENGTH];
 
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	convert_string(HLData,Data,MAX_NAME_LENGTH);
	convert_string(HLCommand,Command,MAX_NAME_LENGTH);
 
	if (strlen(Data) > 0) {
		MSTRMGR_REMRATIO = strtonum(Data);
		set_vaultdata("MSTRMGR_REMRATIO", Data);
	}
 
	snprintf(strMessage, MAX_TEXT_LENGTH, "[ADMIN] MSTRMGR rem ratio is %d percent", MSTRMGR_REMRATIO);
	selfmessage(strMessage);
 
	log_command(User, Command, Data);
 
	return PLUGIN_HANDLED;
}
 
public admin_mstrmgr_spawn(HLCommand,HLData,HLUserName,UserIndex) {
 
	new User[MAX_NAME_LENGTH];
	new Data[MAX_TEXT_LENGTH];
	new Command[MAX_TEXT_LENGTH];
 
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
	convert_string(HLData,Data,MAX_NAME_LENGTH);
	convert_string(HLCommand,Command,MAX_NAME_LENGTH);
 
	if (strlen(Data) > 0) {
		if(check_param(Data)==1) {
			selfmessage("[ADMIN] Monster spawn on");
			exec("monster_spawn 1");
		} else {
			selfmessage("[ADMIN] Monster spawn off");
			exec("monster_spawn 0");
		}
 
    	}
 
	log_command(User, Command, Data);
	return PLUGIN_HANDLED;
}
 
 
public plugin_init() 
{
	plugin_registerinfo("Monster Manager", "Manages Botman's MonsterMod", STRING_VERSION);
	plugin_registercmd("admin_mstrmgr_timer", "admin_mstrmgr_timer", ACCESS_MSTRMGR,"admin_mstrmgr_timer <seconds>: How often a vote will occur.");
	plugin_registercmd("admin_mstrmgr_add", "admin_mstrmgr_add", ACCESS_MSTRMGR,"admin_mstrmgr_add <number>: Percent required for an add vote to pass.");
	plugin_registercmd("admin_mstrmgr_rem", "admin_mstrmgr_rem", ACCESS_MSTRMGR,"admin_mstrmgr_rem <number>: Percent required for a remove vote to pass.");
	plugin_registercmd("admin_mstrmgr_spawn", "admin_mstrmgr_spawn", ACCESS_MSTRMGR,"admin_mstrmgr_spawn <^"on^" | ^"off^">: Turn monster spawn on or off.");
 
	new VaultData[MAX_DATA_LENGTH];
 
	if(get_vaultdata("MSTRMGR_TIMER", VaultData, MAX_DATA_LENGTH) != 0) {
		MSTRMGR_TIMER = strtonum(VaultData);
	} else {
		MSTRMGR_TIMER = 600;
		set_vaultdata("MSTRMGR_TIMER", "600");
	}
 
	if(get_vaultdata("MSTRMGR_ADDRATIO", VaultData, MAX_DATA_LENGTH) != 0) {
		MSTRMGR_ADDRATIO = strtonum(VaultData);
	} else {
		MSTRMGR_ADDRATIO = 50;
		set_vaultdata("MSTRMGR_ADDRATIO", "50");
	}
 
	if(get_vaultdata("MSTRMGR_REMRATIO", VaultData, MAX_DATA_LENGTH) != 0) {
		MSTRMGR_REMRATIO = strtonum(VaultData);
	} else {
		MSTRMGR_REMRATIO = 50;
		set_vaultdata("MSTRMGR_REMRATIO", "50");
	}
 
 
	set_timer("StartMstrVote", MSTRMGR_TIMER, 1); 
 
	return PLUGIN_CONTINUE;
}