O sistema utiliza ZCMD e sscanf.
Bem, chega de blá blá blá.
Source:
pawn Code:
#include <a_samp> #include <zcmd> #include <sscanf2> const DIALOG_MENU_PM = 1; const DIALOG_SEND_PM = 2; new bool: blockPM [ MAX_PLAYERS ] [ MAX_PLAYERS ]; public OnPlayerClickPlayer ( playerid , clickedplayerid , source ) { new name [ MAX_PLAYER_NAME ], str[ 100 ]; SetPVarInt ( playerid , "clickedplayerid" , clickedplayerid ); GetPlayerName( clickedplayerid , name , sizeof name ); format ( str , sizeof ( str ) , "Enviar PM para %s\nBloquear PM's de %s\nDesbloquear PM's de %s" , name , name , name ); ShowPlayerDialog ( playerid , DIALOG_MENU_PM , DIALOG_STYLE_LIST , "{FFFFFF}Menu: Mensagens Particulares" , str , "Selecionar", "Cancelar" ); return 1; } public OnDialogResponse ( playerid , dialogid , response , listitem , inputtext [ ] ) { new str [ 100 ], name [ 24 ]; switch ( dialogid ) { case DIALOG_MENU_PM: { if ( !response ) { SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID ); } else { switch ( listitem ) { case 0: { GetPlayerName ( GetPVarInt ( playerid , "clickedplayerid" ) , name , sizeof name ); format ( str , sizeof str , "{FFFFFF}Digite abaixo a mensagem a ser enviada para {0000FF}%s" , name ); ShowPlayerDialog ( playerid , DIALOG_SEND_PM , DIALOG_STYLE_INPUT , "{FFFFFF}Enviar mensagem particular" , str , "Enviar" , "Cancelar" ); } case 1: { format ( str , 4 , "%i" , GetPVarInt ( playerid , "clickedplayerid" ) ); cmd_blockpm ( playerid , str ); SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID ); } case 2: { format ( str , 4 , "%i" , GetPVarInt ( playerid , "clickedplayerid" ) ); cmd_desblockpm ( playerid , str ); SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID ); } } } } case DIALOG_SEND_PM: { if ( !response ) { SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID ); } else { format ( str , 100 , "%i %s" , GetPVarInt ( playerid , "clickedplayerid" ) , inputtext ); cmd_pm ( playerid , str ); SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID ); } } } return 1; } CMD:pm( playerid , params [ ] ) { new playerID, pmText [ 90 ], str [ 128 ], name [ 24 ]; if ( sscanf ( params , "us[90]" , playerID , pmText ) ) return SendClientMessage ( playerid , 0xFFFFFFFF , "Use /PM [ID/Nome] [Texto]" ); if ( !IsPlayerConnected ( playerID ) ) return SendClientMessage ( playerid , 0xFFFFFFFF , "Jogador inativo."); if ( playerID == INVALID_PLAYER_ID ) return SendClientMessage ( playerid , 0xFFFFFFFF , "ID Inválido." ); if ( blockPM [ playerID ] [ playerid ] ) return SendClientMessage ( playerid , 0xE31919FF , "Este jogador bloqueou mensagens particulares suas." ); GetPlayerName ( playerid , name , sizeof name ); format ( str , sizeof ( str ) , "PM de %s: %s" , name , pmText ); SendClientMessage ( playerID , 0xF6F600FF , str ); SendClientMessage ( playerid , 0xF6F600FF , "Mensagem particular enviada." ); return true; } CMD:blockpm ( playerid , params [ ] ) { new playerID, str [ 90 ], name [ 24 ]; if ( sscanf ( params , "u" , playerID ) ) return SendClientMessage ( playerid , 0xFFFFFFFF , "Use /blockpm [ID/Nome]" ); if ( !IsPlayerConnected ( playerID ) ) return SendClientMessage ( playerid , 0xFFFFFFFF , "Jogador inativo."); if ( playerID == INVALID_PLAYER_ID ) return SendClientMessage ( playerid , 0xFFFFFFFF , "ID Inválido." ); if ( blockPM [ playerid ] [ playerID ] ) return SendClientMessage ( playerid , 0xE31919FF , "Você já bloqueou mensagens particulares deste jogador." ); blockPM [ playerid ] [ playerID ] = true; GetPlayerName ( playerID , name , sizeof ( name ) ); format ( str , sizeof ( str ) , "Mensagens particulares de %s bloqueadas!" , name ); SendClientMessage ( playerid , 0x00CD00FF , str ); GetPlayerName ( playerid , name , sizeof ( name ) ); format ( str , sizeof ( str ) , "O jogador %s bloqueou suas mensagens particulares." , name ); SendClientMessage ( playerID , 0xE31919FF , str ); return 1; } CMD:desblockpm ( playerid , params [ ] ) { new playerID, str [ 90 ], name [ 24 ]; if ( sscanf ( params , "u" , playerID ) ) return SendClientMessage ( playerid , 0xFFFFFFFF , "Use /blockpm [ID/Nome]" ); if ( !IsPlayerConnected ( playerID ) ) return SendClientMessage ( playerid , 0xFFFFFFFF , "Jogador inativo."); if ( playerID == INVALID_PLAYER_ID ) return SendClientMessage ( playerid , 0xFFFFFFFF , "ID Inválido." ); if ( !blockPM [ playerid ] [ playerID ] ) return SendClientMessage ( playerid , 0xE31919FF , "Você não bloqueou mensagens particulares deste jogador." ); blockPM [ playerid ] [ playerID ] = false; GetPlayerName ( playerID , name , sizeof ( name ) ); format ( str , sizeof ( str ) , "Mensagens particulares de %s desbloqueadas!" , name ); SendClientMessage ( playerid , 0x00CD00FF , str ); GetPlayerName ( playerid , name , sizeof ( name ) ); format ( str , sizeof ( str ) , "O jogador %s desbloqueou suas mensagens particulares." , name ); SendClientMessage ( playerID , 0xE31919FF , str ); return 1; }
Créditos:
SA:MP Team
Zeex: ZCMD
Y_Less: sscanf
Eu: Desenvolvimento do script.
DOWNLOAD

---------------------------------------------------