Всем привет! Решил опубликовать туториал по созданию НПС через смарт_террейн в X-Ray SK 0.7
Открываем свою локацию в SDK. В моём случае это Кордон. 2. Выбираем Spawn Element 3. Ставим в произвольном месте smart_terrain (ai/smart_terrain) 4. Открываем его свойства, нажав Enter 5. Выставляем restrictor type: NOT A restrictor 6. Задаём имя, обязательно начинающееся с префикса локации, в моём случае это esc
И так, остановимся на названии esc_a1
7. Теперь нам нужно задать путь к файлу с Custom data, возвращаемся в свойства smart_terrain
В появившемся окне пишем:
[smart_terrain] cfg = scripts\escape\smart\esc_a1.ltx Мы задали путь к файлу с настройками для smart_terrain относительно папки configs.
8. В своей gamedata\configs создаем папку scripts, в ней – папку escape, в папке escape – папку smart, а в папке smart создаём наш файл с названием esc_a1.ltx 9. Записываем в созданный только что файл следующее: [smart_terrain] squad_id = 1 [exclusive] esc_a1_stalker_1 = escape\npc\esc_a1_stalker_1.ltx ! Поясняю, что мы сделали:
1. Создали обязательную секцию smart_terrain и в ней задали обязательный параметр squad_id. Так как это наш первый smart_terrain, то и squad_id будет равен единице.
2. Создали секцию exclusive, в которой хранятся имена работ NPC (или мутантов) и пути к ним. Мы создали ссылку на нашу первую работу с названием esc_a1_stalker_1, мы задали путь к ней относительно папки configs\scripts; по пути configs\scripts\escape\npc будет храниться файл с логикой для этой работы, который будет иметь название esc_a1_stalker_1.ltx. 10. Открываем созданный файл и пишем в него следующее: [logic@esc_a1_stalker_1] suitable = {=check_npc_name(esc_a1_stalker_1)} true active = walker prior = 200 [walker] path_walk = stalker_1_walk path_look = stalker_1_look
Теперь поясняю, что мы тут понаписали: 1. Создали обязательную секцию logic, где задаётся первая активная схема NPC, условия для этой работы и приоритет. 2. В этой секции записали параметр suitable, в котором задали условие, что эту работу может занять персонаж с именем esc_a1_stalker_1 и никто другой. 3. Мы задали обязательный параметр active, который задаёт начальную активную схему нашего персонажа, в данном случае этой схемой является walker. 4. Мы задали обязательный параметр prior, который хранит приоритет работы. Для чего это нужно? Всё очень просто. Если, к примеру, у нас есть две работы и один персонаж удовлетворяет условиям (suitable) обоих, то будет выбрана работа с высшим приоритетом. 5. После этого мы создали непосредственно секцию walker, где задали параметры path_walk и path_look. Первый параметр отвечает за точку, в которой стоит наш персонаж, второй – в которую он смотрит. Сейчас мы разберёмся с этим.
11. Поставим на карту точку спавна нашего NPC и точки walk и look для его работы; Переходим в Way Points и ставим на карту наш первый поинт. !Way Point должен быть строго на АИ-сетке!
12. Открываем свойства нашего поинта, нажав Enter
13. В появившемся окне задаём имя esc_a1_stalker_1_spawnpoint Имя spawnpoint’а нашего NPC можно задать любое, но лучше, если оно задано как у меня: префикс_локации_имя_смарта_имя_работы_spawnpoint (esc_a1_stalker_1_spawnpoint)
14. Теперь создаём непосредственно точки walk и look для нашей работы. Обращаю внимание, что название обязательно должно начинаться с префикса локации, после него – имени смарта, затем – имени работы, после – walk или look.
То есть так: esc_a1_stalker_1_walk и esc_a1_stalker_1_look.
! Очень важно: в логику пишется не полное имя пути, а его кусочек, начиная с имени работы: stalker_1_walk и stalker_1_look.
Ставим наш walk-point в произвольном месте и называем его как говорилось ранее, после чего переходим в Point Mode и нажимаем Enter, поставив галочку, где Flags 0.
Возвращаемся в Way Mode и напротив созданного walk-point’а ставим наш look-point и проделываем те же действия: называем, переходим в Point Mode, ставим галочку на нулевом флаге, возвращаемся в Way Mode.
Работа в SDK закончена. Компилируем спавн: Compile – Make Game
Ждём, пока появится уведомление о завершении сборки и жмём ОК.
Дальше нам нужно собрать сам файл спавна – all.spawn. В папке с SDK находим батник tool_create_spawn.cmd и открываем его, пишем следующее: start bin\designer\release\xrai -no_separator_check -s escape_csky
Опять же, обращаю внимание, что где escape_csky – это полное имя локации, а не префикс. То есть нам нужен не Name prefix, а Level path. Он находится там же, где мы задавали Name prefix: Scene – Options, копируем название локации из Level Path.
Не забываем регистрировать локацию в конфигах.
! Не забывайте, что для успешной компиляции на уровне должны быть graph_point’ы и actor.
Запускаем батник и ждём компиляции, после чего копируем наш escape_csky.spawn в свою gamedata\spawns и называем его all.spawn.
15. Всё. Теперь нужно создать профиль нашего персонажа и его спавн секцию. 1. Копируем из gamedata SDK файл spawn_sections.ltx, он лежит по пути configs\creatures. Переносем его аналогично в свою gamedata.
Мы создали спавн секцию нашего персонажа с названием esc_a1_stalker_1. Поясню, что мы написали ниже:
1. $spawn = "respawn\esc_a1_stalker_1" – это параметр для игры не нужен, он нужен для SDK, если вы свой файл кидаете туда, в SDK во вкладке Spawn Element вы сможете выбрать своего NPC и поставить на карту, чего делать не нужно. 2. character_profile = esc_a1_stalker_1 – ссылка на профиль в character_desc_escape.xml, который мы скоро создадим. Там будет храниться информация о NPC: имя, группировка, репутация, ранг, визуал, дефолтная схема озвучки, иконка и т. д. 3. spec_rank и community не столь важные параметры, чтобы про них говорить. 4. story_id = esc_a1_stalker_1 – очень важный, но не обязательный параметр, по story_id мы сможем проводить различные манипуляции с нашим NPC в будущем.
16. Теперь давайте создадим профиль нашему NPC в файле npc_profile.xml, который лежит по пути configs\gameplay. Копируем его из gamedata SDK в свою.
1. Открываем наш файл, идём в самый конец.
2. По аналогии с другими профилями регистрируем наш:
17. Теперь создадим для нашего NPC specific_character, в котором и будут все данные.
1. Копируем файл system.ltx из gamedata SDK в свою, ищем там [profiles].
2. Чуть-чуть ниже будет строка с именами файлов character_desc_ , в конце ставим запятую и пишем имя нашего файла: character_desc_escape 3. Зарегистрировали? Сохраняем.
18. Создаём в configs\gameplay файл character_desc_escape.xml.
1. Кидаем туда такую обязательную заготовку, в которой будут храниться данные о персонажах:
<?xml version='1.0' encoding="windows-1251"?>
<xml>
</xml>
2. Между <xml> </xml> нужно вставить какой-нибудь профиль из любого character_desc_ оригинала. Я взял первый попавшийся профиль с Затона, получилось следующее, вставляем всё в файл между теми тегами <xml> </xml>
5. Копируем содержимое пункта 4 и вставляем в свой файл, получится так:
6. Теперь нужно сделать ему отображение имени на русском. Копируем из gamedata SDK файл st_characters.xml, который лежит в configs\text\rus. Открываем его и идём в самый конец, написав туда следующее:
<string id="st_esc_a1_stalker_1_name">
<text>Лопух</text>
</string>
С этим закончили. Мы в шаге от победы. Осталось сделать нашему персонажу сквад, в котором он будет спавниться.
19. Копируем из SDK gamedata файл squad_descr.ltx, который лежит в configs\misc, кидаем в свою gamedata. 1. Открываем squad_descr.ltx, смотрим в начало, видим ссылки на файлы
2. Добавляем ссылку на новый файл – squad_descr_escape.ltx, то есть в конце той конструкции дописываем:
#include "squad_descr_escape.ltx"
3. Теперь создаём файл squad_descr_escape.ltx, на который мы указали толлько что. Создаём там же, где лежит squad_descr.ltx – в configs\misc. Пишем в него следующее:
[esc_a1_stalker_1_squad]:online_offline_group
faction = stalker
npc = esc_a1_stalker_1
target_smart = esc_a1
spawn_point = esc_a1_stalker_1_spawnpoint
story_id = esc_a1_stalker_1_squad
Поясняю:
1. Создали сквад с названием esc_a1_stalker_1_squad.
2. Ниже идёт параметр faction. Это группировка. В нашем случае stalker.
3. В параметр npc передаются спавн секции нужных нам NPC через запятую, в нашем случае сталкер только один.
4. В параметр target_smart передаётся название смарта, которому принадлежит сквад. В нашем случае это esc_a1.
5. В spawn_point пишется имя Way Point’a, в котором появятся все персонажи отряда и начнут двигаться к своим работам. Мы этот поинт создавали в начале, у нас он называется esc_a1_stalker_1_spawnpoint.
6. Параметр story_id есть в не только в секция персонажей, но и в секциях сквадов, чтобы можно было манипулировать всеми NPC в скваде сразу. Например, телепортировать или убить сквад.
Отлично. Сквад создан. Дело за малым: осталось заспавнить наш сквад из одного NPC.
20. Копируем из gamedata SDK файл simulation.ltx, который лежит там же, где и прошлый – в configs\misc.
Открываем его, идём в самый конец, делаем отступ и пишем:
[start_position_escape]
esc_a1_stalker_1_squad = esc_a1
Сохраняем.
Поясняю:
1. Создали секцию start_position_escape специально для нашей локации, в которую передаются сквады и смарты.
2. esc_a1_stalker_1_squad – это имя сквада, который мы только что создали.
3. a1 – имя смарта, которому будет принадлежать сквад.
В simulation.ltx указываются только те сквады, которые спавнятся исключительно при старте новой игре. Как создавать сквад по ходу игры после какого-то момента – другая тема. На этом всё. Запускаем игру
Spirit27, 2018
Сообщение отредактировал DarkLade - Суббота, 07.04.2018, 18:06
Даже украсть мой тутор, который я писал конкретно для тебя, нормально не смог. Я писал на скорую руку и с ошибками, что на тему не тянет, а ты взял и выложил, да ещё без скринов и с кривым оформлением, ну и себя в авторы вписал, конечно же.
Раз уж так, вот нормальный док: просмотреть. Чего людям глаза мозолить таким оформлением?
Overfirst, это, безусловно, не хорошо, но не проще ли просто удалить тему т.к. таких полно и сделать предупреждение\бан пользователю, чем вот так на виду у половине форума?