[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(playerid, params[])
{
    new 
reason[24], str[140], Float:X, Float:Y, Float: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], X, Y, Z), SetPlayerPos(params[0], X, Y, Z+10);
    
format(str, sizeof(str), "[SERVER]: {8CACDE}%s {628DD1}has been slapped, Reason: {8CACDE}%s.", PegarNome(params[0]), reason);
    
SendClientMessage(playerid, COLOR_ADMIN, str);
    
format(str, sizeof(str), "[SERVER]: Admin {8CACDE}%s {628DD1}has slapped you, Reason: {8CACDE}%s.", PegarNome(playerid), reason);
    
SendClientMessage(params[0], COLOR_ADMIN, str);
    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,temp, params[0], reason))
        return 
SendClientMessage(playerid,-1,"Uso: /blabla ID Reason"); 
Reply
#5

Obrigado novamente pela Ajuda
Reply
#6

PHP код:
CMD:slap(playerid, params[])
{
    new 
reason[24], idplayer, str[140], Float:X, Float:Y, Float: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]", idplayer, 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(idplayer)) return SendClientMessage(playerid, -1, "[SERVER]: Player not connected!");

    
GetPlayerPos(idplayer, X, Y, Z), SetPlayerPos(idplayer, X, Y, Z+10);

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

    
format(str, sizeof(str), "[SERVER]: Admin {8CACDE}%s {628DD1}has slapped you, Reason: {8CACDE}%s.", PegarNome(playerid), reason);
    
SendClientMessage(idplayer, COLOR_ADMIN, str);
    return 
1;
} 
Reply
#7

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

PHP код:
CMD:slap(playerid, params[]) 
{ 
    new 
reason[27], str[140], Float:X, Float:Y, Float: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], X, Y, Z), SetPlayerPos(params[0], X, Y, Z+10); 

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

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


Forum Jump:


Users browsing this thread: 1 Guest(s)