PDA

Просмотр полной версии : [Вопрос] Ошибка при вводе команды



#мыслитель
08.10.2017, 22:58
Доброго времени суток!

Не подскажете ли Вы, как можно вывести ошибку о том, что размер текста превышает лимит?

Есть команда:

CMD:vad(playerid, params[])
{
if(uInfo[playerid][pDRInections] > 0 || uInfo[playerid][uLeader] > 0)
{
if(uInfo[playerid][pMuted] == 1) return ShowTextMute(playerid);
if(uInfo[playerid][pPnumber] == 0) return ShowTextError(playerid, "Вы не приобрели номер для телефона.");
if(GetPVarInt(playerid, "takephone")) return ShowTextError(playerid, "Ваш телефон забрали.");
new text[60];
if(sscanf(params, "s[60]", text)) return ShowTextTip(playerid, "Введите: /vad [текст].");
if(strlen(text) > sizeof(text)) return ShowTextError(playerid, "Вы ввели слишком длинный текст. Сократите его.");
//if(GetPVarInt(playerid, "AntiFloodVad") > gettime()) return ShowTextError(playerid, "Писать VIP объявления можно один раз в минуту.");
if(!Reklama(playerid, params[0], "/vad")) return 1;
new string[68+60+MAX_PLAYER_NAME+6+1];
format(string, sizeof(string), "VIP объявление | {ffdb99}%s {ffa500}| {ffdb99}Отправитель: %s[%d] (тел.: %d)", params[0], nickname(playerid), playerid, uInfo[playerid][pPnumber]);
SendClientMessageToAll(C_ORANGE, string);
SetPVarInt(playerid, "AntiFloodVad", gettime() + 60);
}
else ShowTextError(playerid, "Вы не обладаете бронзовой VIP привилегией / не являетесь лидером.");
return true;
}

Я пытался уже по-разному поставить проверку. Остановился пока что на этом пункте.

if(strlen(text) > sizeof(text)) return ShowTextError(playerid, "Вы ввели слишком длинный текст. Сократите его.");

Если сообщение длиннее 60, хоть на пару символов, то ничего не происходит. Команда как бы срабатывает, как бы и нет. Ошибка не хочет выводиться.

DeimoS
08.10.2017, 23:01
А зачем ограничивать количество символов, если уже есть ограничение в 128 символов в самом клиенте, больше которого в чат ввести не получится? Да ещё и, в итоге, ты не используешь переменную text в коде

Но делается это так

CMD:vad(playerid, params[])
{
if(uInfo[playerid][pDRInections] > 0 || uInfo[playerid][uLeader] > 0)
{
if(uInfo[playerid][pMuted] == 1) return ShowTextMute(playerid);
if(uInfo[playerid][pPnumber] == 0) return ShowTextError(playerid, "Вы не приобрели номер для телефона.");
if(GetPVarInt(playerid, "takephone")) return ShowTextError(playerid, "Ваш телефон забрали.");
if(isnull(params)) return ShowTextTip(playerid, "Введите: /vad [текст].");
if(strlen(params) > 60) return ShowTextError(playerid, "Вы ввели слишком длинный текст. Сократите его.");
//if(GetPVarInt(playerid, "AntiFloodVad") > gettime()) return ShowTextError(playerid, "Писать VIP объявления можно один раз в минуту.");
if(!Reklama(playerid, params, "/vad")) return 1;
new string[68+60+MAX_PLAYER_NAME+6+1];
format(string, sizeof(string), "VIP объявление | {ffdb99}%s {ffa500}| {ffdb99}Отправитель: %s[%d] (тел.: %d)", params, nickname(playerid), playerid, uInfo[playerid][pPnumber]);
SendClientMessageToAll(C_ORANGE, string);
SetPVarInt(playerid, "AntiFloodVad", gettime() + 60);
}
else ShowTextError(playerid, "Вы не обладаете бронзовой VIP привилегией / не являетесь лидером.");
return true;
}
Хоть это и бессмысленно

#мыслитель
08.10.2017, 23:04
А зачем ограничивать количество символов, если уже есть ограничение в 128 символов в самом клиенте, больше которого в чат ввести не получится? Да ещё и, в итоге, ты не используешь переменную text в коде

Но делается это так

CMD:vad(playerid, params[])
{
if(uInfo[playerid][pDRInections] > 0 || uInfo[playerid][uLeader] > 0)
{
if(uInfo[playerid][pMuted] == 1) return ShowTextMute(playerid);
if(uInfo[playerid][pPnumber] == 0) return ShowTextError(playerid, "Вы не приобрели номер для телефона.");
if(GetPVarInt(playerid, "takephone")) return ShowTextError(playerid, "Ваш телефон забрали.");
if(isnull(params)) return ShowTextTip(playerid, "Введите: /vad [текст].");
if(strlen(params) > 60) return ShowTextError(playerid, "Вы ввели слишком длинный текст. Сократите его.");
//if(GetPVarInt(playerid, "AntiFloodVad") > gettime()) return ShowTextError(playerid, "Писать VIP объявления можно один раз в минуту.");
if(!Reklama(playerid, params, "/vad")) return 1;
new string[68+60+MAX_PLAYER_NAME+6+1];
format(string, sizeof(string), "VIP объявление | {ffdb99}%s {ffa500}| {ffdb99}Отправитель: %s[%d] (тел.: %d)", params, nickname(playerid), playerid, uInfo[playerid][pPnumber]);
SendClientMessageToAll(C_ORANGE, string);
SetPVarInt(playerid, "AntiFloodVad", gettime() + 60);
}
else ShowTextError(playerid, "Вы не обладаете бронзовой VIP привилегией / не являетесь лидером.");
return true;
}
Хоть это и бессмысленно

Дабы заранее предупредить игрока, чтобы он откорректировал своё объявление.

- - - Добавлено - - -

DeimoS, спасибо за ответ. Тему можно закрывать.

DeimoS
08.10.2017, 23:48
Дабы заранее предупредить игрока, чтобы он откорректировал своё объявление.

А почему не позволить игроку вводить сообщение в 128 символов, а уже остальные системы адаптировать под это, реализовав перенос сообщения на дополнительную строку?
Если всё же решишь немного заморочиться и не обрекать игроков на страдания, вот тут (http://pro-pawn.ru/showthread.php?13466-%D0%9A%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%B5-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81-%D0%9E%D1%82%D0%B2%D0%B5%D1%82&p=87690&viewfull=1#post87690) недавно обсуждался перенос длинного сообщения на несколько строк.
Закрыто.