zThiago Posted July 4, 2020 Share Posted July 4, 2020 Sobre: O plugin permite enviar mensagens privadas a outros jogadores. Autor(a): DXBR bRuc3 Instruções: Para ativar o chat privado com um player basta digitar no chat /cp nome_do_player, você recebera uma mensagens de confirmação se o chat foi ativado ou não; Depois de ativado o chat privado com um player basta digitar as msgs normalmente no chat.. que serão destinadas ao player que vc ativou com o comando "/cp nome_do_player"; Para desativar o chat privado basta enviar o comando "/cp" no chat; Para checar se vc esta em chat com alguém digite o comando "/cp check"; Caso esteja em chat privado com alguém e queira entrar em chat privado com outro alguém. Não precisa sair do chat privado atual... basta digitar '/cp nome_do_player" que o plugin automaticamente desativa o chat privado com o player atual e ativa o chat privado com o novo player; Caso tenha duvidas com quem esteja em chat privado use o comando "/cp check"; O plugin suporta os comando !t !g !n para vocês colocarem cores nas msgs de alerta... possui ainda o sistema de ML onde você poderá inserir suas proprias mensagens (EDITE o arquivo "dxbr_chat_privado.txt" para colocar cor e/ou alterar as mensagens). .SMA: /* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "DXBR_ChatPrivado" #define VERSION "1.0" #define AUTHOR "DXBR bRuc3" #define PLUGIN_TAG "!g[Chat Privado] !n" #define CP_USERID_NOTFOUND 40 // controle de/para o chat privado new g_cpUserControl[ 33 ]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) // cvar para podermos ver quais servers estao usando o plugin no game tracker new ver[ 64 ]; format( ver, charsmax( ver ), "%s v%s", PLUGIN, VERSION ); register_cvar( "cp_version", ver, FCVAR_SERVER ); // hooks do chat register_clcmd( "say", "say_handler"); register_clcmd( "say_team", "say_handler"); // arquivo de frases register_dictionary( "dxbr_chat_privado.txt" ); } public say_handler( id ) { // comando /cp static chat_string[ 191 ]; // recebe o texto do chat read_args( chat_string, charsmax( chat_string ) ); //sanitiza a string vinda do chat remove_quotes( chat_string ); // remove os espacos do inicio de do fim trim( chat_string ); // joga tudo pra minuscula strtolower( chat_string ); // se chat inicia com o comando /cp usuario esta tentando usar o plugin if( chat_string[ 0 ] == '/' && chat_string[ 1 ] == 'c' && chat_string[ 2 ] == 'p' ) { // inicia o tratamento dos dados do chat cp_command( id, chat_string ); // faz com que o retorno nao seja enviado ao chat return PLUGIN_HANDLED_MAIN; } // nao tem o comando /cp // precisamos ver se usuario que esta digitando ja esta em chat privado // com alguem se tiver devemos enviar a msg para o usuario com id // armazenado no player que digitou o a msg else if( g_cpUserControl[ id ] != 0 ) { // envia a msg cp_send_message( id, chat_string ); // faz com que o retorno nao seja enviado ao chat return PLUGIN_HANDLED_MAIN; } return PLUGIN_CONTINUE; } public cp_command( id, const chat_string[] ) { // if digitou somente o comando /cp // provavelmente quer desativar o chat if( equali( chat_string, "/cp" )) cp_disable( id, true ); else if( equali( chat_string, "/cp check" ) ) { cp_check( id ); } // else digitou algo como // /cp qualquer coisa precisamos parsear o "qualquer coisa" // e ver se eh um nome de usuario valido else { static from_name[ 33 ], dest_name[ 33 ]; copy( dest_name, charsmax( dest_name ), chat_string[ 4 ] ); // nome do remetente //get_user_name( id, from_name, charsmax( from_name ) ); from_name = cp_get_user_name( id ); // nao podemos permitir iniciar um chat privado com ele mesmo if( equali( from_name,dest_name ) ) { cp_print( id, "CP_MSG_SELF", "" ); } else{ new dest_id = get_userid_from_name( dest_name ); // if if( dest_id == 0 || !is_user_connected( dest_id )) { cp_print( id, "CP_USER_NOTFOUND", dest_name ); } // usuario esta conectado else { cp_enable( id, dest_id, dest_name ); } } } } // mostra para o usuario com quem ele esta falando // no chat privado naquele momento. public cp_check( id ){ if( g_cpUserControl[ id ] == 0 ) cp_print( id, "CP_CHECK_1", "" ); else if( g_cpUserControl[ id ] == CP_USERID_NOTFOUND ) cp_print( id, "CP_USER_OFFLINE", "" ); else cp_print( id, "CP_CHECK_2", cp_get_user_name( g_cpUserControl[ id ] ) ); } // funcao auxiliar que nos retorna o nome // do player com o id passado public cp_get_user_name( id ) { new name[ 33 ]; get_user_name( id, name, charsmax( name ) ); return name; } // envia msg privada public cp_send_message( id, const msg[] ) { new dest_name[ 33 ], from_name[ 33 ]; from_name = cp_get_user_name( id ); dest_name = cp_get_user_name( g_cpUserControl[ id ] ); //get_user_name( id, from_name, charsmax( from_name ) ); //get_user_name( g_cpUserControl[ id ], dest_name, charsmax( dest_name ) ); if( is_user_bot( g_cpUserControl[ id ] ) ){ // notifica o remetente cp_print( id, "CP_MSG_SENT", dest_name ); // simula uma resposta do bot client_print_color( id, "%s !t%s !n%s", PLUGIN_TAG, dest_name, "Hi! I receive you private msg! This plugins sucks!" ); } else if( is_user_connected( g_cpUserControl[ id ] ) ) { // manda a mensagem para o destinatario client_print_color( g_cpUserControl[ id ], "%s !t%s !n%s", PLUGIN_TAG, from_name, msg ); // notifica o remetente cp_print( id, "CP_MSG_SENT", dest_name ); } else{ cp_print( id, "CP_USER_OFFLINE", "" ); } } // metodo auxiliar para obtermos o id de um player // pelo nome passado // retorna o id do usuario em caso de sucesso // ou 0 em caso de nao encontrar public get_userid_from_name( const pname[] ) { new players[ 32 ], i, totalPlayers, player, name[ 33 ]; new id = 0; // obtem os ids dos players get_players( players, totalPlayers ); for( i = 0; i < totalPlayers; i++ ) { // id do player player = players[ i ]; // nome do cabra de destino get_user_name( player, name, charsmax( name ) ); // se os nome coincidem achamos o cabra if( equali( pname, name ) ){ id = player; break; } } return id; } // habilita o chat privado public cp_enable( id_from, id_dest, const dest_name[] ) { g_cpUserControl[ id_from ] = id_dest; log_amx( "Nome eh %s", dest_name ); // informa ao usuario q o chat foi ativado cp_print( id_from, "CP_ENABLED", dest_name ); } // desabilita o chat privado public cp_disable( id, bool:print ) { g_cpUserControl[ id ] = 0; if( print == true ) cp_print( id, "CP_DISABLED", "" ); } public client_putinserver( id ) { cp_disable( id, false ); } public client_disconnect( id ) { // deixa o slot que ele ocupava no chat como livre cp_disable( id, false ); new i, player; // percorre toda a lista de players // e ve se tem alguem que estava falando // com o player que saiu no chat privado // e seta um id invalido para podermos avisa-lo // na proxima vez que ele tentar falar alguma coisa for( i = 0; i < 33; i++ ) { player = g_cpUserControl[ i ]; if( player == id ) g_cpUserControl[ i ] = CP_USERID_NOTFOUND; } } public cp_print( id, const msg_lang_key[], const param_replace[] ) { new msg[ 191 ]; if( strlen( param_replace ) == 0 ) format( msg, charsmax( msg ), "%L", LANG_SERVER, msg_lang_key ); else format( msg, charsmax( msg ), "%L", LANG_SERVER, msg_lang_key, param_replace ); // 0 indica mensagem para todos no server if( id == 0 ) { new playersIDList[ 32 ], i, totalPlayers, id; // obtem os ids dos players menos os bots get_players( playersIDList, totalPlayers, "c"); for( i = 0; i < totalPlayers; i++ ) { id = playersIDList[ i ]; if( is_user_connected( id) ) client_print_color( id, "%s %s", PLUGIN_TAG, msg ); } } else if( is_user_connected( id ) ) client_print_color( id, "%s %s", PLUGIN_TAG, msg ); } stock client_print_color(id, const text[], any:...) { new g_iMsgidSayText; g_iMsgidSayText = get_user_msgid( "SayText" ); new szMsg[191]; vformat(szMsg, charsmax(szMsg), text, 3); replace_all(szMsg, charsmax(szMsg), "!g","^x04"); replace_all(szMsg, charsmax(szMsg), "!n","^x01"); replace_all(szMsg, charsmax(szMsg), "!t","^x03"); message_begin( MSG_ONE_UNRELIABLE, g_iMsgidSayText, _, id ); write_byte( id ); write_string( szMsg ); message_end(); } Txt: (dxbr_chat_privado.txt) Citar [en] CP_ENABLED = The Private Chat with %s is now enabled! CP_DISABLED = Now you can talk with anyone on server. CP_USER_NOTFOUND = Currently there is no player with name %s in the server. CP_MSG_SELF = You cannot send private chat to yourself CP_MSG_SENT = The message to %s was successfully sent! CP_USER_OFFLINE = Sorry, but destination player is disconnected CP_CHECK_1 = You not active Private Message with nobody CP_CHECK_2 = Your Private Chat is enabled for %s! Enjoy!! [bp] CP_ENABLED = Agora o Chat Privado com %s esta ativado! CP_DISABLED = Agora voce pode falar com todos normalmente. CP_USER_NOTFOUND = Usuario com o nome %s nao encontrado no servidor CP_MSG_SELF = Voce nao pode enviar uma mensagem privada para voce mesmo! CP_MSG_SENT = Mensagem para %s enviada com sucesso! CP_USER_OFFLINE = Desculpe mas o player que voce estava falando nao esta mais online.. CP_CHECK_1 = Atualmente voce nao esta falando privado com ninguem CP_CHECK_2 = Seu Chat Privado esta ativa com %s! Bom chat!! Instalação: Copile o texto .SMA e depois copilado o seu plugin, vá até a pasta plugins do CS ou painel do seu servidor. Steam: C:\Program Files (x86)\Steam\steamapps\common\Half-Life\cstrike\addons\amxmodx\plugins E no-steam: C:\Program Files (x86)\Valve\cstrike\addons\amxmodx\plugins Depois de localizar a pasta "plugins" pegue o plugin que você copilou ".amxx" e jogue dentro da pasta. Agora para ligar o plugin localize a pasta: "Configs", Geralmente em: C:\Program Files (x86)\Valve\cstrike\addons\amxmodx\configs e abra o arquivo plugins.ini Vá até a ultima linha e adicione o nome do seu plugin. Ex: PrivateChat.amxx ; Descrição do plugin E para desativar o plugin adicione ";" na frente da linha. O arquivo .txt, cole em: Steam: C:\Program Files (x86)\Steam\steamapps\common\Half-Life\cstrike\addons\amxmodx\data\lang E no-steam: C:\Program Files (x86)\Valve\cstrike\addons\amxmodx\data/lang Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.