Компиляция -=inGame АИ=- — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Компиляция -=inGame АИ=- — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
Строка 159: Строка 159:
 
используйте bat фаил написанный ''Zeed'''ом: [http://stalkerin.gameru.net/developer/mods/levelgraph_fullgame.bat fullgame.bat]
 
используйте bat фаил написанный ''Zeed'''ом: [http://stalkerin.gameru.net/developer/mods/levelgraph_fullgame.bat fullgame.bat]
 
Если будут ошибки связанные с алайфом, жмем ''продолжить''. Потом выполняйте процедуры как написано выше, сборка '''game.graph''', а затем '''all.spawn'''.
 
Если будут ошибки связанные с алайфом, жмем ''продолжить''. Потом выполняйте процедуры как написано выше, сборка '''game.graph''', а затем '''all.spawn'''.
 +
 +
Добавление level changer на уже существующую карту от GSC
 +
 +
Пост '''Smanxx1''' с форума, для потомков:
 +
 +
''Декомпилим '''all.spawn''' с помощью '''acdc''' и вписываем куда нужно''
 +
<code>
 +
[не забитый номер]
 +
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 = <это тоже :)>
 +
object_flags = 0xffffff3e
 +
story_id =<поставь здесь неиспользуемый ID, момойму начинаються с 6000>
 +
 +
shapes = shape0
 +
shape0:type = box
 +
shape0:axis_x = 15.8284006118774,0,0
 +
shape0:axis_y = 0,22.0005970001221,0
 +
shape0:axis_z = 0,0,96.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 = <название твоего уровня>
 +
dest_graph_point = <название точки спавна игрока>
 +
</code>
 +
 +
''Cобираем это все обратно и чтобы точка спавна появилася вызоваем функцию ниже:''
 +
<code>
 +
local obj = alife():story_object(твой ID)
 +
    if not obj then alife():create(незабитый номер) end
 +
</code>
 +
 
''продолжение следует...''
 
''продолжение следует...''
  
 
'''written by Loxotron'''
 
'''written by Loxotron'''

Версия 04:20, 8 января 2008

Итак, приступим... Раз вы здесь, значит есть на то причина:

  • 1)либо вы нуп, увидевший аи-компилер и решивший забацать чтото крутое
  • 2)вы не нуп, но всё забыли или почти всё
  • 3)вы супер-аццкий про решивший глянуть на весь этот детсад свысока )
  • 4)вы обычный модер, решивший расширить свои текущие познания. ;)

Основы

Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на карте 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).

Следующим шагом будет правка конфигов.

Пример:

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
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

Lamp.gif Важные моменты -- 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 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 фаил написанный Zeed'ом: fullgame.bat Если будут ошибки связанные с алайфом, жмем продолжить. Потом выполняйте процедуры как написано выше, сборка game.graph, а затем all.spawn.

Добавление level changer на уже существующую карту от GSC

Пост Smanxx1 с форума, для потомков:

Декомпилим all.spawn с помощью acdc и вписываем куда нужно

[не забитый номер]
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 = <это тоже :)>
object_flags = 0xffffff3e
story_id =<поставь здесь неиспользуемый ID, момойму начинаються с 6000>
 
shapes = shape0
shape0:type = box
shape0:axis_x = 15.8284006118774,0,0
shape0:axis_y = 0,22.0005970001221,0
shape0:axis_z = 0,0,96.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 = <название твоего уровня>
dest_graph_point = <название точки спавна игрока>

Cобираем это все обратно и чтобы точка спавна появилася вызоваем функцию ниже:

local obj = alife():story_object(твой ID)
if not obj then alife():create(незабитый номер) end

продолжение следует...

written by Loxotron

Другие места
LANGUAGE