- #include <amxmodx> 
- #include <amxmisc> 
- #include <engine> 
-   
- #define PLUGIN "ADMIN Gag" 
- #define VERSION "1.0.1" 
- #define AUTHOR "RaZzoR" 
-   
- #define GAG_FLAG ADMIN_BAN 
- #define GAG_IMMUNITY ADMIN_IMMUNITY 
-   
- #define DICTIONARY "admin_gag.txt" 
- #define USE_COLOR_CHAT  
-   
- #if defined USE_COLOR_CHAT  
- 	#include <colorchat> 
- #endif 
-   
- new const gag_file_name[] = "gagged_users.txt" 
-   
- enum _:GagData { 
- 	gag_name[32], 
- 	gag_steamid[35], 
- 	gag_length, 
- 	ungag_time[32], 
- 	gag_reason[128] 
- } 
-   
- new Trie:g_trie 
- new Array:g_array 
- new total_gags, g_ungag_entity 
- new gag_file[64], Float:get_gag_time[33], tempid[33] 
-   
- new gag_immunity, gag_ungagcheck 
-   
- public plugin_init() { 
- 	register_plugin(PLUGIN, VERSION, AUTHOR) 
-   
- 	#if defined USE_COLOR_CHAT  
- 		register_dictionary_colored(DICTIONARY)	 
- 	#else 
- 		register_dictionary(DICTIONARY)	 
- 	#endif 
-   
- 	gag_immunity = register_cvar("gag_immunity", "1") 
- 	gag_ungagcheck = register_cvar("gag_ungagcheck", "1.0") 
-   
- 	register_clcmd("say /gag_menu", "gag_menu") 
- 	register_clcmd("say /ungag_menu", "ungag_menu")	 
-   
- 	register_clcmd("say", "gag_say") 
- 	register_clcmd("say_team", "gag_say")	 
-   
- 	register_clcmd("GAG_TIME", "clcmd_time") 
- 	register_clcmd("GAG_REASON", "clcmd_reason") 
-   
- 	register_concmd("gag_authid", "concmd_gag_authid", GAG_FLAG, "<nev, #userid, authid> <ido percben> <ok>") 
- 	register_concmd("gag_ip", "concmd_gag_ip", GAG_FLAG, "<nev, #userid, authid> <ido percben> <ok>") 
- 	register_concmd("gag_add", "concmd_gag_add", GAG_FLAG, "<nev> <authid vagy ip> <ido percben> <ok>") 
- 	register_concmd("gag_list", "concmd_gag_list", GAG_FLAG, "[start] -- megmutat minden nemitast") 
- 	register_concmd("ungag", "concmd_ungag", GAG_FLAG, "<authid vagy ip>") 
-   
- 	get_datadir(gag_file, sizeof(gag_file) - 1) 
- 	format(gag_file, sizeof(gag_file) - 1, "%s/%s", gag_file, gag_file_name) 
-   
- 	g_trie = TrieCreate() 
- 	g_array = ArrayCreate(GagData) 
-   
- 	LoadGags() 
- } 
-   
- public plugin_cfg() create_ungag_entity() 
-   
- public client_PostThink(id) { 
- 	static authid[35] 
- 	get_user_authid(id, authid, sizeof(authid) - 1) 
-   
- 	static ip[35] 
- 	get_user_ip(id, ip, sizeof(ip) - 1, 1) 
-   
- 	static array_pos	 
- 	if(TrieGetCell(g_trie, authid, array_pos) || TrieGetCell(g_trie, ip, array_pos)) set_speak(id, SPEAK_MUTED) 
- 	else set_speak(id, SPEAK_LISTENALL) 
- } 
-   
- public create_ungag_entity() { 
- 	static failtimes 
-   
- 	g_ungag_entity = create_entity("info_target") 
-   
- 	if(!is_valid_ent(g_ungag_entity)) { 
- 		++failtimes 
-   
- 		log_amx("%L", LANG_SERVER, "FAILED_TO_CREATE_UNGAG_ENTITY", failtimes) 
-   
- 		if(failtimes < 10) set_task(1.0, "create_ungag_entity") 
- 		else log_amx("%L", LANG_SERVER, "COULD_NOT_CREATE_UNGAG_ENTITY") 
-   
- 		return 
- 	} 
-   
- 	entity_set_string(g_ungag_entity, EV_SZ_classname, "ungag_entity") 
- 	entity_set_float(g_ungag_entity, EV_FL_nextthink, get_gametime() + 1.0) 
-   
- 	register_think("ungag_entity", "UnGag_Check") 
- } 
-   
- public UnGag_Check(entity) 
- { 
- 	if(entity != g_ungag_entity) return 
-   
- 	if(total_gags > 0) 
- 	{ 
- 		static _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7] 
- 		format_time(_hours, sizeof(_hours) - 1, "%H") 
- 		format_time(_minutes, sizeof(_minutes) - 1, "%M") 
- 		format_time(_seconds, sizeof(_seconds) - 1, "%S") 
- 		format_time(_month, sizeof(_month) - 1, "%m") 
- 		format_time(_day, sizeof(_day) - 1, "%d") 
- 		format_time(_year, sizeof(_year) - 1, "%Y") 
-   
-   
- 		new c_hours = str_to_num(_hours) 
- 		new c_minutes = str_to_num(_minutes) 
- 		new c_seconds = str_to_num(_seconds) 
- 		new c_month = str_to_num(_month) 
- 		new c_day = str_to_num(_day) 
- 		new c_year = str_to_num(_year) 
-   
- 		static load_ungag_time[32] 
- 		static u_hours, u_minutes, u_seconds, u_month, u_day, u_year 
-   
- 		for(new i = 0; i < total_gags; i++) { 
- 			static data[GagData] 
- 			ArrayGetArray(g_array, i, data) 
-   
- 			if(data[gag_length] == 0) continue 
-   
- 			copy(load_ungag_time, sizeof(load_ungag_time) - 1, data[ungag_time]) 
-   
- 			replace_all(load_ungag_time, sizeof(load_ungag_time) - 1, ":", " ") 
- 			replace_all(load_ungag_time, sizeof(load_ungag_time) - 1, "/", " ") 
-   
- 			parse(load_ungag_time,\ 
- 				_hours, sizeof(_hours) - 1,\ 
- 				_minutes, sizeof(_minutes) - 1,\ 
- 				_seconds, sizeof(_seconds) - 1,\ 
- 				_month, sizeof(_month) - 1,\ 
- 				_day, sizeof(_day) - 1,\ 
- 				_year, sizeof(_year) - 1 
- 				) 
-   
- 			u_hours = str_to_num(_hours) 
- 			u_minutes = str_to_num(_minutes) 
- 			u_seconds = str_to_num(_seconds) 
- 			u_month = str_to_num(_month) 
- 			u_day = str_to_num(_day) 
- 			u_year = str_to_num(_year) 
-   
- 			if( u_year < c_year 
- 			|| u_year == c_year && u_month < c_month 
- 			|| u_year == c_year && u_month == c_month && u_day < c_day 
- 			|| u_year == c_year && u_month == c_month && u_day == c_day && u_hours < c_hours 
- 			|| u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes < c_minutes 
- 			|| u_year == c_year && u_month == c_month && u_day == c_day && u_hours == c_hours && u_minutes == c_minutes && u_seconds <= c_seconds ) { 
- 				#if defined USE_COLOR_CHAT  
- 					ColorChat(0, RED, "%L", LANG_PLAYER, "GAG_EXPIRED", data[gag_name], data[gag_steamid], data[gag_reason]) 
- 				#else 
- 					NoColorChat(0, "%L", LANG_PLAYER, "GAG_EXPIRED", data[gag_name], data[gag_steamid], data[gag_reason]) 
- 				#endif 
-   
- 				RemoveGag(i, data[gag_steamid]) 
-   
- 				i-- 
- 			} 
- 		} 
- 	} 
-   
- 	entity_set_float(g_ungag_entity, EV_FL_nextthink, get_gametime() + get_pcvar_float(gag_ungagcheck)) 
- } 
-   
- public concmd_gag_authid(id, level, cid) { 
- 	if(!cmd_access(id, level, cid, 4)) return PLUGIN_HANDLED 
-   
- 	static arg[128] 
- 	read_argv(1, arg, sizeof(arg) - 1) 
-   
- 	new target = cmd_target(id, arg, GetTargetFlags(id)) 
- 	if(!target) return PLUGIN_HANDLED 
-   
- 	static target_authid[35] 
- 	get_user_authid(target, target_authid, sizeof(target_authid) - 1) 
-   
- 	if(TrieKeyExists(g_trie, target_authid)) { 
- 		console_print(id, "%L", id, "ALREADY_GAGGED_STEAMID", target_authid) 
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	read_argv(2, arg, sizeof(arg) - 1) 
- 	new Float:length = str_to_float(arg) 
-   
- 	static ungag_time2[64], gag_time2[64] 
-   
- 	if(length == 0.0) formatex(ungag_time2, sizeof(ungag_time2) - 1, "%L", id, "PERMANENT_GAG") 
- 	else GenerateUnGagTime(length, ungag_time2, sizeof(ungag_time2) - 1) 
-   
- 	read_argv(3, arg, sizeof(arg) - 1) 
-   
- 	static admin_name[64], target_name[32] 
- 	get_user_name(id, admin_name, sizeof(admin_name) - 1) 
- 	get_user_name(target, target_name, sizeof(target_name) - 1) 
-   
- 	static admin_authid[35] 
- 	get_user_authid(id, admin_authid, sizeof(admin_authid) - 1) 
-   
- 	GagAdd(target_name, target_authid, arg, floatround(length * 60.0, floatround_floor), ungag_time2) 
-   
- 	GetGagTime(id, length, gag_time2, sizeof(gag_time2) - 1) 
-   
- 	#if defined USE_COLOR_CHAT  
- 		ColorChat(0, RED, "%L", LANG_PLAYER, "GAG_PLAYER", admin_name, admin_authid, target_name, arg, gag_time2, ungag_time2) 
- 	#else 
- 		NoColorChat(0, "%L", LANG_PLAYER, "GAG_PLAYER", admin_name, admin_authid, target_name, arg, gag_time2, ungag_time2) 
- 	#endif 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public concmd_gag_ip(id, level, cid) { 
- 	if(!cmd_access(id, level, cid, 4)) return PLUGIN_HANDLED 
-   
- 	static arg[128] 
- 	read_argv(1, arg, sizeof(arg) - 1) 
-   
- 	new target = cmd_target(id, arg, GetTargetFlags(id)) 
- 	if(!target) return PLUGIN_HANDLED 
-   
- 	static target_ip[35] 
- 	get_user_ip(target, target_ip, sizeof(target_ip) - 1, 1) 
-   
- 	if(TrieKeyExists(g_trie, target_ip)) { 
- 		console_print(id, "%L", id, "ALREADY_GAGGED_IP", target_ip) 
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	read_argv(2, arg, sizeof(arg) - 1) 
- 	new Float:length = str_to_float(arg) 
-   
- 	static ungag_time2[64], gag_time2[64] 
-   
- 	if(length == 0.0) formatex(ungag_time2, sizeof(ungag_time2) - 1, "%L", id, "PERMANENT_GAG") 
- 	else GenerateUnGagTime(length, ungag_time2, sizeof(ungag_time2) - 1) 
-   
- 	read_argv(3, arg, sizeof(arg) - 1) 
-   
- 	static admin_name[64], target_name[32] 
- 	get_user_name(id, admin_name, sizeof(admin_name) - 1) 
- 	get_user_name(target, target_name, sizeof(target_name) - 1) 
-   
- 	static admin_authid[35] 
- 	get_user_authid(id, admin_authid, sizeof(admin_authid) - 1) 
-   
- 	GagAdd(target_name, target_ip, arg, floatround(length * 60.0, floatround_floor), ungag_time2) 
-   
- 	GetGagTime(id, length, gag_time2, sizeof(gag_time2) - 1) 
-   
- 	#if defined USE_COLOR_CHAT  
- 		ColorChat(0, RED, "%L", LANG_PLAYER, "GAG_PLAYER", admin_name, admin_authid, target_name, arg, gag_time2, ungag_time2) 
- 	#else 
- 		NoColorChat(0, "%L", LANG_PLAYER, "GAG_PLAYER", admin_name, admin_authid, target_name, arg, gag_time2, ungag_time2) 
- 	#endif 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public concmd_gag_add(id, level, cid) { 
- 	if(!cmd_access(id, level, cid, 5)) return PLUGIN_HANDLED 
-   
- 	static target_name[128], target_authid[128], gagtime[128], reason[128] 
- 	read_argv(1, target_name, sizeof(target_name) - 1) 
- 	read_argv(2, target_authid, sizeof(target_authid) - 1) 
- 	read_argv(3, gagtime, sizeof(gagtime) - 1) 
- 	read_argv(4, reason, sizeof(reason) - 1) 
-   
- 	new bool:is_ip = bool:(containi(target_authid, ".") != -1) 
-   
- 	if(TrieKeyExists(g_trie, target_authid)) { 
- 		console_print(id, "%L", id, is_ip ? "ALREADY_GAGGED_IP" : "ALREADY_GAGGED_STEAMID", target_authid) 
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	new Float:length = str_to_float(gagtime)  
- 	static ungag_time2[64], gag_time2[64] 
-   
- 	if(length == 0.0) formatex(ungag_time2, sizeof(ungag_time2) - 1, "%L", id, "PERMANENT_GAG") 
- 	else GenerateUnGagTime(length, ungag_time2, sizeof(ungag_time2) - 1) 
-   
- 	static admin_name[64] 
- 	get_user_name(id, admin_name, sizeof(admin_name) - 1) 
-   
- 	static admin_authid[35] 
- 	get_user_authid(id, admin_authid, sizeof(admin_authid) - 1) 
-   
- 	GagAdd(target_name, target_authid, reason, floatround(length * 60.0, floatround_floor), ungag_time2) 
-   
- 	GetGagTime(id, length, gag_time2, sizeof(gag_time2) - 1) 
-   
- 	#if defined USE_COLOR_CHAT  
- 		ColorChat(0, RED, "%L", LANG_PLAYER, "GAG_PLAYER", admin_name, admin_authid, target_name, reason, gag_time2, ungag_time2) 
- 	#else 
- 		NoColorChat(0, "%L", LANG_PLAYER, "GAG_PLAYER", admin_name, admin_authid, target_name, reason, gag_time2, ungag_time2) 
- 	#endif 
-   
- 	return PLUGIN_HANDLED 
- }	 
-   
- public concmd_ungag(id, level, cid) { 
- 	if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED 
-   
- 	static arg[35] 
- 	read_argv(1, arg, sizeof(arg) - 1) 
-   
- 	if(TrieKeyExists(g_trie, arg)) { 
- 		static array_pos; 
- 		TrieGetCell(g_trie, arg, array_pos); 
-   
- 		static data[GagData] 
- 		ArrayGetArray(g_array, array_pos, data) 
-   
- 		static admin_name[64] 
- 		get_user_name(id, admin_name, sizeof(admin_name) - 1) 
-   
- 		static authid[35] 
- 		get_user_authid(id, authid, sizeof(authid) - 1) 
-   
- 		#if defined USE_COLOR_CHAT  
- 			ColorChat(0, RED, "%L", LANG_PLAYER, "UNGAG_PLAYER", admin_name, authid, data[gag_name], data[gag_steamid], data[gag_reason]) 
- 		#else 
- 			NoColorChat(0, "%L", LANG_PLAYER, "UNGAG_PLAYER", admin_name, authid, data[gag_name], data[gag_steamid], data[gag_reason]) 
- 		#endif 
-   
- 		RemoveGag(array_pos, data[gag_steamid]) 
-   
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	console_print(id, "%L", id, "NOT_IN_GAG_LIST", arg) 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public concmd_gag_list(id, level, cid) { 
- 	if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED 
-   
- 	if(!total_gags) { 
- 		console_print(id, "%L", id, "NO_GAGS") 
- 		return PLUGIN_HANDLED; 
- 	} 
-   
- 	static start 
- 	if(read_argc() > 1) { 
- 		static arg[5] 
- 		read_argv(1, arg, sizeof(arg) - 1) 
-   
- 		start = min(str_to_num(arg), total_gags) - 1 
- 	} 
-   
- 	else start = 0 
-   
- 	new last = min(start + 10, total_gags) 
-   
- 	if(id == 0) server_cmd("echo ^"%L^"", id, "GAG_LIST_NUM", start + 1, last) 
- 	else console_print(id, "%L", id, "GAG_LIST_NUM", start + 1, last) 
-   
- 	for(new i = start; i < last; i++) { 
- 		static data[GagData] 
- 		ArrayGetArray(g_array, i, data) 
-   
- 		PrintGagInfosToConsole(id, data[gag_name], data[gag_steamid], data[gag_length], data[gag_reason], data[ungag_time]) 
- 	} 
-   
- 	if(++last < total_gags) { 
- 		if(id == 0) server_cmd("echo ^"%L^"", id, "GAG_LIST_NEXT", last) 
- 		else console_print(id, "%L", id, "GAG_LIST_NEXT", last) 
- 	} 
-   
- 	return PLUGIN_HANDLED 
- }	 
-   
- public gag_menu(id) { 
- 	if(!(get_user_flags(id) & GAG_FLAG)) 
- 		return PLUGIN_HANDLED 
-   
- 	new menu_line[64], menu_newline[64], id_data[64] 
- 	format(menu_line, charsmax(menu_line), "\w%L^n%L", id, "GAG_MENU1", id, "GAG_MENU2") 
-   
- 	new menu = menu_create(menu_line, "gag_menu_handler") 
-   
- 	new players[32], name[32], num 
- 	get_players(players, num, "c") 
-   
- 	for(new i = 0; i <num; i++) { 
- 		new pid = players[i] 
- 		get_user_name(pid, name, 31) 
- 		num_to_str(pid, id_data, sizeof(id_data)) 
-   
- 		format(menu_newline, charsmax(menu_newline), "%s", name) 
- 		menu_additem(menu, menu_newline, id_data, 0) 
- 	} 
-   
- 	menu_display(id, menu, 0) 
- 	return PLUGIN_CONTINUE 
- } 
-   
- public ungag_menu(id) { 
- 	if(!(get_user_flags(id) & GAG_FLAG)) 
- 		return PLUGIN_HANDLED 
-   
- 	if(!total_gags) { 
- 		#if defined USE_COLOR_CHAT 
- 			ColorChat(id, RED, "%L", id, "NO_GAGS") 
- 		#else 
- 			client_print(id, print_chat, "%L", id, "NO_GAGS") 
- 		#endif 
-   
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	new menu_line[99], menu_newline[99] 
- 	format(menu_line, charsmax(menu_line), "\w%L^n%L", id, "GAG_MENU3", id, "GAG_MENU4") 
-   
- 	new menu = menu_create(menu_line, "ungag_menu_handler") 
-   
- 	for(new i = 0; i < total_gags; i++) { 
- 		static data[GagData] 
- 		ArrayGetArray(g_array, i, data) 
-   
- 		format(menu_newline, charsmax(menu_newline), "\r%s \w[%s]", data[gag_steamid], data[gag_reason]) 
- 		menu_additem(menu, menu_newline, data[gag_steamid], 0) 
- 	} 
-   
- 	menu_display(id, menu, 0) 
- 	return PLUGIN_CONTINUE 
- } 
-   
- public gag_menu_handler(id, menu, item) { 
- 	if(item == MENU_EXIT) { 
- 		menu_destroy(menu) 
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	new data[64], szName[64] 
- 	new access, callback 
- 	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback) 
-   
- 	tempid[id] = str_to_num(data) 
-   
- 	static authid[35] 
- 	get_user_authid(tempid[id], authid, sizeof(authid) - 1) 
-   
- 	static ip[35] 
- 	get_user_ip(tempid[id], ip, sizeof(ip) - 1, 1) 
- 	static array_pos	 
-   
- 	if(get_user_flags(tempid[id]) & GAG_IMMUNITY) { 
- 		#if defined USE_COLOR_CHAT 
- 			ColorChat(id, RED, "%L", id, "PLAYER_IMMUNITY") 
- 		#else 
- 			NoColorChat(id, "%L", id, "PLAYER_IMMUNITY") 
- 		#endif 
-   
- 		gag_menu(id) 
-   
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	else if(TrieGetCell(g_trie, authid, array_pos) || TrieGetCell(g_trie, ip, array_pos)) { 
- 		static data[GagData] 
- 		ArrayGetArray(g_array, array_pos, data) 
-   
- 		static gag_length2[64] 
- 		new Float:gag_len = float(data[gag_length]) / 60.0 
- 		GetGagTime(id, gag_len, gag_length2, sizeof(gag_length2) - 1) 
-   
- 		#if defined USE_COLOR_CHAT 
- 			ColorChat(id, RED, "%L", id, "PLAYER_GAGGED", data[gag_reason], gag_length2, data[ungag_time]) 
- 		#else 
- 			NoColorChat(id, "%L", id, "PLAYER_GAGGED", data[gag_reason], gag_length2, data[ungag_time]) 
- 		#endif 
-   
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	else {  
- 		#if defined USE_COLOR_CHAT 
- 			ColorChat(id, RED, "%L", id, "TYPE_TIME") 
- 		#else 
- 			NoColorChat(id, "%L", id, "TYPE_TIME") 
- 		#endif 
-   
- 		client_cmd(id, "messagemode GAG_TIME") 
- 	} 
-   
- 	return PLUGIN_CONTINUE 
- } 
-   
- public ungag_menu_handler(id, menu, item) { 
- 	if(item == MENU_EXIT) { 
- 		menu_destroy(menu) 
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	new data[64], szName[64] 
- 	new access, callback 
- 	menu_item_getinfo(menu, item, access, data, charsmax(data), szName, charsmax(szName), callback) 
-   
- 	client_cmd(id, "ungag ^"%s^"", data) 
-   
- 	return PLUGIN_CONTINUE 
- } 
-   
- public clcmd_time(id) { 
- 	if(!(get_user_flags(id) & GAG_FLAG)) 
- 		return PLUGIN_HANDLED 
-   
- 	new gag_times[33][100] 
- 	read_args(gag_times[id], 99) 
- 	remove_quotes(gag_times[id]) 
-   
- 	get_gag_time[id] = str_to_float(gag_times[id]) 
-   
- 	#if defined USE_COLOR_CHAT 
- 		ColorChat(id, RED, "%L", id, "TYPE_REASON") 
- 	#else 
- 		NoColorChat(id, "%L", id, "TYPE_REASON") 
- 	#endif 
-   
- 	client_cmd(id, "messagemode GAG_REASON") 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public clcmd_reason(id) { 
- 	if(!(get_user_flags(id) & GAG_FLAG)) 
- 		return PLUGIN_HANDLED 
-   
- 	new get_gag_reason[33][100] 
- 	read_args(get_gag_reason[id], 99) 
- 	remove_quotes(get_gag_reason[id]) 
-   
- 	static target_name[32] 
- 	get_user_name(tempid[id], target_name, sizeof(target_name) - 1) 
-   
- 	if(is_user_steam(tempid[id])) client_cmd(id, "gag_authid ^"%s^" ^"%f^" ^"%s^"", target_name, get_gag_time[id], get_gag_reason[id]) 
- 	else client_cmd(id, "gag_ip ^"%s^" ^"%f^" ^"%s^"", target_name, get_gag_time[id], get_gag_reason[id]) 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public gag_say(id) { 
- 	static authid[35] 
- 	get_user_authid(id, authid, sizeof(authid) - 1) 
-   
- 	static ip[35] 
- 	get_user_ip(id, ip, sizeof(ip) - 1, 1) 
-   
- 	static array_pos	 
- 	if(TrieGetCell(g_trie, authid, array_pos) || TrieGetCell(g_trie, ip, array_pos)) { 
- 		static data[GagData] 
- 		ArrayGetArray(g_array, array_pos, data) 
-   
- 		static gag_length2[64] 
- 		new Float:gag_len = float(data[gag_length]) / 60.0 
- 		GetGagTime(id, gag_len, gag_length2, sizeof(gag_length2) - 1) 
-   
- 		#if defined USE_COLOR_CHAT 
- 			ColorChat(id, RED, "%L", id, "YOU_GAGGED", data[gag_reason], gag_length2, data[ungag_time]) 
- 		#else 
- 			NoColorChat(id, "%L", id, "YOU_GAGGED", data[gag_reason], gag_length2, data[ungag_time]) 
- 		#endif 
-   
- 		return PLUGIN_HANDLED 
- 	} 
-   
- 	return PLUGIN_CONTINUE 
- } 
-   
- public PrintGagInfosToConsole(index, const target_name[], const target_steamid[], const target_length, const target_reason[], const target_ungag_time[]) { 
- 	static gag_length2[64] 
- 	new bool:is_ip = bool:(containi(target_steamid, ".") != -1) 
-   
- 	if(index == 0) { 
- 		server_print("************************************************") 
- 		server_print("%L", index, "GAG_INFORMATION") 
- 		server_print("%L: %s", index, "GAG_NAME", target_name) 
- 		server_print("%L: %s", index, !is_ip ? "GAG_STEAMID" : "GAG_IP", target_steamid) 
- 		server_print("%L: %s", index, "GAG_REASON", target_reason) 
- 		if(target_length > 0) { 
- 			new Float:gag_len = float(target_length) / 60.0 
- 			GetGagTime(index, gag_len, gag_length2, sizeof(gag_length2) - 1) 
-   
- 			server_print("%L: %s", index, "GAG_TIME", gag_length2) 
- 		} 
- 		server_print("%L: %s", index, "UNGAG_TIME", target_ungag_time) 
- 		server_print("************************************************") 
- 	} 
-   
- 	else { 
- 		console_print(index, "************************************************") 
- 		console_print(index, "%L", index, "GAG_INFORMATION") 
- 		console_print(index, "%L: %s", index, "GAG_NAME", target_name) 
- 		console_print(index, "%L: %s", index, !is_ip ? "GAG_STEAMID" : "GAG_IP", target_steamid) 
- 		console_print(index, "%L: %s", index, "GAG_REASON", target_reason) 
- 		if(target_length > 0) { 
- 			new Float:gag_len = float(target_length) / 60.0 
- 			GetGagTime(index, gag_len, gag_length2, sizeof(gag_length2) - 1) 
-   
- 			console_print(index, "%L: %s", index, "GAG_TIME", gag_length2) 
- 		} 
- 		console_print(index, "%L: %s", index, "UNGAG_TIME", target_ungag_time) 
- 		console_print(index, "************************************************") 
- 	} 
- } 
-   
- public LoadGags() { 
- 	if(total_gags) { 
- 		TrieClear(g_trie) 
- 		ArrayClear(g_array) 
- 		total_gags = 0 
- 	} 
-   
- 	if(file_exists(gag_file)) { 
- 		new f = fopen(gag_file, "rt") 
- 		static filedata[512], length[10] 
-   
- 		static data[GagData] 
- 		while(!feof(f)){ 
- 			fgets(f, filedata, sizeof(filedata) - 1) 
-   
- 			if(!filedata[0]) continue 
-   
- 			parse(filedata,\ 
- 				data[gag_steamid], sizeof(data[gag_steamid]) - 1,\ 
- 				data[gag_name], sizeof(data[gag_name]) - 1,\ 
- 				length, sizeof(length) - 1,\ 
- 				data[ungag_time], sizeof(data[ungag_time]) - 1,\ 
- 				data[gag_reason], sizeof(data[gag_reason]) - 1 
- 				) 
-   
- 			data[gag_length] = str_to_num(length) 
-   
- 			ArrayPushArray(g_array, data) 
- 			TrieSetCell(g_trie, data[gag_steamid], total_gags) 
-   
- 			total_gags++ 
- 		} 
-   
- 		fclose(f) 
- 	} 
- } 
-   
- public RemoveGag(pos, const authid[]) { 
- 	TrieDeleteKey(g_trie, authid) 
- 	ArrayDeleteItem(g_array, pos) 
-   
- 	total_gags-- 
-   
- 	new f = fopen(gag_file, "wt") 
- 	new data[GagData] 
-   
- 	for(new i = 0; i < total_gags; i++ ) { 
- 		ArrayGetArray(g_array, i, data) 
- 		TrieSetCell(g_trie, data[gag_steamid], i) 
-   
- 		fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^"^n",\ 
- 			data[gag_steamid],\ 
- 			data[gag_name],\ 
- 			data[gag_length],\ 
- 			data[ungag_time],\ 
- 			data[gag_reason] 
- 			) 
- 	} 
-   
- 	fclose(f) 
- } 
-   
- public GagAdd(const target_name[], const target_steamid[], const reason[], const length, const ungag_time3[]) { 
- 	new f = fopen(gag_file, "a+") 
-   
- 	fprintf(f, "^"%s^" ^"%s^" %i ^"%s^" ^"%s^"^n",\ 
- 		target_steamid,\ 
- 		target_name,\ 
- 		length,\ 
- 		ungag_time3,\ 
- 		reason 
- 		) 
-   
- 	fclose(f) 
-   
- 	static data[GagData] 
- 	copy(data[gag_name], sizeof(data[gag_name]) - 1, target_name) 
- 	copy(data[gag_steamid], sizeof(data[gag_steamid]) - 1, target_steamid) 
- 	data[gag_length] = length 
- 	copy(data[ungag_time], sizeof(data[ungag_time]) - 1, ungag_time3) 
- 	copy(data[gag_reason], sizeof(data[gag_reason]) - 1, reason) 
-   
- 	TrieSetCell(g_trie, target_steamid, total_gags) 
- 	ArrayPushArray(g_array, data) 
-   
- 	total_gags++ 
- } 
-   
- GetGagTime(index, Float:gagtime, length[], len) { 
- 	new minutes = floatround(gagtime, floatround_floor) 
- 	new seconds = floatround(floatfract(gagtime) * 60, floatround_floor) 
- 	new hours = 0 
- 	new days = 0 
-   
- 	while(minutes >= 60) { 
- 		minutes -= 60 
- 		hours++ 
- 	} 
-   
- 	while(hours >= 24) { 
- 		hours -= 24 
- 		days++ 
- 	} 
-   
- 	new bool:add_before 
- 	if(seconds) { 
- 		formatex(length, len, "%i %L", seconds, index, "GAG_SECONDS")	 
- 		add_before = true 
- 	} 
-   
- 	if(minutes) { 
- 		if(add_before) format(length, len, "%i %L, %s", minutes, index, "GAG_MINUTES", length) 
-   
- 		else{ 
- 			formatex(length, len, "%i %L", minutes, index, "GAG_MINUTES")			 
- 			add_before = true 
- 		} 
- 	} 
-   
- 	if(hours) { 
- 		if(add_before) format(length, len, "%i %L, %s", hours, index, "GAG_HOURS", length) 
-   
- 		else{ 
- 			formatex(length, len, "%i %L", hours, index, "GAG_HOURS")			 
- 			add_before = true 
- 		} 
- 	} 
-   
- 	if(days) { 
- 		if(add_before) format(length, len, "%i %L, %s", days, index, "GAG_DAYS", length) 
-   
- 		else { 
- 			formatex(length, len, "%i %L", days, index, "GAG_DAYS")			 
- 			add_before = true 
- 		} 
- 	} 
-   
- 	if(!add_before) formatex(length, len, "%L", index, "PERMANENT_GAG") 
- } 
-   
- GetTargetFlags(index) { 
- 	static const flags_no_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS) 
- 	static const flags_immunity = (CMDTARGET_ALLOW_SELF|CMDTARGET_NO_BOTS|CMDTARGET_OBEY_IMMUNITY) 
-   
- 	switch(get_pcvar_num(gag_immunity)) { 
- 		case 1: return flags_immunity 
- 		case 2: return access(index, GAG_IMMUNITY) ? flags_no_immunity : flags_immunity 
- 	} 
-   
- 	return flags_no_immunity 
- } 
-   
- GenerateUnGagTime(const Float:input, output[], const len) { 
- 	static _hours[5], _minutes[5], _seconds[5], _month[5], _day[5], _year[7] 
- 	format_time(_hours, sizeof(_hours) - 1, "%H") 
- 	format_time(_minutes, sizeof(_minutes) - 1, "%M") 
- 	format_time(_seconds, sizeof(_seconds) - 1, "%S") 
- 	format_time(_month, sizeof(_month) - 1, "%m") 
- 	format_time(_day, sizeof(_day) - 1, "%d") 
- 	format_time(_year, sizeof(_year) - 1, "%Y") 
-   
- 	new hours = str_to_num(_hours) 
- 	new month = str_to_num(_month) 
- 	new day = str_to_num(_day) 
- 	new year = str_to_num(_year) 
-   
- 	new minutes = floatround(input, floatround_floor) + str_to_num(_minutes) 
- 	new seconds = floatround(floatfract(input) * 60, floatround_floor) 
-   
- 	while(minutes >= 60) { 
- 		minutes -= 60 
- 		hours++ 
- 	} 
-   
- 	while(hours >= 24) { 
- 		hours -= 24 
- 		day++ 
- 	} 
-   
- 	new max_days = GetDaysInMonth(month, year) 
- 	while(day > max_days) { 
- 		day -= max_days 
- 		month++ 
- 	} 
-   
- 	while(month > 12) { 
- 		month -= 12 
- 		year++ 
- 	} 
-   
- 	seconds += str_to_num(_seconds) 
- 	if(seconds > 59) { 
- 		seconds -= 60 
- 		if(minutes < 59) minutes++ 
-   
- 		else { 
- 			minutes = 0 
- 			if(hours < 23) hours++ 
-   
- 			else { 
- 				hours = 0 
- 				if(day < max_days) day++ 
-   
- 				else { 
- 					day = 1 
- 					if(month < 12) month++ 
-   
- 					else { 
- 						month = 1 
- 						year++ 
- 					} 
- 				} 
- 			} 
- 		} 
- 	}	 
-   
- 	formatex(output, len, "%i:%02i:%02i %i/%i/%i", hours, minutes, seconds, month, day, year) 
- } 
-   
- GetDaysInMonth(month, year=0) { 
- 	switch(month) { 
- 		case 1:	return 31 // January 
- 		case 2:	return ((year % 4) == 0) ? 29 : 28 // February 
- 		case 3:	return 31; // March 
- 		case 4:	return 30; // April 
- 		case 5:	return 31; // May 
- 		case 6:	return 30; // June 
- 		case 7:	return 31; // July 
- 		case 8:	return 31; // August 
- 		case 9:	return 30; // September 
- 		case 10: return 31; // October 
- 		case 11: return 30; // November 
- 		case 12: return 31; // December 
- 	} 
-   
- 	return 30 
- } 
-   
- stock NoColorChat(const id, const input[], any:...) { 
- 	new count = 1, players[32], i 
- 	static msg[191] 
- 	vformat(msg, 190, input, 3) 
-   
- 	replace_all(msg, 190, "!g", "")  
- 	replace_all(msg, 190, "!n", "")  
- 	replace_all(msg, 190, "!t", "")  
-   
- 	if(id)players[0] = id; else get_players(players, count, "ch")  
-   
- 	for(i = 0; i < count; i++) { 
- 		if(is_user_connected(players[i])) { 
- 			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) 
- 			write_byte(players[i]) 
- 			write_string(msg) 
- 			message_end() 
- 		} 
- 	} 
- } 
-   
- stock is_user_steam(id) { 
-         new g_Steam[32] 
-         get_user_authid(id, g_Steam, charsmax(g_Steam)) 
-   
-         return bool:('0' <= g_Steam[8] <= '1') 
- }