Профиль NPC
Профиль 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">
|
Значения алгоритма чтения секции:
Указывать значение, нужно только одно. |
<name>$</name>
|
необязательны | ТЧ, ЧН, ЗП | Имя персонажа |
<name>GENERATE_NAME_stalker</name>
или <name>npc_name</name>
|
Случайно сгенерированное (в данном случае: из секции stalker_names_stalker файла gamedata\config\system.ltx)
или уникальное имя Если теги не указывать, просто не будет отображаться имя. |
<icon>$</icon>
|
необязательны | ТЧ, ЧН, ЗП | Иконка персонажа в интерфейсе | <icon>ui_npc_icon_name</icon>
|
Имя texture id из *.xml-файла подключенного в параметре files , секции [texture_desc] , файла gamedata\config\system.ltx
Если теги не указывать, будет установлена указанная в движке по умолчанию иконка |
<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
Если параметр удалить, будет установлено значение
Будет выбрано случайным образом от указанного минимума до указанного максимума. Если не указывать, будет установлено значение
|
<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
Значение параметра |
<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
или
Где:
Если теги не указывать, 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
|
Как это работает
- При спавне персонажа, считывается первичная секция его профиля (в данном случае:
first_profile_npc_name
) - По первичной секции профиля, считывается класс его профиля (в данном случае:
npc_class_name
) - По классу, считывается список всех вторичных секций для его профиля (например:
main_profile_npc_name
,main_profile_npc_2_name
,main_profile_npc_3_name
и т.д.) - Одна из вторичных секций профиля выбирается случайно
Уникальный профиль
Для некоторых персонажей требуется четкое соответствие вторичной секции профиля. Например, для уникальных квестовых или сюжетных персонажей.
Задается тегами <specific_character>$</specific_character>
.
Пример:
<character id="first_profile_npc_name">
<class>npc_class_name</class>
<specific_character>main_profile_npc</specific_character>
</character>
Как это работает
- При спавне персонажа, считывается первичная секция его профиля (в данном случае:
first_profile_npc_name
) - По первичной секции профиля, считывается класс его профиля (в данном случае:
npc_class_name
) - По классу, считывается только та секция профиля, которая указана тегами (в данном случае:
main_profile_npc
)
Если указанная секция не будет найдена, произойдет 2 вариант вылета: xml_str_id_loader.h
Источники
- Перейти ↑ Документация к X-Ray SDK 0.7 от GSC Game World
- Перейти ↑ Пост пользователя "Malandrinus" на AMK форуме