[DUDA]Onplayertext
#1

Hola forum samp, bueno queria saber como puedo hacer para que un usuario no pueda leer el chat ni escribir en йl.

Para que no pueda escribir en el chat es facil pero lo que se me complica es para que no pueda leer ningun mensaje.
pawn Код:
public OnPlayerText(playerid, text[])
{
    if(NoPuederVerElChat[playerid] == 1)
    {
        return 0;
    }
    return 1;
}
eso para que no salga el mensaje que intenta escribir pero alguien me puede decir como hago para que no lea el chat?
Reply
#2

Para que un usuario no lea ningun mensaje tienes 2 opciones:
La mas simple pero menos estetica seria crear un textdraw sobre el chat.
La correcta seria algo asi:
pawn Код:
public OnPlayerText(playerid, text[])
{
    if(PuedeEscribir[playerid])return 0;
    new str[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(str, 128, "{%x}%s{FFFFFF}: %s", GetPlayerColor(playerid) >>> 8, name, text);
    for(new i; i<GetMaxPlayers(); i++){
        if(IsPlayerConnected(i) && PuedeLeer[playerid]){
            SendClientMessage(playerid, -1, str);
        }
    }
    return 0;
}
/*Nota:
Para que el codigo funcione sin bugs deberas utilizar SetPlayerColor cuando el jugador se conecta, de lo contrario GetPlayerColor funcionara de forma incorrecta.*/
Edit: El textdraw no servira ya que no tapa el chat, dejando solo la opcion de realizarlo mediante script.
Reply
#3

pawn Код:
public OnPlayerText(playerid, text[])
{
    if(NoPuedeEscribir[Playerid])return 0; // error
    new str[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(str, 128, "{%x}%s{FFFFFF}: %s", GetPlayerColor(playerid) >>> 8, name, text);
    for(new i; i<GetMaxPlayers(); i++){
        if(IsPlayerConnected(i) && PuedeLeer[playerid]){
            SendClientMessage(playerid, -1, str);
        }
    }
    return 0;
}
Reply
#4

No hacia falta comentar Mr.acu.

Gracias chaoz.
Reply
#5

Quote:
Originally Posted by Mr.acu
Посмотреть сообщение
pawn Код:
public OnPlayerText(playerid, text[])
{
    if(NoPuedeEscribir[Playerid])return 0; // error
    new str[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(str, 128, "{%x}%s{FFFFFF}: %s", GetPlayerColor(playerid) >>> 8, name, text);
    for(new i; i<GetMaxPlayers(); i++){
        if(IsPlayerConnected(i) && PuedeLeer[playerid]){
            SendClientMessage(playerid, -1, str);
        }
    }
    return 0;
}
Los nombres de las variables que utilize son descriptivos para que sepa que debe colocar, no por las variables definidas que el tiene en su GM/FS.
Reply
#6

Hay otra manera de hacerlo , Creando un stock y reemplazando el SendClientMessage y poniendo dentro del stock la variable ke determinara si lo leera, ejemplo:

pawn Код:
public OnPlayerText(playerid, text[])
{
    new str[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
   
    format(str, 128, "%s: %s", name, text);
    New_SendClientMessage(-1,str)
    return 0;
}

//al final del gm
stock New_SendClientMessage(color,const str[])
{
    for(new i; i < GetMaxPlayers(); i++)
    {
        if(IsPlayerConnected(i))
        {
            if(NoPuedeEscribir[i] == 0) //Si el player no tiene la variable en 0 no le dara el SendClientMessage
            {
                 SendClientMessage(i, color, str);
            }
        }
    }
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)