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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±

    Диалог вызывается один раз

    Всем доброго здравия.
    Сразу к вопросу:
    В моей команде /banlist идёт вызов функции показа диалогов (по одному на каждого забаненного с информацией о бане).
    Проблема состоит в том, что при вводе команды диалог мне показывают один раз, после чего при последующих вводах ничего не происходит...
    Точнее, происходит всё, что находится до строчки "if(mysql_fetch_row_format(name))", и дальше ничего не срабатывает, пока я не перезайду в игру.
    Я не силён в таких редких функциях MySQL, мало работал со strcat, поэтому обращаюсь сюда. В чём тут может быть проблема?

    PHP код:
    forward Banlist(playerid);
    public 
    Banlist(playerid)
    {
        new 
    rowsfieldsbanlist[1000];
         new 
    name[24], line[30];
        
    cache_get_data(rowsfields);
          if(
    rows)
        {
            for(new 
    i;rows;i++)
            {
                if(
    mysql_fetch_row_format(name))
                {
                    
    format(linesizeof(line), "{FF0000}%s\n"name);
                    
    strcat(banlistline);
                }
            }
            
    ShowPlayerDialog(playeridD_BANINFODIALOG_STYLE_LIST"Банлист"banlist"Выбрать""Закрыть");
            
    mysql_free_result();
        }
        else 
    ShowPlayerDialog(playerid1029DIALOG_STYLE_MSGBOX"Банлист""                   Список пуст""Закрыть""");
        return 
    true;


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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    crashdetect что-нибудь говорит?
    Помалкивает

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Запрос бы увидеть. Ибо если отлов игроков идёт не по одному, тогда проблема в mysql_fetch_row_format, которая обрабатывает все строки сразу и записывает их в одну. Скорее всего, там и проблема.
    Доведите мод до вызова бага и покажите логи
    PHP код:
    forward Banlist(playerid);
    public 
    Banlist(playerid)
    {
        new 
    rowsfieldsbanlist[1000];
        new 
    name[24], line[30];
        
    cache_get_data(rowsfields);
        if(
    rows)
        {
            for(new 
    i;rows;i++)
            {
                if(
    mysql_fetch_row_format(name))
                {
                    
    printf("name = \"%s\""name);
                    
    format(linesizeof(line), "{FF0000}%s\n"name);
                    
    strcat(banlistline);
                }
            }
            
    ShowPlayerDialog(playeridD_BANINFODIALOG_STYLE_LIST"Банлист"banlist"Выбрать""Закрыть");
            
    mysql_free_result();
        }
        else 
    ShowPlayerDialog(playerid1029DIALOG_STYLE_MSGBOX"Банлист""                   Список пуст""Закрыть""");
        return 
    true;

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Так вот именно, что я уже это и делал
    Ставив обычное логирование, я таким образом добрался до вызова всего лишь одной строчки "Banlist1", вот уже в таком варианте:
    Код HTML:
    public Banlist(playerid)
    {
        new rows, fields, banlist[1000];
        new name[24], line[30];
        cache_get_data(rows, fields);
        if(rows)
        {
            for(new i;i < rows;i++)
            {
                SendClientMessage(playerid, COLOR_WHITE, "Banlist1");
                if(mysql_fetch_row_format(name))
                {
                    printf("name = \"%s\"", name);
                    SendClientMessage(playerid, COLOR_WHITE, "Banlist2");
                    format(line, sizeof(line), "{FF0000}%s\n", name);
                    strcat(banlist, line);
                }
            }
            ShowPlayerDialog(playerid, D_BANINFO, DIALOG_STYLE_LIST, "Банлист", banlist, "Выбрать", "Закрыть");
            mysql_free_result();
        }
        else ShowPlayerDialog(playerid, 1029, DIALOG_STYLE_MSGBOX, "Банлист", "                   Список пуст", "Закрыть", "");
        return true;
    }
    Banlist2 уже не вызывалась.
    Кстати, ещё один факт: если список пустой, то окно с сообщением об этом вызывается нормально

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

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    110
    Репутация:
    29 ±
    Версия плагина MySQL какая?

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от MR_BEN Посмотреть сообщение
    Версия плагина MySQL какая?
    MySQL R8 (R34)

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

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    110
    Репутация:
    29 ±
    Попробуй

    PHP код:
    forward Banlist(playerid); 
    public 
    Banlist(playerid

        new 
    rowsfieldsbanlist[1000]; 
        new 
    name[24], line[30]; 
        
    cache_get_data(rowsfields); 
        if(
    rows
        { 
            for(new 
    i;rows;i++) 
            { 
               
    cache_get_field_content(i,"Name",name,переменная подключения mysql,длина строки);
           
    format(linesizeof(line), "{FF0000}%s\n"name); 
               
    strcat(banlistline);
            } 
            
    ShowPlayerDialog(playeridD_BANINFODIALOG_STYLE_LIST"Банлист"banlist"Выбрать""Закрыть"); 
        } 
        else 
    ShowPlayerDialog(playerid1029DIALOG_STYLE_MSGBOX"Банлист""                   Список пуст""Закрыть"""); 
        return 
    true

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

    И запрос бы ещё увидеть.
    Последний раз редактировалось MR_BEN; 14.07.2014 в 12:39.

  9. Пользователь сказал cпасибо:
    Edwin (14.07.2014)
  10. #9
    Аватар для Edwin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от MR_BEN Посмотреть сообщение
    Попробуй

    PHP код:
    forward Banlist(playerid); 
    public 
    Banlist(playerid

        new 
    rowsfieldsbanlist[1000]; 
        new 
    name[24], line[30]; 
        
    cache_get_data(rowsfields); 
        if(
    rows
        { 
            for(new 
    i;rows;i++) 
            { 
               
    cache_get_field_content(i,"Name",name,переменная подключения mysql,длина строки);
           
    format(linesizeof(line), "{FF0000}%s\n"name); 
               
    trcat(banlistline);
            } 
            
    ShowPlayerDialog(playeridD_BANINFODIALOG_STYLE_LIST"Банлист"banlist"Выбрать""Закрыть"); 
        } 
        else 
    ShowPlayerDialog(playerid1029DIALOG_STYLE_MSGBOX"Банлист""                   Список пуст""Закрыть"""); 
        return 
    true

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

    И запрос бы ещё увидеть.
    Вот спасибо тебе, братишка
    Блин, самый прикол, что я уже делал извлечение данных этой строчкой и всё равно срабатывало один раз, только я ставил её в начало коллбэка...
    Всех благодарю, закройте тему.

 

 

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

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

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

Ваши права

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