FOnline
|
Функции скриптов могут вызываться на различных этапах работы диалога.
Различают 3 типа диалоговых функций
Данные функции применяются как условия для появления реплик, доступных игроку.
Если функция возвращает true, значит реплика доступна игроку и наоборот.
Для установки скриптового условия выберите в редакторе диалогов реплику, на которую необходимо поставить условие, перейдите на вкладку "Условия", выберите пункт "Скрипт (модуль@функция)", установите количество параметров, которые необходимо передать в функцию и заполните их, нажмите кнопку "добавить".
Возможные варианты функций
Количество параметров типа int в функции выбирается в зависимости от количества параметров указанных при добавлении условия в редакторе диалогов.
По умолчанию функция вызывается 2 раза, в первый раз перед показом диалога, а второй раз при выборе игроком реплики с заданным в условиях скриптом.
Сделано это для защиты, например, на случай, если кто-то украдет у игрока все деньги после того, как ему высветился вариант ответа, но до того, как он на него нажал.
По этим причинам желательно избегать выполнения каких-либо действий, кроме проверки рвзличных условий, внутри функции проверки условия.
Однако, для тех случаев, когда внутри функции-условия необходимо единожды выполнить какое-либо действие, повторную проверку можно отключить (установка флага на условие производится в редакторе диалогов).
Так же, можно воспользоваться глобальной переменной bool __DialogDemandRecheck, при повторной проверке, значение переменной будет равно true.
Данные функции выполняются один раз, после выбора игроком реплики, для которой в результате указана данная функция.
Добавление происходит по тому же принципу, что добавление функций для проверки условий.
Возможные варианты функций
Количество параметров типа int в функции так же выбирается в зависимости от количества параметров, указанных при добавлении функции в редакторе диалогов. Функции, возвращающие числовое значение, должны возвращать номер ветки диалога, на которую нужно перейти после выполнения функции или одно из специальных значений, приводящих к закрытию диалога, открытию бартера, началу атаки или возращению к предыдущему диалогу (Dialog links).
Данные функции вызываются в трех случаях:
Для проверки в каком из случаев запущена данная функция, существует 3 макроса
Если была использована функция "Сказать о", то строка text будет содержать текст, сказанный игроком.
В случае, если функция вызвана при генерации диалога, в строку text можно будет поместить текст для определения лексем, использованых в текущем диалоге (как для самого диалога, так и для реплик игрока)
Примечание: При использовани функции, возращающей числовое значение, можно перенаправить игрока на другую ветку диалога в случае использования функции "Сказать о", возращаемое значение должно содержать номер ветки диалога или одно из специальных значений, приводящих к закрытию диалога, открытию бартера, началу атаки или возращению к предыдущему диалогу (Dialog links)
Для примера рассмотрим несколько диалоговых веток диалога nr_t-ray.fodlg
T-Ray: "Могу предложить: Хаммер за @lex hummer@, Багги за @lex buggy@, Скаут за @lex scout@, Хайвемен за @lex highwayman@." (на ветку "повешена" функция nr_t-ray@dlg_PrepareBuy)
Игрок: "Покупаю Хайвеймен." (В результате выбора данной реплики запускается функция nr_t-ray@r_BuyHighwayman)
В данном примере на реплике "Покупаю Хайвеймен." не стоит никаких условий, то есть игрок всегда может на нее нажать, проверка наличия денег происходит в функции TryCreateCar. Однако эту же проверку можно было провести и в скриптовой функции-условии.
Если мы добавим эту функцию (с параметром, равным номеру прототипа машины) в условие реплики игрока "Покупаю Хайвеймен.", то при недостаточном количестве денег игрок не увидит данной реплики и не сможет по ней перейти.