Вызов функции
Вызов функции | |
Автор | aka_sektor |
Дополнили | !SkIF!, Overf1rst, abramcumner |
Тип статьи | руководство |
Актуальность | ТЧ, ЧН, ЗП |
Необходимый софт | Текстовый редактор |
В данной статье, представлены известные способы вызова скриптовых функций в игре.
Из диалога
Путь: gamedata\config\gameplay\dialogs_$.xml
Выберите диалог, потом активирующую фразу, и после неё вставьте следующий код:
<action>script_name.funct_name</action>
script_name
— имя скрипта.
funct_name
— имя функции в скрипте.
Пример:
<phrase id="dialog_name">
<text>dialog_text</text>
<action>script_name.funct_name</action>
<next>12</next>
</phrase>
Готово. Функция будет вызвана из скрипта при активации указанной фразы в игре.
Из функции с update
Путь: gamedata\scripts\bind_stalker.script
Найдите функцию actor_binder:update(delta)
, и допишите в неё следующий код:
if not has_alife_info("infoportion_name") then
script_name.funct_name()
give_info("infoportion_name")
end
infoportion_name
— имя инфопорции.
Для ТЧ/ЧН необходимо зарегистрировать info_portion
в любом из файлов подключенных в секции [info_portions]
, файла gamedata\scripts\system.ltx:
<info_portion id="infoportion_name"></info_portion>
Для ЗП этого делать не нужно, т.к. чтение секции [info_portions]
закомментировано в движке.
Примечание
В ТЧ отсутствует функция give_info
, её необходимо дописать в gamedata\scripts\_g.script:
function give_info (info)
db.actor:give_info_portion(info)
end
В ЧН, функция give_info
имеет имя gi
, необходимо изменить вызов функции:
if not has_alife_info("infoportion_name") then
script_name.funct_name()
gi("infoportion_name")
end
Универсальный способ[1]
Можно и не выполнять описанное в примечании, а использовать универсальный код, работающий в ТЧ, ЧН и ЗП:
if not has_alife_info("infoportion_name") then
script_name.funct_name()
db.actor:give_info_portion("infoportion_name")
end
Готово. Функция будет вызвана один раз, сразу после начала новой игры.
Из функции с update при получении info_portion
Аналогично предыдущему способу, но уже используя такой код:
if has_alife_info("infoportion_name") and not has_alife_info("no_cycle_infoportion") then
script_name.funct_name()
give_info("no_cycle_infoportion")
end
no_cycle_infoportion
— инфопорция, которая необходима для устранения зацикленности вызова скрипта.
Подробнее о получении инфопорций в статье: Выдача info_portion
Готово. Функция будет вызвана один раз, сразу после получения инфопорции.
Из callback функции
Подробности в статье: Callback функции