/*
 * Admin mod script. Copyright (C) 2000, Alfred Reynolds.
 * $Id: plugin_dio_motm.sma,v 2.50.2 7/8/2001 dio Exp $
 *
*/
 
/* This plugin will cycle messages to all clients at a timed interval. */
 
/* View the plugin_dio_motm.txt for setup and usage instructions */
 
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
 
#define ACCESS_MOTM 4096	// security level required to reset counter
 
new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.2";
 
new MapFile[MAX_DATA_LENGTH];
new MOTM_MESSAGE[MAX_TEXT_LENGTH] = "This server uses AdminMod 2.50^nbut the server admin^ndid not setup Dio's plugin right!^nTry admin_motm_wtf^nto find out why!";
new MOTM_COUNTER = 1;
new MOTM_MAP = 0;
new MOTM_TIME = 240; 			// seconds between messages
new MOTM_DURATION = 10;		// 2.50.2 - 7/7/2001 - seconds for message to last.
 
new MOTM_TYPE = 1;
 
public admin_motm_reset(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);
 
  	selfmessage("[ADMIN] MOTM Counter Reset To 1");
 
	MOTM_COUNTER = 1;
 
	log_command(User,Command,Data);
 
	return PLUGIN_HANDLED;
}
 
public admin_motm_type(HLCommand,HLData,HLUserName,UserIndex) {
 
	new User[MAX_NAME_LENGTH];
	new Data[MAX_TEXT_LENGTH];
	new Command[MAX_TEXT_LENGTH];
	new sCounter[MAX_NAME_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) {
			MOTM_TYPE = 1;
		} else {
			MOTM_TYPE = 0;
		}
 
		numtostr(MOTM_TYPE,sCounter);
		set_vaultdata("MOTM_TYPE", sCounter);
    }
 
	if (MOTM_TYPE == 1) {
		selfmessage("[ADMIN] MOTM Type mode On");
	} else {
		selfmessage("[ADMIN] MOTM Type mode Off");
	}
 
	log_command(User, Command, Data);
 
	return PLUGIN_HANDLED;
}
 
 
public admin_motm_time(HLCommand,HLData,HLUserName,UserIndex) {
 
	new User[MAX_NAME_LENGTH];
	new Data[MAX_TEXT_LENGTH];
	new Command[MAX_TEXT_LENGTH];
	//new strData[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) {
		MOTM_TIME = strtonum(Data);
		set_vaultdata("MOTM_TIME", Data);
		//strcpy(strData, Data, MAX_TEXT_LENGTH);
	} else {
		//numtostr(MOTM_TIME, strData);
	}
 
	//snprintf(strMessage, MAX_TEXT_LENGTH, "[ADMIN] MOTM Time Is %s seconds", strData);
	snprintf(strMessage, MAX_TEXT_LENGTH, "[ADMIN] MOTM Time Is %d seconds", MOTM_TIME);
	selfmessage(strMessage);
 
	log_command(User, Command, Data);
 
	return PLUGIN_HANDLED;
}
 
// 2.50.2 - 7/7/2001
public admin_motm_duration(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) {
		MOTM_DURATION = strtonum(Data);
		set_vaultdata("MOTM_DURATION", Data);
	}
 
	snprintf(strMessage, MAX_TEXT_LENGTH, "[ADMIN] MOTM Duration Is %d seconds", MOTM_DURATION);
	selfmessage(strMessage);
 
	log_command(User, Command, Data);
 
	return PLUGIN_HANDLED;
}
 
public admin_motm_wtf(HLCommand,HLData,HLUserName,UserIndex) {
 
  	selfmessage("[ADMIN] MOTM : Checking Configuration");
 
	new TestFile[MAX_DATA_LENGTH];
	new TextOut[MAX_DATA_LENGTH];
	new YesNo[MAX_NAME_LENGTH];
 
	currentmap(TestFile, MAX_DATA_LENGTH);
	snprintf(TestFile, MAX_TEXT_LENGTH, "%s.txt", TestFile);
 
	if (fileexists(TestFile) > 0) {
		strcpy(YesNo, "found", MAX_DATA_LENGTH);
 
	} else {
	  strcpy(YesNo, "not found (WARNING ONLY)", MAX_DATA_LENGTH);
	}
 
	snprintf(TextOut, MAX_DATA_LENGTH, "[ADMIN] MOTM : Checking for file %s ... %s", TestFile, YesNo);
	selfmessage(TextOut);
 
	strcpy(TestFile, "MOTM.TXT", MAX_DATA_LENGTH);
	if (fileexists(TestFile) > 0) {
		strcpy(YesNo, "found", MAX_DATA_LENGTH);
	} else {
		strcpy(YesNo, "not found (ERROR!)", MAX_DATA_LENGTH);
	}
 
	snprintf(TextOut, MAX_DATA_LENGTH, "[ADMIN] MOTM : Checking for file %s ... %s", TestFile, YesNo);
	selfmessage(TextOut);
 
	if (getvar("file_access_read") == 0) {
		strcpy(TestFile, "Off (ERROR)", MAX_TEXT_LENGTH);
	} else {
		strcpy(TestFile, "On", MAX_TEXT_LENGTH);
	}
 
	snprintf(TextOut, MAX_DATA_LENGTH, "[ADMIN] MOTM : File read access (file_access_read) %s", TestFile);
	selfmessage(TextOut);
 
	selfmessage("[ADMIN] MOTM : Done.");
 
	return PLUGIN_HANDLED;
}
public say_motm(Timer,Repeat,HLName,HLParam) {
	new strMessage[MAX_TEXT_LENGTH];
 
	/* Read a line based on the MOTM_COUNTER. */
	if (MOTM_COUNTER < 1)
		MOTM_COUNTER = 1;
 
	if ( fileexists(MapFile) > 0 ) {
		if (readfile(MapFile, strMessage, MOTM_COUNTER, MAX_TEXT_LENGTH) == 0) {
			if ( MOTM_COUNTER > 1 ) {
				MOTM_COUNTER = 1;
				say_motm(Timer,Repeat,HLName,HLParam);
			} else {
				centersay(MOTM_MESSAGE,10,0,255,0);
			}
		} else {
			new sCounter[MAX_NAME_LENGTH];
 
			new Red = 0;
			new Green = 255;
			new Blue = 0;
 
			// 2.50.2 - 7/7/2001
			if (strncmp(strMessage, "!", 1) == 0) {
 
				new strColor[MAX_NAME_LENGTH];
 
				strbreak(strMessage, strColor, strMessage, MAX_TEXT_LENGTH);
 
				if (strncasecmp(strColor,"!red",4)==0) {
					Red = 250;
					Green = 10;
					Blue =10;
				} else if ( strncasecmp(strColor, "!blue",5)==0) {
					Red = 10;
					Green = 10;
					Blue = 250;
				} else if ( strncasecmp(strColor, "!green",6)==0) {
					Red = 10;
					Green = 250;
					Blue = 10;
				} else if ( strncasecmp(strColor, "!white",6)==0) {
					Red = 250;
					Green = 250;
					Blue = 250;
				} else if ( strncasecmp(strColor, "!yellow",7)==0) {
					Red = 250;
					Green = 250;
					Blue = 10;
				} else if ( strncasecmp(strColor, "!purple",7)==0) {
					Red = 250;
					Green = 10;
					Blue = 250;
				} else if ( strncasecmp(strColor, "!random",7)==0) {
					Red = random(256);
					Green = random(256);
					Blue = random(256);
				}
			}
 
			strsubst(strMessage, "^^n", "^n", MAX_TEXT_LENGTH);
 
			if (MOTM_TYPE == 0) {
				centersay(strMessage,10,Red,Green,Blue);
			} else {
				typesay(strMessage,10,Red,Green,Blue);
			}
 
			MOTM_COUNTER++;
 
			if (MOTM_MAP == 0) {
            	numtostr(MOTM_COUNTER,sCounter);
            	set_vaultdata("MOTM_COUNTER", sCounter);
            }
 
			new Target[MAX_NAME_LENGTH];
			new i, SessionID, WONID, Team;
			new maxplayers = maxplayercount();
 
			strsubst(strMessage, "^n", " ", MAX_TEXT_LENGTH);
 
			/* I really hate the csay because once it is off the screen it's gone
					forever. This will put the message in the users console also. 			*/
			for(i=1; i<=maxplayers; i++) {
				strinit(Target);
				if(playerinfo(i,Target,MAX_NAME_LENGTH,SessionID,WONID,Team)==1) {
					messageex(Target,strMessage, print_console);
				}
			}
		}
	}
 
}
 
public plugin_init() {
 
	plugin_registerinfo("Message Of The Moment Plugin","Displays messages from a text file to all users at timed intervals.",STRING_VERSION);
	plugin_registercmd("admin_motm_reset", "admin_motm_reset", ACCESS_MOTM,"admin_motm_reset: Reset the MOTM counter to 1.");
	plugin_registercmd("admin_motm_type", "admin_motm_type", ACCESS_MOTM,"admin_motm_type <^"on^" | ^"off^">: Set the typesay mode.");
	plugin_registercmd("admin_motm_time", "admin_motm_time", ACCESS_MOTM,"admin_motm_time <seconds>: Set the time between MOTM messages.");
	// 2.50.2 - 7/7/2001
	plugin_registercmd("admin_motm_duration", "admin_motm_duration", ACCESS_MOTM,"admin_motm_duration <seconds>: Set the duration the message says on the client screen.");
	plugin_registercmd("admin_motm_wtf", "admin_motm_wtf", ACCESS_MOTM,"admin_motm_wtf: Tells you what the problem is when MOTM don't work.");
 
	new VaultData[MAX_DATA_LENGTH];
 
	if(get_vaultdata("MOTM_TIME", VaultData, MAX_DATA_LENGTH) != 0) {
		MOTM_TIME = strtonum(VaultData);
	} else {
		MOTM_TIME = 240;
		set_vaultdata("MOTM_TIME", "240");
	}
 
	// 2.50.2 - 7/7/2001
	if(get_vaultdata("MOTM_DURATION", VaultData, MAX_DATA_LENGTH) != 0) {
		MOTM_DURATION = strtonum(VaultData);
	} else {
		MOTM_DURATION = 10;
		set_vaultdata("MOTM_DURATION", "10");
	}
 
	if(get_vaultdata("MOTM_TYPE", VaultData, MAX_DATA_LENGTH) != 0) {
		MOTM_TYPE = strtonum(VaultData);
	} else {
		MOTM_TYPE = 1;
		set_vaultdata("MOTM_TYPE", "1");
	}
 
	// if we are using a map specific cycle then just start at 1 and DON'T SAVE THE COUNTER
	currentmap(MapFile, MAX_DATA_LENGTH);
	snprintf(MapFile, MAX_TEXT_LENGTH, "%s.txt", MapFile);
 
	if ( fileexists(MapFile) > 0 ) {
		MOTM_MAP = 1;
	} else {
 
		strcpy(MapFile, "MOTM.TXT", MAX_DATA_LENGTH);
		MOTM_MAP = 0;
 
		if(get_vaultdata("MOTM_COUNTER", VaultData, MAX_DATA_LENGTH) != 0) {
    		MOTM_COUNTER = strtonum(VaultData);
  		} else {
    		MOTM_COUNTER = 1;
  		}
  	}
 
 
	if (getvar("file_access_read") == 0) {
		MOTM_TIME = 20;
	}
 
	set_timer("say_motm",MOTM_TIME,99999);
 
	return PLUGIN_CONTINUE;
}