Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Include t_DLG | Новый диалоговый процессор

Толкин

Изучающий
Регистрация
8 Июл 2016
Сообщения
582
Лучшие ответы
0
Репутация
282
Не так давно увидел как Edwin выпустил свой диалоговый процессор в плагине.
Написав к нему инструкцию, я решил посмотреть подобное на инклудах, нашел разработку от Стяжкина, но в ней было много лишнего кода, что замедляло работу.

Долго я ломал голову, как избавится от всего этого, пришла мне в голову идея с подменой переменной в нативах OnDialogResponse и ShowPlayerDialog.

Все вышло так как я и хотел, подмена помогла мне полностью убрать возможность на использование switch в OnDialogResponse, теперь dialogid принимает только string.
Это помогло мне избавится от массива и нескольких ненужных функций, которые использовал Стяжкин.

Я создал лишь один коллбэк
PHP:
public OnPlayerDialogReceived(playerid, dialogid[], response, listitem)
Его можно использовать для обработки данных перед выводом действий после нажатия одной из кнопок диалога.

Например:
PHP:
public OnPlayerDialogReceived(playerid, dialogid[], response, listitem)
{
	if(0 == playerid)
	    return false;
	    
	return true;
}
Поясню, если ID игрока равен 0, то действие после нажатия кнопки не будет.

Установка:
1. Качаем a_samp, и закидываем в вашу папку с инклудами.
2. Качаем инклуд, и закидываем в вашу папку с инклудами.
3. В моде после всех инклудов вставляем:
PHP:
#include <T_DLG>
4. Удаляем из своего мода OnDialogResponse.
5. PROFIT!

Использование:
PHP:
CMD:test(playerid, params[])
{
    ShowPlayerDialog(playerid, "d_Name", DIALOG_STYLE_MSGBOX, !"Заголовок", "Тут наш текст", !"Кнопка 1", !"Кнопка 2");
	return true;
}

DLG:d_Name(playerid, response, listitem, inputtext[])
{
	if(!response) return true;
	SendClientMessage(playerid, -1, !"РАБОТАЕТ");
	return true;
}
Исходный код инклуда:
Исходный код тестов:

PHP:
'ShowPlayerDialog' productiveness Test result: 
ShowPlayerDialog = 357 ms 
OnDialogResponse = 347 ms 

//================= 

't_DLG Include' productiveness Test result: 
ShowPlayerDialog = 31 ms
OnDialogResponse = 120 ms
 
Последнее редактирование:
Сверху Снизу