easy.dialog v.3.0.0
Работа с интерпретатором
Подключение интерпретатора
Чтобы использовать интерпретатор диалогов "easy.dialog", вам необходимо подключить его к своей игре вместе с сопутствующими библиотеками.
Если вы скачали архив со страницы релизов, то в папку со своей игрой из этого архива распакуйте папку lib
. Jна и содержит модуль "easy.dialog", а так же библиотечки "easy.database" и "easy.math".
Теперь в своей игре для подключения модулей напишите эти три команды:
inclib 'lib/easy.database.qsp'
inclib 'lib/easy.math.qsp'
Внимание!!! При подключении библиотек учтите, что к игре добавляются только те локации, названия которых в них отсутствуют. Просмотрите список локаций в подключаемых библиотеках, чтобы предупредить совпадения имён.
Добавление таблицы диалогов в игру
В процессе работы генератор создаёт файл формата qsps, который содержит три локации:
dialogs_table
— на этой локации размещается вся таблица диалогов, включая все объекты диалогов, ролей и реплик. Эта локация предназначена для загрузки в память таблицы диалогов. В зависимости от настроек генератора строки таблицы на этой локации могут быть сгруппированы в блоки условий с проверкой, какое число передано нулевым аргументом (args[
). Это число соответствует номеру группы строк. Если строки разбиты на группы, загрузить всю таблицу диалогов в память, просто обратившись к локации0
]dialogs_table
не получится.dialogs_init
— эта локация необходима для инициализации таблицы диалогов в базе данных игры. То есть она проводит необходимую подготовку, чтобы модуль мог работать с диалогами.dialogs_load
— с помощью этой локации вы можете одномоментно загрузить в память всю таблицу диалогов. Использовать её следует только если диалогов немного, или они небольшие.
Все три локации вам нужно скопировать в свою игру, или сконвертировать файл .qsps
в .qsp
и подключить как библиотеку.
Когда в игру подключены, или встроены все три локации, нужно сделать следующее:
- Необходимо инициализировать базу данных в игре, введя, например, на самой первой локации команду
@edb.init
. Если вы уже пользуетесь "easy.database" в своей игре, значит вы уже это сделали. - Далее нужно инициализировать в базе данных таблицу диалогов, введя команду
@dialogs_init
. - Затем таблицу диалогов нужно загрузить в память. Для этого можно воспользоваться командой
@dialogs_load
, или последовательно обращаясь кdialogs_table
, передавая ей аргументом номер выгружаемой группы строк.
Вот как это выглядит в игре с примерами диалогов, котороя поставляется вместе с модулем:
@dialogs_init()
@dialogs_load()
Воспроизведение диалога
Для воспроизведения диалога в нужном месте следует вызвать команду @dialog.int
, указав аргументом уникальное название диалога, которое вы прописывали ему в файлах edsynt перед генерацией.
Пример вызова диалога из гиперссылки:
*p '<a href="EXEC: @dialog.int(''robbank'')" class="avs-plain">Начать диалог</a>'
*p '</div class="avs_dialog_hide">'
Если Вам не нужно особым образом встраивать диалог в текст основного описания, модуль просто очистит окно и выведет в него диалог, а после закрытия диалога восстановит содержимое окна основного описания к тому состоянию, которое было до открытия диалога.
Встраивание диалога в Основное описание
В отличие от первой версии модуля, текущая версия работает только с окном основного описания. То есть она не "запоминает" и не "восстанавливает" содержимое прочих окон.
Чтобы диалог не замещал собой весь текст в окне основного описания, а встраивался в него, необходимо перед воспроизведением диалога вывести в основное описание два специальных тега:
Обратите внимание, что классы прописаны для обоих тегов: и открывающего и зыкрывающего. Это сделано специально, чтобы не перегружать QSP при поиске тегов в тексте. Любой HTML-рендер исправит неверно записанный закрывающий тег самостоятельно.
Весь текст между этими тегами на время интерпретации диалога будет удалён, а когда игрок завершит диалог, текст восстановится к изначальному состоянию.
Если нужно скрыть какой-то текст на время интерпретации диалога, но не выводить вместо него диалог, используйте другие специальные теги:
Например, таким образом можно скрывать ссылки на вызов диалога из основного описания.
Пример описания, в которое встраивается диалог, можно посмотреть в игре с примерами диалогов на локации место;банк
в "диалоге Чешира".
Составные части интерпретатора диалогов
Теоретически интерпретатор должен работать без вашего вмешательства в его поведение, однако иногда вмешательство необходимо. Например, в "диалоге Арагорна" через уничтожение массива $DIALOG_BUTTONS
производится очистка списка кнопок перед закрытием диалога, чтобы игрок не мог ничего нажимать.
На подобный случай здесь и собраны пояснения различных элементов интерпретатора диалогов.
Общее назначение глобальных временных массивов
Список массивов, существующих только во время интерпретации диалога. При закрытии диалога уничтожаются.
$DIALOG_VALUE
— основной массив, сохраняющий различные настройки диалога на время сеанса.$DIALOG_REPLIC_LOG
— массив, сохраняющий лог диалога на время сеанса.$DIALOG_BUTTONS
— массив, сохраняющий список кнопок во время сеанса.
Управление через внешние глобальные переменные
Эти переменные сохраняют своё значение даже когда диалог закрыт, поэтому они влияют на поведение всех диалогов в игре.
Будьте внимательны!
GAME_VALUE[
- число реплик, которые сохраняются в логе. Если не указано, то сохраняется сто реплик, включая скрытые.'dialogs_log_size'
]GAME_VALUE[
- интервал задержки перед выводом следующей фразы из блока фраз. Если не указано равен 500 мс.'dialogs_timer_interval'
]$GAME_VALUE[
— должен содержать код, который выполнится при закрытии диалога (перед удалением временных массивов). Если код не прописан, при закрытии диалога просто очищается окно основного описания и восстанавливается тот текст, который был сохранён перед открытием диалога.'dialogs_true_goto'
]
Здесь может пригодиться команда
goto $curloc
, так как в процессе воспроизведения диалога значения некоторых переменных могут измениться, и это повлияет на описание локации.
Значения DIALOG_VALUE
Значения в DIALOG_VALUE
сохраняются только на время воспроизведения диалога.
$DIALOG_VALUE[
— в этой переменной сохраняется вид окна основного описания до воспроизведения диалога. Из него же потом восстанавливается текст в окне основного описания, когда диалог завершается.'screen_main'
]$DIALOG_VALUE[
— в этой переменной содержится "снимок" экрана вместе с размещённым в нём диалогом. Данный снимок обновляется при интерпретации реплики, и только после этого выводится на экран.'screen_now'
]$DIALOG_VALUE[
— здесь временно сохраняется первичный ключ строки, в которую прописан объект Диалог.'dialog_id'
]$DIALOG_VALUE[
— первичный ключ корневой реплики.'root_id'
]DIALOG_VALUE[
— число фраз, одновременно видимых на экране. По умолчанию — 10.'default_screen_replics_number'
]$DIALOG_VALUE[
— схема повторения реплик. Стандартный режим: ''default_replics_repeat'
]cicle
'.$DIALOG_VALUE[
— порядок вывода реплик. Стандартный режим: ''default_replics_shuffle'
]straight
'.DIALOG_VALUE[
— Максимальная длина текста в кнопке. Стандартное значение'default_buttons_length'
]128
.DIALOG_VALUE[
— переключатель, запускающий таймер, когда необходимо выводить фразы из блока.'timer_start'
]DIALOG_VALUE[
— в этой переменной сохраняется предельное пороговое время, после которого должна быть выведена фраза из блока фраз. Изменять не рекомендуется.'timer_next_refresh'
]$DIALOG_VALUE[
— список удалённых с экрана кнопок. Пока идентификатор реплики присутствует в этом списке, кнопка этой реплики не будет выводиться на экран. Переменная очищается при воспроизведении пассивной реплики.'del_btns_list'
]$DIALOG_VALUE[
— список реплик, удалённых из текущего воспроизведения диалога. Пока идентификатор реплики присутствует в этом списке, эта реплика не будет воспроизводиться. Тем не менее реплики удалённые таким образом доступны для воспроизведения, если использовать их метку.'del_replics_list'
]$DIALOG_VALUE[
— список зафиксированных реплик.'fix_btns_list'
]
Назначение локаций модуля:
Назначение локаций можно посмотреть в исходном коде модуля в репозитории: https://github.com/AleksVersus/easy.dialog.
Отладчик
Вы можете контролировать работу модуля, используя встроенный отладчик.
Подключение отладчика
Чтобы задействовать в своей игре встроенный в "easy.dialog" отладчик, пропишите в нужном месте, например, на самой первой локации, команду:
Соответственно для отключения отладчика достаточно выполнить команду:
Использование отладчика
Чтобы воспользоваться отладчиком, введите в строке ввода ключевое слово eid
и соответствующую команду отладчика, а затем нажмите клавишу ввода ("Enter ↵
").
Команды отладчика
Все команды отладчика должны начинаться с ключевого слова eid
. Ниже представлен список команд без указания этого слова.
help
— вывод справки по отладчику.run
- выполнить следующий послеrun
текст, как строку кода QSP. Пример:version
- проверить текущую версию модуля. Версия модуля возвращается в текстовом формате.clr
- очистить окно дополнительного описания.print
— вывести в дополнительное описание всю таблицу диалогов. При больших размерах таблицы это может занять время или подвесить игру.refs
- вывести в окно дополнительного описание таблицу с короткими именами диалогов.log
- вывести в окно дополнительного описание сохранённый лог реплик (содержимое$DIALOG_REPLIC_LOG
).html
- включить/отключить распознавание HTML в плеере.INDEX_DIALOG_VALUE=
— если ввести текстовый индекс, а затем поставить знак равенства, в окно дополнительного описания будет выведено значение из массиваDIALOG_VALUE
под указанным индексом. Используемые модулем ячейки перечисленны в разделе Значения DIALOG_VALUE.Пример. С помощью следующей команды, введённой в строку ввода, можно получить в окне дополнительного описания первичный ключ корневой реплики:
eid root_id=