Центральные темы





Статистика Форума
Последние обновленные темы Самые популярные темы Самые активные / 6-ка лучших Новые участники / 6-ка новичков
Первые шаг...   Ответов [ 7 ]
Архив ссыл...   Ответов [ 0 ]
Персональн...   Ответов [ 4 ]
Склад с ун...   Ответов [ 0 ]
РП-шим в F...   Ответов [ 12 ]
Создание /...   Ответов [ 6 ]
Бар FireZ...   Ответов [ 89 ]
Игра в гор...   Ответов [ 61 ]
Считаем до...   Ответов [ 49 ]
Скрипт зал...   Ответов [ 21 ]
История зо...   Ответов [ 21 ]
Бар [ Св.О...   Ответов [ 19 ]
Dosegear   Постов [ 9483 ]
Крестоносец   Постов [ 426 ]
CM_Punk   Постов [ 256 ]
Воробей   Постов [ 170 ]
XemorDio   Постов [ 160 ]
Бармен   Постов [ 106 ]
vovankalugin87  [29.11.2023]
taranenkonikita74  [02.05.2023]
artem23096  [04.04.2023]
Stalker228  [26.03.2022]
gkbnk  [24.01.2022]
vbh7820  [07.12.2021]
  • Страница 1 из 1
  • 1
Форум » S.T.A.L.K.E.R Shadow of Chernobyl » Модостроение / Создание модов » Создание / Редактирование нового NPC (Текстовый урок, который покажет вам как создать нпс.)
Создание / Редактирование нового NPC
Dosegear Дата: Суббота, 26.04.2014, 13:33 | Сообщение # 1

Thorin Oakenshield
DoseMan
О-Сознание
Сообщений: 9483
Карма:
537



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


Все профили НПС прописываются в файлах 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>

Имя НПС, которое будет отображаться в игре. Здесь содержится ссылка на текст, но можно писать имя прямо здесь (если вы хотите, чтобы это был обычный непись с рандомным именем, то прописываете здесь: "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>

Ну это и так я думаю понятно =) [Репутация]

Код
<money min="600" max="2000" infinitive="0"/>

Количество денег, которое может быть у НПС. Соотвественно минимальное значение и максимальное. Если поставить infinitive="1", то у НПС будут бесконечные деньги (как у торговца).

Код
<snd_config>characters_voice\human_01\stalker\</snd_config>

Ссылка на папку с голосом и фразами НПС.

Код
<crouch_type>-1</crouch_type>

Это "типы приседания" P.S - Я никогда не использовал этот скрипт, и вам не советую лучше оставить как было.

Код
<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

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


Say my name, falles!
CM_Punk Дата: Суббота, 26.04.2014, 14:27 | Сообщение # 2

Генерал ВВС
Капитан
Военные
Сообщений: 256
Карма:
30
видео уроки будут в дальнейшем?

Это только чужая жизнь бывает в цене или не в цене. Свою собственную никому не охота отдавать так просто, без выкупа, без отчаянной попытки спастись.©
Dosegear Дата: Воскресенье, 27.04.2014, 16:45 | Сообщение # 3

Thorin Oakenshield
DoseMan
О-Сознание
Сообщений: 9483
Карма:
537
Dingo_ISAF, Я собирался начать глобально записывать мои личные создания модов. Но к сожалению это будет летом. Пока, не следует ожидать Видео-Уроков, лично от меня.

Say my name, falles!
CM_Punk Дата: Воскресенье, 27.04.2014, 19:31 | Сообщение # 4

Генерал ВВС
Капитан
Военные
Сообщений: 256
Карма:
30
Dosegear, ну подождем лета.

Это только чужая жизнь бывает в цене или не в цене. Свою собственную никому не охота отдавать так просто, без выкупа, без отчаянной попытки спастись.©
Dosegear Дата: Воскресенье, 27.04.2014, 20:20 | Сообщение # 5

Thorin Oakenshield
DoseMan
О-Сознание
Сообщений: 9483
Карма:
537
Dingo_ISAF, Лето. Лето - Это когда наши хосты начинают очень быстро увеличиваться)))

Say my name, falles!
Charly Дата: Суббота, 20.12.2014, 01:05 | Сообщение # 6

Новичок
Прибывший
Сообщений: 1
Карма:
0
Я совсем новичок. Не можешь, пожалуйста, написать, как заспавнить его через скрипт?
Dosegear Дата: Воскресенье, 21.12.2014, 17:44 | Сообщение # 7

Thorin Oakenshield
DoseMan
О-Сознание
Сообщений: 9483
Карма:
537
Charly, дабы не усложнять, расскажу всё по порядку. 
В скриптах есть одна, функция, отвечающая за спавн объектов:
Первый параметр - секция в конфигурациях, описывающая объект, например "bolt","medkit" - это простые секции, простых объектов а есть объекты, которые переходят в онлайн/оффлайн, это неписи, монстры и так далее, например mil_killer_respawn_2 - спавнится снайпер группировки киллеров.
С позицией, думаю объяснять не надо, только существует нюанс - высота это Y, а не Z

Задать позицию можно такой конструкцией: vector():set(x,y,z), где x, y и z - координаты точки на уровне, где спавним объект.
Вертекс в игре Сталкер не тоже самое, что вертекс в трехмерной графике. Vertex - определенная зона малого размера за которой закреплен индивидуальный номер в пределах уровня или целой игры. level_vertex определяет зону на уровне, по которой можно пройти NPC. game_vertex определяют зоны для свободного хождения, т.е. под руководством ИИ, а также между уровнями. Вертексы имеют одно из первостепенных значений. Точность положения указывается уже через точку спавна. Например, можно получить вертекс ближайший к актору - db.actor:level_vertex_id()
game_vertex_id нужен для того, чтобы указать на какой карте спавнить объект.
Соответственно, чтобы заспавнить что-нибудь на другой карте, достаточно указать game_vertex_id в четвертом параметре. Предположим:

Итак, чтобы, например, заспавнить болт под ногами актора, пишем:

 
Почему 1, а не level_vertex_id? Проверено - разницы особой нет, какой level_vertex_id, хотя в некоторых случаях надо прописывать валидный вертекс, а то предмет может просто заспавнится не там, где планировалось... Но по большей части все проходит нормально и с единицей (игнорирование level_vertex_id может приводить к проваливанию произведенных предметов/персонажей под землю). А вот game_vertex решает все - он указывает на каком уровне спавнить предмет, поэтому его надо указывать. Теоретически можно просто найти для каждого уровня по одному game_vertex'у и использовать их в скриптах. На самом деле game_vertex показывает какой фрагмент карты используется (вся карта разбита на кусочки, имеющие сквозную нумерацию по всем уровням, и game_vertex выбирает нужный) соответственно неправильное использование черевато....
Кроме того, есть еще один параметр - ID объекта, если указать ID NPC или актора - то предмет заспавнится у него в инвентаре.
Пример (спавним артефакт Медуза в инвентаре у актора):

 
Функция спавна возвращает серверный объект, то есть ни NPC, ни монстра ни что-либо еще.
Буду редактировать, со временем.


Say my name, falles!
Форум » S.T.A.L.K.E.R Shadow of Chernobyl » Модостроение / Создание модов » Создание / Редактирование нового NPC (Текстовый урок, который покажет вам как создать нпс.)
  • Страница 1 из 1
  • 1
Поиск:
22:36
Обновить
Пользователи, посетившие форум за текущий день




Design by Dosegear
Бесплатный конструктор сайтов - uCoz © 2014
Любое копирование графических материалов форума
Приведет в быстрому или медленному наказанию!

Яндекс.Метрика