#include <amxmodx>

// Registering plug-in
#define PLUGIN "Admin OnLine (AOL)"
#define VERSION "1.0"		// [21.05.2007]
#define AUTHOR "[CkA] jas0n"

// Constants section. Comment '//' defines to disable feature
#define ANN2HUD		// show hud message when admin connected
#define ANN2CHAT	// show hud message when best player connected (need ps_stats base)
//#define PLAYSND		// play sound then admin connected

//================================================================

#if defined ANN2CHAT

#define A_CONNECT "^x04ADMIN ^x01[^x03%s^x01] ^x04is OnLine!"

enum ChatColor
{
	CHATCOLOR_YELLOW = 1, 	// Yellow
	CHATCOLOR_GREEN, 	// Green Color
	CHATCOLOR_TEAM_COLOR, 	// Red, grey, blue
	CHATCOLOR_GREY, 	// grey
	CHATCOLOR_RED, 		// Red
	CHATCOLOR_BLUE, 	// Blue
}

new g_TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
}

new g_msgSayText
new g_msgTeamInfo
#endif 

#if defined PLAYSND
new sound = "vox\administration.wav" 
#endif

public client_putinserver(id) {
	new name[32], sflags[32]
	
      	get_user_name(id,name,31)
	get_flags(get_user_flags(id),sflags,31)
	
	#if defined ANN2HUD
	new text[128]
	 
	format(text,127,"ADMIN %s is OnLine!", name)
	if (contain(sflags,"l")!=-1)
	{
		set_hudmessage(255, 0, 32, 0.05, 0.60, 1, 5.0, 5.0, 0.3, 0.3, 3)
		show_hudmessage(0,"%s",text)
	}
	else if (contain(sflags,"cde")!=-1)
	{
		set_hudmessage(0, 100, 255, 0.05, 0.60, 1, 5.0, 5.0, 0.7, 0.7, 3)
		show_hudmessage(0,"%s",text)
	}
	#endif

	#if defined ANN2CHAT
	if (contain(sflags,"l")!=-1)
	{
		colorChat(0, CHATCOLOR_RED, A_CONNECT, name)
	}
	else if (contain(sflags,"cde")!=-1)
	{
		colorChat(0, CHATCOLOR_BLUE, A_CONNECT, name)
	}
	#endif
	
	#if defined PLAYSND
	if (contain(sflags,"l")!=-1 || contain(sflags,"cde")!=-1)
	{
		playsound ()
	}
	#endif

	return PLUGIN_CONTINUE
}

#if defined ANN2CHAT
// Функция ColorChat спизджена с http://forums.alliedmods.net/showthread.php?t=45753,
// за что им огромное спасиба!
colorChat(id, ChatColor:color, const msg[], {Float,Sql,Result,_}:...) {
	new team, index, MSG_Type
	new bool:teamChanged = false
	new message[192]

	switch(color)
	{
	case CHATCOLOR_YELLOW: // Yellow
	{
		message[0] = 0x01;
	}
	case CHATCOLOR_GREEN: // Green
	{
		message[0] = 0x04;
	}
	default: // Grey, Red, Blue
	{
		message[0] = 0x03;
	}
	}

	vformat(message[1], 190, msg, 4);

	if (id == 0)
	{
		index = findAnyPlayer();
		MSG_Type = MSG_ALL;
	}
	else
	{
		index = id;
		MSG_Type = MSG_ONE;
	}
	
	if (index != 0)
	{
		team = get_user_team(index);	
		if (color == CHATCOLOR_RED && team != 1)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[1])
			teamChanged = true
		}
		else if (color == CHATCOLOR_BLUE && team != 2)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[2])
			teamChanged = true
		}
		else if (color == CHATCOLOR_GREY && team != 0)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[0])
			teamChanged = true
		}
		messageSayText(index, MSG_Type, message);
		if (teamChanged)
		{
			messageTeamInfo(index, MSG_Type, g_TeamName[team]);
		}
	}
}

messageSayText(id, type, message[])
{
	message_begin(type, g_msgSayText, _, id)
	write_byte(id)		
	write_string(message)
	message_end()
}

messageTeamInfo(id, type, team[])
{
	message_begin(type, g_msgTeamInfo, _, id)
	write_byte(id)
	write_string(team)
	message_end()
}

findAnyPlayer()
{
	new players[32], inum
	
	get_players(players, inum)
	
	for (new a = 0; a < inum; ++a)
	{
		if(is_user_connected(players[a]))
			return players[a];
	}

	return 0
}
#endif

#if defined PLAYSND
public plugin_precache()  
{ 
	precache_sound(sound) 
	
	return PLUGIN_CONTINUE 
}  
 
playsound()
{
	client_cmd(0 , "stopsound")
	client_cmd(0, "spk ^"%s^"",sound)
}
#endif

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	#if defined ANN2CHAT
	g_msgSayText = get_user_msgid("SayText")
	g_msgTeamInfo = get_user_msgid("TeamInfo") 
	#endif 
	
	return PLUGIN_CONTINUE
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs18 \n\\ par }
*/
