Jump to content




Photo

Создание и редактирование НПС

Создание и редактирование НПС

  • Please log in to reply
13 replies to this topic

#1
RUS_D

RUS_D

    Администратор

  • альтернативный текст
  • Тех. Админ
  • Клуб - reaktor
  • Старожил сайта
КПК - Сталкера
  • PipPipPipPip
  • Joined:
    08-December 08
  • 892 posts
  • Пропуск №: 2

0 warning points
Репутация: 198

Репутация: 198 Постов: 892
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.

В этой статье мы разберем как создать уникального/именного/квестового (называйте как хотите) НПС.

Все профили НПС прописываются в файлах 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>
 
Вот и все. Запускаем игру, проводим диалог с Сидором, и идем в дом, возле которого стоит Волк. Там будет стоять наш новый НПС.

#2
Гость_Deltik_*

Гость_Deltik_*
  • альтернативный текст
  • Бродяги

КПК - Сталкера
  • Joined:
    --
  • Пропуск №: 0

0 warning points
Репутация: 0

Репутация: Репутация:

Здравствуйте. Сейчас с сыном по очереди гоняем в Солянку и, судя по количеству квестовых веток - это надолго.

Возникла идея, но как её реализовать не могу сориентироваться.

В свой день рождения сын должен зайти в бар и увидеть там статичного НПСа, с плакатом в руках "Поздравляю, Димка" . Человек, который может создать НПСа в 3Д-Максе, у меня есть. 

Вопрос: как добавить статичный объект, ранее не использовавшийся в игре, на конкретное место конкретной локации?

В модах я вижу, что нарисовано много предметов- значит мою идею осуществить возможно.



#3
Fаgot

Fаgot

    Сталкер

  • альтернативный текст
  • Нейтралы
  • Завсегдатай - больше 1 год на сайте
КПК - Сталкера
  • PipPipPipPip
  • Joined:
    14-November 10
  • 220 posts
  • Пропуск №: 3158

0 warning points
Репутация: 3

Репутация: 3 Постов: 220
  • Страна проживания:СССР
  • Реальное имя:Александр
  • Пол:Мужчина
  • Город:Владивосток

Deltik, один из возможных вариантов...

Сперва надо снять координаты того места, где будет стоять твоя болванка. В bind_stalker.script (gamedata\scripts) ищешь функцию actor_binder:update(delta) , в неё, после

level_tasks.add_lchanger_location()self.bCheckStart = false
end

вставляешь следующее: 

if true then
local hud = get_hud()
local cs = hud:GetCustomStatic("cs_debug" )
if cs == nil then
hud:AddCustomStatic("cs_debug", true)
cs = hud:GetCustomStatic("cs_debug" )
end
local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id()
local pos, dir = db.actor: position(), db.actor:direction()
local pos2 = level.vertex_position(lvid)
local valid = pos2:distance_to(pos) <= 0.7
local msg = string.format("lvid: %d\\n", lvid) ..
string.format("gvid: %d\\n", gvid) ..
string.format("pos: %1.3f,%1.3f,%1.3f\\n", pos.x, pos.y, pos.z) ..
string.format("dir: %1.3f,%1.3f,%1.3f\\n", dir.x, dir.y, dir.z) ..
string.format("valid: %s", tostring(valid))
if cs ~= nil then
cs:wnd():SetText(msg)
end
end

Сохраняешь файл. 

Теперь в игре будут отображаться координаты на экране. Снимаешь координаты места, которое нужно (F12). 

Затем спавнишь по этим координатам сталкера, как физ.объект. Для этого в файле items.ltx (gamedata\config\misc) создаёшь секцию: 

[stalker_trup]:identity_immunities
;$spawn = "physics\dead_body"
$spawn = "respawn\esc_stalker_respawn_1"
visual = actors\novice\green_stalker_3.ogf
class = O_PHYS_S
remove_time = 99999

Сама функция спавна: 

function stalker_trup_spawn () 
alife():create("stalker_trup",vector():set(-25.510,-4.113,-30.414),левел_вертекс,гейм_вертекс)
end

координаты ,соответственно, свои вставляешь. 

Но подозреваю, что сталкер упадёт, когда ты подойдёшь к нему вплотную. Тогда надо чтоб человек, который тебе делает модель, привязал к ней кость, чтоб можно было закрепить объект на месте. Здесь мои знания ограничены... 

И спавнить его надо будет не так, как я выше описал, а в файле all.spawn, предварительно декомпелировав его прогой АСDC...

 

Есть ещё вариант - делать в СДК, но для тебя это не вариант, думаю. Мало того, что СДК надо изучать, так её ещё и запустить не просто на Вин-7...

 

Ещё, как вариант, можно заспавнить нормального, живого сталкера с определённой логикой, чтоб стоял на месте. Но надо тогда искать анимацию держания в руках плаката, затем делать модель и текстуру плаката с соответствующей надписью... Такой анимации в ТЧ, да и в НС, если не ошибаюсь, нет... 

Короче, всё гораздо сложнее, чем тебе кажется. 

 

Проще взять уже готовый плакат из ТЧ (модель в ogf), "привязать" к нему текстуру Нех-редактором. Текстуру с твоей надписью сделать заранее, можно в Фотошопе или в Paint.NET и поставить этот плакат на стол в баре. 

Я делал именно так.

Скрин
[attachment=14193:ss_user_11-02-16_11-15-37_(l05_bar).jpg]Правда, здесь я взял уже готовый плакат с картой, текстуры не привязывал. Просто показываю тебе место, где его можно поставить...


Edited by Fаgot, 02 November 2016 - 03:31.


#4
Гость_Deltik_*

Гость_Deltik_*
  • альтернативный текст
  • Бродяги

КПК - Сталкера
  • Joined:
    --
  • Пропуск №: 0

0 warning points
Репутация: 0

Репутация: Репутация:
Затем спавнишь по этим координатам сталкера, как физ.объект

Пока остановлюсь на первом варианте. В нём меньше непонятных слов.

1. Как я понимаю, для начала в игру надо вставить нужную мне 3д-модельку. Допустим, это будет некая прямоугольная коробка (сложные модели пока оставим на финал), которую я скачаю в инете. Назовём её NРК.3ds (Nекая Pрямоугольная Коробка).

2. Далее мне нужно переконвертировать  NРК.3ds в NРК.ogf . Для этого я ищу какой-то конвертер, разбираюсь с ним и конвертирую.

3. Теперь я должен положить NРК.ogf в какую-то папку игры, где хранятся 3Д-модели. Предположу, что это папка указана в строке visual = actors\novice\green_stalker_3.ogf. Я её пока не нашёл, но найду.

4. Снимаю координаты согласно вашему руководству и в строке visual  пишу, visual = actors\novice\NРК.3ds.ogf.

     Пока остановимся, чтоб не городить ошибок. Поправьте пожалуйста пункты, где я ошибся.


Edited by Deltik, 03 November 2016 - 12:52.


#5
Fаgot

Fаgot

    Сталкер

  • альтернативный текст
  • Нейтралы
  • Завсегдатай - больше 1 год на сайте
КПК - Сталкера
  • PipPipPipPip
  • Joined:
    14-November 10
  • 220 posts
  • Пропуск №: 3158

0 warning points
Репутация: 3

Репутация: 3 Постов: 220
  • Страна проживания:СССР
  • Реальное имя:Александр
  • Пол:Мужчина
  • Город:Владивосток
Deltik, примерно всё правильно, но можно упростить. Как я выше говорил - возьми уже готовое. В чистом ТЧ есть. Скачай программу Ogf Viwer (как-то так, по памяти пишу), или подобную,  с её помощью можно просматривать модели (ogf). Найди в gamedata/meshes подходящую модель, сделай копию, переименуй её, сделай текстуру и привяжи её к модели, как я выше писал.

#6
ed_rez

ed_rez

    Vysaidi ļauds vysaiži dora...

  • альтернативный текст
  • Нейтралы
  • Пользователь

КПК - Сталкера
  • PipPipPipPip
  • Joined:
    19-November 14
  • 246 posts
  • Пропуск №: 16357

0 warning points
Репутация: 0

Репутация: 0 Постов: 246
  • Страна проживания:Латвия
  • Реальное имя:Эд
  • Пол:Мужчина
  • Город:Рига

Для этого я ищу какой-то конвертер, разбираюсь с ним и конвертирую.

Только SDK и никак иначе.



#7
Гость_Deltik_*

Гость_Deltik_*
  • альтернативный текст
  • Бродяги

КПК - Сталкера
  • Joined:
    --
  • Пропуск №: 0

0 warning points
Репутация: 0

Репутация: Репутация:

Как я выше говорил - возьми уже готовое

Для тренировки- скорее всего так и сделаю. Спасибо.

Но в финале таки надо выйти на пацанёнка с плакатом в руках. 

 

Только SDK и никак иначе

значит нам туда дорога...))) Но это позже, надо сначала притереться к процессу, а то в голове пока- звенящая пустота



#8
ed_rez

ed_rez

    Vysaidi ļauds vysaiži dora...

  • альтернативный текст
  • Нейтралы
  • Пользователь

КПК - Сталкера
  • PipPipPipPip
  • Joined:
    19-November 14
  • 246 posts
  • Пропуск №: 16357

0 warning points
Репутация: 0

Репутация: 0 Постов: 246
  • Страна проживания:Латвия
  • Реальное имя:Эд
  • Пол:Мужчина
  • Город:Рига
Но в финале таки надо выйти на пацанёнка с плакатом в руках. 

Я немного поправлю Fаgot. Ему нужно сделать не динамическую модель, т.к. дойти до создания анимаций держания предмета- это еще тот геморрой. Первое- это анимация и этому нужно времечко учится, а ДР сына не будет ждать, а второе еще веселее, помнится мне я также думал, что все просто, что подменяя у Круглова его модель детектора на свою, он будет ее подхватывать, но не тут-то было, Круглов в итоге держал воздух и в воздухе нажимал кнопки.

Самый простой вариант- это сделать статичную модель, тут работы однозначно на минут 30 с СДК. Тебе нужно:

1. Выбрать модель НПС, кто будет держать

2. Сделать модель плаката и текстуру 

3. Удалить скелет НПС и собрать "скульптуру" с одной костью

4. Сделать модель *.ogf в СДК

5. Добавить через all.spawn этот предмет( скульптуру) по определенным координатам в Баре, также можно добавить и скриптом- тут как удобнее.

Вот и все. )) Дело благое, удачи!


Edited by ed_rez, 04 November 2016 - 15:18.


#9
Гость_Deltik_*

Гость_Deltik_*
  • альтернативный текст
  • Бродяги

КПК - Сталкера
  • Joined:
    --
  • Пропуск №: 0

0 warning points
Репутация: 0

Репутация: Репутация:


1. Выбрать модель НПС, кто будет держать

2. Сделать модель плаката и текстуру 

А если модель с плакатом в руках уже будет создана в 3дмаксе? Единая с нпс и текстурой?

Это прокатит?


Fаgot (04 November 2016 - 16:40):
Думаю, что да.


#10
ed_rez

ed_rez

    Vysaidi ļauds vysaiži dora...

  • альтернативный текст
  • Нейтралы
  • Пользователь

КПК - Сталкера
  • PipPipPipPip
  • Joined:
    19-November 14
  • 246 posts
  • Пропуск №: 16357

0 warning points
Репутация: 0

Репутация: 0 Постов: 246
  • Страна проживания:Латвия
  • Реальное имя:Эд
  • Пол:Мужчина
  • Город:Рига

Это прокатит?

Да, если полиогонаж не будет превышать возможности движка и я так понимаю ТЧ. Тогда сразу можно переходить к 3 пункту.



#11
Гость_Deltik_*

Гость_Deltik_*
  • альтернативный текст
  • Бродяги

КПК - Сталкера
  • Joined:
    --
  • Пропуск №: 0

0 warning points
Репутация: 0

Репутация: Репутация:

если полиогонаж не будет превышать возможности движка и я так понимаю ТЧ

ага,вот...этот момент надо будет проработать. Спасибо- ценно.



#12
ed_rez

ed_rez

    Vysaidi ļauds vysaiži dora...

  • альтернативный текст
  • Нейтралы
  • Пользователь

КПК - Сталкера
  • PipPipPipPip
  • Joined:
    19-November 14
  • 246 posts
  • Пропуск №: 16357

0 warning points
Репутация: 0

Репутация: 0 Постов: 246
  • Страна проживания:Латвия
  • Реальное имя:Эд
  • Пол:Мужчина
  • Город:Рига

этот момент надо будет проработать.

Чтобы не расстроить вылетом, даже рандомным, для ТЧ максимум = 30 тыс, если использовать движок от macron.



#13
Гость_Deltik_*

Гость_Deltik_*
  • альтернативный текст
  • Бродяги

КПК - Сталкера
  • Joined:
    --
  • Пропуск №: 0

0 warning points
Репутация: 0

Репутация: Репутация:
для ТЧ максимум = 30 тыс, если использовать движок от macron.

Спасибо, сообщу товарищу, избавили меня от поисков.

30 тыс попугаев имеется ввиду- 3дмакс? Если я скажу товарищу, "сделай скульптуру,в которой не более 30тыс. полигоналей" (например)- он меня поймёт? Возможно ли при этом ограничителе создать хоть примерное сходство с оригиналом? Или наплевать на сходство? Я так понимаю, что всякие Сидоровичи делались идентичными с реальными людьми?


Edited by Deltik, 04 November 2016 - 17:50.


#14
ed_rez

ed_rez

    Vysaidi ļauds vysaiži dora...

  • альтернативный текст
  • Нейтралы
  • Пользователь

КПК - Сталкера
  • PipPipPipPip
  • Joined:
    19-November 14
  • 246 posts
  • Пропуск №: 16357

0 warning points
Репутация: 0

Репутация: 0 Постов: 246
  • Страна проживания:Латвия
  • Реальное имя:Эд
  • Пол:Мужчина
  • Город:Рига

он меня поймёт?

Поймет.

30 тыс попугаев имеется ввиду- 3дмакс?

В любом удобном для моделлера 3Д редакторе.

Возможно ли при этом ограничителе создать хоть примерное сходство с оригиналом?

Можно, нужны фото человека в фас и анфас, чтобы в редакторе сразу делать правильные объемы.

Или наплевать на сходство?

Хммм, тут тебе самому решать.

Я так понимаю, что всякие Сидоровичи делались идентичными с реальными людьми?

Не думаю, но думаю, что есть двойники в мире. ))





реклама на сайте подключена

Использование материалов сайта только с разрешения Администрации LENA_D!
Или с указанием прямой ссылки на источник. 2010 © bar-reaktor.stalker-worlds.ru
Не забывай о нас. Мы всегда рады тебе!!!

Рейтинг Ролевых Ресурсов - RPG TOP