Введение Система сюжетной информации (ССИ) нужна для обеспечения происхождения и запоминания сюжетных событий в игре. При помощи ССИ можно создавать порции сюжетной информации (info portions).
При помощи скриптовых функций можно давать или забирать информацию у объектов Inventory Owner в игре.
Функции скриптового game_object
give_info_portion(info_id) - получить информацию по идентификатору(строковому).
give_info_portion_via_pda(info_id, who) - получить информацию по идентификатору от указанного объекта.
disable_info_portion(info_id) - убрать информацию.
has_info(info_id) - есть ли информация.
dont_has_info(info_id) - отсутствует ли информация.
Каждая из таких порций имеет уникальный текстовый id и является просто флажком в реестре, который автоматически загружается и сохраняется.
К возможностям info portion относится:
запуск функции по отношению к персонажу при получении info_portion (action);
добавления локаций на карту (location);
возможность инициирования диалогов актером (dialog);
возможность инициирования диалогов у актера (при разговоре с персонажем, который имеет info_portion) (actor_dialog);
добавления статей в энциклопедию (article);
добавление заданий и в меню заданий (task);
удаление из реестра уже известных info_portions (disable).
[править]
Структура Info Portion в XML-файле
<info_portion id="actor_start">
<!-- скриптовые функции, которые будут вызваны при получении info_portion персонажем, аргументом скриптовый объект персонажа -->
<action>info_test1.test_task1</action>
<action>...</action>
<!-- локации, которые будут показаны на карте -->
<location >
<level>0</level>
<x>-250</x>
<y>-127</y>
<icon name="Dealer" x="2" y="2" width="1" height="1"></icon>
<text>Bring artefacts to the Dealer</text>
</location>
<location >.....</location>
<!-- список диалогов, который может инициировать Info Portion непосредственно у актера-->
<dialog>trader_job</dialog>
<dialog>trader_talk_about</dialog>
<dialog>stalker_talk_about</dialog>
<!-- список диалогов, который может инициировать персонаж с Info Portion у актера-->
<actor_dialog>trader_job</actor_dialog>
<actor_dialog>trader_job</actor_dialog>
<!-- список id, деактивируемых info_portions у персонажа при получении данной-->
<disable>actor_start01</disable>
<disable>actor_start02</disable>
<!-- список id статей в энциклопедии, которые будут добавлены -->
<article>boar</article>
<article>flesh</article>
<!-- задание -->
<task>
<!-- первое задание в списке является основным и выделяется большим шрифтом -->
<objective>
<text>test task primary</text>
<!--
Скриптовая функция, возвращает текущее состояние задания,используя константы
task.completed - задание (цель выполнена) task.in_progress - в стадии выполнения task.fail - провалено
-->
<script_condition>info_test1.test_task1</script_condition>
</objective>
<!-- остальные задания - второстепенные -->
<objective>
<text>test task secondary 01</text>
<script_condition>info_test1.test_task2</script_condition>
</objective>
<objective>
<text>test task secondary 01</text>
<script_condition>info_test1.test_task3</script_condition>
</objective>
</task>
</info_portion>