// plugin_method_time.sma
// Server Time/Date Stopwatch/Alarm Plugin
//
// Coded by [geist.method]
// Haelfire (c)
// "Powered by AdminMod"
//
// code snippets credit to their original author(s)
// heh, yea, my code is sloppy and could stand to be cleaned up, but
// at least it works ;) if you can improve upon it, please do...
//
// Usage: 
// say 'thetime' or a sentence with both 'the' and 'time' ie;
// 'Hey, what's the time?'to display and speak server
// time/date to all clients
//
// admin_stopwatch starts a simple counter, admin_stopwatch
// stops it and displays the elapsed difference (also
// speaks 'enabled'/'disabled')
//
// admin_alarmstatus displays current alarms
//
// admin_alarmXset sets alarm X with these params:
// admin_alarmXset <hour> <minute> <repeat> <msg>
// <hour> must be in 24 hour military time format, between 00-23 - 2 digits
// <minute> must be an actual minute, between 00-59 - 2 digits
// <repeat> either 1 to repeat daily, or 0 for a single occurance
// <msg>(optional) the thing you want it to say,
// (ie; "Laf. It's 8:00... time for bed, you silly bear.")
// example: admin_alarm1set 23 59 1 Hello^nWorld!
// alarm goes off every day at 11:59PM, saying
// "Hello^nWorld" - ^n equals line return, no quotes
// or another example; say your server is set to go down
// at a certain time... an alarm set a few minutes
// before with some kind of warning would be nice... right? 
// alarm msg is centersay with a random color, feel free to change ;)
//
// admin_alarmXdel deletes alarm X
//
// verify read/write access is allowed and vault file is set
//
// my next project is a pack of games
// (blackjack, magic 8 ball, hangman.. stuff like that)
// for the dead to play while they wait for
// the round to end... good idea? ;)
//
// bugs? problems? questions? comments? hit me up at gideonv2@hotmail.com
 
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
 
#define ACCESS_ALARM 4096	// level required to access alarm functions
 
new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.0";
new THour[MAX_DATA_LENGTH];
new TMinute[MAX_DATA_LENGTH];
new TValue[MAX_DATA_LENGTH];
new TWDay[MAX_DATA_LENGTH];
new TMonth[MAX_DATA_LENGTH];
new TDay[MAX_DATA_LENGTH];
new TYear[MAX_DATA_LENGTH];
new iDelay = 0;
new Status;
new Counter;
new A1Hour[MAX_DATA_LENGTH];
new A1Minute[MAX_DATA_LENGTH];
new A2Hour[MAX_DATA_LENGTH];
new A2Minute[MAX_DATA_LENGTH];
new A1R[MAX_DATA_LENGTH];
new A2R[MAX_DATA_LENGTH];
new A1MSG[MAX_DATA_LENGTH];
new A2MSG[MAX_DATA_LENGTH];
 
public strnsplit(a[],b[],n,m) {
 
	new i;
 
	for(i=n;i<=m;i++) 
		a[i-n]=b[i];
 
	return 1;
}
 
public SpeakTime(WithSpeech) {
	new OUTSTRING[300];
	new words[5][30];
	new PlaceHolder[MAX_DATA_LENGTH];
	new i;
	new maxplayers = maxplayercount();
	new Team;
	new WONID;
	new SessionID;
	new Target[MAX_NAME_LENGTH];
	new Text[MAX_DATA_LENGTH];
 
	servertime(THour, MAX_DATA_LENGTH, "%I");
	servertime(TMinute, MAX_DATA_LENGTH, "%M");
	servertime(TValue, MAX_DATA_LENGTH, "%p");
	servertime(TWDay, MAX_DATA_LENGTH, "%A");
	servertime(TMonth, MAX_DATA_LENGTH, "%B");
	servertime(TDay, MAX_DATA_LENGTH, "%d");
	servertime(TYear, MAX_DATA_LENGTH, "%Y");
 
	if(streq(THour, "12")==1) {
		strncpy(words[1], "twelve ", strlen("twelve "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "11")==1) {
		strncpy(words[1], "eleven ", strlen("eleven "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "10")==1) {
		strncpy(words[1], "ten ", strlen("ten "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "09")==1) {
		strncpy(words[1], "nine ", strlen("nine "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "08")==1) {
		strncpy(words[1], "eight ", strlen("eight "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "07")==1) {
		strncpy(words[1], "seven ", strlen("seven "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "06")==1) {
		strncpy(words[1], "six ", strlen("six "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "05")==1) {
		strncpy(words[1], "five ", strlen("five "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "04")==1) {
		strncpy(words[1], "four ", strlen("four "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "03")==1) {
		strncpy(words[1], "three ", strlen("three "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "02")==1) {
		strncpy(words[1], "two ", strlen("two "),MAX_DATA_LENGTH);
	}
	if(streq(THour, "01")==1) {
		strncpy(words[1], "one ", strlen("one "),MAX_DATA_LENGTH);
	}
	strnsplit(PlaceHolder, TMinute, 0, 1);
	if(PlaceHolder[0] == '1') {
		strnsplit(PlaceHolder, TMinute, 1, 2);
		if(PlaceHolder[0] == '0') {
			strncpy(words[2], "ten ", strlen("ten "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '1') {
			strncpy(words[2], "eleven ", strlen("eleven "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '2') {
			strncpy(words[2], "twelve ", strlen("twelve "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '3') {
			strncpy(words[2], "thirteen ", strlen("thirteen "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '4') {
			strncpy(words[2], "fourteen ", strlen("fourteen "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '5') {
			strncpy(words[2], "fifteen ", strlen("fifteen "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '6') {
			strncpy(words[2], "sixteen ", strlen("sixteen "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '7') {
			strncpy(words[2], "seventeen ", strlen("seventeen "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '8') {
			strncpy(words[2], "eighteen ", strlen("eighteen "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '9') {
			strncpy(words[2], "nineteen ", strlen("nineteen "),MAX_DATA_LENGTH);
		}
	}
	else {	
		strnsplit(PlaceHolder, TMinute, 0, 2);
		if(PlaceHolder[0] == '2') {
			strncpy(words[2], "twenty ", strlen("twenty "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '3') {
			strncpy(words[2], "thirty ", strlen("thirty "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '4') {
			strncpy(words[2], "fourty ", strlen("fourty "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '5') {
			strncpy(words[2], "fifty ", strlen("fifty "),MAX_DATA_LENGTH);
		}
		else {
			if ( (PlaceHolder[0] == '0') && (PlaceHolder[1] != '0') ) {
				strncpy(words[2], "boop ", strlen("boop "),MAX_DATA_LENGTH);
			}
		}
		strnsplit(PlaceHolder, TMinute, 1, 2);
		if(PlaceHolder[0] == '1') {
			strncpy(words[3], "one ", strlen("one "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '2') {
			strncpy(words[3], "two ", strlen("two "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '3') {
			strncpy(words[3], "three ", strlen("three "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '4') {
			strncpy(words[3], "four ", strlen("four "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '5') {
			strncpy(words[3], "five ", strlen("five "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '6') {
			strncpy(words[3], "six ", strlen("six "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '7') {
			strncpy(words[3], "seven ", strlen("seven "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '8') {
			strncpy(words[3], "eight ", strlen("eight "),MAX_DATA_LENGTH);
		}
		if(PlaceHolder[0] == '9') {
			strncpy(words[3], "nine ", strlen("nine "),MAX_DATA_LENGTH);
		}
	}
	if(streq(TValue, "AM")==1) {
		strncpy(words[4], "am", strlen("am"),MAX_DATA_LENGTH);
	}
	if(streq(TValue, "PM")==1) {
		strncpy(words[4], "pm", strlen("pm"),MAX_DATA_LENGTH);
	}
 
	if (WithSpeech == 2) {
		snprintf(OUTSTRING, MAX_DATA_LENGTH, "speak ^"fvox/buzz buzz buzz alert time_is_now %s%s%s%s safe_day^"", words[1], words[2], words[3], words[4]);
		for(i=1; i<=maxplayers; i++) {
			strinit(Target);
			if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
				execclient(Target,OUTSTRING);
			}
		}
	}
 
	if (WithSpeech == 1) {
		snprintf(OUTSTRING, MAX_DATA_LENGTH, "speak ^"fvox/bell time_is_now %s%s%s%s^"", words[1], words[2], words[3], words[4]);
		for(i=1; i<=maxplayers; i++) {
			strinit(Target);
			if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
				execclient(Target,OUTSTRING);
			}
		}
	}
 
	snprintf(Text, MAX_TEXT_LENGTH, "[ Current Server Time: %s:%s %s ]", THour, TMinute, TValue);
	say(Text);
	snprintf(Text, MAX_TEXT_LENGTH, "[ %s, %s %s %s ]", TWDay, TMonth, TDay, TYear);
	say(Text);
 
	return PLUGIN_CONTINUE;
}
 
public HandleSay(HLCommand,HLData,HLUserName,UserIndex) {
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
 
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
 
	strstripquotes(Data);
        if ( (strcasestr(Data, "the") != -1) && (strcasestr(Data, "time") != -1) ) { 
                if (systemtime() < iDelay) {                                         
			SpeakTime(0);
			return PLUGIN_CONTINUE;
  		} else {
			SpeakTime(1);
			iDelay = systemtime();
			iDelay += 60;
		}
	}
	return PLUGIN_CONTINUE;
}
 
public admin_stopwatch()
{                        
	new Elapsed;             
	new ElapsedM;            
	new ElapsedS;
	new i;
	new maxplayers = maxplayercount();
	new Team;
	new WONID;
	new SessionID;
	new Target[MAX_NAME_LENGTH];
	new Text[MAX_DATA_LENGTH];
 
	if (Status == 0) {
		Status = 1;
		Elapsed = 0;
		ElapsedM = 0;
		ElapsedS = 0;
		Counter = systemtime();
		say("[ Stopwatch activated ]");
		for(i=1; i<=maxplayers; i++) {
			strinit(Target);
			if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
				execclient(Target, "speak ^"fvox/fuzz activated^"");
				return PLUGIN_HANDLED;
			}
		}
	} else {
		Status = 0;
		Elapsed = systemtime();
		Elapsed = (Elapsed - Counter);
		ElapsedM = (Elapsed / 60);
		ElapsedS = (Elapsed - (ElapsedM * 60) );
		say("[ Stopwatch deactivated ]");
		snprintf(Text, MAX_TEXT_LENGTH, "[ Time elapsed: %i minute(s) %i second(s) ]", ElapsedM, ElapsedS);
		say(Text);
		for(i=1; i<=maxplayers; i++) {
			strinit(Target);
			if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
				execclient(Target, "speak ^"fvox/fuzz deactivated^"");
			}
		}
	}
	return PLUGIN_HANDLED;
}
 
public admin_alarmstatus()
{
	new Text[MAX_DATA_LENGTH];
	new ValuesA[MAX_DATA_LENGTH];
	new ValuesC[MAX_DATA_LENGTH];
	get_alarms();
 
	if(streq(A1R, "1")==1) {
		ValuesA = "Yes";
	} else { 
		ValuesA = "No";
	}
	if(streq(A2R, "1")==1) {
		ValuesC = "Yes";
	} else {
		ValuesC = "No";
	}
	selfmessage("--- Current Alarm Status ---");
	selfmessage("Alarm# Hour:Min Repeat Msg");
	snprintf(Text, MAX_TEXT_LENGTH, "#1) %s:%s %s ^"%s^"", A1Hour, A1Minute, ValuesA, A1MSG);
	selfmessage(Text);
	snprintf(Text, MAX_TEXT_LENGTH, "#2) %s:%s %s ^"%s^"", A2Hour, A2Minute, ValuesC, A2MSG);
	selfmessage(Text); 
 
	return PLUGIN_HANDLED;
}
 
public admin_alarm1set(HLCommand,HLData,HLUserName,UserIndex)
{
	new H[MAX_NUMBER_LENGTH];
	new M[MAX_NUMBER_LENGTH];
	new Rep[MAX_NUMBER_LENGTH];
	new Msg[MAX_DATA_LENGTH];
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	new TempN = 0;
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
 
	strgsep(Data, " ", "^"", H, MAX_NUMBER_LENGTH, M, MAX_NUMBER_LENGTH, Rep, MAX_NUMBER_LENGTH, Msg, MAX_DATA_LENGTH);
 
	TempN = strtonum(H);
	if ( (strlen(H)==0) || (strlen(H)==1) || (strlen(H) > 2) || (TempN > 23) || (TempN < 0) ) { 
		selfmessage( "Alarm Set Error: Hour Required <00-23>");
		selfmessage( "Format: admin_alarm1set <hour> <minute> <repeat> <msg>");
		return PLUGIN_HANDLED;
	}
	TempN = strtonum(M);
	if ( (strlen(M)==0) || (strlen(M)==1) || (strlen(H) > 2) || (TempN > 59) || (TempN < 0) ) {
		selfmessage( "Alarm Set Error: Minute Required <00-59>");
		selfmessage( "Format: admin_alarm1set <hour> <minute> <repeat> <msg>");
		return PLUGIN_HANDLED;
	}
	if(strlen(Rep)==0) {
		selfmessage( "Alarm Set Error: Repeat Value Required <0-1>");
		selfmessage( "Format: admin_alarm1set <hour> <minute> <repeat> <msg>");
		return PLUGIN_HANDLED;
	}
 
	set_vaultdata("ALARM_1_HOUR", H);
	set_vaultdata("ALARM_1_MINUTE", M);
	set_vaultdata("ALARM_1_R", Rep);
	if(strlen(Msg)==0) {
		set_vaultdata("ALARM_1_MSG", "(unset)");
	} else {
		set_vaultdata("ALARM_1_MSG", Msg);
	}
	selfmessage( "Alarm 1 Set.");
 
	return PLUGIN_HANDLED;
}
 
public admin_alarm1del()
{
	set_vaultdata("ALARM_1_HOUR", "Unset");
	set_vaultdata("ALARM_1_MINUTE", "Unset");
	set_vaultdata("ALARM_1_R", "Unset");
	set_vaultdata("ALARM_1_MSG", "(unset)");
	selfmessage( "Alarm 1 Deleted.");
	return PLUGIN_HANDLED;
}
 
public admin_alarm2set(HLCommand,HLData,HLUserName,UserIndex)
{
	new H[MAX_NUMBER_LENGTH];
	new M[MAX_NUMBER_LENGTH];
	new Rep[MAX_NUMBER_LENGTH];
	new Command[MAX_COMMAND_LENGTH];
	new Data[MAX_DATA_LENGTH];
	new User[MAX_NAME_LENGTH];
	new Msg[MAX_DATA_LENGTH];
	new TempN = 0;
	convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
	convert_string(HLData,Data,MAX_DATA_LENGTH);
	convert_string(HLUserName,User,MAX_NAME_LENGTH);
 
	strgsep(Data, " ", "^"", H, MAX_NUMBER_LENGTH, M, MAX_NUMBER_LENGTH, Rep, MAX_NUMBER_LENGTH, Msg, MAX_DATA_LENGTH);
 
	TempN = strtonum(H);
	if ( (strlen(H)==0) || (strlen(H)==1) || (strlen(H) > 2) || (TempN > 23) || (TempN < 0) ) { 
		selfmessage( "Alarm Set Error: Hour Required <00-23>");
		selfmessage( "Format: admin_alarm2set <hour> <minute> <repeat> <msg>");
		return PLUGIN_HANDLED;
	}
	TempN = strtonum(M);
	if ( (strlen(M)==0) || (strlen(M)==1) || (strlen(H) > 2) || (TempN > 59) || (TempN < 0) ) {
		selfmessage( "Alarm Set Error: Minute Required <00-59>");
		selfmessage( "Format: admin_alarm2set <hour> <minute> <repeat> <msg>");
		return PLUGIN_HANDLED;
	}
	if(strlen(Rep)==0) {
		selfmessage( "Alarm Set Error: Repeat Value Required <0-1>");
		selfmessage( "Format: admin_alarm2set <hour> <minute> <repeat> <msg>");
		return PLUGIN_HANDLED;
	}
 
	set_vaultdata("ALARM_2_HOUR", H);
	set_vaultdata("ALARM_2_MINUTE", M);
	set_vaultdata("ALARM_2_R", Rep);
	if(strlen(Msg)==0) {
		set_vaultdata("ALARM_2_MSG", "(unset)");
	} else {
		set_vaultdata("ALARM_2_MSG", Msg);
	}
	selfmessage( "Alarm 2 Set.");
 
	return PLUGIN_HANDLED;
}
 
public admin_alarm2del()
{
	set_vaultdata("ALARM_2_HOUR", "Unset");
	set_vaultdata("ALARM_2_MINUTE", "Unset");
	set_vaultdata("ALARM_2_R", "Unset");
	set_vaultdata("ALARM_2_MSG", "(unset)");
	selfmessage( "Alarm 2 Deleted.");
 
	return PLUGIN_HANDLED;
}
 
public get_alarms()
{
	get_vaultdata("ALARM_1_HOUR", A1Hour, MAX_DATA_LENGTH);
	if(strlen(A1Hour)==0) {
		set_vaultdata("ALARM_1_HOUR", "Unset");
		get_vaultdata("ALARM_1_HOUR", A1Hour, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_1_MINUTE", A1Minute, MAX_DATA_LENGTH);
	if(strlen(A1Minute)==0) {
		set_vaultdata("ALARM_1_MINUTE", "Unset");
		get_vaultdata("ALARM_1_MINUTE", A1Minute, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_1_R", A1R, MAX_DATA_LENGTH);
	if(strlen(A1R)==0) {
		set_vaultdata("ALARM_1_R", "Unset");
		get_vaultdata("ALARM_1_R", A1R, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_1_MSG", A1MSG, MAX_DATA_LENGTH);
	if(strlen(A1MSG)==0) {
		set_vaultdata("ALARM_1_MSG", "(unset)");
		get_vaultdata("ALARM_1_MSG", A1MSG, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_2_HOUR", A2Hour, MAX_DATA_LENGTH);
	if(strlen(A2Hour)==0) {
		set_vaultdata("ALARM_2_HOUR", "Unset");
		get_vaultdata("ALARM_2_HOUR", A2Hour, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_2_MINUTE", A2Minute, MAX_DATA_LENGTH);
	if(strlen(A2Minute)==0) {
		set_vaultdata("ALARM_2_MINUTE", "Unset");
		get_vaultdata("ALARM_2_MINUTE", A2Minute, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_2_R", A2R, MAX_DATA_LENGTH);
	if(strlen(A2R)==0) {
		set_vaultdata("ALARM_2_R", "Unset");
		get_vaultdata("ALARM_2_R", A2R, MAX_DATA_LENGTH);
	}
	get_vaultdata("ALARM_2_MSG", A2MSG, MAX_DATA_LENGTH);
	if(strlen(A2MSG)==0) {
		set_vaultdata("ALARM_2_MSG", "(unset)");
		get_vaultdata("ALARM_2_MSG", A2MSG, MAX_DATA_LENGTH);
	}
	return PLUGIN_CONTINUE;
}
 
public alarm_check(Timer,Repeat,HLUser,HLParam) 
{
	new Holder[MAX_DATA_LENGTH];
	new Holder2[MAX_DATA_LENGTH];
	new Red;
	new Green;
	new Blue;
 
	Red = random(256);
	Green = random(256);
	Blue = random(256);
	servertime(Holder, MAX_DATA_LENGTH, "%H");	
	servertime(Holder2, MAX_DATA_LENGTH, "%M");
 
	get_alarms();
	if(streq(Holder, A1Hour)==1) {
		if(streq(Holder2, A1Minute)==1) {
			if(streq(A1R, "1")==1) {
				say("[ Alarm 1 Activated! <reset> ]");
			} else {
				say("[ Alarm 1 Activated! <unset> ]");
				admin_alarm1del();
			}
			if(streq(A1MSG, "(unset)")!=1) {
				centersay(A1MSG,10,Red,Green,Blue);
			}
			SpeakTime(2);
		} 
	} 
	if(streq(Holder, A2Hour)==1) {
		if(streq(Holder2, A2Minute)==1) {
			if(streq(A2R, "1")==1) {
				say("[ Alarm 2 Activated! <reset> ]");
			} else {
				say("[ Alarm 2 Activated! <unset> ]");
				admin_alarm2del();
			}
			if(streq(A2MSG, "(unset)")!=1) {
				centersay(A2MSG,10,Red,Green,Blue);
			}
			SpeakTime(2);
		} 
	} 
	return PLUGIN_CONTINUE;
} 
 
public plugin_init() 
{
	plugin_registerinfo("Server Time/Date Plugin", "Speaks the current server time.", STRING_VERSION);
	plugin_registercmd("say", "HandleSay", ACCESS_ALL);
	plugin_registercmd("admin_stopwatch", "admin_stopwatch", ACCESS_ALARM, "admin_stopwatch: Starts/stops stopwatch function.");
	plugin_registercmd("admin_alarmstatus", "admin_alarmstatus", ACCESS_ALARM);
	plugin_registercmd("admin_alarm1set", "admin_alarm1set", ACCESS_ALARM);
	plugin_registercmd("admin_alarm1del", "admin_alarm1del", ACCESS_ALARM);
	plugin_registercmd("admin_alarm2set", "admin_alarm2set", ACCESS_ALARM);
	plugin_registercmd("admin_alarm2del", "admin_alarm2del", ACCESS_ALARM);
	plugin_registerhelp("say",ACCESS_ALL,"say thetime: Speaks/displays current server time.");
	set_timer("alarm_check",60,99999);
	return PLUGIN_CONTINUE;
}