Вызов функции — различия между версиями

Материал из MODFAQ.RU — моддинг классического S.T.A.L.K.E.R., TES и Fallout
Перейти к: навигация, поиск
(Новая страница: «__NOTOC__ {| class="wikitable" style="float:right; margin-left:0.8em; clear:right; text-align: center; font-size:12px; width: 300px;" |- | colspan=2 style="font-s…»)
 
Строка 22: Строка 22:
  
 
В данной статье, представлены известные способы вызова скриптовых функций в игре.
 
В данной статье, представлены известные способы вызова скриптовых функций в игре.
 +
  
 
== Из диалога ==
 
== Из диалога ==
Строка 44: Строка 45:
  
 
Готово. Функция будет вызвана из скрипта при активации указанной фразы в игре.
 
Готово. Функция будет вызвана из скрипта при активации указанной фразы в игре.
 +
  
 
== Из функции с update ==
 
== Из функции с update ==
Строка 63: Строка 65:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Для [[S.T.A.L.K.E.R. - Зов Припяти|ЗП]] этого делать не нужно, т.к. чтение секции <code>[info_portions]</code> закомментировано в движке.
 
Для [[S.T.A.L.K.E.R. - Зов Припяти|ЗП]] этого делать не нужно, т.к. чтение секции <code>[info_portions]</code> закомментировано в движке.
 +
  
 
=== Примечание ===
 
=== Примечание ===
Строка 79: Строка 82:
 
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> ===
Строка 90: Строка 94:
  
 
Готово. Функция будет вызвана один раз, сразу после начала новой игры.
 
Готово. Функция будет вызвана один раз, сразу после начала новой игры.
 +
  
 
== Из функции с update при получении info_portion ==
 
== Из функции с update при получении info_portion ==
Строка 104: Строка 109:
  
 
Готово. Функция будет вызвана один раз, сразу после получения инфопорции.
 
Готово. Функция будет вызвана один раз, сразу после получения инфопорции.
 +
  
 
== Из callback функции ==
 
== Из callback функции ==
 
Подробности в статье: [[Callback функции]]
 
Подробности в статье: [[Callback функции]]
 +
  
 
== Источник ==
 
== Источник ==

Версия 15:02, 27 февраля 2019

Вызов функции

Автор aka_sektor
Дополнили  !SkIF!, BoBaH_671, 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 функции


Источник