LiveDialogs.inc - диалоговый движок

vawylon

Участник
Автор темы
8
93
LiveDialogs

UPDATE 14.11.2024
— Убраны DIALOG_BACK_BACK... остался только DIALOG_BACK который открывает диалог на уровень ниже;
— Убраны лишние функции;
— Кэш удаляется только в том случае, если пользователь будет ниже кэша, кэш высокого уровня - удаляется;
было не логичным каждый DIALOG_REOPEN отправлять запрос если пользователь находился в диалоге с DialogQuery;
— Добавлен DialogGoto который перемещает пользователя в указанный диалог !!! только в низ !!!
— Удалены теги string.
— Добавлена функция Dialog_GetDeep(playerid);
Пожалуйста, обновите LiveDialogs и перед использованием посмотрите примеры реализованные с помощью дополнения!

Диалоговый движок позволяющий описывать всю логику в одной функции.



img_1731477478__dialogs2.png


C:
CMD:livedialogs(playerid)
{
    Dialog_Create(playerid, Dialog:Main);
}
Или выполнять асинхронные запросы:
C:
static query_top_10[] = "\
    SELECT `nickname`, `money` \
    FROM `accounts` \
    ORDER BY `money` desc LIMIT 10;\
";
dialog PlayersTopMoney(playerid)
{
    Create:<"Топ 10 богатых игроков">
    {
        ResponseRight:return DIALOG_CLOSE;
   
        DialogQuery:<mysqlconnect, query_top_10>;

        new rows = cache_num_rows();
   
        if(rows == 0) {
            DialogMessgbox:<"В таблице `accounts` нет записей"> {
                return DIALOG_CLOSE;
            }
        }
        // сделаем список DIALOG_STYLE_TABLIST_HEADER
        DialogHead:<"Игрок\tСумма">;
        for(new i; i<rows; i++)
        {
            cache_get_value_name(i, "nickname", nickname);
            cache_get_value_int(i, "money", money);

            if(i < 3)
            {
                // покрасим топ 3 в жёлтый цвет
                ListItem:<"{FFCC47}%d{FFFFFF}. %s\t%d$", i+1, nickname, money>
                {
                    SendClientMessage(playerid, -1, "Игрок %s входит в топ 3 богатейших игроков, занимая %d место.", nickname, i+1);
                    return DIALOG_REOPEN;
                    );
                }
            }
            else
            {
                ListItem:<"%d. %s\t%d$", i+1, nickname, money>
                {
                    SendClientMessage(playerid, -1, "Игрок %s входит в топ 10 богатейших игроков, занимая %d место.", nickname, i+1);
                    return DIALOG_REOPEN;
                }
            }
        }
    }
    Button:<"Выбрать", "Закрыть">;
}

А так же позволяет быть модульным:
C:
dialog Main(playerid)
{
    Create:<"LiveDialogs - информация">
    {
        ResponseRight:return DIALOG_CLOSE;
        MessageBox:<"Всё это написано в одной функции">
        {
            Create:<"LiveDialogs - возврат на уровень ниже">
            {
                ResponseRight:return DIALOG_BACK;
                MessageBox:<"Нажми назад и ты вернёшся">
                {
                    ResponseRight:return DIALOG_BACK;
                    Create:<"LiveDialogs - возможность вернуться в главное окно">
                    {
                        ResponseRight:return DIALOG_MAIN;
                        MessageBox:<"Нажми \"Главная\" и ты вернёшься в главное меню!">
                        {
                            return PlayersTopMoney(playerid) ;
                        }
                        Button:<"Далее", "Главная">;
                    }
                }
            }
            Button:<"Далее", "Назад">;
        }
    }
    Button:<"Далее", "Закрыть">;
}
Автор я (vawylon).
Ссылка: https://github.com/vawylon/LiveDialogs
Пример игрового мода в репозитории с регистрацией и меню /menu

Создан в команде разработчиков LiveRussia Mobile
 
Последнее редактирование: