- Июл
- 15
- 0
Пользователь
Dialog Engine for Pawn
Модульная декларативная система диалогов для SA-MP и open.mp
Модульная декларативная система диалогов для SA-MP и open.mp
Dialog Engine — это библиотека, написанная полностью на Pawn (include-only), которая позволяет создавать изолированные, чистые и расширяемые диалоговые окна без привязки к хардкодным ID. Забудьте про огромные конструкции switch(dialogid) в OnDialogResponse. Теперь каждый диалог — это независимый модуль.
Основные возможности (Features)
- Никаких плагинов: чистый Pawn, нулевая зависимость от стороннего софта.
- Обратная совместимость: вы можете продолжать использовать стандартные ShowPlayerDialog там, где это необходимо.
- Именованные диалоги: создавайте структуру один раз, вызывайте в любом месте мода по имени.
- Многошаговые цепочки (inline-dialogs.inc): удобная реализация регистраций, опросов и квестов с автоматической навигацией "Вперед/Назад".
- Разделение на страницы (paged-dialogs.inc): автоматическая пагинация для длинных списков (DIALOG_STYLE_LIST) со встроенными кнопками перелистывания.
- Декларативные макросы (dialog-macros.inc): пишите код окон в отдельных файлах для идеальной чистоты мода.
- Приятные дополнения: интеграция со sscanf2 (dialog-sscanf.inc) и сохранение состояний в SQLite (dialog-persist.inc).
- Отладка (Debug logging): включите режим логирования для отслеживания жизненного цикла диалогов.
Быстрый старт (Quick start)
Форматирование (BB-код):
#define BASIC_DIALOGS_COUNT (1000) // Резерв ID для старых диалогов
#include "dialog-engine.inc"
#include "dialog-macros.inc"
// Объявляем диалог
DIALOG(WelcomeDialog)
{
g_Dlg_WelcomeDialog = DialogCreate("welcome");
DialogSetStyle(g_Dlg_WelcomeDialog, DIALOG_STYLE_MSGBOX);
DialogSetTitle(g_Dlg_WelcomeDialog, "Welcome");
DialogSetBody(g_Dlg_WelcomeDialog, "Hello! Ready to play?");
DialogSetButtons(g_Dlg_WelcomeDialog, "Yes", "No");
DialogSetHandler(g_Dlg_WelcomeDialog, "Dlg_WelcomeDialog_Response");
}
// Обработчик ответа
DIALOG_RESPONSE(WelcomeDialog)
{
if (!response)
{
Kick(playerid);
return 1;
}
SendClientMessage(playerid, 0x00FF00FF, "Welcome aboard!");
return 1;
}
public OnGameModeInit()
{
Dlg_Init_WelcomeDialog(); // Инициализация
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (!strcmp(cmdtext, "/welcome", true))
{
SHOW_DLG(playerid, WelcomeDialog); // Показ диалога
return 1;
}
return 0;
}
Установка и структура
1. Скопируйте содержимое папки include/ в директорию вашего проекта.
2. Подключите только те модули, которые вам нужны (Core, Inline, Paged, Macros, Sscanf, Persist).
Ссылки и исходный код
Репозиторий проекта на GitHub (доступен под лицензией MIT): https://github.com/killuadoxx/pawnDialogEngine.
Буду рад вашим звездам, баг-репортам и пулл-реквестам!
Последнее редактирование модератором: