Профили персонажей

Материал из xrWiki
Перейти к: навигация, поиск

Под профилем персонажа (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> <!-- Имя группировки данного персонажа. По ней определяется отношение к актору и другим персонажам. -->

    <terrain_sect>stalker_terrain</terrain_sect> <!-- По каким местам разрешено ходить персонажу (см. m_stalker.ltx). Рудимент, оставшийся с билдовых времён. -->

    <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г.