Профиль NPC

Материал из MODFAQ.RU — моддинг классического S.T.A.L.K.E.R., TES и Fallout
Перейти к: навигация, поиск

Профиль NPC

Автор aka_sektor
Дополнил Charsi
Тип статьи справка
Актуальность ТЧ, ЧН, ЗП

Профиль NPC (Non-Player Character/Неигровой персонаж)[1][2] – это полное описание персонажа, включающее имя, группировку, ранг, репутацию, обмундирование, внешний вид, озвучку и диалоги. Используется для типизированной простановки персонажей, что экономит и время и позволяет достичь определенной неповторимости от игры к игре.


Сначала создается первичная секция профиля в *.xml-файле (в данном случае: npc_profile.xml) подключенном в параметре files, секции [profiles], файла gamedata\config\system.ltx

Пример:

	<character id="first_profile_npc_name">
		<class>npc_class_name</class>
	</character>

По классу указанному в первичной секции (в данном случае: npc_class_name ) читаются вторичные секции из *.xml-файлов (в данном случае: character_desc_*.xml) подключенных в параметре specific_characters_files, секции [profiles], файла gamedata\config\system.ltx

Подробнее о статусах

  • используются — обязательные теги профиля NPC.
  • необязательны — теги профиля NPC, но как можно понять из названия - не являющиеся обязательными. Например, если вас устраивает значение установленное по умолчанию.
  • не используются — теги от предыдущих версий движков игры, были отключены или переименованы в новых версиях. Рекомендуется удалить из профиля NPC.

Вместо символа $ – значение.

Теги Статус Платформа Описание тегов Пример значения Варианты значений и их описание
<specific_character id="$" team_default = "1">

или

<specific_character id="$" no_random = "1">
используются ТЧ, ЧН, ЗП Начало вторичной секции профиля
<specific_character id="main_profile_npc_name" team_default = "1">

или

<specific_character id="main_profile_npc_name" no_random = "1">

id="$" – имя секции.

Значения алгоритма чтения секции:
team_default = "1" – случайно выбирает одну вторичную секцию в классе из других с таким же значением.

no_random = "1" – исключает секцию из алгоритма. Для уникальных профилей, например.

Указывать значение, нужно только одно.
Если указать оба, произойдет 1 вариант вылета: specific_character.cpp
А если ни одного, то вылет: xrServer_Objects_ALife_Monsters.cpp

<name>$</name>
необязательны ТЧ, ЧН, ЗП Имя персонажа
<name>GENERATE_NAME_stalker</name>

или

<name>npc_name</name>
Случайно сгенерированное (в данном случае: из секции stalker_names_stalker файла gamedata\config\system.ltx)

или

уникальное имя string id из *.xml-файла подключенного в параметре files, секции [string_table], файла gamedata\config\localization.ltx

Если теги не указывать, просто не будет отображаться имя.

<icon>$</icon>
необязательны ТЧ, ЧН, ЗП Иконка персонажа в интерфейсе
<icon>ui_npc_icon_name</icon>
Имя texture id из *.xml-файла подключенного в параметре files, секции [texture_desc], файла gamedata\config\system.ltx

Если теги не указывать, будет установлена указанная в движке по умолчанию иконка ui_npc_u_barman.

<class>$</class>
используются ТЧ, ЧН, ЗП Имя класса
<class>npc_class_name</class>
Должен соответствовать указанному в первичной секции профиля.

Если теги не указывать, произойдет вылет: xrServer_Objects_ALife_Monsters.cpp

<community>$</community>
используются ТЧ, ЧН, ЗП Группировка. По ней определяются отношения
<community>stalker</community>
Соответствующие указанному в параметре communities, секции [game_relations] файла по пути gamedata\config\creatures\game_relations.ltx

Если теги не указывать, произойдет 2 вариант вылета: specific_character.cpp

<terrain_sect>$</terrain_sect>
необязательны ТЧ, ЧН, ЗП Неизвестно
<terrain_sect>stalker_terrain</terrain_sect>
Значения по умолчанию указаны в одноименной секции в файле по пути: gamedata\config\creatures\m_stalker.ltx
<rank>$</rank>
используются ТЧ, ЧН, ЗП Ранг персонажа
<rank>149</rank>
в цифрах; соответствующие указанному в параметре rating, секции [game_relations] файла по пути gamedata\config\creatures\game_relations.ltx

Если теги не указывать, произойдет 3 вариант вылета: specific_character.cpp

<reputation>$</reputation>
используются ТЧ Репутация персонажа
<reputation>12</reputation>
Соответствующие указанному в параметре reputation_names, секции [game_relations] файла по пути gamedata\config\creatures\game_relations.ltx
<money min="$" max="$" infinitive="$"/>
необязательны ТЧ, ЧН, ЗП Количество денег
<money min="200" max="600" infinitive="0"/>
Если тег не указывать, будет использовано значение из параметра money по умолчанию указано в файле по пути: gamedata\config\creatures\m_stalker.ltx

Если параметр удалить, будет установлено значение 0. Однако, в игре это не окажет эффекта, т.к. значение уже записано в all.spawn, его можно только изменить тегом.

min – минимум

max – максимум

Будет выбрано случайным образом от указанного минимума до указанного максимума. Если не указывать, будет установлено значение 0.

infinitive="0" – не восполняется.

infinitive="1" – восполняется после каждой сделки, но каждая отдельная сделка будет ограничена количеством денег NPC.

<snd_config>$</snd_config>
необязательны ТЧ, ЧН, ЗП Озвучка
<snd_config>characters_voice\human_01\newbie\</snd_config>
Путь до озвучки относительно директории gamedata\sounds

Если теги не указывать, NPC просто будет молчать.

<crouch_type>$</crouch_type>
необязательны ТЧ, ЧН, ЗП Неизвестно
<crouch_type>-1</crouch_type>
Значение параметра crouch_type по умолчанию указано в файле по пути: gamedata\config\creatures\m_stalker.ltx
<panic_threshold>$</panic_threshold>
необязательны ТЧ, ЧН, ЗП Функция оценки вероятности победы. Если падает ниже указанного порога, то NPC впадает в панику
<panic_threshold>0.1</panic_threshold>
от 0 до 1

0 — вообще не паникует

1 — всегда паникует

Значение параметра panic_threshold по умолчанию указано в файле по пути: gamedata\config\creatures\m_stalker.ltx

<visual>$</visual>
используются ТЧ, ЧН, ЗП Модель персонажа
<visual><code>actors\novice\green_stalker_2</code></visual>
Путь к *.ogf-файлу относительно директории gamedata\meshes

От прописанной в модели User Data (*.ltx-файл по пути: gamedata\config\models\capture) зависит бронированность NPC.

Если теги удалить, это не окажет эффекта, т.к. значение уже записано в all.spawn, его можно только изменить тегом.

<supplies>$</supplies>
необязательны ТЧ, ЧН, ЗП Секция спавна инвентаря
<supplies>
[spawn] \n
device_torch \n
wpn_pm, cond=0.5 \n
ammo_9x18_fmj = 1 \n
wpn_ak74 = 1, silencer \n
ammo_5.45x39_fmj = 3 \n
vodka = 1, prob=0.5 \n
device_torch = 1, prob=1 \n
</supplies>

Также можно подключить *.xml-файлы со спавн-секциями из директории gamedata\config

<supplies>
[spawn] \n
device_torch \n
wpn_pm, cond=0.5 \n
ammo_9x18_fmj = 1 \n
wpn_ak74 = 1, silencer \n
ammo_5.45x39_fmj = 3 \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml" \n
#include "gameplay\character_drugs.xml"
</supplies>
section = #, prob=$, cond=$ \n

или

wpn_section = #, addon addon addon\n

Где:

\n — переход на следующую строку

section — имя секции предмета

# — количество предметов (если не задано, будет равно 1)

cond=$ — состояние предмета после спавна (только для ТЧ). От 0 до 1.

prob=$ — вероятность спавна предмета. От 0 до 1.

wpn_section — имя секции оружия

addon — имя секции аддона (работает только с оружием). Могут быть указаны все доступные (см. параметры scope_status, silencer_status и grenade_launcher_status в конфиге оружия), через запятую

Если теги не указывать, NPC будет пустой.

<critical_wound_weights>
$
</critical_wound_weights>
необязательны ТЧ, ЧН, ЗП Неизвестно
<critical_wound_weights>55,30,15</critical_wound_weights>

или вместо этого подключить *.xml-файл с тегами из директории gamedata\config

#include "gameplay\character_criticals_*.xml"
Значение параметра critical_wound_weights по умолчанию указано в файле по пути: gamedata\config\creatures\m_stalker.ltx
<start_dialog>$</start_dialog>
необязательны ТЧ, ЧН, ЗП Диалог приветствия
<start_dialog>hello_dialog</start_dialog>

Также можно подключить *.xml-файл с тегами из директории gamedata\config

#include "gameplay\character_dialogs.xml"

Если теги удалить, это не окажет эффекта, т.к. значение уже записано в all.spawn, его можно только изменить тегом.

Имя dialog id из *.xml-файла подключенного в параметре files, секции [profiles], файла gamedata\config\system.ltx
<actor_dialog>$</actor_dialog>
необязательны ТЧ, ЧН, ЗП Обычный диалог
<actor_dialog>dm_cool_info_dialog</actor_dialog>
Имя dialog id из *.xml-файла подключенного в параметре files, секции [profiles], файла gamedata\config\system.ltx

Также можно подключить *.xml-файл с тегами из директории gamedata\config

#include "gameplay\character_dialogs.xml"

Если теги удалить, это не окажет эффекта, т.к. значение уже записано в all.spawn, его можно только изменить тегом.

</specific_character>
используются ТЧ, ЧН, ЗП Конец вторичной секции профиля Отсутствует Отсутствует
Устаревшие теги
<map_icon x="$" y="$"></map_icon>
не используются ТЧ Неизвестно
<map_icon x="1" y="0"></map_icon>
Неизвестно
<bio>$</bio>
не используются ТЧ Биография персонажа
<bio>npc_bio_name</bio>
Имя string id из *.xml-файла подключенного в параметре files, секции [string_table], файла gamedata\config\localization.ltx

Как это работает

  1. При спавне персонажа, считывается первичная секция его профиля (в данном случае: first_profile_npc_name)
  2. По первичной секции профиля, считывается класс его профиля (в данном случае: npc_class_name)
  3. По классу, считывается список всех вторичных секций для его профиля (например: main_profile_npc_name, main_profile_npc_2_name, main_profile_npc_3_name и т.д.)
  4. Одна из вторичных секций профиля выбирается случайно

Уникальный профиль

Для некоторых персонажей требуется четкое соответствие вторичной секции профиля. Например, для уникальных квестовых или сюжетных персонажей.

Задается тегами <specific_character>$</specific_character>.

Пример:

<character id="first_profile_npc_name">	
<class>npc_class_name</class>
<specific_character>main_profile_npc</specific_character>
</character>

Как это работает

  1. При спавне персонажа, считывается первичная секция его профиля (в данном случае: first_profile_npc_name)
  2. По первичной секции профиля, считывается класс его профиля (в данном случае: npc_class_name)
  3. По классу, считывается только та секция профиля, которая указана тегами (в данном случае: main_profile_npc)
    Если указанная секция не будет найдена, произойдет 2 вариант вылета: xml_str_id_loader.h

Источники