- 5,819
- 4,141
Привет.
easy-dialog - это библиотека для MoonLoader, которая кардинально упрощает создание сложных, многоуровневых и интерактивных локальных диалогов. Библиотека берет на себя всю рутинную работу по управлению состоянием, навигацией, пагинацией и анимацией, позволяя всем нам тут писать чистый, декларативный и легко поддерживаемый код.
Основные возможности:easy-dialog - это библиотека для MoonLoader, которая кардинально упрощает создание сложных, многоуровневых и интерактивных локальных диалогов. Библиотека берет на себя всю рутинную работу по управлению состоянием, навигацией, пагинацией и анимацией, позволяя всем нам тут писать чистый, декларативный и легко поддерживаемый код.
1. Каждый диалог - это независимый, самодостаточный объект.
2. Возможность регистрировать все диалоги в одном месте и управлять ими.
3. Создавать "живые" диалоги, содержимое которых обновляется на лету без их пересоздания.
4. Управлять потоком диалогов с помощью start, go, back, home и done.
5. Легко передавать данные из дочерних диалогов в родительские.
6. Автоматическая пагинация, передав массив данных, и библиотека сама разобьет его на страницы.
7.Легко создавайте анимированные диалоги, интерактивные меню и сложные интерфейсы с помощью :onUpdate и :update().
8. Быстро создавать стандартные окна: alert, confirm, prompt.
Зависимости:
MoonLoader v.026+
SAMPFUNCS v5.4.1+
Основное отличие новой версии - переход на декларативный подход. Не надо больше создавать диалоги "на лету", теперь можно описывать все диалоги один раз и управлять переходами между ними.
2. Навигация
Для перемещения между диалогами используются специальные функции:
Режимы запуска (LaunchMode)
3. Работа с данными
Передача данных вперед:
Прием данных (в целевом диалоге):
Возврат результата (из дочернего диалога):
Обработка результата (в родительском диалоге):
4. Динамический контент
Методы :setCaption() и :setItems() могут принимать функции, которые будут генерировать контент на лету, используя данные диалога.
5. Полный список методов и коллбэков
Lua:
-- 1. Определяем все диалоги в одном месте
local mainMenu = easy_dialog.Dialog.new()
:setCaption("Главное меню")
-- ... другие настройки
local settingsDialog = easy_dialog.Dialog.new()
:setCaption("Настройки")
-- ... другие настройки
-- 2. Регистрируем их по уникальным именам
easy_dialog.register("main_menu", mainMenu)
easy_dialog.register("settings", settingsDialog)
-- 3. Запускаем нужный диалог по имени
sampRegisterChatCommand("menu", function()
easy_dialog.start("main_menu")
end)
Для перемещения между диалогами используются специальные функции:
easy_dialog.start("имя_диалога", данные) - Начать новый "сценарий". Полностью сбрасывает историю навигации.
easy_dialog.go("имя_диалога", данные) - Перейти на следующий "диалог". Добавляет диалог в историю, позволяя вернуться назад.
easy_dialog.back() - Вернуться на шаг назад.
easy_dialog.home() - Вернуться на самый первый экран в текущей диалоговой сессии.
easy_dialog.done(результат) - Завершить дочерний диалог и вернуть данные родительскому.
Режимы запуска (LaunchMode)
Lua:
-- Этот диалог всегда будет сбрасывать историю (как главное меню)
:setLaunchMode(easy_dialog.LaunchMode.ROOT)
-- Этот диалог не будет открыт, если он уже на экране
:setLaunchMode(easy_dialog.LaunchMode.SINGLE_TOP)
Передача данных вперед:
Lua:
-- Передаем айди игрока в диалог действий
easy_dialog.go("player_actions", { player_id = 42 })
Lua:
:setOnStart(function(self, data)
-- data здесь будет равен { player_id = 42 }
self.targetId = data.player_id
end)
Lua:
:setOnResponse(function(self, button, _, input_text)
if button == 1 then
easy_dialog.done({ new_name = input_text })
end
end)
Lua:
:setOnProcessResult(function(self, result)
if result and result.new_name then
-- result здесь будет равен { new_name = "..." }
self:update() -- Обновляем родительский диалог, если нужно
end
end)
Методы :setCaption() и :setItems() могут принимать функции, которые будут генерировать контент на лету, используя данные диалога.
Lua:
:setCaption(function(self)
return "Статистика игрока: " .. self.start_data.nickname
end)
Конструкторы (вызываются по цепочке):
Обработчики событий:
Методы управления:
Готовые шаблоны:
:setCaption(string | function) - Устанавливает заголовок.
:setStyle(string) - 'msgbox', 'list', 'input', 'password', 'tablist', 'tablist_headers'.
:setButtons(string, string) - Текст левой и правой кнопок.
:setContent(string | function) - Основной текст.
:setItems(table | function) - Список элементов (включает пагинацию).
:setHeaders(table | function) - Заголовки для tablist_headers.
:setItemsPerPage(number) - Элементов на странице.
:setLaunchMode(number) - easy_dialog.LaunchMode.STANDARD | ROOT | SINGLE_TOP.
Обработчики событий:
:setOnStart(function(self, data)) - Вызывается при запуске диалога через start/go.
:setOnResponse(function(self, button, absolute_index, text)) - Вызывается при ответе пользователя.
:setOnUpdate(function(self, deltaTime)) - Вызывается каждый кадр, пока диалог активен.
:setOnProcessResult(function(self, result)) - Вызывается в родительском диалоге после вызова done() в дочернем.
Методы управления:
myDialog:update() - Мгновенно перерисовывает диалог.
myDialog:close(button_id) - Отправляет ответ на диалог.
Готовые шаблоны:
easy_dialog.alert(caption, text, onOK)
easy_dialog.confirm(caption, text, onConfirm)
easy_dialog.prompt(caption, text, onInput)
Вложения
Последнее редактирование: