В этой статье мы разберем как создать уникального/именного/квестового (называйте как хотите) НПС.
Все профили НПС прописываются в файлах character_desc_локация.Для раскладывания по полочкам, возьмем профиль Волка:
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\neytral\stalker_neytral_balon_1</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
#include "gameplay\character_criticals_4.xml"
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
<actor_dialog>escape_lager_volk_story</actor_dialog>
<actor_dialog>escape_lager_volk_story2</actor_dialog>
</specific_character>
И разложим все по полочкам.
<specific_character id="esc_wolf" team_default = "1"> </specific_character>
Внутри этой конструкции располагается все остальное. id - идентификатор Волка, team_default не изменяйте.
<name>esc_wolf_name</name>
Имя НПС, которое будет отображаться в игре. Здесь содержится ссылка на текст, но можно писать имя прямо здесь (если вы хотите, чтобы это был обычный непись с рандомным именем, то прописываете здесь: "GENERATE_NAME_нужная-группировка" (без кавычек).
<icon>ui_npc_u_stalker_neytral_balon_1</icon>Здесь указывается иконка НПС, которая будет отображаться в диалоге.
<bio>esc_wolf_bio</bio>На сколько я знаю, разрабы планировали кажому неписю сделать биографию, но так и не реализовали. Так что можете скопировать с любого профиля.
<class>esc_wolf</class>Класс НПС. Используется для респавна НПС. Для того, чтобы у нас не создавалось куча наших "уникальных" НПС, то мы создадим свой класс.
<community>stalker</community>Группировка (stalker - одиночки, bandit - бандит, dolg - Долг и т.д.)
<rank>434</rank>Ранг НПС (новичок, опытный и т.д.)
<reputation>5</reputation>Репутация.
Количество денег, которое может быть у НПС. Соотвественно минимальное значение и максимальное. Если поставить infinitive="1", то у НПС будут бесконечные деньги (как у торговца).
<snd_config>characters_voice\human_01\stalker\</snd_config>Ссылка на папку с голосом и фразами НПС.
<crouch_type>-1</crouch_type>На сколько знаю, этот параметр отвечает за тип приседания. Ни разу не использовал, поэтому ничего советовать не буду.
<visual>actors\neytral\stalker_neytral_balon_1</visual>Ссылка на визуальную модель НПС. Но если указать к примеру визуал экзоскелета, то и защитными характеристиками НПС будет обладать, как у экзоскелета.
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
Здесь указывается список предметов, которые будут появлятся у НПС.Ну а далее идут диалоги.
<start_dialog>escape_lager_volk_talk</start_dialog>Используется, если нужно, чтобы диалог начинал НПС, а
<actor_dialog>dm_cool_info_dialog</actor_dialog>если нужно, чтобы диалог начинал ГГ.
Итак, приступим к практике.
Откроем файл character_desc_escape и создадим профиль нашему НПС. Назовем его Викинг, id у него будет escape_viking, оденем в экзоскелет, группировка - одиночка, оружие - Винторез, класс - esc_viking, а так же пропишем диалоговую иконку НПС в экзоскелете:<specific_character id="escape_viking" team_default = "1">
<name>Викинг</name>
<icon>ui_npc_u_stalker_mo_exo</icon>
<bio>esc_wolf_bio</bio>
<class>esc_viking</class>
<community>stalker</community>
<terrain_sect>stalker_terrain</terrain_sect>
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="25000" infinitive="0"/>
<panic_treshold>0</panic_treshold>
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
<visual>actors\monolit\stalker_mo_exo</visual>
<supplies>
[spawn] \n
wpn_vintorez \n
ammo_9x39_pab9 = 10 \n
</supplies>
</specific_character>
Теперь нужно прописать нашего НПС в файле config/gameplay/npc_profile.xml:<character id="escape_viking">
<class>esc_viking</class>
<specific_character>escape_viking</specific_character>
</character>
Класс ОБЯЗАТЕЛЬНО должен совпадать с тем, который прописан в character_desc_escape, а specific_character должен совпадать с id нашего НПС в character_desc_escape.
Далее происываем нашего НПС в файле config/creatures/spawn_sections.ltx:
[escape_viking]:stalker $spawn = "respawn\agr2_respawn_factory" character_profile = escape_viking spec_rank = regular community = stalkerВ квадратных скобках прописываете любое свое название, spawn ставите от любого НПС, с character_profile все понятно, spec_rank оставляйте regular, community тоже все ясно.
НПС мы уже по сути создали, но мы не прописали ему логику. Без логики его будет подхватывать алайф и наш НПС пойдет бродить по Зоне куда глаза глядят.
Создадим логику при которой НПС будет стоять на месте, но при этом будет атаковать врагов, а после перестрелки возвращаться на свое место.
Создадим в папке config/scripts (ВНИМАНИЕ! НЕ gamedata/scripts, а именно config/scripts!!!) новый ltx файл, назовем его logic_viking и добавим туда такую логику:
[logic] active = remark1 danger = danger_ignore [danger_ignore] ignore_distance = 5 [remark1] no_move = true
Теперь снова откроем spawn_sections.ltx и добавим в секцию нашего нового НПС путь к логике:
[escape_viking]:stalker $spawn = "respawn\agr2_respawn_factory" character_profile = escape_viking spec_rank = regular community = stalker custom_data = scripts\logic_viking.ltx
Все. Создание НПС мы закончили, но теперь нам нужно его заспавнить. Для проверки нашей работы гораздо быстрее и удобней будет сделать спавн через скрипт. Как?
Заспавнить НПС с помощью скриптовой функции. Для одиночных спавнов гораздо удобней использовать скрипт, а не редактировать all.spawn.
Для начала нам понадобятся координаты. Для их снятия есть очень полезный скрипт от камрада singapur22, который отображает координаты положения ГГ, а так же имеет еще несколько полезных функций, о которых написано в ридми к нему.
Итак запускаем игру с данным скриптом, встаем в точку, где бы нам хотелось создать НПС и делаем скрин. Или можете взять уже снятые мной координаты, которые будут прописаны ниже (НПС в этих координатах появится в деревне новичков в домике, сбоку которого стоит Волк.
Функций для спавна не мало. Мне известны минимум три, но использую я всегда эту:
function spawn_girl()
local x= координаты Х
local y= координаты У
local z= координаты Z
local level_vertex= lvid
local game_vertex_id= gvid
alife():create("название_нпс_из_spawn_sections",vector():set(x,y,z),level_vertex,game_vertex_id)
end
Координаты у нас есть, функцию мы знаем. Приступим к спавну (в качестве примера буду разбирать спавн НПС из статьи "Создание и редактирование НПС").
Открываем файл к примеру escape_dialog.script и пропишем сюда нашу функцию с уже прописанными координатами (можете создать свой скриптовый файл если вам так удобней):function spawn_viking()
local x= -187.171
local y= -19.491
local z= -132.909
local level_vertex= 64301
local game_vertex_id= 56
alife():create("escape_viking",vector():set(x,y,z),level_vertex,game_vertex_id)
end
Отлично. Теперь нужно активировать эту функцию из какого-нибудь диалога или инфопоршня. Я возьму диалог из статьи по созданию диалогов и пропишу в любое место свою функцию:
<phrase id="3"> <text>prinesi_vodky_3</text> <action>escape_dialog.spawn_viking</action> <next>4</next> </phrase>
Вот и все. Запускаем игру, проводим диалог с Сидором, и идем в дом, возле которого стоит Волк. Там будет стоять наш новый НПС.



Войти
Регистрация













Русский (RU)
Український (UA)
English (ENG)