Portal SAMP
[Ajuda] Chat proximo no OnPlayerText bugado - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Chat proximo no OnPlayerText bugado (/showthread.php?tid=3821)



Chat proximo no OnPlayerText bugado - AllanSG - 22/07/2023

Olá, to fazendo com q o OnPlayerText envie mensagem apenas aos jogadores proximos do playerid, porém está enviando a mensagem proximo e enviando uma no "chat global" ao mesmo tempo e nao to sabendo arrumar

Ja tentei trocar os returns de lugar, retornar false e true, porém tudo q consigo é q envie as duas mensagens, nao envie nenhuma ou só envie e aparece para o id 0 in-game

Código PHP:
public OnPlayerText(playeridtext[])

{

new 
texto[128], Float:Pos[3], vip[128], novato[128], vip2[128];

format(textosizeof(texto), "| próximo | %s(%d) diz: %s"GetPlayerNameEx(playerid), playeridtext);
format(vipsizeof(vip), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
format(vip2sizeof(vip2), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
format(novatosizeof(novato), "| NOVATO | %s(%d) diz: %s"GetPlayerNameEx(playerid), playeridtext);
format(Logsizeof(Log), "%s diz: %s"GetPlayerNameEx(playerid), playeridtext);

GetPlayerPos(playeridPos[0],Pos[1],Pos[2]);

for(new 
i,GetMaxPlayers(); ai++)
{
    if(Player[playerid][Vip] >= 0)
    {
        if(Player[playerid][Vip] == 1)
        {
            if(IsPlayerInRangeOfPoint(i15.0Pos[0], Pos[1], Pos[2]))
    {
    SendClientMessage(i0x80FF00AAvip);
}
        }
        else if(Player[playerid][Vip] == 2)
        {
    if(IsPlayerInRangeOfPoint(i15.0Pos[0], Pos[1], Pos[2]))
    {
    SendClientMessage(i0x80FF00AAvip2);
}
}
        else if(Player[playerid][Vip] == 0)
        {
    if(IsPlayerInRangeOfPoint(i15.0Pos[0], Pos[1], Pos[2]))
    {
    SendClientMessage(i0x80FF00AAtexto);
}
}
}

if(
Player[i][Admin] > || Player[i][Mod] > || Player[i][Pika] > )
{
if(!
IsPlayerInRangeOfPoint(i15.0Pos[0], Pos[1], Pos[2]))
{
SendClientMessage(iroxonovato);
    }
}

    return 0;
}

fileLog("ChatProximo"Log);

return 
0;




RE: Chat proximo no OnPlayerText bugado - k2bi_YT - 22/07/2023

Faz assim: o código fica bem mais limpo;

Código PHP:
new Chat 1;

public 
OnPlayerText(playeridtext[])
{
    new 
texto[255];
    if(
Chat)
    {
        switch(
Player[playerid][Vip])
        {
            case 
1format(textosizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
            case 
2format(textosizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
            default: 
format(textosizeof(texto), "| NOVATO | %s(%d) diz: %s"GetPlayerNameEx(playerid), playeridtext);
        }
        
SendClientMessageInRange(15.0playeridtexto0x80FF00AA0x80FF00AA0x80FF00AA0x80FF00AA0x80FF00AA); 
        
format(textosizeof(texto), "%s diz: %s"GetPlayerNameEx(playerid), playeridtext);
        
fileLog("ChatProximo"texto);
        return 
false;
    }
    return 
true;


SendClientMessageInRange(Float:_rplayerid, const _s[],c1,c2,c3,c4,c5)
{
    new 
Float:_xFloat:_yFloat:_z;
    
GetPlayerPos(playerid_x_y_z);
    foreach(new 
Player)
    {
        if(
Player[i][Admin] > || Player[i][Mod] > || Player[i][Pika] > 0)
        {
            if(
GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) != GetPlayerInterior(playerid))continue;
            if(
GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16)
                
SendClientMessage(ic1_s);
            else if(
GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8)
                
SendClientMessage(ic2_s);
            else if(
GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4)
                
SendClientMessage(ic3_s);
            else if(
GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2)
                
SendClientMessage(ic4_s);
            else if(
GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r)
                
SendClientMessage(ic5_s);
        }
        else
        {
            
SendClientMessage(iroxo_s);
        }
    }
    return 
true;




RE: Chat proximo no OnPlayerText bugado - AllanSG - 22/07/2023

(22/07/2023 19:39)k2bi_YT Escreveu: Faz assim: o código fica bem mais limpo;

Código PHP:
new Chat 1;

public 
OnPlayerText(playeridtext[])
{
    new texto[255];
    if(Chat)
    {
        switch(Player[playerid][Vip])
        {
            case 1format(textosizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
            case 2format(textosizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
            default: format(textosizeof(texto), "| NOVATO | %s(%d) diz: %s"GetPlayerNameEx(playerid), playeridtext);
        }
        SendClientMessageInRange(15.0playeridtexto0x80FF00AA0x80FF00AA0x80FF00AA0x80FF00AA0x80FF00AA); 
        format(textosizeof(texto), "%s diz: %s"GetPlayerNameEx(playerid), playeridtext);
        fileLog("ChatProximo"texto);
        return false;
    }
    return true;


SendClientMessageInRange(Float:_rplayerid, const _s[],c1,c2,c3,c4,c5)
{
    new Float:_xFloat:_yFloat:_z;
    GetPlayerPos(playerid_x_y_z);
    foreach(new Player)
    {
        if(Player[i][Admin] > || Player[i][Mod] > || Player[i][Pika] > 0)
        {
            if(GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) != GetPlayerInterior(playerid))continue;
            if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16)
                SendClientMessage(ic1_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8)
                SendClientMessage(ic2_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4)
                SendClientMessage(ic3_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2)
                SendClientMessage(ic4_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r)
                SendClientMessage(ic5_s);
        }
        else
        {
            SendClientMessage(iroxo_s);
        }
    }
    return true;


funcionou perfeitamente, vo deixar os creditos na gm, thanks <3


RE: Chat proximo no OnPlayerText bugado - AllanSG - 22/07/2023

(22/07/2023 19:39)k2bi_YT Escreveu: Faz assim: o código fica bem mais limpo;

Código PHP:
new Chat 1;

public 
OnPlayerText(playeridtext[])
{
    new texto[255];
    if(Chat)
    {
        switch(Player[playerid][Vip])
        {
            case 1format(textosizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
            case 2format(textosizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s"GetPlayerNameEx(playerid), playeridtext);
            default: format(textosizeof(texto), "| NOVATO | %s(%d) diz: %s"GetPlayerNameEx(playerid), playeridtext);
        }
        SendClientMessageInRange(15.0playeridtexto0x80FF00AA0x80FF00AA0x80FF00AA0x80FF00AA0x80FF00AA); 
        format(textosizeof(texto), "%s diz: %s"GetPlayerNameEx(playerid), playeridtext);
        fileLog("ChatProximo"texto);
        return false;
    }
    return true;


SendClientMessageInRange(Float:_rplayerid, const _s[],c1,c2,c3,c4,c5)
{
    new Float:_xFloat:_yFloat:_z;
    GetPlayerPos(playerid_x_y_z);
    foreach(new Player)
    {
        if(Player[i][Admin] > || Player[i][Mod] > || Player[i][Pika] > 0)
        {
            if(GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) != GetPlayerInterior(playerid))continue;
            if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16)
                SendClientMessage(ic1_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8)
                SendClientMessage(ic2_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4)
                SendClientMessage(ic3_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2)
                SendClientMessage(ic4_s);
            else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r)
                SendClientMessage(ic5_s);
        }
        else
        {
            SendClientMessage(iroxo_s);
        }
    }
    return true;


uma dúvida q veio agr e nao entendi como alterar: a mensagem q tem | NOVATO | eu quero q mande só pros admins caso o playerid seja menor q score 10, nao entendi alterar pra fazer assim


RE: Chat proximo no OnPlayerText bugado - xbruno1000x - 23/07/2023

Da maneira abaixo irá suprir suas necessidades:
Código:
public OnPlayerText(playerid, text[])
{
    new texto[255];
    if(Chat)
    {
        switch(Player[playerid][Vip])
        {
            case 1: format(texto, sizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text);
            case 2: format(texto, sizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text);
            default: format(texto, sizeof(texto), "| próximo | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text);
        }
        if(GetPlayerScore(playerid) < 10) format(texto, sizeof(texto), "| NOVATO | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text);
        SendClientMessageInRange(15.0, playerid, texto, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA);
        format(texto, sizeof(texto), "%s diz: %s", GetPlayerNameEx(playerid), playerid, text);
        fileLog("ChatProximo", texto);
        return false;
    }
    return true;
}

Explicação: O script sempre é lido de cima pra baixo. Se o player não for vip, vai formatar como se fosse player normal. Se o player for level menor que 10, a formatação do default no Vip é substituída pela do Novato.


RE: Chat proximo no OnPlayerText bugado - AllanSG - 23/07/2023

(23/07/2023 01:54)xbruno1000x Escreveu: Da maneira abaixo irá suprir suas necessidades:
Código:
public OnPlayerText(playerid, text[])
{
    new texto[255];
    if(Chat)
    {
        switch(Player[playerid][Vip])
        {
            case 1: format(texto, sizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text);
            case 2: format(texto, sizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text);
            default: format(texto, sizeof(texto), "| próximo | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text);
        }
        if(GetPlayerScore(playerid) < 10) format(texto, sizeof(texto), "| NOVATO | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text);
        SendClientMessageInRange(15.0, playerid, texto, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA);
        format(texto, sizeof(texto), "%s diz: %s", GetPlayerNameEx(playerid), playerid, text);
        fileLog("ChatProximo", texto);
        return false;
    }
    return true;
}

Explicação: O script sempre é lido de cima pra baixo. Se o player não for vip, vai formatar como se fosse player normal. Se o player for level menor que 10, a formatação do default no Vip é substituída pela do Novato.

O que eu gostaria de mudar é q a mensagem Novato não vá aos players normais, e não faça troca com vips etc..

a verificação dos vips é: se for vip1, aparece VIP, se for vip2 aparece VIP+, se n for vip fica sem a tag.

a do novato é uma mensagem pra ser recebida apenas pelos admins online caso um novato fale no chate proximo (pra poder ajudar quando nao tiver perto)

VIP ou nao VIP > qualquer um proximo
se for novato > formataçao diferente a ser recebida por admins q nao estejam perto

Não consegui arrumar pois a funcao SendClientMessageInRange não da espaço para q eu faça desse jeito


RE: Chat proximo no OnPlayerText bugado - xbruno1000x - 23/07/2023

Peço desculpas, não havia lido bem o tópico, apenas corrigi o problema do código enviado no tópico.

Tenta dessa maneira aqui:
Código:
public OnPlayerText(playerid, text[])
{
    new texto[255];
    if(Chat)
    {
        if(GetPlayerScore(playerid) > 10)
        {
            switch(Player[playerid][Vip])
            {
                case 1: format(texto, sizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text);
                case 2: format(texto, sizeof(texto), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text);
                default: format(texto, sizeof(texto), "| próximo | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text);                
            }
            SendClientMessageInRange(15.0, playerid, texto, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA, 0x80FF00AA);
        } else {
            format(texto, sizeof(texto), "| NOVATO | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text);
            SendMessageToAdmins(0x80FF00AA, texto);
        }
        
        format(texto, sizeof(texto), "%s diz: %s", GetPlayerNameEx(playerid), playerid, text);
        fileLog("ChatProximo", texto);
        return false;
    }
    return true;
}

SendMessageToAdmins(color,const string[])
{
    foreach(new i : Player)
        if(Player[i][Admin] > 0 || Player[i][Mod] > 0 || Player[i][Pika] > 0)
            SendClientMessage(i, color, string);
            
    return 1;
}

Explicação:
Coloquei uma if verificando se o level é maior que 10, e se não for irá enviar a mensagem apenas para os admins.