Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 19 из 19

Тема: DC_CMD

  1. #11
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В причине бана игрок может ввести больше 52 символов - словишь варнинг от sscanf.
    PHP код:
    if (strlen(params) > 52)
            return 
    0

  2. #12
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    PHP код:
    if (strlen(params) > 52)
            return 
    0
    Ты смотри, а то ещё ТС не поймёт шутки и точно так же сделает.
    Что касается причины бана, макс. длина params - 128 символов (вспомнил бы раньше, если бы не писал всё это параллельно с решением задач по бух. учёту на парах), следовательно в sscanf следует указывать для строки с причиной 128-1-1+1 = 127 ячеек (-1 на мин. длину числа, -1 на пробел и +1 на нуль-символ).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. #13
    Аватар для Vano_Glad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.07.2015
    Адрес
    Хабаровск
    Сообщений
    142
    Репутация:
    0 ±
    Ты смотри, а то ещё ТС не поймёт шутки и точно так же сделает.
    Я не нуб в pawn. Так точно не сделаю. Я так понимаю в sscanf нужно всегда прописывать 127? Раз ты говоришь, что словить warning можно. То есть получается следующим образом: Независимо от того, что SendClientMessage ограниченно 144 символами, если в sscanf допустим ввести 50 символов (Типо предела (типо не хватает 50 до 144 символов)), а в игре причину ввести больше 50-ти символов, то вылетит warning?
    Последний раз редактировалось Vano_Glad; 09.02.2016 в 12:32.
    ______________________________________________
    Услуги Pawn

  4. #14
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Если Вы выйдете за 127 символов, Вам плагин, просто отрежет строку.
      Открыть/закрыть



    DC: Кстати, в чем был профит юзать goto и бесконечный цикл?
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  5. #15
    Аватар для Vano_Glad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.07.2015
    Адрес
    Хабаровск
    Сообщений
    142
    Репутация:
    0 ±
    Если Вы выйдете за 127 символов, Вам плагин, просто отрежет строку.
    Конкретный ответ на мой вопрос можно получить?
    ______________________________________________
    Услуги Pawn

  6. #16
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Vano_Glad Посмотреть сообщение
    Конкретный ответ на мой вопрос можно получить?
    Эм?
    PHP код:
    const MAX_SIZE_PARAMS 127
    PHP код:
    if(strlen(reason_bans) > MAX_SIZE_PARAMS)
        return 
    SendClientMessage(playerid, -1"Вы привысили порог допустимых сиволов (Причина бана должна быть <= 127 символов)"); 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  7. #17
    Аватар для Vano_Glad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.07.2015
    Адрес
    Хабаровск
    Сообщений
    142
    Репутация:
    0 ±
    Это не совсем то что я хотел услышать :) Да и вообще, с чего пошли разговоре о бане? :D Речь шла о кике игрока с сервера. Мне всегда писать в sscanf длину 127, независимо от того, сколько символов останется в SendClientMessage или же записывать нужно именно остаток?
    ______________________________________________
    Услуги Pawn

  8. #18
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Окей.
    1) MAX_CHATBUBBLE_LENGTH (144) + 1 - MAX_SIZE_PARAMS(127) = 18.
    2) Идем дальше, у нас остается 18, но у нас ещё 2 выхлопа на ники.
    3) То есть: (MAX_PLAYER_NAME + 1 + MAX_PLAYER_NAME + 1)
    4) Получается так: на 2 ника нам нужно зарезервировать 50 ячеек в памяти.
    5) 50 - 18 = 32
    6) MAX_CHATBUBBLE_LENGTH (144) + 1 - MAX_SIZE_PARAMS(127) + 32 (Плохая практика, конечно, программирования -_-. Magic number -_-)
    7) Ну и я ещё не учел спецификаторы (думаю, доработаешь)
    В итоге получаем расчет по формуле:
    PHP код:
    new fmt_str[(MAX_CHATBUBBLE_LENGTH MAX_SIZE_PARAMS 7) * 1)]; 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  9. Пользователь сказал cпасибо:
    Vano_Glad (09.02.2016)
  10. #19
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от Vano_Glad Посмотреть сообщение
    Я так понимаю в sscanf нужно всегда прописывать 127?
    Зависит от того, какие ещё будут параметры, кроме строки с причиной бана. Читайте мой пост выше, там расписана формула.


    Цитата Сообщение от $continue$ Посмотреть сообщение
    DC: Кстати, в чем был профит юзать goto и бесконечный цикл?
    Он не бесконечный и с помощью goto обходится присваивание нуля в cmd_end. Если честно, уже не помню, почему я сделал именно так, а не присвоил переменной cmd_end значение 0 в ветке "else if(cmdtext[pos] == ' ')", скорее всего, это осталось от старого кода отделения параметров от команды. Впрочем, это исходники от старой версии DC_CMD, в 2.6 этот код был пересмотрен ещё раз и таких извращений с goto там нет.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 
Страница 2 из 2 ПерваяПервая 1 2

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

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

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

Ваши права

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