#if defined mention_included #endinput #endif #define mention_included /// /// Número máximo de citaçõs em um texto. /// #define MAX_MENTION (3) /// /// Texto/Caractere que irá aparecer na citação de um jogador bloqueado. /// #define BLOCKED_MENTION_TEXT "*" /// /// Variável interna responsável por gerenciar os bloqueios de citações. /// static bool:blockedPlayer[MAX_PLAYERS][MAX_PLAYERS]; /// /// Chamado quando um jogador cita outro(s). /// /// ID do jogador que realizou a citação. /// ID do jogador citado. /// True caso o jogador (citedid) esteja bloqueado e False caso contrário. /// 1 forward OnPlayerMentionPlayer(playerid, citedid, bool:blocked); /// /// Pega citações em um texto no formato '@000' /// /// String passada por referência. /// String contendo citações. /// 1 stock GetMention(str[], out_str[], playerid = INVALID_PLAYER_ID) { new str2[500], name[MAX_MENTION][MAX_PLAYER_NAME + 10], strId[MAX_MENTION][3], idx1 = -1, idx2 = -1, count = 0; strcat(str2, str, sizeof str2); while(count < MAX_MENTION) { idx1 = strfind(str2, "@", true, idx1+1); idx2 = strfind(str2, " ", true, idx1); if(idx1 > -1) { strmid(strId[count], str2, idx1+1, idx2, MAX_PLAYER_NAME + 10); IsNumber(strId[count]); if(IsNumber(strId[count])) { new id = strval(strId[count]); if(playerid != INVALID_PLAYER_ID) { OnPlayerMentionPlayer(playerid, id, blockedPlayer[id][playerid]); } if(IsPlayerConnected(id)) { strdel(str2, idx1, idx2); GetPlayerName(id, name[count], MAX_PLAYER_NAME); format(name[count], MAX_PLAYER_NAME + 10, "@%s", (blockedPlayer[id][playerid] ? (BLOCKED_MENTION_TEXT) : (name[count]))); strins(str2, name[count], idx1, sizeof str2); } } } else break; count ++; } strcat(out_str, str2, sizeof str2); return 1; } /// /// Verifica se um jogador bloqueou outro. /// /// ID do jogador que irá bloquear. /// ID do jogador que será bloqueado. /// True para bloquear um jogador e False para desbloquear /// 1 stock PlayerBlockPlayerMention(playerid, targetid, bool:toggle) { blockedPlayer[playerid][targetid] = toggle; return 1; } /// /// Verifica se um jogador bloqueou outro. /// /// ID do jogador que bloqueou. /// ID do jogador que foi bloqueado. /// True caso o playerid esteja bloqueado para o targetid e False caso contrário. stock IsPlayerBlockedMentionForPlayer(playerid, targetid) return blockedPlayer[playerid][targetid]; /// /// Função interna que verifica se a string contém somente números. /// /// String que será verificada. /// True caso contenha somente números ou False caso contenha caracteres não-inteiros. static IsNumber(str[]) { for(new i = 0; i < strlen(str); i ++) { if(i > 0) { switch(str[i]) { case '0'..'9': continue; default: return 0; } } } return 1; }