/* Amx Mod X Script Version : 1.0 By Shitez -------------------------------- Functionality: Used to ban people from chatting. You can ban for a number of minutes or permanently. Uses nVault module so it is required. --------------------------------- Commands: amx_chatban - Ban a player from chatting for defined minutes or permanently. amx_unchatban - Give a player thier chatting rights. ---------------------------------*/ #include #include #include new VaultName; new bool:boolBanned[33] = false; new bool:boolBlock[33] = false; new bool:boolStop[33] = false; public plugin_init() { register_plugin("Chat Ban","1.1","$uicid3"); register_concmd("amx_chatban" , "ChatBan" , ADMIN_KICK , " |<0 for permanent>"); register_concmd("amx_unchatban" , "UnChatBan" , ADMIN_KICK , ""); register_cvar("amx_cban_prefix" , ""); VaultName = nvault_open( "ChatBan" ); } public ChatBan(id , level , cid) { if( !cmd_access(id , level , cid , 3) ) return PLUGIN_HANDLED new szArg1[36] , szArg2[12], szName[36] , szAdmin[36]; new szAuth[36] , tID , tsVault , tsCurrent, szTime[26] , Float:RemoveTime; read_argv(1 , szArg1 , 35); read_argv(2 , szArg2 , 11); tID = cmd_target( id , szArg1 , 10); if(!tID) return PLUGIN_HANDLED get_user_authid( tID , szAuth , 35); get_user_name( tID , szName , 35); get_user_name( id , szAdmin , 35); tsCurrent = get_systime(); //Get timestamp tsVault = (tsCurrent + (str_to_num(szArg2) * 60) ); //Add the number of minutes supplied if( !str_to_num(szArg2) ) { nvault_set( VaultName , szAuth , "-1"); console_print(id , "[Chat Ban] Player '%s' has been permanently chat banned.",szName); switch(get_cvar_num("amx_show_activity") ) { case 1: client_print( 0 , print_chat , "^x04[Chat Ban] %s has been banned from chatting permanently.", szName); case 2: client_print( 0 , print_chat , "^x04[Chat Ban] Admin has banned %s from chatting permanently.", szName); default: client_print( 0 , print_chat , "^x04[Chat Ban] Admin %s has banned %s from chatting permanently." , szAdmin, szName); } AddPrefix( tID ); return PLUGIN_HANDLED; } else { num_to_str( tsVault , szTime , 25); nvault_set( VaultName , szAuth , szTime); console_print(id , "[Chat Ban] Player '%s' has been chat banned for %s minutes.",szName, szArg2); switch(get_cvar_num("amx_show_activity") ) { case 1: client_print( 0 , print_chat , "^x04[Chat Ban] %s has been banned from chatting for %s minutes.", szName , szArg2); case 2: client_print( 0 , print_chat , "^x04[Chat Ban] Admin has banned %s from chatting for %s minutes.", szName , szArg2); default: client_print( 0 , print_chat , "^x04[Chat Ban] Admin %s has banned %s from chatting for %s minutes." , szAdmin , szName , szArg2); } } RemoveTime = float( tsVault - tsCurrent); if( (tsVault - tsCurrent) < get_timeleft() ) set_task( RemoveTime , "RemoveBan", tID); AddPrefix( tID ); return PLUGIN_HANDLED } public UnChatBan(id , level , cid) { if( !cmd_access(id , level ,cid , 2) ) return PLUGIN_HANDLED; new szAuth[46] , szTime[26] , tsVault; new szArg[36] , tID , szName[36] , szAdmin[36]; read_argv(1 , szArg , 35); tID = cmd_target(id , szArg , 10); if( !tID) return PLUGIN_HANDLED get_user_authid(tID , szAuth , 35); get_user_name(tID , szName , 35); get_user_name( id , szAdmin , 35); if( !nvault_lookup( VaultName , szAuth , szTime , 35 , tsVault) ) { console_print( id , "[Chat Ban] '%s' is NOT currently chat banned.",szName); return PLUGIN_HANDLED; } nvault_prune( VaultName , (tsVault - 1) , (tsVault + 1 ) ); //remove any entrys that were entered when this was(unique basically) boolBanned[tID] = false; RemovePrefix( tID ); switch(get_cvar_num("amx_show_activity") ) { case 1: client_print( 0 , print_chat , "^x04[Chat Ban] %s are no longer banned from chatting." , szName ); case 2: client_print( 0 , print_chat , "^x04[Chat Ban] Admin has given %s chatting rights again." , szName ); default: client_print( 0 , print_chat , "^x04[Chat Ban] Admin %s has given %s chatting rights again.", szAdmin , szName ); } if(task_exists( tID , 0) ) remove_task( tID , 0); return PLUGIN_HANDLED; } public client_putinserver( id ) { boolBanned[id] = false; set_task(4.0 , "CheckBanned", id ); } public client_disconnect( id ) { boolBanned[id] = false; if( task_exists( id , 0) ) remove_task( id , 0 ); } public CheckBanned( id ) { new szAuth[36] , szTime[26] , tsVault , tsCurrent = get_systime() , tsStored; get_user_authid( id , szAuth , 35); if( !nvault_lookup( VaultName , szAuth , szTime , 25 , tsVault) ) return ; tsStored = str_to_num(szTime); if( tsStored == -1) { AddPrefix( id ); return ; } else if( ( tsStored - tsCurrent ) < get_timeleft() ) { if( (tsStored - tsCurrent) <= 0) set_task( 0.1 , "RemoveBan", id); else set_task( float(tsStored - tsCurrent) , "RemoveBan" , id); AddPrefix( id ); } return ; } public RemoveBan( id ) { new szAuth[36], szTime[26] , tsVault , szName[36]; get_user_authid( id , szAuth , 35); get_user_name( id , szName , 35); nvault_lookup( VaultName , szAuth , szTime , 25 , tsVault); nvault_prune( VaultName , (tsVault - 1) , (tsVault + 1 ) ); boolBanned[id] = false; if(task_exists( id , 0) ) remove_task( id , 0); RemovePrefix( id ); client_print( id , print_chat , "^x04[Chat Ban] %s have served their time and are now able to chat again." , szName ); return; } public client_command( id ) { new szCmd[10]; read_argv( 0 , szCmd , 9); if( (equali( szCmd , "say") || equali( szCmd , "say_team")) && boolBanned[id]) //If they are trying to chat and are banned { client_print(id , print_chat , "^x04[Chat Ban] You have been chat banned. You can NOT chat!"); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public AddPrefix( id ) { boolBanned[id] = true; new szName[36] , szNewName[46] , Cmd[56]; get_user_name( id , szName , 35); get_cvar_string( "amx_cban_prefix" , szNewName , 45); if( equal(szName , szNewName , strlen(szNewName) ) ) return PLUGIN_CONTINUE; add( szNewName , 45 , szName ); format(Cmd , 55 , "name ^"%s^"",szNewName); client_cmd( id , Cmd); set_user_info( id , "name" , szNewName); set_task(1.0 , "BlockName",id); return PLUGIN_CONTINUE; } //---- Remove all instances of name----- public RemovePrefix( id ) { new szName[46] , szPrefix[26] , Cmd[46]; get_cvar_string( "amx_cban_prefix" , szPrefix , 25); get_user_name( id , szName , 45); while( replace( szName , 45 , szPrefix , "") ) { } format(Cmd , 45 , "name ^"%s^"",szName); client_cmd( id , Cmd); set_user_info( id , "name" , szName); return PLUGIN_CONTINUE; } public BlockName( id ) { boolBlock[id] = true; return PLUGIN_CONTINUE; } public client_infochanged( id ) { if( !boolBanned[id] ) return PLUGIN_CONTINUE; if( !boolBlock[id]) return PLUGIN_CONTINUE; if( boolStop[id] ) boolStop[id] = false; new szOldName[36] , szNewName[36] , szPrefix[26] , Cmd[46]; get_user_name( id , szOldName , 35); get_user_info( id , "name" , szNewName , 35); get_cvar_string( "amx_cban_prefix" , szPrefix , 25); //Allow name change if they kept the prefix at the beginning of thier name if(equal(szNewName , szPrefix , strlen(szPrefix) ) ) return PLUGIN_CONTINUE; //If it doesnt start with prefix add it. format(szOldName , 35 , szPrefix); add(szOldName , 35 , szNewName); format(Cmd , 45 , "name ^"%s^"" , szOldName); boolStop[id] = true; set_user_info( id , "name" , szOldName); boolStop[id] = true; client_cmd( id , Cmd); return PLUGIN_CONTINUE; }