Обновление Форума  
Привет, сталкер! Добро пожаловать на форум STALKER-WORLD — место общения, помощи и обмена опытом. Здесь всегда подскажут, поддержат и помогут разобраться в любой ситуации. Новички найдут советы от ветеранов, а опытные сталкеры — интересные обсуждения. Чувствуй себя как дома.


  • Страница 1 из 1
  • 1
Компиляция AI в S.T.A.L.K.E.R. — создание ИИ-сетки
Anubis

Anubis  

Онлайн  

Титул: Хранитель Зоны

 

1277

74

308


Сообщение 1 15:39:49, 2026-10-17
Сталкерское уважение +1 Сталкерское уважение +2 Сталкерское уважение +3 Постоянный житель портала Постоянный житель портала + Постоянный житель портала +2 Постоянный житель портала +2 Постоянный житель портала +2
Компиляция AI в S.T.A.L.K.E.R. — создание ИИ-сетки и переходов между локациями

ВНИМАНИЕ!

Данная статья в значительной степени устарела. Информация предназначена для ознакомления с принципами компиляции AI, настройки графов и подключения пользовательских уровней в S.T.A.L.K.E.R.

КАТЕГОРИЧЕСКИ ПРЕДУПРЕЖДАЕМ!

Использование устаревших и содержащих ошибки утилит AiCompiler и AiWrapper строго не рекомендуется автором исходного руководства.

Рекомендация: используйте официальный xrAI для SDK 0.4 от разработчиков игры. За дополнительной информацией обращайтесь к материалам AMK Forum.




Содержание

1. Основы компиляции AI
2. Создание ИИ-сетки
3. Настройка конфигурационных файлов
4. Компиляция нескольких уровней
5. Добавление собственного уровня в одиночную игру
6. Настройка переходов через ACDC
7. Отображение перехода на карте
8. Список необходимых программ




1. Основы компиляции AI

Итак, приступим! Если вы открыли это руководство, значит, у вас есть причина разобраться с компиляцией AI: вы начинающий моддер, хотите освежить старые знания или уже работаете с собственными уровнями и хотите расширить свои возможности.

Для начала скомпилируем уровень с AI и монстрами на карте mp_atp.

Шаг 1. Подготовка уровня

Открываем уровень в редакторе. Первым делом удаляем все rpoint — мультиплеерные точки появления игроков.

Шаг 2. Добавление актёра

Создаём объект Spawn elements → actor. При необходимости в свойствах объекта, в поле Custom Data, прописываем стартовое оружие:

Код
[spawn]
wpn_ak74


Теперь при появлении игрок будет вооружён АК-74.

Шаг 3. Добавление монстра

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

Шаг 4. Создание AI Map

ИИ-сетка необходима для того, чтобы NPC и монстры могли ориентироваться на уровне.

1. Нажимаем Object и выбираем поверхность земли.
2. Переходим в AI Map → Commands → Make list from selected.
3. В разделе AI Map Nodes нажимаем Add.
4. Добавляем узлы с помощью кнопки в левом верхнем углу редактора.
5. Расставляем ноды в нужном порядке.
6. Нажимаем Generate Full.

После этого AI-сетка будет сгенерирована.

Шаг 5. Добавление Graph Point

На уровне обязательно должен присутствовать хотя бы один Graph Point:

Spawns → AI → Graph Point

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

Сохраняем уровень и выполняем Build.

После этого необходимо скомпилировать карту. В исходном руководстве для этого используется отдельная утилита и предварительно созданный диск X:.




2. Настройка конфигурационных файлов

После компиляции необходимо настроить конфиги. В исходном руководстве они находятся в папке gamedata\configs SDK. После настройки необходимые файлы переносятся в соответствующую папку игры.

Файл game_maps_single.ltx

Добавляем название уровня в секцию [level_maps_single]:

Код
[level_maps_single]
testing_ai

[testing_ai]
global_rect = -6,1220.0,248.0,1481.0
texture = map\map_escape
bound_rect = -502.148,-412.284,379.976,474.479
weathers = default


Здесь testing_ai — название пользовательского уровня, texture — текстура карты загрузки, а weathers — используемая погода.

Файл game_levels.ltx

Добавляем уровень и назначаем ему уникальный идентификатор:

Код
[levels]
level190

[level190]
name = testing_ai
caption = "testing_ai"
offset = 2000.0,800.0,1000.0
id = 190


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

Файл game_graphs.ltx

Добавляем запись уровня:

Код
018 = "testing_ai"


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

Компиляция уровня

В исходном руководстве используется AI Compiler. Необходимо указать папку SDK или Level Editor и выбрать подготовленный уровень.

Далее выполняются этапы компиляции:

1. Предварительный расчёт AI-сетки.
2. При необходимости — расчёт укрытий NPC.
3. Построение графа и кросс-таблицы уровня.
4. Построение игрового графа.
5. Создание файла спавна.

После завершения компиляции в папке gamedata\spawns файл test.spawn в примере переименовывается в all.spawn.

Важно!

Если SDK не объединён с игрой, необходимо перенести следующие файлы:

Код
gamedata\config\game_maps_single.ltx


Код
gamedata\config\game_graphs.ltx


Код
gamedata\config\game_levels.ltx


Код
gamedata\levels\папка_вашего_уровня


Код
gamedata\spawns\all.spawn


Код
gamedata\game.graph


Отсутствие game.graph может приводить к вылету при запуске игры.

Также проверьте, что в конфигурации указаны существующая погода и корректная текстура загрузки.

Пример BAT-файла из исходного руководства

Код
@start bin\XR_3DA.exe -start server(%1/single/alife) client(localhost)


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




3. Компиляция нескольких уровней и настройка переходов

Теперь рассмотрим создание переходов между двумя уровнями: atp_1 и atp_2.

Настройка первого уровня — atp_1

Создаём объект AI → Level Changer, затем добавляем Shape → Sphere и увеличиваем сферу с помощью Scale до необходимого размера.

Переключаемся в режим редактирования Spawn Elements, выделяем Level Changer и выбираем Commands → Attach Object. После этого привязываем к нему сферу.

В свойствах Level Changer указываем название, например to_atp_2.

В поле Custom Data прописываем путь возврата на случай отказа игрока от перехода:

Код
[pt_move_if_reject]
path = atp_1_way_if_reject


В поле Level to change указываем atp_2.

В поле Level Point to change задаём точку появления игрока на втором уровне — start_actor_01.

Параметр Restrictor Type зависит от версии движка. Старые рекомендации по его настройке необходимо проверять на используемой версии игры.

Создание Graph Point

Создаём Graph Point с именем:

Код
start_actor_01


Затем создаём точку связи между уровнями:

Код
Name: exit_atp_1_01
Location: "экскейп"
Connection:
Level name: atp_2
Point name: exit_atp_2_01


Точка exit_atp_1_01 связывает первый уровень со вторым.

Создание Way Points

Создаём путь из двух Way Point рядом с Level Changer.

1. Открываем Way Points.
2. Добавляем первую точку.
3. Включаем Point Mode и создаём вторую точку.
4. Если точки не связались автоматически, используем Create 1-link.
5. В свойствах пути указываем имя atp_1_way_if_reject.

Имя пути должно совпадать с указанным в Custom Data объекта Level Changer.

Настройка второго уровня — atp_2

Повторяем создание пути и называем его atp_2_way_if_reject.

Создаём Level Changer с именем to_atp_1 и прописываем:

Код
[pt_move_if_reject]
path = atp_2_way_if_reject


В Level to change указываем atp_1, а в Level Point to change — start_actor_01.

Создаём Graph Point start_actor_01, затем точку связи:

Код
Name: exit_atp_2_01
Location: "свалка"
Connection:
Level name: atp_1
Point name: exit_atp_1_01


Важно!

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

Компиляция двух уровней

Сохраняем и предварительно компилируем оба уровня. В примере используются следующие команды:

Код
@start /wait bins\ai\1.exe -g atp_1


Код
@start /wait bins\ai\1.exe -g atp_2


После построения графов создаём общий игровой граф:

Код
@start /wait bins\ai\1.exe -m


Затем собираем all.spawn:

Код
bins\ai\1.exe -s


Полученный файл помещаем в gamedata\spawns\ и при необходимости переименовываем в all.spawn.

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




4. Добавление пользовательского уровня в одиночную игру

Теперь рассмотрим подключение собственного уровня к оригинальным локациям игры.

В примере используется пользовательский уровень test_level_x и оригинальная локация L01_Escape.

Подготовка Graph Point

На пользовательском уровне создаём точку связи:

Код
Name: point_test_location_escape
Connection:
Level Name: L01_Escape
Point Name: esc_graph_point_0034


Затем создаём точку появления игрока:

Код
Name: start_actor_01


В исходном руководстве рекомендуется не размещать ACTOR на пользовательском уровне на этом этапе.

Добавляем на карту уникальный объект, например машину. Его параметры понадобятся для последующей настройки перехода.

Сохраняем уровень, выполняем предварительную компиляцию и необходимые этапы построения AI-графа.

Получение параметров уровня

Для дальнейшей настройки понадобятся:

- level_vertex_id;
- game_vertex_id;
- position — координаты объекта;
- direction — направление взгляда игрока.

В исходной статье для получения этих значений используется скрипт Info_LVID_GVID от bardak. Полученные параметры необходимо записать и использовать при настройке level changer.

Подготовка графов оригинальных уровней

После распаковки игры и подготовки инструментов выполняем команду:

Код
aiwrapper -extract_spawns


В исходном руководстве она используется для обновления файлов спавна оригинальных уровней.

Затем создаём список графов:

Код
aiwrapper -dump_graph graphs.txt


В файле graphs.txt находим esc_graph_point_0034 и проверяем, можно ли использовать эту точку для подключения пользовательского уровня.

Создаём текстовый файл links_fixed.txt со следующим содержимым:

Код
[l01_escape]
; Добавляем переход с Кордона на тестовый уровень
esc_graph_point_0034 = test_level_x, point_test_location_escape


test_level_x — название пользовательского уровня, а point_test_location_escape — имя точки связи на нём.

Выполняем команду:

Код
aiwrapper -m2 links_fixed.txt


Она используется в исходном руководстве для построения глобального игрового графа с учётом дополнительных связей.

Проверка game_vertex_id

Для проверки межуровневых связей в исходной статье предлагается использовать утилиту ggtool.pl.

Код
ggtool.pl game.graph >svyazi.txt


В файле svyazi.txt можно увидеть связи между уровнями и значения game_vertex_id.

Пример:

Код
l01_escape (0) --1206.29--> l02_garbage (415)


Здесь 0 и 415 — идентификаторы игровых вершин, а 1206.29 — расстояние между точками связи.




5. Настройка level changer через ACDC

После построения игрового графа создаём all.spawn:

Код
aiwrapper -s


Полученный файл копируем в папку utils инструмента ACDC и разбираем его на LTX-файлы:

Код
acdc.pl -d all.spawn


Нас интересует файл alife_l01_escape.ltx.

В него добавляем новую секцию level_changer. Пример ниже демонстрирует структуру объекта из исходного руководства. Значения необходимо заменить на параметры своей карты.

Код
[не_занятый_номер]
section_name = level_changer
name = exit_to_new_location_from_esc
position =
direction = 0,0,0
game_vertex_id =
distance = 14.6999998092651
level_vertex_id = -1
object_flags = 0xffffff3e
custom_data = <<END
[pt_move_if_reject]
path = esc_way_test_if_reject
END
story_id =
shapes = shape0
shape0:type = box
shape0:axis_x = 5.8284006118774,0,0
shape0:axis_y = 0,5.0005970001221,0
shape0:axis_z = 0,0,5.3902206420898
shape0:offset = 0,0,0
restrictor_type = 3
dest_game_vertex_id =
dest_level_vertex_id =
dest_position =
dest_direction = 0,-1.12671363353729,0
dest_level_name = test_level_x
dest_graph_point = start_actor_01


Основные параметры

- position — координаты перехода на исходном уровне.
- direction — направление объекта.
- game_vertex_id — идентификатор игровой вершины исходного уровня.
- level_vertex_id — идентификатор вершины ИИ-графа.
- story_id — уникальный идентификатор объекта.
- dest_game_vertex_id — игровая вершина целевого уровня.
- dest_level_vertex_id — вершина ИИ-графа целевого уровня.
- dest_position — координаты появления игрока.
- dest_level_name — название целевого уровня.
- dest_graph_point — имя точки появления игрока.

Все параметры необходимо сверить с данными скомпилированных уровней. Неправильные идентификаторы могут привести к ошибкам и вылетам.

Создание Way Points в LTX

Открываем way_l01_escape.ltx и добавляем путь, имя которого указано в Custom Data.

Код
[esc_way_test_if_reject]
points = p0,p1
p0:name = name_test1
p0:position = -243.491257,-19.758562,-140.328583
p0:game_vertex_id = 8
p0:level_vertex_id = -1
p0:links = p1(1)
p1:name = name_test2
p1:position = -255.491257,-19.758562,-140.328583
p1:game_vertex_id = 9
p1:level_vertex_id = -1


Координаты в этом примере приведены только для демонстрации структуры. Для своей карты используйте реальные координаты.

Финальная сборка

После внесения изменений выполняем:

Код
acdc.pl -c all.ltx


Полученный файл all.spawn.new копируем в gamedata\spawns\ и переименовываем в all.spawn.

После этого запускаем новую игру и проверяем работу перехода.




6. Отображение перехода на карте

Если необходимо, чтобы переход отображался на карте игрока, исходное руководство предлагает внести изменения в level_tasks.script, в функцию add_lchanger_location().

Пример:

Код
-- test_level_x
local obj = sim:story_object(8435)
if obj then
    level.map_add_object_spot(obj.id, "level_changer", "exit_to_new_location_from_esc")
end


В примере используются story_id 8435 и имя перехода exit_to_new_location_from_esc. Они должны совпадать с параметрами вашего level changer.

В исходной статье рекомендуется использовать уникальный story_id, не занятый другими объектами.




7. Список необходимых программ

- AiCompiler 0.1 от Neo.
- AiWrapper от bardak.
- Info_LVID_GVID — скрипт от bardak.
- SDK 0.4 от GSC.
- SDK Update от Neo и GSC.
- Fixed Shaders от Haron.
- Патч для SDK 0.3 от Haron.

Заключение

Компиляция AI в S.T.A.L.K.E.R. включает подготовку ИИ-сетки, создание графов уровня, настройку межуровневых связей и сборку файлов спавна.

Для подключения собственной локации к оригинальной игре необходимо правильно настроить Graph Point, параметры level changer, координаты и точки появления игрока.

Важно: руководство основано на старых инструментах и примерах. Перед использованием проверяйте совместимость со своей версией SDK и движка. Перед изменением игровых файлов обязательно создавайте резервные копии.


  • Страница 1 из 1
  • 1
Поиск:

Совет по выживанию
Загрузка…
Совет № 1




Заходили сегодня: | Anubis, stalkercom, valiksuper12, Владимир61, donhenaro2009, arengard, Hog_raider, yur4ik, javoronokmedvejov2015, dmitrijkaslev, Гудвин, Spic3, danilakorneev68, UR5TNG, СергейПахомов1999, tutmas82, akibitkin965, aldi7, smirkin1970, masterkenedy12, andrejresetov79714, ENEWAY, med406083, srzmelnik, samsitovmarat, EXELENT, gg0931815, andrey780102, petroviccingiz43, Ganpzz, max32max1978, fateev20000, штурм, i4494vovanga, egoravdeev389, dk197578, dima1987sumy, danielaladnan, erry64, angrykazaki, blackvoyager2, voron_zl, ksmsasha1973, -=KiLlErMaN=-, gille1970, PIGON71, trofivomitch, Makar0627, stslker31RUS, matvejzakutaev1, Alex3867, [Полный список]