Разбор профилей NPC

Материал из Modders-wiki - Библиотека знаний модмейкеров S.T.A.L.K.E.R.
Перейти к: навигация, поиск
Разбор профилей NPC
NPC profile logo.png
Описание
Авторaka_sektor
СоавторCharsi
Тип статьисправка
АктуальностьТЧ, ЧН, ЗП

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


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

Пример:

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

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

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

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

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

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

или

<specific_character id="$" team_default = "1">
Начало вторичной секции профиля
<specific_character id="main_profile_npc_name" no_random = "1">

или

<specific_character id="main_profile_npc_name_default_0" team_default = "1">

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

no_random = "1" – если нужно, чтобы в классе читалась только первая вторичная секция профиля.

team_default = "1" – если нужно, чтобы в классе читались несколько вторичных секций профиля. Также необходимо дописывать специальный постфикс _default_$ к имени каждой секции (где символ $ – цифра, начиная с нуля).

ТЧ, ЧН, ЗП необязательны
<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>
Должен соответствовать указанному в первичной секции профиля.

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

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

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

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

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

ТЧ используются
<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_default_0, main_profile_npc_name_default_1, main_profile_npc_name_default_2 и т.д.)
  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. По классу, считывается только та секция профиля, которая указана тегами (в данном случае: <specific_character>main_profile_npc</specific_character>)
    Если указанная секция не будет найдена, произойдет 2 вариант вылета: xr:Line 112

Источники

  1. Документация к X-Ray SDK 0.7 от GSC Game World