Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Это глюк с плагином. В нём сделана обработка массива 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 - зло. Вызывайте экзорциста
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от Mazzilla Посмотреть сообщение
    scm 1 love.
    Подключите Crashdetect. В 99% случаев он будет указывать вам на утечки данных именно в вашей любимой SCM. Да и работает она медленнее format. Но дело ваше
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

 

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

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

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

Ваши права

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