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. Однако эту же проверку можно было провести и в скриптовой функции-условии.
Если мы добавим эту функцию (с параметром, равным номеру прототипа машины) в условие реплики игрока "Покупаю Хайвеймен.", то при недостаточном количестве денег игрок не увидит данной реплики и не сможет по ней перейти.
Converted from CHM to HTML with chm2web Pro 2.85 (unicode) |