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

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

    eDialog -> Экспериментальный диалоговый процессор


    Инклуд позволяет использовать вызов диалога в форме:
    ShowPlayerDialog(playerid, DIALOG_NAME, response, listitem, inputtext[]);
    при этом DIALOG_NAME не требует объявления,
    и вызывется напрямую, обходя перебор dialogid.
    Все названия диалогов пишутся цифрами, либо буквами без кавычек.


    Использование инклуда:


    DLG:DIALOG_NAME(playerid, response, listitem, inputtext)
    DIALOG:DIALOG_NAME(playerid, response, listitem, inputtext)
    E_DLG:DIALOG_NAME()

    ShowInfoDialog(playerid, caption[], info[]); // Информационное окно


    Коллбэки:

    OnDialogResponseError(playerid, dialogid, response, listitem, inputtext[]); // Напишет в консоль данные в случае несовпадения dialogid



    Примеры использования:
    PHP код:
        else if (strcmp("/dlg"cmdtexttrue10) == 0)
        {
            
    ShowPlayerDialog(playeridD_TEST1DIALOG_STYLE_MSGBOX"Тестовый диалог""{ffffff}Диалог {00ff00}№1 {ffffff}вызвался!""Второй""Закрыть");
            return 
    1;
        } 
    В свободном месте мода обозначается сам диалог:
    PHP код:
    DLG:D_TEST1(playeridresponselistiteminputtext[])
    {
        if(!
    response) return 1;
        return 
    ShowPlayerDialog(playeridD_TEST2DIALOG_STYLE_MSGBOX"Тестовый диалог""{ffffff}Диалог {0000ff}№2 {ffffff}вызвался!""Первый""Закрыть");
    }

    DLG:D_TEST2(playeridresponselistiteminputtext[])
    {
        if(!
    response) return 1;
        return 
    ShowPlayerDialog(playeridD_TEST1DIALOG_STYLE_MSGBOX"Тестовый диалог""{ffffff}Диалог {00ff00}№1 {ffffff}вызвался!""Второй""Закрыть");

      Открыть/закрыть


     Тест скорости

    Тест реализован на цикле в 100000 итераций, в которых сначала показывается диалог, а после вызывается OnDialogResponse.
    Для стандартного движка создано 200 простых диалогов в OnDialogResponse

    Сами замеры:
    Код HTML:
    'ShowPlayerDialog' productiveness Test result:
    ShowPlayerDialog = 439ms
    OnDialogResponse = 303ms
    
    // И ещё раз
    
    'ShowPlayerDialog' productiveness Test result:
    ShowPlayerDialog = 416ms
    OnDialogResponse = 311ms
    
    //=================
    
    eDialog include productiveness Test result:
    ShowPlayerDialog = 533ms
    OnDialogResponse = 74ms
    
    // И ещё раз
    
    eDialog include productiveness Test result:
    ShowPlayerDialog = 573ms
    OnDialogResponse = 65ms
    Как мы видим из теста, процессор слегка проигрывает стандартному ShowPlayerDialog при вызове диалога, из-за получения индексирования функций и короткой работы с массивами, но результаты обработки колоссально от него отличаются: они превосходят его по скорости в 4-5 раз.

      Открыть/закрыть



    Коды файлов, использованных для теста:
    PasteBin






    Текущая версия инклуда: 3.0

    Скачать инклуд можно по ссылке: eDialog.inc
    PasteBin




    Автор: Edwin, то есть я. Копирование на других сайтах без подписи автора - подсудное дело
    Последний раз редактировалось Edwin; 05.05.2016 в 22:06.

  2. #2
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    ShowPlayerDialog(playerid, DIALOG_NAME, response, listitem, inputtext[]);

    DIALOG_NAME - caption?
    Просто написал бы что с использованием этого инклуда, вы избавляетесь от необходимости вводить ИД диалогов.

    Однако, как проверять какой диалог был нажат игроком? Нормально опишите инклуд. А то такое чувство, будто вы сын Кличко

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Что?
    Цитата Сообщение от Edwin Посмотреть сообщение
    Инклуд позволяет использовать вызов диалога в форме:
    ShowPlayerDialog(playerid, DIALOG_NAME, response, listitem, inputtext[]);
    и вызывать DIALOG_NAME напрямую, обходя перебор dialogid.
    Все названия диалогов пишутся буквами, либо цифрами, без кавычек.
    Что не понятно?

    Нет, не caption
    Цитата Сообщение от Edwin Посмотреть сообщение
    без кавычек.

  4. #4
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    И в чем прикол? Чем не устроил обычный OnDialogResponce? По мне дак это тупая нагрузка мода и ничего более того.

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    И в чем прикол? Чем не устроил обычный OnDialogResponce? По мне дак это тупая нагрузка мода и ничего более того.
    А прикол в том, дорогой Серёгамил, что можно выбирать любой id диалога буквами, как переменные, которые не нужно объявлять. А ещё, вызов диалога идёт напрямую в функцию, обходя именно этот пересчёт dialogid, как в OnDialogResponse. И что результат будет быстрее - это видно невооружённым взглядом, иначе Кортез бы не создал свой DC_CMD. Где там нагрузка - не понятно. Одна нагрузка - в показе диалога, цикл, который чуть что, сразу завершается. А ещё, диалог можно вынести в любую часть мода, и работать с ним там, где тебе только вздумается, для удобства. Вот, как бы..

    Чуть позже запилим тест скорости

  6. Пользователь сказал cпасибо:
    Unreal (26.04.2016)
  7. #6
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Но ведь ... бац и бац. Кстать, у тебя в инклуде есть неиспользуемый код. Да, и моя реализация попроще будет :)
    Последний раз редактировалось Desulaid; 14.04.2016 в 18:37.

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Ну блин, это да, я просто писал инклуд для себя, и заметил, что изобрёл велосипед, только уже когда написал и протестил...
    Обидно так стало, и реализация в твоей версии хороша, но я просто что бы не выкидывать работу коту под хвост, решил уж выкинуть в паблик..
    Кстати, у меня слегка другая реализация, чуть позже сделаю тесты скорости, и может быть что-то из этого и вышло.
    Насчёт неиспользуемого кода - да, на то и #pragma unused, но всё это было мне нужно в процессе создания. Так что вы легко можете это удалить, я побоялся пока что.
    Ещё буду над ним работать

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Edwin Посмотреть сообщение
    Ну блин, это да, я просто писал инклуд для себя, и заметил, что изобрёл велосипед, только уже когда написал и протестил...
    Обидно так стало, и реализация в твоей версии хороша, но я просто что бы не выкидывать работу коту под хвост, решил уж выкинуть в паблик..
    Кстати, у меня слегка другая реализация, чуть позже сделаю тесты скорости, и может быть что-то из этого и вышло.
    Насчёт неиспользуемого кода - да, на то и #pragma unused, но всё это было мне нужно в процессе создания. Так что вы легко можете это удалить, я побоялся пока что.
    Ещё буду над ним работать
    Ага. Подобное было сделано еще в 2011 :)

  10. #9
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от Edwin Посмотреть сообщение
    А прикол в том, дорогой Серёгамил, что можно выбирать любой id диалога буквами, как переменные, которые не нужно объявлять. А ещё, вызов диалога идёт напрямую в функцию, обходя именно этот пересчёт dialogid, как в OnDialogResponse. И что результат будет быстрее - это видно невооружённым взглядом, иначе Кортез бы не создал свой DC_CMD. Где там нагрузка - не понятно. Одна нагрузка - в показе диалога, цикл, который чуть что, сразу завершается. А ещё, диалог можно вынести в любую часть мода, и работать с ним там, где тебе только вздумается, для удобства. Вот, как бы..

    Чуть позже запилим тест скорости
    Оптимизация в чем?
    Командный процессор dc_cmd идет как плагин и вся обработка данных на нем, а плагины, как известно, быстрее в плане обработки данных.
    Использовать вне метода OnDialogResponce проще уж так, и там по сути те же имена - http://pro-pawn.ru/showthread.php?12...ll=1#post61189

    Разница лишь в том, что если ошибиться в вводе названия диалога у тебя, то ничего не выдаст, а у Londlem выдаст ошибку еще на этапе компиляции.

    Лично для меня эта работа - бред. И по скорости я сомневаюсь, что она будет быстрее. Сильно сомневаюсь

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

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Ну хочешь - не качай
    Это мой первый инклуд, с моей точкой видения. Я сказал, что буду дорабатывать, инклуд экспериментальный, чё ты от меня ещё хочешь?
    Я выслушал критику, да, спасибо за то, что лишний раз дал мне понять, что я сделал то, что уже есть.
    Плагин - есть плагин, это две разные вещи. Я ещё раз тебе повторяю, что делал для себя, для удобства, для красоты.
    Мне так хочется
    Ты Londlem'а со мной не сравнивай, он давний профессионал, а я написал инклуд впервые в жизни. Что ещё тебе не понятно из того, что я буду его дорабатывать? Можно сделать и вывод ошибки, в чём проблема?
    Последний раз редактировалось Edwin; 15.04.2016 в 17:58.

  12. 2 пользователя(ей) сказали cпасибо:
    Nexius_Tailer (15.04.2016) Unreal (26.04.2016)
 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

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

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

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

Ваши права

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