- 5,952
- 4,283
привет
easy_dialog — это библиотека, которая кардинально упрощает создание сложных, многоуровневых и интерактивных локальных диалогов. Она берёт на себя всю рутину по управлению состоянием и навигацией, позволяя писать чистый и легко поддерживаемый код.Зависимости:
1. MoonLoader v.026+
2. SAMPFUNCS v5.4.1+
Подключение:
Lua:
local easy_dialog = require 'easy_dialog'
local Dialog = easy_dialog.Dialog -- для удобства
Lua:
-- 1. Определяем все диалоги как объекты
local mainMenu = Dialog.new()
:setCaption("Главное меню")
:setItems({"Настройки", "Выход"})
:setOnResponse(function(self, button, index)
if button == 1 and index == 1 then
easy_dialog.go("settings") -- Переходим на диалог по имени
end
end)
local settingsDialog = Dialog.new()
:setCaption("Настройки")
:setItems({"Вернуться"})
:setOnResponse(function(self, button)
if button == 1 then easy_dialog.back() end -- Возвращаемся назад
end)
-- 2. Регистрируем их
easy_dialog.register("main_menu", mainMenu)
easy_dialog.register("settings", settingsDialog)
-- 3. Инициализируем библиотеку и запускаем начальный диалог
function main()
easy_dialog.init()
sampRegisterChatCommand("menu", function()
easy_dialog.start("main_menu")
end)
wait(-1)
end
Управление потоком диалогов осуществляется через глобальные функции.
| Метод | Описание |
|---|---|
|
Lua:
| Начинает новую сессию диалогов. Полностью очищает историю навигации. |
|
Lua:
| Переходит на следующий диалог, добавляя его в историю. |
|
Lua:
| Возвращается на предыдущий диалог в истории. |
|
Lua:
| Возвращается на самый первый диалог в текущей сессии. |
|
Lua:
| Закрывает дочерний диалог и возвращает данные родительскому. |
Lua:
easy_dialog.go("player_actions", { player_id = 42 })
Lua:
-- В диалоге "player_actions"
:setOnStart(function(self, data)
-- data = { player_id = 42 }
self.targetId = data.player_id
end)
Lua:
-- В дочернем диалоге
:setOnResponse(function(self, button, _, input)
if button == 1 then
easy_dialog.done({ new_name = input })
end
end)
Lua:
-- В родительском диалоге
:setOnProcessResult(function(self, result)
if result and result.new_name then
-- result = { new_name = "..." }
self:update() -- Обновляем родителя для отображения изменений
end
end)
Полный список методов объекта Dialog
| Метод | Описание |
|---|---|
|
Lua:
| Заголовок диалога. |
|
Lua:
| 'msgbox', 'list', 'input', 'password', 'tablist', 'tablist_headers'. |
|
Lua:
| Текст левой (response 1) и правой (response 0) кнопок. |
|
Lua:
| Основной текст (для msgbox, input, password). |
|
Lua:
| Список элементов (для list, tablist). |
|
Lua:
| Заголовки для 'tablist_headers'. |
|
Lua:
| Количество элементов на странице для авто-пагинации. |
|
Lua:
| Режим запуска: STANDARD, ROOT, SINGLE_TOP. |
| Коллбэк | Описание |
|---|---|
|
Lua:
| Вызывается при запуске диалога через start/go. |
|
Lua:
| Вызывается при ответе пользователя. |
|
Lua:
| Вызывается каждый кадр, пока диалог активен (для анимаций). |
|
Lua:
| Вызывается в родительском диалоге после done() в дочернем. |
Lua:
myDialog:update()
Lua:
myDialog:close(button_id)
Lua:
easy_dialog.alert(caption, text, onOK)
Lua:
easy_dialog.confirm(caption, text, onConfirm)
Lua:
easy_dialog.prompt(caption, text, onInput)
Lua:
function onScriptTerminate(script, quitGame)
if script == thisScript() then
easy_dialog.stop()
end
end
Вложения
Последнее редактирование: