Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для #мыслитель
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.10.2017
    Сообщений
    2
    Репутация:
    0 ±

    Ошибка при вводе команды

    Доброго времени суток!

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

    Есть команда:
    PHP код:
    CMD:vad(playeridparams[])
    {
        if(
    uInfo[playerid][pDRInections] > || 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(playeridparams[0], "/vad")) return 1;
          new 
    string[68+60+MAX_PLAYER_NAME+6+1];
          
    format(stringsizeof(string), "VIP объявление | {ffdb99}%s {ffa500}| {ffdb99}Отправитель: %s[%d] (тел.: %d)"params[0], nickname(playerid), playeriduInfo[playerid][pPnumber]);
          
    SendClientMessageToAll(C_ORANGEstring);
          
    SetPVarInt(playerid"AntiFloodVad"gettime() + 60);
        }
        else 
    ShowTextError(playerid"Вы не обладаете бронзовой VIP привилегией / не являетесь лидером.");
        return 
    true;

    Я пытался уже по-разному поставить проверку. Остановился пока что на этом пункте.
    PHP код:
    if(strlen(text) > sizeof(text)) return ShowTextError(playerid"Вы ввели слишком длинный текст. Сократите его."); 
    Если сообщение длиннее 60, хоть на пару символов, то ничего не происходит. Команда как бы срабатывает, как бы и нет. Ошибка не хочет выводиться.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А зачем ограничивать количество символов, если уже есть ограничение в 128 символов в самом клиенте, больше которого в чат ввести не получится? Да ещё и, в итоге, ты не используешь переменную text в коде

    Но делается это так
    PHP код:
    CMD:vad(playeridparams[]) 

        if(
    uInfo[playerid][pDRInections] > || 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(playeridparams"/vad")) return 1
            new 
    string[68+60+MAX_PLAYER_NAME+6+1]; 
            
    format(stringsizeof(string), "VIP объявление | {ffdb99}%s {ffa500}| {ffdb99}Отправитель: %s[%d] (тел.: %d)"paramsnickname(playerid), playeriduInfo[playerid][pPnumber]); 
            
    SendClientMessageToAll(C_ORANGEstring); 
            
    SetPVarInt(playerid"AntiFloodVad"gettime() + 60); 
        } 
        else 
    ShowTextError(playerid"Вы не обладаете бронзовой VIP привилегией / не являетесь лидером."); 
        return 
    true

    Хоть это и бессмысленно
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для #мыслитель
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.10.2017
    Сообщений
    2
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А зачем ограничивать количество символов, если уже есть ограничение в 128 символов в самом клиенте, больше которого в чат ввести не получится? Да ещё и, в итоге, ты не используешь переменную text в коде

    Но делается это так
    PHP код:
    CMD:vad(playeridparams[]) 

        if(
    uInfo[playerid][pDRInections] > || 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(playeridparams"/vad")) return 1
            new 
    string[68+60+MAX_PLAYER_NAME+6+1]; 
            
    format(stringsizeof(string), "VIP объявление | {ffdb99}%s {ffa500}| {ffdb99}Отправитель: %s[%d] (тел.: %d)"paramsnickname(playerid), playeriduInfo[playerid][pPnumber]); 
            
    SendClientMessageToAll(C_ORANGEstring); 
            
    SetPVarInt(playerid"AntiFloodVad"gettime() + 60); 
        } 
        else 
    ShowTextError(playerid"Вы не обладаете бронзовой VIP привилегией / не являетесь лидером."); 
        return 
    true

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

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

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

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от #мыслитель Посмотреть сообщение
    Дабы заранее предупредить игрока, чтобы он откорректировал своё объявление.
    А почему не позволить игроку вводить сообщение в 128 символов, а уже остальные системы адаптировать под это, реализовав перенос сообщения на дополнительную строку?
    Если всё же решишь немного заморочиться и не обрекать игроков на страдания, вот тут недавно обсуждался перенос длинного сообщения на несколько строк.
    Закрыто.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •