Вызов функции: различия между версиями
Нет описания правки |
мНет описания правки |
||
| (не показаны 2 промежуточные версии этого же участника) | |||
| Строка 9: | Строка 9: | ||
|- | |- | ||
| '''Дополнили''' | | '''Дополнили''' | ||
| !SkIF!, | | !SkIF!, [[Overf1rst]], abramcumner | ||
|- | |- | ||
| '''Тип статьи''' | | '''Тип статьи''' | ||
| Строка 22: | Строка 22: | ||
В данной статье, представлены известные способы вызова скриптовых функций в игре. | В данной статье, представлены известные способы вызова скриптовых функций в игре. | ||
== Из диалога == | == Из диалога == | ||
| Строка 45: | Строка 44: | ||
Готово. Функция будет вызвана из скрипта при активации указанной фразы в игре. | Готово. Функция будет вызвана из скрипта при активации указанной фразы в игре. | ||
== Из функции с update == | == Из функции с update == | ||
| Строка 65: | Строка 63: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Для [[S.T.A.L.K.E.R. - Зов Припяти|ЗП]] этого делать не нужно, т.к. чтение секции <code>[info_portions]</code> закомментировано в движке. | Для [[S.T.A.L.K.E.R. - Зов Припяти|ЗП]] этого делать не нужно, т.к. чтение секции <code>[info_portions]</code> закомментировано в движке. | ||
=== Примечание === | === Примечание === | ||
| Строка 82: | Строка 79: | ||
end | end | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Универсальный способ<ref>[http://www.amk-team.ru/forum/topic/13604-sposoby-vyzova-funkcii/?do=findComment&comment=1121403 Пост пользователя "abramcumner" на AMK форуме]</ref> === | === Универсальный способ<ref>[http://www.amk-team.ru/forum/topic/13604-sposoby-vyzova-funkcii/?do=findComment&comment=1121403 Пост пользователя "abramcumner" на AMK форуме]</ref> === | ||
| Строка 94: | Строка 90: | ||
Готово. Функция будет вызвана один раз, сразу после начала новой игры. | Готово. Функция будет вызвана один раз, сразу после начала новой игры. | ||
== Из функции с update при получении info_portion == | == Из функции с update при получении info_portion == | ||
| Строка 109: | Строка 104: | ||
Готово. Функция будет вызвана один раз, сразу после получения инфопорции. | Готово. Функция будет вызвана один раз, сразу после получения инфопорции. | ||
== Из callback функции == | == Из callback функции == | ||
Подробности в статье: [[Callback функции]] | Подробности в статье: [[Callback функции]] | ||
== Источник == | == Источник == | ||
Текущая версия от 15:14, 30 августа 2024
|
Вызов функции | |
| Автор | 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")
endinfoportion_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")
endno_cycle_infoportion — инфопорция, которая необходима для устранения зацикленности вызова скрипта.
Подробнее о получении инфопорций в статье: Выдача info_portion
Готово. Функция будет вызвана один раз, сразу после получения инфопорции.
Из callback функции
Подробности в статье: Callback функции