Толкин
Изучающий
- Регистрация
- 8 Июл 2016
- Сообщения
- 582
- Лучшие ответы
- 0
- Репутация
- 282
Не так давно увидел как Edwin выпустил свой диалоговый процессор в плагине.
Написав к нему инструкцию, я решил посмотреть подобное на инклудах, нашел разработку от Стяжкина, но в ней было много лишнего кода, что замедляло работу.
Долго я ломал голову, как избавится от всего этого, пришла мне в голову идея с подменой переменной в нативах OnDialogResponse и ShowPlayerDialog.
Все вышло так как я и хотел, подмена помогла мне полностью убрать возможность на использование switch в OnDialogResponse, теперь dialogid принимает только string.
Это помогло мне избавится от массива и нескольких ненужных функций, которые использовал Стяжкин.
Я создал лишь один коллбэк
Его можно использовать для обработки данных перед выводом действий после нажатия одной из кнопок диалога.
Например:
Поясню, если ID игрока равен 0, то действие после нажатия кнопки не будет.
Установка:
1. Качаем
2. Качаем
3. В моде после всех инклудов вставляем:
4. Удаляем из своего мода OnDialogResponse.
5. PROFIT!
Использование:
Исходный код инклуда:
Исходный код тестов:
Написав к нему инструкцию, я решил посмотреть подобное на инклудах, нашел разработку от Стяжкина, но в ней было много лишнего кода, что замедляло работу.
Долго я ломал голову, как избавится от всего этого, пришла мне в голову идея с подменой переменной в нативах 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;
}
Установка:
1. Качаем
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
a_samp, и закидываем в вашу папку с инклудами.2. Качаем
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
инклуд, и закидываем в вашу папку с инклудами.3. В моде после всех инклудов вставляем:
PHP:
#include <T_DLG>
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
Последнее редактирование: