Профили персонажей — различия между версиями
RedPython (обсуждение | вклад) (Новая страница: «Устанавливаются и настраиваются в файлах '''X:\gamedata\config\gameplay\character_desc_название группы.xml''' '…») |
RedPython (обсуждение | вклад) (заменил на более человекопонятное описание) |
||
Строка 1: | Строка 1: | ||
− | + | Под '''профилем персонажа''' ('''''character profile''''') подразумевается описание в виде шаблона некоторых харктеристик персонажа. | |
− | ''' | + | Под '''конкретным персонажем''' ('''''specific character''''') подразумевается чёткое и исчерпывающее описание сталкера, торговца или актера. Профиль персонажа задается в [[Level Editor]] во вкладке "npc_profile" для свойств объекта. |
+ | Профиль нужен для того, чтобы рандомизировать тех персонажей, которые появляются в игре, но тем самым не нарушить сценарий игры (т.е. персонажи хоть и появляются случайно, но соответствуют заданным характеристикам). | ||
− | + | XML-файлы шаблонов профилей задаются в секции <code>[profiles]</code> файла '''system.ltx''': | |
− | + | <syntaxhighlight lang="ini">[profiles] | |
− | <syntaxhighlight lang=" | + | ;список xml файлов, содержащих профили сталкеров и торговцев |
− | + | files = npc_profile,... | |
− | + | ;список xml файлов, содержащих описания конкретных сталкеров и торговцев | |
− | + | specific_characters_files = character_desc_general </syntaxhighlight> | |
− | </syntaxhighlight> | ||
− | |||
− | + | ||
+ | == Формат файла шаблонов профилей == | ||
+ | Настраиваются в '''gamedata\config\gameplay\npc_profile.xml''' | ||
+ | <syntaxhighlight lang="xml"><character id="soldier"> | ||
+ | <team>none</team> <!-- id группировки, к которой принадлежит. (Берётся из списка группировок) --> | ||
+ | <rank></rank> <!-- Ранг персонажа, возможно от 0 до 100. Персонаж выберется, если его ранг +/- 10 от заданного --> | ||
+ | <reputation></reputation> <!-- Карма персонажа. От 0 злой, до 100 добрый, если его репутация +/- 10 от заданного --> | ||
+ | <specific_character></specific_character> <!-- Идентификатор профиля описаний (если задано, то не нужно всё остальное) --> | ||
+ | </character></syntaxhighlight> | ||
+ | |||
+ | |||
+ | == Формат файла описаний конкретных персонажей == | ||
+ | Настраиваются в '''X:\gamedata\config\gameplay\character_desc_название группы.xml''' | ||
+ | |||
+ | Флажок <code>no_random="1"</code> задаётся, если нужно, чтобы персонаж не был доступен для случайного выбора по профилю. | ||
+ | |||
+ | <code>team_default="1"</code> должен быть задан '''ОБЯЗАТЕЛЬНО''' хотя бы один на команду — он будет использован, если вдруг (чего не должно случиться практически) израсходуются все профили. Профили без данного флажка, будучи единожды выбраны, больше не используются. | ||
+ | |||
+ | <syntaxhighlight lang="xml"><specific_character id="ivan_ivanych" no_random="1" team_default="1"> <!-- Уникальный id персональной информации --> | ||
+ | |||
+ | <icon x="14" y="4"></icon> <!-- Иконка, которая отображается при общении. Берётся с текстуры ui_icons_npc. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. --> | ||
+ | <map_icon x="3" y="2"></map_icon> <!-- Иконка, отображаемая на карте. Берётся с текстуры ui_icons_map. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. --> | ||
+ | |||
+ | <rank>10</rank> | ||
+ | <reputation>0</reputation> | ||
+ | |||
+ | <panic_threshold>0.1</panic_threshold> <!-- Порог паники. Значение может изменяться от 0 до 1. Если функция оценки вероятности победы падает ниже указанного порога, то сталкер впадает в панику. Если вы установится 0 — в панику он впадать вообще не будет, если в 1 — то будет бегать от крысы. --> | ||
+ | |||
+ | <class>Bandit_master</class> <!-- Список классов для profiles, к которым может принадлежать персонаж. То, что связывает этот профиль с идентификатором персонажа. --> | ||
+ | |||
+ | <community>bandit</community> <!-- Имя группировки данного персонажа. По ней определяется отношение к актору и другим персонажам. --> | ||
+ | |||
+ | <name>Неизвестный бандит</name> <!-- Высвечиваемое имя, должно прогоняться через стрингтейбл. --> | ||
+ | |||
+ | <bio>Опытный бандит. Детальная информация отсутствует.</bio> <!-- Биография персонажа, должна прогоняться через стрингтейбл. В релизе не используется. --> | ||
+ | |||
+ | <start_dialog>hello_dialog</start_dialog> <!-- Стартовый диалог этого персонажа. Более подробно в описании диалогов. --> | ||
+ | |||
+ | <actor_dialog></actor_dialog> <!-- Диалоги актера (может быть много), которые будут доступны только при встрече с данным персонажем. В принципе не сильно обязательно, но было бы очень удобно. --> | ||
+ | |||
+ | <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> | ||
+ | |||
+ | </specific_character> </syntaxhighlight> | ||
+ | |||
+ | Для некоторых персонажей требуется четкое соответствие тип персонажа – персонаж. Например для уникальных квестовых или сюжетных персонажей. В таком случае делаем так, чтобы соответствующему классу персонажа соответствовал только один профиль. В качестве примера класс и профиль Волка: | ||
+ | <syntaxhighlight lang="xml"> <character id="stalker_esc_wolf"> | ||
+ | <class>stalker_esc_wolf</class> <!-- уникальный класс для Волка --> | ||
+ | <specific_character>stalker_esc_wolf</specific_character> | ||
+ | </character></syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang="xml"> <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></syntaxhighlight> | ||
+ | Обратите внимание: хоть класс Волка и отличается от класса сталкера-новичка, оба они относится к той же группировке. | ||
+ | |||
+ | |||
+ | '''Скопировано из доков GSC за 2005г.''' | ||
+ | |||
+ | {{#related:Формат XML}} | ||
+ | {{#related:Диалоги}} | ||
[[Категория:Справка]] | [[Категория:Справка]] |
Версия 19:10, 15 марта 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 персональной информации -->
<icon x="14" y="4"></icon> <!-- Иконка, которая отображается при общении. Берётся с текстуры ui_icons_npc. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. -->
<map_icon x="3" y="2"></map_icon> <!-- Иконка, отображаемая на карте. Берётся с текстуры ui_icons_map. Отсчитывается с верхнего левого угла, но не по пикселям, а по позициям, равным одной иконке. -->
<rank>10</rank>
<reputation>0</reputation>
<panic_threshold>0.1</panic_threshold> <!-- Порог паники. Значение может изменяться от 0 до 1. Если функция оценки вероятности победы падает ниже указанного порога, то сталкер впадает в панику. Если вы установится 0 — в панику он впадать вообще не будет, если в 1 — то будет бегать от крысы. -->
<class>Bandit_master</class> <!-- Список классов для profiles, к которым может принадлежать персонаж. То, что связывает этот профиль с идентификатором персонажа. -->
<community>bandit</community> <!-- Имя группировки данного персонажа. По ней определяется отношение к актору и другим персонажам. -->
<name>Неизвестный бандит</name> <!-- Высвечиваемое имя, должно прогоняться через стрингтейбл. -->
<bio>Опытный бандит. Детальная информация отсутствует.</bio> <!-- Биография персонажа, должна прогоняться через стрингтейбл. В релизе не используется. -->
<start_dialog>hello_dialog</start_dialog> <!-- Стартовый диалог этого персонажа. Более подробно в описании диалогов. -->
<actor_dialog></actor_dialog> <!-- Диалоги актера (может быть много), которые будут доступны только при встрече с данным персонажем. В принципе не сильно обязательно, но было бы очень удобно. -->
<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>
</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г.