/*
================================
 Название : MastaMotds
 Версия : 2.0.0
 Автор : MastaMan
 Источник: http://www.amx-server.blogspot.com
================================

Благодарности: 
Ser_UFL

*/

#include <amxmodx>
#include <amxmisc>
#include <colorchat> 
#include <fun>

#define PLUGIN "MastaMotds"
#define VERSION "2.0.0"
#define AUTHOR "MastaMan"

/////////////////////////////////////////////////////////////////////
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ! НЕ ИЗМЕНЯЙТЕ ЭТИ ПАРАМЕТРЫ
/////////////////////////////////////////////////////////////////////

#define mm_mastamotds_vipinfo "1"
#define mm_mastamotds_rules "1"
#define mm_mastamotds_admins "1"
#define mm_mastamotds_buy "1"
#define mm_mastamotds_cw "1"
#define mm_mastamotds_foradmins "1"
#define mm_mastamotds_info "1"
#define mm_mastamotds_say "1"
#define mm_mastamotds_server "1"
#define mm_mastamotds_more "1"

#define mm_mastamotds_show_motd1 "20"
#define mm_mastamotds_show_motd2 "10"


new tempid
new MM_LANG_TMP[128]

new chat_rules[] = "/rules,"
new chat_admins[] = " /admins,"
new chat_server[] = " /server,"
new chat_info[] = " /info,"
new chat_say[] = " /say,"
new chat_cw[] = " /cw,"
new chat_vipinfo[] = " /vipinfo,"
new chat_buy[] = " /buy,"
new chat_more[] = " /more"

/////////////////////////////////////////////////////////////////////
// НАСТРОЙКИ ПЛАГИНА
/////////////////////////////////////////////////////////////////////

public plugin_init ()
{
	register_plugin (PLUGIN, VERSION, AUTHOR)
	
	// Загрузка словаря
	register_dictionary("mastamotds.txt")

	// Загрузка конфигурации
	new configsDir[64]
	get_configsdir(configsDir, 63)
	server_cmd("exec %s/mastamotds.cfg", configsDir)


	
// Переменные //

	// Время в секундах между показами подсказок в чате.
	// По умолчанию: 180 (3 минуты)
	register_cvar("mm_mastamotds_chat_time_anonce","180")
	new Float:chat_anonce = get_cvar_float ("mm_mastamotds_chat_time_anonce")
	set_task (chat_anonce, "chat_anonce", 0, "", 0, "b")
	
	// Разрешить пользователям просматривать VIPINFO.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_vipinfo","1")

	// Разрешить пользователям просматривать RULES.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_rules", "1")

	// Разрешить пользователям просматривать ADMINS.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_admins", "1")

	// Разрешить пользователям просматривать BUY.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_buy", "1")

	// Разрешить пользователям просматривать CW.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_cw", "1")

	// Разрешить АДМИНИСТРАТОРАМ просматривать FORADMINS.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_foradmins", "1")

	// Разрешить пользователям просматривать INFO.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_info", "1")

	// Разрешить пользователям просматривать SAY.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_say", "1")

	// Разрешить пользователям просматривать SERVER.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_server", "1")

	// Разрешить пользователям просматривать MORE.HTML
	// 1 -  Да, 0 - Нет
	// По умолчанию: 1
	register_cvar("mm_mastamotds_more", "1")

	// Время в секундах для показа предупреждений администратором
	// По умолчанию: 20
	register_cvar("mm_mastamotds_show_motd1", "20")

	// Время в секундах для показа обычных сообщений администратором
	// По умолчанию: 10
	register_cvar("mm_mastamotds_show_motd2", "10")

// Чат-команды //
	
	// Проверка на доступность команд из переменных		
	if (get_cvar_num ("mm_mastamotds_vipinfo") == 1)
	{
		register_clcmd ("say /vipinfo" ,"vipinfo", 0)
		register_clcmd ("say_team /vipinfo", "vipinfo", 0)
	} 

	if (get_cvar_num ("mm_mastamotds_rules") == 1)
	{
		register_clcmd ("say /rules" ,"rules", 0)
		register_clcmd ("say_team /rules", "rules", 0)
	} else {
		chat_rules = ""
	}

	if (get_cvar_num ("mm_mastamotds_admins") == 1)
	{
		register_clcmd ("say /admins", "admins", 0)
		register_clcmd ("say /admin", "admins", 0)
		register_clcmd ("say_team /admins", "admins", 0)
		register_clcmd ("say_team /admin", "admins", 0)
	}  else {
		chat_admins = ""
	}


	if (get_cvar_num ("mm_mastamotds_buy") == 1)
	{
		register_clcmd ("say /buy", "buy", 0)
		register_clcmd ("say_team /buy", "buy", 0)
	}  else {
		chat_buy = ""
	}


	if (get_cvar_num ("mm_mastamotds_cw") == 1)
	{
		register_clcmd ("say /cw", "cw", 0)
		register_clcmd ("say_team /cw", "cw", 0)
	}  else {
		chat_cw = ""
	}


	if (get_cvar_num ("mm_mastamotds_foradmins") == 1)
	{
		register_clcmd ("say /foradmins", "foradmins", 0)
		register_clcmd ("say_team /foradmins", "foradmins", 0)
	}  

	if (get_cvar_num ("mm_mastamotds_info") == 1)
	{
		register_clcmd ("say /info", "info", 0)
		register_clcmd ("say_team /info", "info", 0)
	} else {
		chat_info = ""
	}


	if (get_cvar_num ("mm_mastamotds_say") == 1)
	{
		register_clcmd ("say /say", "say", 0)
		register_clcmd ("say_team /say", "say", 0)
	}  else {
		chat_say = ""
	}


	if (get_cvar_num ("mm_mastamotds_server") == 1)
	{
		register_clcmd ("say /server", "server", 0)
		register_clcmd ("say_team /server", "server", 0)
	}  else {
		chat_server = ""
	}


	if (get_cvar_num ("mm_mastamotds_more") == 1)
	{
		register_clcmd ("say /more", "more", 0)
		register_clcmd ("say_team /more", "more", 0)
	}  else {
		chat_more = ""
	}


	

// Админ-команды //
	
	// Формирование консольной команды показа MOTD окон
	register_concmd ("mm_showmotd", "force_show_motd", ADMIN_SLAY, "<имя, или #userid> <название HTML файла> - показать MOTD")

// Меню //

	// Команда для открытия меню показа MOTD окон
	register_concmd ("mm_showmotd_menu", "player_menu", ADMIN_SLAY, "Открыть меню показа MOTD")

}

/////////////////////////////////////////////////////////////////////
// ЧАТ-КОМАНДЫ
/////////////////////////////////////////////////////////////////////

	// VIP.HTML


public vipinfo (id)
{

	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_VIPINFO")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\VIPINFO.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// RULES.HTML
public rules (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_RULES")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\RULES.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// ADMINS.HTML
public admins (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_ADMINS")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\ADMINS.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// BUY.HTML
public buy (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_BUY")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\BUY.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// CW.HTML
public cw (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_CW")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\CW.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// FORADMINS.HTML
public foradmins (id)
{
	// Проверка или пользователь - администратор
	if (get_user_flags(id) & ADMIN_SLAY)
	{
		formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_FORADMINS")
		show_motd (id, "\addons\amxmodx\configs\mastamotds\FORADMINS.htm", MM_LANG_TMP)
	}

	return PLUGIN_HANDLED
}


	// INFO.HTML
public info (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_INFO")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\INFO.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// SAY.HTML
public say (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_SAY")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\SAY.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}


	// SERVER.HTML
public server (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_SERVER")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\SERVER.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// WARNING.HTML
public warning (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_WARNING")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\WARNING.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

	// MORE.HTML
public more (id)
{
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MOTD_TITLE_MORE")
	show_motd (id, "\addons\amxmodx\configs\mastamotds\MORE.htm", MM_LANG_TMP)

	return PLUGIN_HANDLED
}

/////////////////////////////////////////////////////////////////////
// КОНСОЛЬНЫЕ-КОМАНДЫ
/////////////////////////////////////////////////////////////////////

public force_show_motd (id, level, cid)
{
	// Проверка админских флагов
	if (!cmd_access (id, level, cid, 2))
	{
		return PLUGIN_HANDLED
	}
	
	// Получение имени и названия файла MOTD из консольной команды
	new name[32]
	new motd[32]
	read_argv (1, name, 31)
	read_argv (2, motd, 31)
	new user = cmd_target (id, name, 0)
	
	// Еще раз проверяем или игрок имеет доступ к команде
	if (!user)
	{
		return PLUGIN_HANDLED	
	}

	// Показываем предопределенныем MOTD окна 20 секунд
	new motd_show_time1 = get_cvar_num ("mm_mastamotds_show_motd1")  * 10

	if (equali(motd[0], "warning") || equali(motd[0], "rules"))	
		{
			set_task (0.1, motd, user, "", 0, "a", motd_show_time1)	
		}

	// Показываем предопределенныем MOTD окна 10 секунд
	new motd_show_time2 = get_cvar_num ("mm_mastamotds_show_motd2")  * 10

	if (equali(motd[0], "admins") || equali(motd[0], "cw") || equali(motd[0], "info") || equali(motd[0], "server") || equali(motd[0], "say") || equali(motd[0], "more"))	
		{
			set_task (0.1, motd, user, "", 0, "a", motd_show_time2)	
		}

	// Показываем предопределенныем MOTD окна 1 секуну
	if (equali(motd[0], "vipinfo") || equali(motd[0], "buy") || equali(motd[0], "foradmins"))	
		{
			set_task (0.1, motd, user, "", 0, "a", 1)	
		}

	return PLUGIN_HANDLED
}

/////////////////////////////////////////////////////////////////////
// СИСТЕМА МЕНЮ
/////////////////////////////////////////////////////////////////////

	// Формируем меню со списком игроков
public player_menu (id)
{
	formatex(MM_LANG_TMP, 127, "\r%L", id, "MM_LANG_MENU1_TITLE")
	new menu = menu_create (MM_LANG_TMP, "player_menu_handler")

	new players[32], pnum, tempid

	new szName[32], szTempid[10]

	get_players (players, pnum)

	for ( new i; i<pnum; i++ )
	{
		tempid = players[i]

		get_user_name (tempid, szName, 31)
		num_to_str (tempid, szTempid, 9)

		menu_additem (menu, szName, szTempid, ADMIN_SLAY)
	}
	menu_addblank (menu, 1)

	menu_setprop (menu, MPROP_PERPAGE, 7)

	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_BACK")
	menu_setprop (menu, MPROP_BACKNAME, MM_LANG_TMP)
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_NEXT")
	menu_setprop (menu, MPROP_NEXTNAME, MM_LANG_TMP)
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_EXIT")
	menu_setprop (menu, MPROP_EXITNAME, MM_LANG_TMP)
	
	menu_display (id, menu, 0)

	return PLUGIN_HANDLED
}
	// Получение индитификаторов игрков
public player_menu_handler (id, menu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy (menu)
		
		return PLUGIN_HANDLED
	}

	new data[6], iName[64]
	new access, callback
	menu_item_getinfo (menu, item, access, data,5, iName, 63, callback)

	tempid = str_to_num (data)
	
// измените параметр is_user_connected на is_user_alive, что бы показывать MOTD только живым игрокам //
	if (is_user_connected (tempid))
	{
		choice_motd_menu (id)
		
		return PLUGIN_HANDLED
	}
	
	menu_destroy (menu)

	return PLUGIN_HANDLED
 }
	
	// Меню выбора MOTD
choice_motd_menu (id)
{
	formatex(MM_LANG_TMP, 127, "\r%L", id, "MM_LANG_MENU2_TITLE")
	new menu = menu_create (MM_LANG_TMP, "choice_motd_menu_handler")


	formatex(MM_LANG_TMP, 127, "\r%L", id, "MM_LANG_MENU2_ITEM1", get_cvar_num ("mm_mastamotds_show_motd1"))	
	menu_additem (menu, MM_LANG_TMP, "1", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\r%L", id, "MM_LANG_MENU2_ITEM2", get_cvar_num ("mm_mastamotds_show_motd1"))	
	menu_additem (menu, MM_LANG_TMP, "2", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\y%L", id, "MM_LANG_MENU2_ITEM3", get_cvar_num ("mm_mastamotds_show_motd2"))
	menu_additem (menu, MM_LANG_TMP,"3", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\y%L", id, "MM_LANG_MENU2_ITEM4", get_cvar_num ("mm_mastamotds_show_motd2"))
	menu_additem (menu, MM_LANG_TMP,"4", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\y%L", id, "MM_LANG_MENU2_ITEM5", get_cvar_num ("mm_mastamotds_show_motd2"))
	menu_additem (menu, MM_LANG_TMP,"5", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\y%L", id, "MM_LANG_MENU2_ITEM6", get_cvar_num ("mm_mastamotds_show_motd2"))
	menu_additem (menu, MM_LANG_TMP,"6", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\y%L", id, "MM_LANG_MENU2_ITEM7", get_cvar_num ("mm_mastamotds_show_motd2"))
	menu_additem (menu, MM_LANG_TMP,"7", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\y%L", id, "MM_LANG_MENU2_ITEM8", get_cvar_num ("mm_mastamotds_show_motd2"))
	menu_additem (menu, MM_LANG_TMP,"8", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\w%L", id, "MM_LANG_MENU2_ITEM9")
	menu_additem (menu, MM_LANG_TMP,"9", ADMIN_SLAY)

	formatex(MM_LANG_TMP, 127, "\w%L", id, "MM_LANG_MENU2_ITEM10")
	menu_additem (menu, MM_LANG_TMP,"10", ADMIN_SLAY)
	
	formatex(MM_LANG_TMP, 127, "\w%L", id, "MM_LANG_MENU2_ITEM11")
	menu_additem (menu, MM_LANG_TMP,"11", ADMIN_SLAY)
	
	menu_setprop (menu, MPROP_EXIT, MEXIT_ALL)
	
	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_BACK")
	menu_setprop (menu, MPROP_BACKNAME, "Назад")

	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_NEXT")
	menu_setprop (menu, MPROP_NEXTNAME, MM_LANG_TMP)

	formatex(MM_LANG_TMP, 127, "%L", id, "MM_LANG_MENU_BACK_LIST")
	menu_setprop (menu, MPROP_EXITNAME, MM_LANG_TMP)

	menu_display(id, menu, 0)
}
public choice_motd_menu_handler (id, menu, item)
{
	if (item == MENU_EXIT)
    	{
		menu_destroy (menu)

		if (is_user_connected(id))
		{
			player_menu (id)
		}
		
        		//return PLUGIN_HANDLED
	}
	
	new data[6], iName[64];
	new access, callback;
	menu_item_getinfo (menu, item, access, data,5, iName, 63, callback);
	
	new name[32] 
	get_user_info (tempid, "name", name, 31) 
	
	new item = str_to_num (data)
	switch (item)
	{
		case 1:
		{
			server_cmd ("mm_showmotd %s warning", name)
		}

		case 2:
		{
			server_cmd ("mm_showmotd %s rules", name)
		}
		
		case 3:
		{
			server_cmd ("mm_showmotd %s admins", name)
		}

		case 4:
		{
			server_cmd ("mm_showmotd %s server", name)
		}		

		case 5:
		{
			server_cmd ("mm_showmotd %s info", name)	
		}

		case 6:
		{
			server_cmd ("mm_showmotd %s say", name)			
		}

		case 7:
		{
			server_cmd ("mm_showmotd %s cw", name)
		}
		
		case 8:
		{
			server_cmd ("mm_showmotd %s more", name)
		}

		case 9:
		{
			server_cmd ("mm_showmotd %s foradmins", name)

		}

		case 10:
		{
			server_cmd ("mm_showmotd %s buy", name)

		}

		case 11:
		{
			server_cmd ("mm_showmotd %s vipinfo", name)

		}

	}

menu_destroy (menu)

player_menu (id)

return PLUGIN_HANDLED;
}

/////////////////////////////////////////////////////////////////////
// ПОДСКАЗКА В ЧАТЕ
/////////////////////////////////////////////////////////////////////

	// Показ подсказок в чате с доступными командами
public chat_anonce (id)
{
	ColorChat (id, RED, "*^x01 %L^x04 %s%s%s%s%s%s%s%s%s", id, "MM_LANG_CHAT_ANONCE", chat_rules, chat_admins, chat_server, chat_info, chat_say, chat_cw, chat_vipinfo, chat_buy, chat_more)
}