100 Ренген  
Пятница, 17.05.2024, 12:25

Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Наш опрос
Какая группировка вам больше нравится
Всего ответов: 43

Категории раздела
Мои статьи [36]

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Мои статьи

Компиляция -=inGame АИ=-

Итак, приступим... Раз вы здесь, значит есть на то причина: 1)либо вы нуп, увидевший аи-компилер и решивший забацать чтото крутое 2)вы не нуп, но всё забыли или почти всё 3)вы супер-аццкий про решивший глянуть на весь этот детсад свысока ) 4)вы обычный модер, решивший расширить свои текущие познания. ;) Содержание
[убрать]
1 Основы 2 Углубленное изучение 3 Добавляем наш уровень в сингл-плеер! 4 В заключении 5 Список необходимых программ
[править]
Основы

Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на карте mp_atp. Открываем левел.. первое что надо сделать убрать все rpoint(мультиплеерные точки спавна). Убрали? Отлично. Создаем Spawn elements -> actor ну и по желанию в свойствах (Properties) в custom data прописываем ему предположим вот это: [spawn]
wpn_ak74
Тем самым при появлении игрока у него в руках уже будет калаш. Далее, создаем монстра... любого по желанию, предположим кровососа и ставим на уровень. Теперь дело за AI map - аи сетка, которая необходима для того, чтобы нпс, монстры могли ориентироваться по уровню. Жмем Object и кликаем на земле(тем самым мы ее "выбрали" для дальнейших манипуляций), затем AI Map -> Commands -> Make list from selected, жмем add в разделе AI Map Nodes и add для добавления объектов слева вверху(чайник) и ставим на карте ноды в нужном вам порядке(достаточно одного), жмем Generate Full. Всё, аи-сетка сгенерированна. Теперь добавляем на левел обязательно! 1 graph point (Spawns->ai->graph point), в нем можно ничего не писать. Сохраняем уровень, билдим (build).
после этого не забываем скомпилить карту, (не забываем создать диск Х, приложенной прогой) Windows -> start -> run и в командной строке пишем (mp_atp_test,здесь название карты): Запуск уровня на компиляцию




После корректной компиляции: Завершение компиляции




Следующим шагом будет правка конфигов. Править конфиги следует в папке gamedata\configs папки SDK, а потом можно перенести файлы в аналогичную папку с игрой.
Пример:
game_maps_single.ltx [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
//погода
game_levels.ltx [levels]
...
level190
//номер вашего уровня

[level190]
name = testing_ai
caption = "testing_ai"
offset = 2000.0, 800.0, 1000.0 // положение нового уровня на глобальной карте, X, Y, Z
id = 193
//индентифакционный номер, должен быть уникальным

game_graphs.ltx 018 = "testing_ai"
Теперь открываем AI Compiler, указываем папку с сдк(.../level_editor, либо если он объединен с игрой, путь до нее). Выбираем ваш уровень. Проходим 1ую стадию чернового просчета аи карты(шаг 1), либо если вы хотите долго ждать и просчитать укрытия для нпс то выбираем шаг 2. Далее строим граф и кросс-таблицу уровня шаг 3, потом граф игры шаг 4 и наконец фаил .spawn шаг 5. После всех стадий заходим в gamedata\spawns\ и переименовываем test.spawn в all.spawn
Важно - Если ваш X-Ray SDK НЕ объединён с игрой, то при переносе файлов для старта без вылетов вы должны перенести из папки с X-Ray 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(этот файл многие не копируют и получают вылет при запуске игры) Важные моменты -- Loxotron
При правке конфигов не забывайте указывать реально существующую там погоду и картинку загрузки, иначе вылетит; также не пытайтесь запустить уровень через .bat фаил, подобный указанному ниже, тоже будет вылет bin\xr_3da.exe -ltx user.ltx -nointro -external -start server(level/single) client(localhost)
Правильный .bat фаил @start bin\XR_3DA.exe -start server(%1/single/alife) client(localhost)
%1 - название левела

[править]
Углубленное изучение

Далее мы рассмотрим как собирать несколько уровней и устанавливать между ними переходы.
Итак у вас два уровня... на одном из них стоит actor. Начнем с него: создаем ai->level changer, затем shape->sphere, с помощью scale увеличиваем до необходимых размеров, теперь переключаемся в режим редактирования spawn element, выделяем level changer и жмем commands->attach object, а затем кликаем на сферу... Всё, сфера и level changer теперь связаны. Далее идем в закладку properties, указываем название, например to_atp_2, теперь нужно прописать в custom data вейпоинт для возврата, в случае отказа игрока от перемещения с локации на локации(обязательно). Вписываем вот это: [pt_move_if_reject]
path = atp_1_way_if_reject
//в случае отказа от перемещения на вторую локу, возвращаемся назад
В Level to change вписываем наименование уровня, куда мы хотим переместиться с этого левела, например atp_2. И самое главное, в параметрах level_changer в пункте "restrictor type" поставить значение "not a restrictor", в противном случае будет вылет при переходе на вторую локу - скорее всего, тип рестриктора был использован на версии раньше 1.0004. На версии 1.0004 тип рестриктора не имеет значения и рестриктор отвечает только за внутренние настройки локации - Эээ...


В Level Point to change указываем точку, в которой игрок появится... start_actor_01. С level changer на этом уровне всё, пошли далее. Создаем graph point или используем пустой существующий если у вас есть. В него вписываем start_actor_01, этот поинт для того чтобы мы смогли со второго левела atp_2 перейти на atp_1(первый). Создаем еще один graph point c названием exit_atp_1_01, в разделе location выбираем, например "экскейп". В Connection -> Level name указываем уровень, с которым будет связан atp_1, то есть выбираем atp_2, в Connection->Point Name вписываем точку связи из второго уровня, которую мы создадим потом exit_atp_2_01. С первым уровнем всё...
Для чего нам нужен graph point'ы exit_xxx? exit_xxx представляет собой connection_point(точку связи) - для того, чтобы компилятор знал, какие уровни он соединяет, а если по другому: начальный граф уровня, от него потом считаются все ноды.
start_actor_xx - точка появления актера после перехода.
Помните мы вписали в custom data level changer'а вейпоинт? Вот теперь нам придется его создать. Выбираем Way Points -> жмем "чайник" и стави 1 вейпоинт рядом с level changer(так мы создали начальную точку пути), теперь жмем point mode и ставим второй. Если они не соеденились стрелочкой, жмем create 1-link. Теперь у нас получился путь, который мы прописали в custom data level changer, заходим в свойства и обзываем его также как и в custom data, тоесть atp_1_way_if_reject. Всё с первым уровнем покончили.
Итак, открываем второй уровень и поехали по новой...
Создаем там путь из двух вейпоинтов по схеме выше и обзываем atp_2_way_if_reject. Создаем level changer называем его to_atp_1, в custom data пишем [pt_move_if_reject]
path = atp_2_way_if_reject //название вэйпоинта
В level to change указываем atp_1 //куда переходим с atp_2 В level point to change - start_actor_01(дада, тот который мы создали на первом левеле :) )
Теперь здесь же на atp_2 создаем graph point с названием start_actor_01. И еще один где вписываем следущие значения: Name: exit_atp_2_01
Location: "свалка" //наименование локации

Connection:
Level name: atp_1 //первый уровень
Point name: exit_atp_1_01 //связующая точка с первого уровня
Незабудьте, что ACTOR должен быть только на одной локации(в нашем случае на atp_1), иначе компилятор выдаст ошибку. Всё!... Сохраняем, прекомпилим.
Запускаем Ai Compiler, выбираем по очереди наши два уровня и просчитываем шаг 1, проверям сетку. Теперь создаем текстовый документ и вписываем туда @start /wait bins\ai\1.exe -g atp_1
@start /wait bins\ai\1.exe -g atp_2
сохраняем его как .bat и запускаем, в результате у каждого уровня появится свой level.graph(граф и кросс-таблица).
Создаем еще один текстовик, пишем @start /wait bins\ai\1.exe -m
сохраняем как .bat и стартуем. Так мы собрали game.graph из level.graph'ов.
И наконец.. создаем 3ий "бантик" для сборки all.spawn! bins\ai\1.exe -s
Компилим, заходим в gamedata\spawns\, переименовываем получившийся спавн в all.spawn и запускаем через новую игру. Как видите, вы можете перемещаться с уровня на уровень, туда сюда без каких-либо проблем.
Чуть не забыл, обязательно временно, на время компиляции переместите все остальные левелы игры кроме ваших в любую другую папку, иначе могут быть ошибки при сборе графов и спавна.
Для сборки всех сингл уровней из оригинальной игры используйте bat фаил: fullgame.bat Если будут ошибки связанные с алайфом, жмем продолжить. Потом выполняйте процедуры как написано выше, сборка game.graph, а затем all.spawn. [править]
Добавляем наш уровень в сингл-плеер!

Такс, продолжаем. Мне таки удалось наконец-то совместить свой тестовый левел с картами гсц. Итак приступим. Во первых нам необходим левел... свой, подготовленный. Если вы не читали инструкции выше, то дальше вам делать нечего. На нашем левеле должна быть во-первых connection point(соеденительная точка), вписываем в нее параметры данного примера, предположим такие: Name: point_test_location_escape // название коннекшн-поинта

Connection
Level Name:L01_Escape //с каким уровнем его связываем
Point Name:esc_graph_point_0034 //соеденительный поинт на эскейпе, как
//его добавить будет объяснено '''ниже'''.
Сделали?
Теперь создаем еще один граф на уровне, вписываем просто его имя... например Name: start_actor_01. Обязательно добавляем на уровень какой-нибудь уникальный объект... предположим машину. Зачем, узнаете потом. Но на левеле ни в коем случае не должно быть ACTOR'а!! Сохраняем, прекомпилим левел. Компилим с помощью xrLC весь уровень, теперь открываем AICompiler от нео и выполняем 1 или 2 и 3 шаги в отношении нашего левела.
Теперь нам нужно заручиться ОСОБЫМИ инструментами, в нашем случае понадобится скрипт от бардака, который позволяет узнать при запуске любого левела его level_vertex_id, game_vertex_id, position(координаты игрока в данный момент), direction(координаты направления его "взгляда"), всё это потребуется при работе с acdc несколькими этапами ниже. Загружаем игру, находим подходящее место где хотим видеть в будущем триггер для перехода уровней и записываем все параметры на бумажку, они нам понадобятся потом. По хорошему, желательно отдельно потом еще зайти в LE(level editor), открыть наш уровень, поставив эктора прям на графе с start_actor_01, закомпилировать проект, пройти все шаги компиляции в xraicompiler(1,3,4,5,6), обязательно предварительно забэкапив game.graph, начать новую игру и записать координаты level_vertex_id и direction, но это достаточно нудно и сложно, но желательно, а потом надо будет, вернуть всё в состояние до всех этих действий..., то есть убрать эктора, восстановить оригинальный game.graph.
Итак... у вас обязательно должна быть распакованна вся игра, установлен aiwrapper от бардака(читайте ридми по установке!!!), и aicompiler он нео.
Создаем .bat фаил в папке с aiwrapper'ом с текстом aiwrapper -extract_spawns
либо вводим тоже в тотал коммандере, с помощью этого ключа мы обновили level.spawn'ы всех сингл-уровней, так как они не обновлялись со времен первого патча.
Теперь изучаем links.sample в блокноте. ничего не поняли? поясняю: aiwrapper обладает полезнейшим ключом -m2. -m2 <файл> - склеить ИИ-графы карт в глобальный игровой граф с
учётом поправок для связей из указанного файла
То есть с помощью него мы можем взять любой существующий граф на уровне гсц, который "не занят", и добавить ему нужные нам значения, например сделать его коннекшн поинтом(соеденительной точкой), а потом всё это склеится в общий глобальный game.graph.
Выполняем aiwrapper -dump_graph graphs.txt батом или тоталом. Комманда выведет нам список исходных вершин ИИ-графа в указанный файл, то есть список скомпиленных графов всех сингл-уровней гсц в фаил graphs.txt. Находим там точку esc_graph_point_0034. Видите что она пуста в плане связей в отличии от exit_escape_01,02? Значит мы можем ее использовать, в оригинале разрабы их ставили для путей ботов, то есть по ним перемещается аи, но мы ее заюзаем для связи с нашим тестовым левелом.
Итак, создаем например текстовик 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_graph, ошибок быть недолжно. Важные моменты 2 -- Loxotron
Найден более простой способ вычисления game_vertex_id. В папке utils у компилятора бардака есть тулза ggtool.pl - утилита для показа межуровневых связей в game.graph. Копируем к утилите откомпилированный game.graph из gamedata\ и выполняем прогу (в командной строке или через батник): ggtool.pl game.graph >svyazi.txt
В результате в фаиле svyazi.txt в скобках будет указан game_vertex_id для конкретного уровня, таким образом не нужно узнавать dest_game_vertex_id c помощью перекомпилирования.
Пример: l01_escape (0) --1206.29--> l02_garbage (415)
0 - game_vertex_id, 415 - dest_game_vertex_id, 1206.29 - distance(расстояние между точками), не тот который в level_changer'е, а между connection_point'ами.


Теперь дело за all.spawn: aiwrapper -s
В результате соберется полноценный all.spawn из всех уровней которые есть в папке levels. Но на этом работа только начинается, теперь надо отредактировать этот получившийся all.spawn и добавить level_changer на уровень гсц, чтобы мы смогли перейти с него на наш.(в нашем случае с эскейпа на test_level_x). Копируем получившийся all.spawn в <туда, куда вы распаковали aiwrapper>\utils и создаем .bat с таким текстом: acdc.pl -d all.spawn
В результате мы разобрали all.spawn на ltx'сы, нам нужен alife_l01_escape.ltx, вписываем в конец туда это: [не забитый номер]
;например 9000
section_name = level_changer
name = exit_to_new_location_from_esc
;любое_название_на_англ, (только не использованное)
position =
;здесь координаты где находиться левел чейнджер
;помните бумажку с координатами и параметрами, которую мы писали раньше?
;смотрим ту где параметры и координаты эскейпа и вписываем
direction = 0,0,0
;направление "взгляда" игрока
;по желанию, можно вписать координаты с бумажки
game_vertex_id =
;номер вершины игрового графа, задаёт первую вершину графа на данной локации
;с бумажки эскейпа
distance = 14.6999998092651
;"Расстояние" между точкой перехода(level_changer) и точкой появления
;актера на другом уровне (если считать зону неделимой), можно и 0.
level_vertex_id =
;Вершина уровневого графа, должно покатить '''-1''', но
;ставьте лучше то что записано на бумажке с эскейпа
object_flags = 0xffffff3e
custom_data = <[pt_move_if_reject]
path = esc_way_test_if_reject
END
;custom data, где указано имя вейпоинта, который мы потом создадим
;на карте с помощью acdc, таже '''custom data''', что в начале
;статьи.
story_id =
;поставьте здесь неиспользуемый ID, например 8435
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 =
;номер вершины графа нашей новой локации, туда игрок переместится
;помните '''уникальный''' объект, который я просил вас поставить?
;открываем '''alife_lxx_unknown.ltx''' и ищем тачку, сдираем значение с нее
dest_level_vertex_id =
;вершина уровнего графа нового левела
;должно покатить -1, но лучше взять с бумажки с параметрами с тестового левела
dest_position =
;координаты на нашем уровне, где ты появляешься
;с бумажки тестового левела, либо наугад, либо используйте открорректированные
;координаты с любого объекта на вашей карте, то есть например есть дерево
;c координатами 0, 1 , 2, корректируем относительно дерева и
;вписываем например 4, 1, 2
dest_direction = 0,-1.12671363353729,0
;направление "взгляда игрока на новом уровне"
;по желанию
dest_level_name =
;название вашего уровня, в нашем случае test_level_x
dest_graph_point =
;название точки спавна игрока(графа, то есть в нашем случае
;start_actor_01)
Еще одно определение двух параметров для непонятливых: game_vertex_id - ставится как коннекшн поинт ('''graph_point''' c соответствующими настройками) level_vertex_id - '''graph_point''' - ставится как обычная граф поинт с уникальным номером без параметров
В них вписываем уникальный ID для каждого уровня, то есть в некоторых случаях просто смотрим эти два параметра у соседних объектов этого левела и вписываем значения. Как правило, level_vertex_id можно поставить -1, но не для всех объектов, game_vertex_id = ид уровня.
Устали? =) А ведь еще не всё, нужно создать вейпоинт, который мы прописали в custom data level changer'а. Открываем way_l01_escape.ltx и вписываем чтото типа: [esc_way_test_if_reject]
points = p0,p1
;два вейпоинта
p0:name = name_test1
;имя вейпоинта 1
p0:position = -243.491257,-19.758562,-140.328583
;его координаты, ставьте их рядом с координатами level_changer
;но не в нём, корректируйте их, как в примере с деревом
p0:game_vertex_id = 8
p0:level_vertex_id = -1
p0:links = p1(1)

p1:name = name_test2
;имя вейпоинта 2
p1:position = -255.491257,-19.758562,-140.328583
;его координаты, всё тоже самое, только корректируйте относительно позиции
; вейпоинта 0, как в этом примере.
p1:game_vertex_id = 9
p1:level_vertex_id = -1
Поставили? Всё, осталось только собрать all.spawn, батом или тотал коммандером выполняем это: acdc.pl -c all.ltx
Теперь копируем получившийся all.spawn.new в gamedata\spawns\ и переименовываем его в all.spawn.
Мученья окончились :) Запускайте новую игру и наслаждайтесь вашим переходом... [править]
В заключении

Если вы хотите, чтобы ваша точка перехода отображалась на карте игрока, то лезем в level_tasks.script и добавляем в function 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
В строке (obj.id, "level_changer", "exit_to_new_location_from_esc") выделенный текст - наименование вашего level_changer, а число - его уникальный story_id на уровне, например на эскейпе или вашем левеле, список занятых story_id смотреть необязательно. Братьь любое число от 10000 [править]
Список необходимых программ
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

written by Loxotron
updated 11.01.08 by Loxotron
24/06/08 небольшое добавление о компиляции - Kalinin11
Дополнил информацией для тех, у кого X-Ray SDK не объединён с игрой - Эээ... Получено с http://stalkerin.gameru.net/wiki/index.php/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_-%3DinGame_%D0%90%D0%98%3D-
Категория: Мои статьи | Добавил: Ликвидатор (28.01.2010)
Просмотров: 1957 | Комментарии: 5 | Рейтинг: 1.0/1 |
Всего комментариев: 2
2 Enfosmors  
0
[color=color_url - Привет всем уважаемые друзя. Нашел наш лучший сат http://100rengen.ucoz.ru и понял что тут мне обяснят.
Попрошу всех желающих присоедениться.
Выбрав эту категорию этот думаю правлильную, если нет прошу Администраторов перенести ее в раздел которая более подходящая.
Я сильно смотреть кино. У кого скоросной интернет могут себе позволить http://kinozal.in - скачать российские фильмы[color=color_url - .
Или просто смотреть онлайн.
Ка на меня я болше люблю с женой смотреть http://kinozal.in/erotika - эротическое кино бесплатно[color=color_url - . Вообщем кому что лучще. Но проблемма в том что у меня слабый интернет.

Так вот пожалуйста помогите мне найти сайты где можно смотреть кино или скачать даже с слабым инетом.
Ссылки пожалуйста пишите в личку, на Email unsomimmusemm@gmail.com или icq 9448995

1 mn  
0
а по понятней объяснить

Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024
    Бесплатный хостинг uCoz