Профили персонажей — различия между версиями

Материал из xrWiki
Перейти к: навигация, поиск
(Новая страница: «Устанавливаются и настраиваются в файлах '''X:\gamedata\config\gameplay\character_desc_название группы.xml''' '…»)
 
(заменил на более человекопонятное описание)
Строка 1: Строка 1:
Устанавливаются и настраиваются в файлах '''X:\gamedata\config\gameplay\character_desc_название группы.xml'''
+
Под '''профилем персонажа''' ('''''character profile''''') подразумевается описание в виде шаблона некоторых харктеристик персонажа.
  
'''Профиль персонажа''' – это, собственно, полное описание персонажа, включающее имя, группировку, ранг, обмундирование, описание и внешний вид. Используется для типизированной простановки персонажей, что экономит и время и позволяет достичь определенной рандомности от игры к игре.
+
Под '''конкретным персонажем''' ('''''specific character''''') подразумевается чёткое и исчерпывающее описание сталкера, торговца или актера. Профиль персонажа задается в [[Level Editor]] во вкладке "npc_profile" для свойств объекта.
  
 +
Профиль нужен для того, чтобы рандомизировать тех персонажей, которые появляются в игре, но тем самым не нарушить сценарий игры (т.е. персонажи хоть и появляются случайно, но соответствуют заданным характеристикам).
  
== Создание профиля ==
+
XML-файлы шаблонов профилей задаются в секции <code>[profiles]</code> файла '''system.ltx''':
В '''gamedata\config\gameplay\npc_profile.xml''' создается уникальный идентификатор типа персонажа:
+
<syntaxhighlight lang="ini">[profiles]
<syntaxhighlight lang="xml">
+
;список xml файлов, содержащих профили сталкеров и торговцев
<character id="stalker_novice">
+
files = npc_profile,...
<class>Stalker_novice</class>
+
;список xml файлов, содержащих описания конкретных сталкеров и торговцев
</character>
+
specific_characters_files = character_desc_general </syntaxhighlight>
</syntaxhighlight>
 
'''Класс персонажа''' – это уникальный идентификатор класса, по которому будет браться конкретный профиль для данного персонажа (ссылаться на определенный файл с профилями).
 
  
В '''character_desc_название класса/xml''' описываются конкретные профили. Они умышленно разбиваются на файлы по группировкам или уровням, чтобы облегчить навигацию и восприятие. Обычно на каждый класс создается несколько профилей. Некоторые из них детерминированы(имеют ФИО, уникальную биографию и тд), некоторые – базовые. Базовые отмечены флажком  <code>team_default = "1"</code>. Логика работы такая: при создании персонажа считывается его тип, по типу получается класс. Затем составляется список всех доступных профилей для данного класса и из них рандомно выбирается один. Уникальные детерминированные профили (без <code>team_default = "1"</code>), будучи выбраны однажды больше не выбираются. Профиль, единственный в своём классе, должен иметь <code>team_default = "1"</code>
+
 
 +
== Формат файла шаблонов профилей ==
 +
Настраиваются в '''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г.