Limite de Caracteres -
JPedro - 06.01.2016
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;
}
Re: Limite de Caracteres -
arakuta - 06.01.2016
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
Re: Limite de Caracteres -
JPedro - 06.01.2016
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
Re: Limite de Caracteres -
arakuta - 07.01.2016
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");
Re: Limite de Caracteres -
JPedro - 07.01.2016
Obrigado novamente pela Ajuda
Re: Limite de Caracteres -
[BOPE]Seu._.Madruga - 07.01.2016
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;
}
Re: Limite de Caracteres -
Dayvison_ - 07.01.2016
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;
}