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

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±

    Проблема sscanf

    Здравствуйте, уважаемые знатоки. Столкнулся с такой проблемой при использовании sscanf:
    Имеется команда:
    PHP код:
    CMD:offban(playeridparams[])
    {
        if(
    GetPVarInt(playerid"pAdmin") < 1) return MSG_NOADMIN(playerid);
        if(
    sscanf(params"s[24]i"params[0], params[1])) return SCM(playeridCOLOR_GREEN"[USAGE]: /offban [nick-name] [days]");
        
    SCM(playerid, -1params[0]);
        return 
    true;

    При вводе /offban Mazzilla 2 - такая ситуация в чате:

    То есть, неправильная работа sscanf'a.
    Мод new.pwn, sscanf обновлён до последней версии (http://forum.sa-mp.com/showthread.php?t=120356), zcmd, в остальных системах/командах sscanf работает исправно, даже с подобными типами параметров (команда /ban [nick-name] работает).
    В чём может быть проблема и как её решить?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Это глюк с плагином. В нём сделана обработка массива params для возможности записывать в него данные любых значений (от чисел и до текста, как делаете вы), но если попробовать записать в params два (и более) текста по очереди:
    PHP код:
    sscanf(params"s[24]s[50]"params[0], params[1]) 
    Или же текст и число
    PHP код:
    sscanf(params"s[24]i"params[0], params[1]) 
    срабатыват какая-то ошибка в плагине и происходит своеобразная коллизия, которую вы и наблюдаете сейчас. Выход прост - если вы столкнулись с ситуациями, описанными выше, создавайте отдельные переменные и записывайте данные в них.
    PHP код:
    CMD:offban(playeridparams[]) 

        if(
    GetPVarInt(playerid"pAdmin") < 1) return MSG_NOADMIN(playerid); 
        new 
    nick_name[MAX_PLAYER_NAME], ban_days;
        if(
    sscanf(params"s[24]i"nick_nameban_days)) return SCM(playeridCOLOR_GREEN"[USAGE]: /offban [nick-name] [days]"); 
        
    SCM(playerid, -1nick_name); 
        return 
    true

    P.S. Функция SCM - зло. Вызывайте экзорциста
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    $continue$ (14.07.2015)
  4. #3
    Аватар для Mazzilla
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±
    Решил проблему именно таким же способом, который Вы посоветовали, но без ban_days (оставил params[1]).
    Первый раз с таким столкнулся, теперь буду знать. Благодарю за отклик, scm 1 love.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Mazzilla Посмотреть сообщение
    scm 1 love.
    Подключите Crashdetect. В 99% случаев он будет указывать вам на утечки данных именно в вашей любимой SCM. Да и работает она медленнее format. Но дело ваше
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    underwoker (23.06.2014)
 

 

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

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

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

Ваши права

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