Ir para conteúdo

Noviinhooo

Membro
  • Total de itens

    4
  • Registro em

  • Última visita

Posts postados por Noviinhooo

  1. Com este plugin você pode definir prefixos para Administradores com bandeiras especiais. Também Administradores podem colocar prefixos personalizados para eles ou para os outros jogadores


    Comandos:

     

    Altera Prefixo ON ou OFF'

    say_team /prefix ou say /prefix

    Recarrega arquivo prefixos a partir do console, sem reiniciar o servidor.

    ap_reload_prefixes

    Recarrega arquivo Bad prefixos a partir do console, sem reiniciar o servidor.

    ap_reload_badprefixes

    Coloca prefixo para a chave que você digitar caso você tem a bandeira especial. Ou, se não houver nenhum prefixo digitado, remove o prefixo que o jogador tem.

    ap_put "type (f, i, s, n)" "key(Flag, IP, SteamID, name)" "Prefix"
    "f" "n" "[PREFIX FLAG]" - Desta forma, pessoa com a frag N, terá o prefixo [PREFIX FLAG]
    "i" "192.168.1.100" "[PREFIX IP]" - Desta forma, pessoa com IP 192.168.1.100, terá o prefixo [PREFIX IP]
    "s" "STEAM_0:1:52985922" "[PREFIX STEAMID]" - Desta forma pessoa com a steamid STEAM_0:1:52985922, terá o prefixo [PREFIX NAME]
    "n" "m0skVi4a ;]" "[PREFIX NAME]" - Desta forma, pessoa com nome m0skVi4a ;], terá o prefixo [PREFIX NAME]
    
    #include <amxmodx>
    #include <amxmisc>
    #include <celltrie>
    #include <cstrike>
    
    #define VERSION "4.0"
    #define FLAG_LOAD ADMIN_CFG
    #define MAX_PREFIXES 33
    #define MAX_BAD_PREFIXES 100
    
    new g_bad_prefix, g_listen, g_listen_flag, g_custom, g_custom_flag, g_say_characters, g_prefix_characters;
    new pre_ips_count = 0, pre_names_count = 0, pre_steamids_count, pre_flags_count = 0, bad_prefix_count = 0, i, temp_cvar[2];
    new configs_dir[64], file_prefixes[128], file_bad_prefixes[128], text[128], prefix[32], type[2], key[32], length, line = 0, error[256];
    new g_saytxt, g_maxplayers, CsTeams:g_team;
    new g_typed[192], g_message[192], g_name[32];
    new Trie:pre_ips_collect, Trie:pre_names_collect, Trie:pre_steamids_collect, Trie:pre_flags_collect, Trie:bad_prefixes_collect, Trie:client_prefix;
    new str_id[16], temp_key[35], temp_prefix[32], temp_value;
    new bool:g_toggle[33];
    
    new const say_team_info[2][CsTeams][] =
    {
    	{"*SPEC* ", "*DEAD* ", "*DEAD* ", "*SPEC* "},
    	{"", "", "", ""}
    }
    
    new const sayteam_team_info[2][CsTeams][] =
    {
    	{"(Spectator) ", "*DEAD*(Terrorist) ", "*DEAD*(Counter-Terrorist) ", "(Spectator) "},
    	{"(Spectator) ", "(Terrorist) ", "(Counter-Terrorist) ", "(Spectator) "}
    }
    
    new const forbidden_say_symbols[] = {
    	"/",
    	"!",
    	"%",
    	"$"
    }
    
    new const forbidden_prefixes_symbols[] = {
    	"/",
    	"\",
    	"%",
    	"$",
    	".",
    	":",
    	"?",
    	"!",
    	"@",
    	"#",
    	"%"
    }
    
    new const separator[] = "************************************************"
    new const in_prefix[] = "[AdminPrefixes]"
    
    public plugin_init()
    {
    	register_plugin("Admin Prefixes", VERSION, "m0skVi4a ;]")
    
    	g_bad_prefix = register_cvar("ap_bad_prefixes", "1")
    	g_listen = register_cvar("ap_listen", "1")
    	g_listen_flag = register_cvar("ap_listen_flag", "a")
    	g_custom = register_cvar("ap_custom_current", "1")
    	g_custom_flag = register_cvar("ap_custom_current_flag", "b")
    	g_say_characters = register_cvar("ap_say_characters", "1")
    	g_prefix_characters = register_cvar("ap_prefix_characters", "1")
    
    	g_saytxt = get_user_msgid ("SayText")
    	g_maxplayers = get_maxplayers()
    
    	register_concmd("ap_reload_prefixes", "LoadPrefixes")
    	register_concmd("ap_reload_badprefixes", "LoadBadPrefixes")
    	register_concmd("ap_put", "SetPlayerPrefix")
    	register_clcmd("say", "HookSay")
    	register_clcmd("say_team", "HookSayTeam")
    
    	pre_ips_collect = TrieCreate()
    	pre_names_collect = TrieCreate()
    	pre_steamids_collect = TrieCreate()
    	pre_flags_collect = TrieCreate()
    	bad_prefixes_collect = TrieCreate()
    	client_prefix = TrieCreate()
    
    	register_dictionary("admin_prefixes.txt")
    
    	get_configsdir(configs_dir, charsmax(configs_dir))
    	formatex(file_prefixes, charsmax(file_prefixes), "%s/ap_prefixes.ini", configs_dir)
    	formatex(file_bad_prefixes, charsmax(file_bad_prefixes), "%s/ap_bad_prefixes.ini", configs_dir)
    
    	LoadPrefixes(0)
    	LoadBadPrefixes(0)
    }
    	
    public LoadPrefixes(id)
    {
    	if(!(get_user_flags(id) & FLAG_LOAD))
    	{
    		console_print(id, "%L", LANG_SERVER, "PREFIX_PERMISSION", in_prefix)
    		return PLUGIN_HANDLED
    	}
    
    	TrieClear(pre_ips_collect)
    	TrieClear(pre_names_collect)
    	TrieClear(pre_steamids_collect)
    	TrieClear(pre_flags_collect)
    
    	line = 0, length = 0, pre_flags_count = 0, pre_ips_count = 0, pre_names_count = 0;
    
    	if(!file_exists(file_prefixes)) 
    	{
    		formatex(error, charsmax(error), "%L", LANG_SERVER, "PREFIX_NOT_FOUND", in_prefix, file_prefixes)
    		set_fail_state(error)
    	}
    
    	server_print(separator)
    
    	while(read_file(file_prefixes, line++ , text, charsmax(text), length) && (pre_ips_count + pre_names_count + pre_steamids_count + pre_flags_count) <= MAX_PREFIXES)
    	{
    		if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
    			continue
    
    		parse(text, type, charsmax(type), key, charsmax(key), prefix, charsmax(prefix))
    		trim(prefix)
    
    		if(!type[0] || !prefix[0] || !key[0])
    			continue
    
    		replace_all(prefix, charsmax(prefix), "!g", "^x04")
    		replace_all(prefix, charsmax(prefix), "!t", "^x03")
    		replace_all(prefix, charsmax(prefix), "!n", "^x01")
    
    		switch(type[0])
    		{
    			case 'f':
    			{
    				pre_flags_count++
    				TrieSetString(pre_flags_collect, key, prefix)
    				server_print("%L", LANG_SERVER, "PREFIX_LOAD_FLAG", in_prefix, prefix, key[0])
    			}
    			case 'i':
    			{
    				pre_ips_count++
    				TrieSetString(pre_ips_collect, key, prefix)
    				server_print("%L", LANG_SERVER, "PREFIX_LOAD_IP", in_prefix, prefix, key)
    			}
    			case 's':
    			{
    				pre_steamids_count++
    				TrieSetString(pre_steamids_collect, key, prefix)
    				server_print("%L", LANG_SERVER, "PREFIX_LOAD_STEAMID", in_prefix, prefix, key)
    			}
    			case 'n':
    			{
    				pre_names_count++
    				TrieSetString(pre_names_collect, key, prefix)
    				server_print("%L", LANG_SERVER, "PREFIX_LOAD_NAME", in_prefix, prefix, key)
    			}
    			default:
    			{
    				continue
    			}
    		}
    	}
    
    	if(pre_flags_count <= 0 && pre_ips_count <= 0 && pre_steamids_count <= 0 && pre_names_count <= 0)
    	{
    		server_print("%L", LANG_SERVER, "PREFIX_NO", in_prefix)
    	}
    
    	get_user_name(id, g_name, charsmax(g_name))
    	server_print("%L", LANG_SERVER, "PREFIX_LOADED_BY", in_prefix, g_name)
    	console_print(id, "%L", LANG_SERVER, "PREFIX_LOADED", in_prefix)
    
    	server_print(separator)
    
    	for(new i = 1; i <= g_maxplayers; i++)
    	{
    		num_to_str(i, str_id, charsmax(str_id))
    		TrieDeleteKey(client_prefix, str_id)
    		PutPrefix(i)
    	}
    
    	return PLUGIN_HANDLED
    }
    
    public LoadBadPrefixes(id)
    {
    	if(!get_pcvar_num(g_bad_prefix))
    	{
    		console_print(id, "%L", LANG_SERVER, "BADP_OFF", in_prefix)
    		return PLUGIN_HANDLED
    	}
    
    	if(!(get_user_flags(id) & FLAG_LOAD))
    	{
    		console_print(id, "%L", LANG_SERVER, "BADP_PERMISSION", in_prefix)
    		return PLUGIN_HANDLED
    	}
    
    	TrieClear(bad_prefixes_collect)
    
    	line = 0, length = 0, bad_prefix_count = 0;
    
    	if(!file_exists(file_bad_prefixes)) 
    	{
    		console_print(id, "%L", LANG_SERVER, "BADP_NOT_FOUND", in_prefix, file_bad_prefixes)
    		return PLUGIN_HANDLED		
    	}
    
    	server_print(separator)
    
    	while(read_file(file_bad_prefixes, line++ , text, charsmax(text), length) && bad_prefix_count <= MAX_BAD_PREFIXES)
    	{
    		if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
    			continue
    
    		parse(text, prefix, charsmax(prefix))
    
    		if(!prefix[0])
    			continue
    
    		bad_prefix_count++
    		TrieSetCell(bad_prefixes_collect, prefix, 1)
    		server_print("%L", LANG_SERVER, "BADP_LOAD", in_prefix, prefix)
    	}
    
    	if(bad_prefix_count <= 0)
    	{
    		server_print("%L", LANG_SERVER, "BADP_NO", in_prefix)
    	}
    
    	get_user_name(id, g_name, charsmax(g_name))
    	server_print("%L", LANG_SERVER, "BADP_LOADED_BY", in_prefix, g_name)
    	console_print(id, "%L", LANG_SERVER, "BADP_LOADED", in_prefix)
    
    	server_print(separator)
    
    	return PLUGIN_HANDLED
    }
    
    public client_putinserver(id)
    {
    	g_toggle[id] = true
    	num_to_str(id, str_id, charsmax(str_id))
    	TrieSetString(client_prefix, str_id, "")
    	PutPrefix(id)
    }
    
    public HookSay(id)
    {
    	read_args(g_typed, charsmax(g_typed))
    	remove_quotes(g_typed)
    
    	trim(g_typed)
    
    	if(equal(g_typed, "") || !is_user_connected(id))
    		return PLUGIN_HANDLED_MAIN
    
    	if(equal(g_typed, "/prefix"))
    	{
    		if(g_toggle[id])
    		{
    			g_toggle[id] = false
    			client_print(id, print_chat, "%L", LANG_SERVER, "PREFIX_OFF", in_prefix)
    		}
    		else
    		{
    			g_toggle[id] = true
    			client_print(id, print_chat, "%L", LANG_SERVER, "PREFIX_ON", in_prefix)
    		}
    
    		return PLUGIN_HANDLED_MAIN
    	}
    
    	if(!g_toggle[id])
    		return PLUGIN_CONTINUE
    
    	num_to_str(id, str_id, charsmax(str_id))
    
    	if((TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 1) || (!TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 2) || get_pcvar_num(g_say_characters) == 3)
    	{
    		if(check_say_characters(g_typed))
    			return PLUGIN_HANDLED_MAIN
    	}
    
    	get_user_name(id, g_name, charsmax(g_name))
    
    	g_team = cs_get_user_team(id)
    
    	if(temp_prefix[0])
    	{
    		formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", say_team_info[is_user_alive(id)][g_team], temp_prefix, g_name, g_typed)
    	}
    	else
    	{
    		formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", say_team_info[is_user_alive(id)][g_team], g_name, g_typed)
    	}
    
    	get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))
    
    	for(new i = 1; i <= g_maxplayers; i++)
    	{
    		if(!is_user_connected(i))
    			continue
    
    		if(is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
    		{
    			send_message(g_message, id, i)
    		}
    	}
    
    	return PLUGIN_HANDLED_MAIN
    }
    
    public HookSayTeam(id)
    {
    	read_args(g_typed, charsmax(g_typed))
    	remove_quotes(g_typed)
    
    	trim(g_typed)
    
    	if(equal(g_typed, "") || !is_user_connected(id))
    		return PLUGIN_HANDLED_MAIN
    
    	if(equal(g_typed, "/prefix"))
    	{
    		if(g_toggle[id])
    		{
    			g_toggle[id] = false
    			client_print(id, print_chat, "%L", LANG_SERVER, "PREFIX_OFF", in_prefix)
    		}
    		else
    		{
    			g_toggle[id] = true
    			client_print(id, print_chat, "%L", LANG_SERVER, "PREFIX_ON", in_prefix)
    		}
    
    		return PLUGIN_HANDLED_MAIN
    	}
    
    	if(!g_toggle[id])
    		return PLUGIN_CONTINUE
    
    	num_to_str(id, str_id, charsmax(str_id))
    
    	if((TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 1) || (!TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 2) || get_pcvar_num(g_say_characters) == 3)
    	{
    		if(check_say_characters(g_typed))
    			return PLUGIN_HANDLED_MAIN
    	}
    
    	get_user_name(id, g_name, charsmax(g_name))
    
    	g_team = cs_get_user_team(id)
    
    	if(temp_prefix[0])
    	{
    		formatex(g_message, charsmax(g_message), "^1%s^4%s^3 %s :^4 %s", sayteam_team_info[is_user_alive(id)][g_team], temp_prefix, g_name, g_typed)
    	}
    	else
    	{
    		formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", sayteam_team_info[is_user_alive(id)][g_team], g_name, g_typed)
    	}
    
    	get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))
    
    	for(new i = 1; i <= g_maxplayers; i++)
    	{
    		if(!is_user_connected(i))
    			continue
    
    		if(get_user_team(id) == get_user_team(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
    		{
    			if(is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
    			{
    				send_message(g_message, id, i)
    			}
    		}
    	}
    
    	return PLUGIN_HANDLED_MAIN
    }
    
    public SetPlayerPrefix(id)
    {
    	if(!get_pcvar_num(g_custom) || !get_pcvar_string(g_custom_flag, temp_cvar, charsmax(temp_cvar)))
    	{
    		console_print(id, "%L", LANG_SERVER, "CUSTOM_OFF", in_prefix)
    		return PLUGIN_HANDLED
    	}
    
    	if(!(get_user_flags(id) & read_flags(temp_cvar)))
    	{
    		console_print(id, "%L", LANG_SERVER, "CUSTOM_PERMISSION", in_prefix)
    		return PLUGIN_HANDLED
    	}
    
    	new input[128], target;
    	new arg_type[2], arg_prefix[32], arg_key[35];
    	new temp_str[16];
    
    	read_args(input, charsmax(input))
    	remove_quotes(input)
    	parse(input, arg_type, charsmax(arg_type), arg_key, charsmax(arg_key), arg_prefix, charsmax(arg_prefix))
    	trim(arg_prefix)
    
    	if(get_pcvar_num(g_bad_prefix) && is_bad_prefix(arg_prefix) && !equali(arg_prefix, ""))
    	{
    		console_print(id, "%L", LANG_SERVER, "CUSTOM_FORBIDDEN", in_prefix, arg_prefix)
    		return PLUGIN_HANDLED
    	}
    
    	if(get_pcvar_num(g_prefix_characters) && check_prefix_characters(arg_prefix))
    	{
    		console_print(id, "%L", LANG_SERVER, "CUSTOM_SYMBOL", in_prefix, arg_prefix, forbidden_prefixes_symbols[i])
    		return PLUGIN_HANDLED
    	}
    
    	switch(arg_type[0])
    	{
    		case 'f':
    		{
    			target = 0
    			temp_str = "Flag"
    		}
    		case 'i':
    		{
    			target = find_player("d", arg_key)
    			temp_str = "IP"
    		}
    		case 's':
    		{
    			target = find_player("c", arg_key)
    			temp_str = "SteamID"
    		}
    		case 'n':
    		{
    			target = find_player("a", arg_key)
    			temp_str = "Name"
    		}
    		default:
    		{
    			console_print(id, "%L", LANG_SERVER, "CUSTOM_INVALID", in_prefix, arg_type)
    			return PLUGIN_HANDLED
    		}
    	}
    
    	get_user_name(id, g_name, charsmax(g_name))
    
    	if(equali(arg_prefix, ""))
    	{
    		find_and_delete(arg_type, arg_key)
    
    		if(target)
    		{
    			PutPrefix(target)
    		}
    		
    		console_print(id, "%L", LANG_SERVER, "CUSTOM_REMOVE", in_prefix, temp_str, arg_key)
    		server_print("%L", LANG_SERVER, "CUSTOM_REMOVE_INFO", in_prefix, g_name, temp_str, arg_key)
    		return PLUGIN_HANDLED
    	}
    
    	find_and_delete(arg_type, arg_key)
    
    	formatex(text, charsmax(text), "^"%s^" ^"%s^" ^"%s^"", arg_type, arg_key, arg_prefix)
    	write_file(file_prefixes, text, -1)
    
    	switch(arg_type[0])
    	{
    		case 'f':
    		{
    			TrieSetString(pre_flags_collect, arg_key, arg_prefix)
    		}
    		case 'i':
    		{
    			TrieSetString(pre_ips_collect, arg_key, arg_prefix)
    		}
    		case 's':
    		{
    			TrieSetString(pre_steamids_collect, arg_key, arg_prefix)
    		}
    		case 'n':
    		{
    			TrieSetString(pre_names_collect, arg_key, arg_prefix)
    		}
    	}
    
    	if(target)
    	{
    		num_to_str(target, str_id, charsmax(str_id))
    		TrieSetString(client_prefix, str_id, arg_prefix)
    	}
    
    	console_print(id, "%L", LANG_SERVER, "CUSTOM_CHANGE", in_prefix, temp_str, arg_key, arg_prefix)
    	server_print("%L", LANG_SERVER, "CUSTOM_CHANGE_INFO", in_prefix, g_name, temp_str, arg_key, arg_prefix) 
    
    	return PLUGIN_HANDLED
    }
    
    public client_infochanged(id)
    {
    	if(!is_user_connected(id))
    		return PLUGIN_CONTINUE
    
    	new g_old_name[32];
    
    	get_user_info(id, "name", g_name, charsmax(g_name))
    	get_user_name(id, g_old_name, charsmax(g_old_name))
    
    	if(!equal(g_name, g_old_name))
    	{
    		num_to_str(id, str_id, charsmax(str_id))
    		TrieSetString(client_prefix, str_id, "")
    		set_task(0.5, "PutPrefix", id)
    		return PLUGIN_HANDLED
    	}
    
    	return PLUGIN_CONTINUE
    }
    
    public PutPrefix(id)
    {
    	num_to_str(id, str_id, charsmax(str_id))
    	TrieSetString(client_prefix, str_id, "")
    
    	new sflags[32], temp_flag[2];
    	get_flags(get_user_flags(id), sflags, charsmax(sflags))
    
    	for(new i = 0; i <= charsmax(sflags); i++)
    	{
    		formatex(temp_flag, charsmax(temp_flag), "%c", sflags[i])
    
    		if(TrieGetString(pre_flags_collect, temp_flag, temp_prefix, charsmax(temp_prefix)))
    		{
    			TrieSetString(client_prefix, str_id, temp_prefix)
    		}
    	}
    
    	get_user_ip(id, temp_key, charsmax(temp_key), 1)
    
    	if(TrieGetString(pre_ips_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
    	{
    		TrieSetString(client_prefix, str_id, temp_prefix)
    	}
    
    	get_user_authid(id, temp_key, charsmax(temp_key))
    
    	if(TrieGetString(pre_steamids_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
    	{
    		TrieSetString(client_prefix, str_id, temp_prefix)
    	}
    
    	get_user_name(id, temp_key, charsmax(temp_key))
    
    	if(TrieGetString(pre_names_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
    	{
    		TrieSetString(client_prefix, str_id, temp_prefix)
    	}
    
    	return PLUGIN_HANDLED
    }
    
    send_message(const message[], const id, const i)
    {
    	message_begin(MSG_ONE, g_saytxt, {0, 0, 0}, i)
    	write_byte(id)
    	write_string(message)
    	message_end()
    }
    
    bool:check_say_characters(const check_message[])
    {
    	for(new i = 0; i < charsmax(forbidden_say_symbols); i++)
    	{
    		if(check_message[0] == forbidden_say_symbols[i])
    		{
    			return true
    		}
    	}
    	return false
    }
    
    bool:check_prefix_characters(const check_prefix[])
    {
    	for(i = 0; i < charsmax(forbidden_prefixes_symbols); i++)
    	{
    		if(containi(check_prefix, forbidden_prefixes_symbols[i]) != -1)
    		{
    			return true
    		}
    	}
    	return false
    }
    
    bool:is_bad_prefix(const check_prefix[])
    {
    	if(TrieGetCell(bad_prefixes_collect, check_prefix, temp_value))
    	{
    		return true
    	}
    	return false
    }
    
    find_and_delete(const arg_type[], const arg_key[])
    {
    	line = 0, length = 0;
    
    	while(read_file(file_prefixes, line++ , text, charsmax(text), length))
    	{
    		if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
    			continue
    
    		parse(text, type, charsmax(type), key, charsmax(key), prefix, charsmax(prefix))
    		trim(prefix)
    
    		if(!type[0] || !prefix[0] || !key[0])
    			continue
    			
    		if(!equal(arg_type, type) || !equal(arg_key, key))
    			continue
    			
    		write_file(file_prefixes, "", line - 1)
    	}
    	
    	switch(arg_type[0])
    	{
    		case 'f':
    		{
    			TrieDeleteKey(pre_flags_collect, arg_key)
    		}
    		case 'i':
    		{
    			TrieDeleteKey(pre_ips_collect, arg_key)
    		}
    		case 's':
    		{
    			TrieDeleteKey(pre_steamids_collect, arg_key)
    		}
    		case 'n':
    		{
    			TrieDeleteKey(pre_names_collect, arg_key)
    		}
    	}
    }
    

    amxmodx\plugins,antes de colocar na pasta,copile :3

     

    AdminPrefixes.sma

     

    amxmodx\data\lang

     

    admin_prefixes.txt

     

    amxmodx\configs

     

    ap_prefixes.ini

     

    ap_bad_prefixes.ini

     

    Fonte

    
    
    
    
    
    
    						
×
×
  • Criar Novo...