[Ajuda] Limite de Caracteres
#1

Fiz um comando e nele eu queria colocar um limite de caracteres a ser inserido no motivo em qual o ADM deu o /slap(/tapa), se o motivo passar de 24 caracteres retornar a mensagem dizendo que ultrapassou o limite, tentei usar o strlen sу que consigo passar o limite =/, fiz alguma coisa errada?, alguem ajuda?

if(strlen(reason) > 24) return SendClientMessage(playerid, -1, "[SERVER]: Reason limit is 24 characters!");

PHP код:
CMD:slap(playeridparams[])
{
    new 
reason[24], str[140], Float:XFloat:YFloat:Z;
    if(
pInfo[playerid][pConectado] == false) return SendClientMessage(playerid, -1"[SERVER]: You are not logged in!");
    if(
pInfo[playerid][pAdmin] < 2) return SendClientMessage(playerid, -1"[SERVER]: You are not allowed to use this command!");
    if(
sscanf(params,"us[24]"params[0], reason)) return SendClientMessage(playerid, -1"[SYNTAX]: /slap [Player ID] [Reason]");
    if(
strlen(reason) > 24) return SendClientMessage(playerid, -1"[SERVER]: Reason limit is 24 characters!"); 
    if(!
IsPlayerConnected(params[0])) return SendClientMessage(playerid, -1"[SERVER]: Player not connected!");
    
GetPlayerPos(params[0], XYZ), SetPlayerPos(params[0], XYZ+10);
    
format(strsizeof(str), "[SERVER]: {8CACDE}%s {628DD1}has been slapped, Reason: {8CACDE}%s."PegarNome(params[0]), reason);
    
SendClientMessage(playeridCOLOR_ADMINstr);
    
format(strsizeof(str), "[SERVER]: Admin {8CACDE}%s {628DD1}has slapped you, Reason: {8CACDE}%s."PegarNome(playerid), reason);
    
SendClientMessage(params[0], COLOR_ADMINstr);
    return 
1;

Reply
#2

Essa mensagem nunca serб superior a 24 caracteres, por que o vetor sу possui 24 colunas.

23 caracteres + EOS.

O motivo serб cortado automaticamente para ter 23 caracteres, nunca satisfazendo a condiзгo de 25 caracteres ou mais.

@edit

Vocк pode rodar este bloco de cуdigos para entender melhor:

PHP код:
new params[53] = "666 Meu motivo й este e й superior a 24 caracteres";
new 
reason[24];
    
if(
sscanf(params,"us[24]"params[0], reason))
    return;
        
printf("Comprimento: %d caracteres.",strlen(reason)); 
Код:
Comprimento: 23 caracteres.
Nunca tenho medo de "brincar" com as funзхes, a melhor maneira de programar й saber 100% sobre o que estб fazendo
Reply
#3

Sim, no chat ele й cortado, mas no console ele da um warning do sscanf e por isso que eu queria colocar um limite quando o admin for colocar o motivo pra ele nгo fazer isso /slap ID motivooooooooooooooooooooooooooooooooooooooooooooo ooooooooo
Reply
#4

Como dito neste post й apenas um aviso para indicar que a string й maior do que o destino. Nгo vejo necessidade de se preocupar com isto, mas se realmente fazes questгo, podes fazer isto:

PHP код:
new temp[10];
format(temp,10,"us[%d]",strlen(params));
if(
sscanf(params,tempparams[0], reason))
        return 
SendClientMessage(playerid,-1,"Uso: /blabla ID Reason"); 
Reply
#5

Obrigado novamente pela Ajuda
Reply
#6

PHP код:
CMD:slap(playeridparams[])
{
    new 
reason[24], idplayerstr[140], Float:XFloat:YFloat:Z;
    if(
pInfo[playerid][pConectado] == false) return SendClientMessage(playerid, -1"[SERVER]: You are not logged in!");
    if(
pInfo[playerid][pAdmin] < 2) return SendClientMessage(playerid, -1"[SERVER]: You are not allowed to use this command!");
    if(
sscanf(params,"ds[24]"idplayerreason)) return SendClientMessage(playerid, -1"[SYNTAX]: /slap [Player ID] [Reason]");
    if(
strlen(reason) > 24) return SendClientMessage(playerid, -1"[SERVER]: Reason limit is 24 characters!");
    if(!
IsPlayerConnected(idplayer)) return SendClientMessage(playerid, -1"[SERVER]: Player not connected!");

    
GetPlayerPos(idplayerXYZ), SetPlayerPos(idplayerXYZ+10);

    
format(strsizeof(str), "[SERVER]: {8CACDE}%s {628DD1}has been slapped, Reason: {8CACDE}%s."PegarNome(idplayer), reason);
    
SendClientMessage(playeridCOLOR_ADMINstr);

    
format(strsizeof(str), "[SERVER]: Admin {8CACDE}%s {628DD1}has slapped you, Reason: {8CACDE}%s."PegarNome(playerid), reason);
    
SendClientMessage(idplayerCOLOR_ADMINstr);
    return 
1;

Reply
#7

Sу aumentar o tamanho da matriz em + 2 e depois verificar se passou do tamanho.

PHP код:
CMD:slap(playeridparams[]) 

    new 
reason[27], str[140], Float:XFloat:YFloat:Z
    if(
pInfo[playerid][pConectado] == false) return SendClientMessage(playerid, -1"[SERVER]: You are not logged in!"); 
    if(
pInfo[playerid][pAdmin] < 2) return SendClientMessage(playerid, -1"[SERVER]: You are not allowed to use this command!"); 
    if(
sscanf(params,"us[27]"params[0], reason)) return SendClientMessage(playerid, -1"[SYNTAX]: /slap [Player ID] [Reason]"); 
    if(
strlen(reason) > 24) return SendClientMessage(playerid, -1"[SERVER]: Reason limit is 24 characters!");  
    if(!
IsPlayerConnected(params[0])) return SendClientMessage(playerid, -1"[SERVER]: Player not connected!"); 

    
GetPlayerPos(params[0], XYZ), SetPlayerPos(params[0], XYZ+10); 

    
format(strsizeof(str), "[SERVER]: {8CACDE}%s {628DD1}has been slapped, Reason: {8CACDE}%s."PegarNome(params[0]), reason); 
    
SendClientMessage(playeridCOLOR_ADMINstr); 

    
format(strsizeof(str), "[SERVER]: Admin {8CACDE}%s {628DD1}has slapped you, Reason: {8CACDE}%s."PegarNome(playerid), reason); 
    
SendClientMessage(params[0], COLOR_ADMINstr); 
    return 
1

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)