Система сюжетной информации (инфопорции) — различия между версиями
RedPython (обсуждение | вклад) (Новая страница: «==Введение== Система сюжетной информации (ССИ) нужна для обеспечения происхождения и зап…») |
RedPython (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
Система сюжетной информации (ССИ) нужна для обеспечения происхождения и запоминания сюжетных событий в игре. | Система сюжетной информации (ССИ) нужна для обеспечения происхождения и запоминания сюжетных событий в игре. | ||
− | |||
− | При помощи | + | При помощи ССИ можно создавать абстрактные порции сюжетной информации (инфопорции). Они не могут передаваться от одного объекта к другому. Они могут либо присутствовать, либо отсутствовать; либо устанавливаться, либо сниматься. Фактически наличие инфопорции означает то, что мы дошли до какого-то этапа в сюжете, сценке, последовательности. Условно они разделяются на три группы: |
+ | * '''сюжетные'''. Могут только устанавливаться. Снимать их как минимум некорректно. Обычно обозначают завершение какого либо события, квеста и так далее; | ||
+ | * '''квестовые'''. Могут и устанавливаться, и сниматься. Описывают продвижение персонажа внутри одного квеста. | ||
+ | * '''вспомогательные'''. Могут и устанавливаться, и сниматься. Используются обычно для синхронизации скриптов или событий. | ||
+ | |||
+ | Вне зависимости от типа инфопорций, все они описываются идентично и обладают равными возможностями. Разница только в смысловом наполнении. Следует также понимать, что '''''инфопорция всегда находится у одного объекта'''''. Следовательно, если вы установили у игрока инфопорцию, то она не появится у торговца. Если вы установили её у торговца – то она не появится у игрока. Об этом следует помнить, и следить за тем, кому выдаёте инфопорции и у кого проверяете их наличие. Это очень большой источник ошибок и чаще всего ошибаются именно здесь. | ||
==Функции скриптового game_object== | ==Функции скриптового game_object== | ||
+ | При помощи скриптовых функций можно давать или забирать информацию у объектов Inventory Owner в игре. | ||
* '''''give_info_portion(info_id)''''' - получить информацию по идентификатору(строковому). | * '''''give_info_portion(info_id)''''' - получить информацию по идентификатору(строковому). | ||
Строка 27: | Строка 32: | ||
− | ==Структура | + | ==Структура инфопорций в XML-файле== |
− | + | Практически все подразделы необязательны. | |
− | <syntaxhighlight lang="xml"><info_portion id="actor_start"> | + | <syntaxhighlight lang="xml"> |
+ | <!-- id = "название инфопорции"--> | ||
+ | <info_portion id="actor_start"> | ||
<!-- скриптовые функции, которые будут вызваны при получении info_portion персонажем, аргументом скриптовый объект персонажа --> | <!-- скриптовые функции, которые будут вызваны при получении info_portion персонажем, аргументом скриптовый объект персонажа --> | ||
− | <action>info_test1.test_task1</action> | + | <action>info_test1.test_task1</action> <!-- например, здесь запускается функция для квеста --> |
<action>...</action> | <action>...</action> | ||
<!-- локации, которые будут показаны на карте --> | <!-- локации, которые будут показаны на карте --> | ||
− | <location > | + | <location> |
<level>0</level> | <level>0</level> | ||
<x>-250</x> | <x>-250</x> | ||
Строка 54: | Строка 61: | ||
<actor_dialog>trader_job</actor_dialog> | <actor_dialog>trader_job</actor_dialog> | ||
− | <!-- список id, деактивируемых info_portions у персонажа при получении данной--> | + | <!-- список id, деактивируемых info_portions у персонажа при получении данной инфопорции--> |
<disable>actor_start01</disable> | <disable>actor_start01</disable> | ||
<disable>actor_start02</disable> | <disable>actor_start02</disable> | ||
Строка 90: | Строка 97: | ||
</info_portion></syntaxhighlight> | </info_portion></syntaxhighlight> | ||
+ | |||
+ | Теперь о методике создания инфопорций. Злоупотреблять их количеством не следует. В source_safe GSC хранились графы всех сюжетных и квестовых инфопоршнов, и его поддерживали в живом состоянии, чтобы каждый видел взаимосвязь между ними и представлял общую картину. | ||
+ | |||
+ | Инфопоршны привязаны к уровням, на которых они выдаются. Находятся они в папке ''gamedata\config\gameplay'' в файлах с названием '''info_(название уровня).xml''', например: '''info_l01_escape.xml''', '''info_l03_agropprom.xml''' и т.д. | ||
==Источник== | ==Источник== | ||
− | Доки GSC, X-Wiki | + | Доки GSC за 2005г., X-Wiki за 2004г. |
[[Категория:A-Life]] | [[Категория:A-Life]] |
Версия 01:54, 19 ноября 2017
Содержание
Введение
Система сюжетной информации (ССИ) нужна для обеспечения происхождения и запоминания сюжетных событий в игре.
При помощи ССИ можно создавать абстрактные порции сюжетной информации (инфопорции). Они не могут передаваться от одного объекта к другому. Они могут либо присутствовать, либо отсутствовать; либо устанавливаться, либо сниматься. Фактически наличие инфопорции означает то, что мы дошли до какого-то этапа в сюжете, сценке, последовательности. Условно они разделяются на три группы:
- сюжетные. Могут только устанавливаться. Снимать их как минимум некорректно. Обычно обозначают завершение какого либо события, квеста и так далее;
- квестовые. Могут и устанавливаться, и сниматься. Описывают продвижение персонажа внутри одного квеста.
- вспомогательные. Могут и устанавливаться, и сниматься. Используются обычно для синхронизации скриптов или событий.
Вне зависимости от типа инфопорций, все они описываются идентично и обладают равными возможностями. Разница только в смысловом наполнении. Следует также понимать, что инфопорция всегда находится у одного объекта. Следовательно, если вы установили у игрока инфопорцию, то она не появится у торговца. Если вы установили её у торговца – то она не появится у игрока. Об этом следует помнить, и следить за тем, кому выдаёте инфопорции и у кого проверяете их наличие. Это очень большой источник ошибок и чаще всего ошибаются именно здесь.
Функции скриптового game_object
При помощи скриптовых функций можно давать или забирать информацию у объектов Inventory Owner в игре.
- 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).
Структура инфопорций в XML-файле
Практически все подразделы необязательны.
<!-- id = "название инфопорции"-->
<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>
Теперь о методике создания инфопорций. Злоупотреблять их количеством не следует. В source_safe GSC хранились графы всех сюжетных и квестовых инфопоршнов, и его поддерживали в живом состоянии, чтобы каждый видел взаимосвязь между ними и представлял общую картину.
Инфопоршны привязаны к уровням, на которых они выдаются. Находятся они в папке gamedata\config\gameplay в файлах с названием info_(название уровня).xml, например: info_l01_escape.xml, info_l03_agropprom.xml и т.д.
Источник
Доки GSC за 2005г., X-Wiki за 2004г.