Профили персонажей — различия между версиями
RedPython (обсуждение | вклад) м |
RedPython (обсуждение | вклад) (→Формат файла описаний конкретных персонажей) |
||
Строка 29: | Строка 29: | ||
<code>team_default="1"</code> должен быть задан '''ОБЯЗАТЕЛЬНО''' хотя бы один на команду — он будет использован, если вдруг (чего не должно случиться практически) израсходуются все профили. Профили без данного флажка, будучи единожды выбраны, больше не используются. | <code>team_default="1"</code> должен быть задан '''ОБЯЗАТЕЛЬНО''' хотя бы один на команду — он будет использован, если вдруг (чего не должно случиться практически) израсходуются все профили. Профили без данного флажка, будучи единожды выбраны, больше не используются. | ||
+ | |||
+ | Параметры, отмеченные '''(Н)''', необязательны для использования. | ||
<syntaxhighlight lang="xml"><specific_character id="ivan_ivanych" no_random="1" team_default="1"> <!-- Уникальный id персональной информации --> | <syntaxhighlight lang="xml"><specific_character id="ivan_ivanych" no_random="1" team_default="1"> <!-- Уникальный id персональной информации --> | ||
+ | |||
+ | <name>Неизвестный бандит</name> <!-- Высвечиваемое имя, должно прогоняться через стрингтейбл. --> | ||
<icon x="14" y="4"></icon> <!-- Иконка, которая отображается при общении. Берётся с текстуры ui_icons_npc. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. --> | <icon x="14" y="4"></icon> <!-- Иконка, которая отображается при общении. Берётся с текстуры ui_icons_npc. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. --> | ||
+ | |||
<map_icon x="3" y="2"></map_icon> <!-- Иконка, отображаемая на карте. Берётся с текстуры ui_icons_map. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. --> | <map_icon x="3" y="2"></map_icon> <!-- Иконка, отображаемая на карте. Берётся с текстуры ui_icons_map. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. --> | ||
− | < | + | <bio>Опытный бандит. Детальная информация отсутствует.</bio> <!-- (Н) Биография персонажа, должна прогоняться через стрингтейбл. В релизе не используется. --> |
− | + | ||
− | |||
− | |||
− | <class> | + | <class>bandit_master</class> <!-- Список классов для profiles, к которым может принадлежать персонаж. То, что связывает этот профиль с идентификатором персонажа. --> |
<community>bandit</community> <!-- Имя группировки данного персонажа. По ней определяется отношение к актору и другим персонажам. --> | <community>bandit</community> <!-- Имя группировки данного персонажа. По ней определяется отношение к актору и другим персонажам. --> | ||
− | < | + | <snd_config>characters_voice\human_02\military\</snd_config> <!-- Звуковой конфиг данного персонажа. Путь к папке со звуками относительно \gamedata\sounds\ --> |
+ | |||
+ | <crouch_type>0</crouch_type> <!-- (Н) Тип приседания. 0 - слегка присев, 1 - низкий присяд; -1 - случайный выбор. --> | ||
+ | |||
+ | <panic_threshold>0.1</panic_threshold> <!-- (Н) Порог паники. Значение может изменяться от 0 до 1. Если функция оценки вероятности победы падает ниже указанного порога, то сталкер впадает в панику. Если вы установите 0 — в панику он впадать вообще не будет, если в 1 — то будет бегать от крысы. --> | ||
+ | |||
+ | <hit_probability_factor>1.0</hit_probability_factor> <!-- (Н) Меткость персонажа. Может меняться от 0 до 1. При 0 будет мазать в упор. --> | ||
+ | |||
− | < | + | <rank>10</rank> <!-- Ранг персонажа в глобальной таблице. --> |
− | < | + | <reputation>0</reputation> <!-- Репутация. Может быть отрицательной. --> |
− | |||
<visual>actors\bandit\stalker_bandit_8</visual> <!-- Имя ogf-модели (без расширения) --> | <visual>actors\bandit\stalker_bandit_8</visual> <!-- Имя ogf-модели (без расширения) --> | ||
Строка 87: | Строка 96: | ||
</supplies> | </supplies> | ||
+ | |||
+ | |||
+ | <mechanic_mode>1</mechanic_mode> <!-- (Н) (добавлено в ЧН) Игнорировать врагов. Подразумевается, что персонаж находится в защищённом месте и бессмертен либо скрывается при нападении на базу. --> | ||
+ | |||
+ | |||
+ | <start_dialog>hello_dialog</start_dialog> <!-- Стартовый диалог этого персонажа. Более подробно в описании диалогов. --> | ||
+ | |||
+ | <actor_dialog></actor_dialog> <!-- Диалоги актера (может быть много), которые будут доступны только при встрече с данным персонажем. В принципе не сильно обязательно, но было бы очень удобно. --> | ||
</specific_character> </syntaxhighlight> | </specific_character> </syntaxhighlight> | ||
− | Для некоторых персонажей требуется | + | Для некоторых персонажей требуется чёткое соответствие "тип персонажа – персонаж". Например, для уникальных квестовых или сюжетных персонажей. В таком случае делаем так, чтобы соответствующему классу персонажа соответствовал только один профиль. В качестве примера класс и профиль Волка: |
<syntaxhighlight lang="xml"> <character id="stalker_esc_wolf"> | <syntaxhighlight lang="xml"> <character id="stalker_esc_wolf"> | ||
<class>stalker_esc_wolf</class> <!-- уникальный класс для Волка --> | <class>stalker_esc_wolf</class> <!-- уникальный класс для Волка --> |
Версия 16:30, 24 марта 2018
Под профилем персонажа (character profile) подразумевается описание в виде шаблона некоторых характеристик персонажа.
Под конкретным персонажем (specific character) подразумевается чёткое и исчерпывающее описание сталкера, торговца или актёра. Профиль персонажа задается в Level Editor во вкладке "npc_profile" для свойств объекта.
Профиль нужен для того, чтобы рандомизировать тех персонажей, которые появляются в игре, но тем самым не нарушить сценарий игры (т.е. персонажи хоть и появляются случайно, но соответствуют заданным характеристикам).
XML-файлы шаблонов профилей задаются в секции [profiles]
файла system.ltx:
[profiles]
;список xml файлов, содержащих профили сталкеров и торговцев
files = npc_profile,...
;список xml файлов, содержащих описания конкретных сталкеров и торговцев
specific_characters_files = character_desc_general
Формат файла шаблонов профилей
Настраиваются в gamedata\config\gameplay\npc_profile.xml
<character id="soldier">
<team>none</team> <!-- id группировки, к которой принадлежит. (Берётся из списка группировок) -->
<rank></rank> <!-- Ранг персонажа, возможно от 0 до 100. Персонаж выберется, если его ранг +/- 10 от заданного -->
<reputation></reputation> <!-- Карма персонажа. От 0 злой, до 100 добрый, если его репутация +/- 10 от заданного -->
<specific_character></specific_character> <!-- Идентификатор профиля описаний (если задано, то не нужно всё остальное) -->
</character>
Формат файла описаний конкретных персонажей
Настраиваются в X:\gamedata\config\gameplay\character_desc_название группы.xml
Флажок no_random="1"
задаётся, если нужно, чтобы персонаж не был доступен для случайного выбора по профилю.
team_default="1"
должен быть задан ОБЯЗАТЕЛЬНО хотя бы один на команду — он будет использован, если вдруг (чего не должно случиться практически) израсходуются все профили. Профили без данного флажка, будучи единожды выбраны, больше не используются.
Параметры, отмеченные (Н), необязательны для использования.
<specific_character id="ivan_ivanych" no_random="1" team_default="1"> <!-- Уникальный id персональной информации -->
<name>Неизвестный бандит</name> <!-- Высвечиваемое имя, должно прогоняться через стрингтейбл. -->
<icon x="14" y="4"></icon> <!-- Иконка, которая отображается при общении. Берётся с текстуры ui_icons_npc. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. -->
<map_icon x="3" y="2"></map_icon> <!-- Иконка, отображаемая на карте. Берётся с текстуры ui_icons_map. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. -->
<bio>Опытный бандит. Детальная информация отсутствует.</bio> <!-- (Н) Биография персонажа, должна прогоняться через стрингтейбл. В релизе не используется. -->
<class>bandit_master</class> <!-- Список классов для profiles, к которым может принадлежать персонаж. То, что связывает этот профиль с идентификатором персонажа. -->
<community>bandit</community> <!-- Имя группировки данного персонажа. По ней определяется отношение к актору и другим персонажам. -->
<snd_config>characters_voice\human_02\military\</snd_config> <!-- Звуковой конфиг данного персонажа. Путь к папке со звуками относительно \gamedata\sounds\ -->
<crouch_type>0</crouch_type> <!-- (Н) Тип приседания. 0 - слегка присев, 1 - низкий присяд; -1 - случайный выбор. -->
<panic_threshold>0.1</panic_threshold> <!-- (Н) Порог паники. Значение может изменяться от 0 до 1. Если функция оценки вероятности победы падает ниже указанного порога, то сталкер впадает в панику. Если вы установите 0 — в панику он впадать вообще не будет, если в 1 — то будет бегать от крысы. -->
<hit_probability_factor>1.0</hit_probability_factor> <!-- (Н) Меткость персонажа. Может меняться от 0 до 1. При 0 будет мазать в упор. -->
<rank>10</rank> <!-- Ранг персонажа в глобальной таблице. -->
<reputation>0</reputation> <!-- Репутация. Может быть отрицательной. -->
<visual>actors\bandit\stalker_bandit_8</visual> <!-- Имя ogf-модели (без расширения) -->
<!-- Список оборудования, которое будет проспавнено сталкеру.
Если не нужно спавнить, то в Level Editor в Custom Data
следует добавить строку [dont_spawn_character_supplies] -->
<supplies>
<!-- Формат таков:
[spawn]
<section> [ = <count>[, <parameters> ] ]
здесь:
<section> = название секции в LTX
<count> = количество предметов, integer > 0 =1, если не задано
<parameters> = [<addons>] [<condition>] [<probability>]
<addons> = <addon> [<addons>]
<addon> = {scope | silencer | launcher} – соответственно прицел, глушак, подствольник
<condition> = {cond=float_value} – состояние вещи, изменяется от 0 (сломанный), до 1 (новый)
<probability> = {prob=float_value} – вероятность спауна предметов. Тоже от 0 до 1.
Важно: если задаем дополнительные параметры, нужно обязательно задавать количество предметов.
-->
<!-- Пример: -->
[spawn]
device_torch
wpn_ak74 = 1, silencer
wpn_ak74 = 4, launcher cond=0.8
wpn_ak74 = 1, scope prob=0.3
wpn_ak74 = 1, scope launcher silencer cond=0.5
wpn_fort = 8, cond=0.75 prob=0.5
</supplies>
<mechanic_mode>1</mechanic_mode> <!-- (Н) (добавлено в ЧН) Игнорировать врагов. Подразумевается, что персонаж находится в защищённом месте и бессмертен либо скрывается при нападении на базу. -->
<start_dialog>hello_dialog</start_dialog> <!-- Стартовый диалог этого персонажа. Более подробно в описании диалогов. -->
<actor_dialog></actor_dialog> <!-- Диалоги актера (может быть много), которые будут доступны только при встрече с данным персонажем. В принципе не сильно обязательно, но было бы очень удобно. -->
</specific_character>
Для некоторых персонажей требуется чёткое соответствие "тип персонажа – персонаж". Например, для уникальных квестовых или сюжетных персонажей. В таком случае делаем так, чтобы соответствующему классу персонажа соответствовал только один профиль. В качестве примера класс и профиль Волка:
<character id="stalker_esc_wolf">
<class>stalker_esc_wolf</class> <!-- уникальный класс для Волка -->
<specific_character>stalker_esc_wolf</specific_character>
</character>
<specific_character id="stalker_esc_wolf" team_default = "1"> <!-- обязательно team_default="1" -->
<name>Сталкер "Волк"</name>
<icon x="16" y="4"></icon>
<map_icon x="0" y="0"></map_icon>
<bio>Главарь лагеря новичков.</bio>
<class>stalker_esc_wolf</class> <!-- уникальный класс для Волка -->
<community>stranger</community>
<rank>30</rank>
<reputation>0</reputation>
<visual>actors\neytral\stalker_neytral_balon_1</visual>
<supplies>
[spawn] \n
wpn_pb \n
ammo_9x18_pbp \n
af_medusa \n
wpn_ak74 \n
ammo_5.45x39_fmj \n
device_torch \n
</supplies>
<start_dialog>escape_lager_volk_hello</start_dialog>
<actor_dialog>escape_lager_volk_job</actor_dialog>
<actor_dialog>escape_lager_volk_info</actor_dialog>
<actor_dialog>escape_lager_volk_dynamite_done</actor_dialog>
</specific_character>
Обратите внимание: хоть класс Волка и отличается от класса сталкера-новичка, оба они относятся к одной и той же группировке.
Скопировано из доков GSC за 2005г.