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(playerid, text[])
{
new texto[128], Float:Pos[3], vip[128], novato[128], vip2[128];
format(texto, sizeof(texto), "| próximo | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text); format(vip, sizeof(vip), "| próximo | %s(%d) [{1AB5FF}VIP{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text); format(vip2, sizeof(vip2), "| próximo | %s(%d) [{1AB5FF}VIP{CAA520}+{80FF00}] diz: %s", GetPlayerNameEx(playerid), playerid, text); format(novato, sizeof(novato), "| NOVATO | %s(%d) diz: %s", GetPlayerNameEx(playerid), playerid, text); format(Log, sizeof(Log), "%s diz: %s", GetPlayerNameEx(playerid), playerid, text);
GetPlayerPos(playerid, Pos[0],Pos[1],Pos[2]);
for(new i,a = GetMaxPlayers(); i < a; i++) { if(Player[playerid][Vip] >= 0) { if(Player[playerid][Vip] == 1) { if(IsPlayerInRangeOfPoint(i, 15.0, Pos[0], Pos[1], Pos[2])) { SendClientMessage(i, 0x80FF00AA, vip); } } else if(Player[playerid][Vip] == 2) { if(IsPlayerInRangeOfPoint(i, 15.0, Pos[0], Pos[1], Pos[2])) { SendClientMessage(i, 0x80FF00AA, vip2); } } else if(Player[playerid][Vip] == 0) { if(IsPlayerInRangeOfPoint(i, 15.0, Pos[0], Pos[1], Pos[2])) { SendClientMessage(i, 0x80FF00AA, texto); } } }
if(Player[i][Admin] > 0 || Player[i][Mod] > 0 || Player[i][Pika] > 0 ) { if(!IsPlayerInRangeOfPoint(i, 15.0, Pos[0], Pos[1], Pos[2])) { SendClientMessage(i, roxo, novato); } }
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(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), "| 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; }
SendClientMessageInRange(Float:_r, playerid, const _s[],c1,c2,c3,c4,c5) { new Float:_x, Float:_y, Float:_z; GetPlayerPos(playerid, _x, _y, _z); foreach(new i : Player) { if(Player[i][Admin] > 0 || Player[i][Mod] > 0 || Player[i][Pika] > 0) { if(GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) != GetPlayerInterior(playerid))continue; if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16) SendClientMessage(i, c1, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8) SendClientMessage(i, c2, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4) SendClientMessage(i, c3, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2) SendClientMessage(i, c4, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r) SendClientMessage(i, c5, _s); } else { SendClientMessage(i, roxo, _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(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), "| 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; }
SendClientMessageInRange(Float:_r, playerid, const _s[],c1,c2,c3,c4,c5) { new Float:_x, Float:_y, Float:_z; GetPlayerPos(playerid, _x, _y, _z); foreach(new i : Player) { if(Player[i][Admin] > 0 || Player[i][Mod] > 0 || Player[i][Pika] > 0) { if(GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) != GetPlayerInterior(playerid))continue; if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16) SendClientMessage(i, c1, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8) SendClientMessage(i, c2, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4) SendClientMessage(i, c3, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2) SendClientMessage(i, c4, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r) SendClientMessage(i, c5, _s); } else { SendClientMessage(i, roxo, _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(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), "| 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; }
SendClientMessageInRange(Float:_r, playerid, const _s[],c1,c2,c3,c4,c5) { new Float:_x, Float:_y, Float:_z; GetPlayerPos(playerid, _x, _y, _z); foreach(new i : Player) { if(Player[i][Admin] > 0 || Player[i][Mod] > 0 || Player[i][Pika] > 0) { if(GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid) && GetPlayerInterior(i) != GetPlayerInterior(playerid))continue; if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16) SendClientMessage(i, c1, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8) SendClientMessage(i, c2, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4) SendClientMessage(i, c3, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2) SendClientMessage(i, c4, _s); else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r) SendClientMessage(i, c5, _s); } else { SendClientMessage(i, roxo, _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.
|