|
|
Строка 1: |
Строка 1: |
− | Итак, приступим... Раз вы здесь, значит есть на то причина:
| + | ЗапихНите себе эту сетку нахуй бля |
− | *1)либо вы нуп, увидевший аи-компилер и решивший забацать чтото крутое
| + | |
− | *2)вы не нуп, но всё забыли или почти всё
| + | |
− | *3)вы супер-аццкий про решивший глянуть на весь этот детсад свысока )
| + | |
− | *4)вы обычный модер, решивший расширить свои текущие познания. ;)
| + | |
− | | + | |
− | ==Основы==
| + | |
− | Ну что ж... начнем с самого простого, скомпилим левел с аи, монстрами на
| + | |
− | карте '''mp_atp'''. Открываем левел.. первое что надо сделать убрать все
| + | |
− | '''rpoint'''(мультиплеерные точки спавна). Убрали? Отлично. Создаем
| + | |
− | '''Spawn elements -> actor''' ну и по желанию в свойствах ('''Properties''')
| + | |
− | в '''custom data''' прописываем ему предположим вот это:
| + | |
− | | + | |
− | <code>
| + | |
− | [spawn]
| + | |
− | wpn_ak74
| + | |
− | </code>
| + | |
− | | + | |
− | Тем самым при появлении игрока у него в руках уже будет калаш. Далее,
| + | |
− | создаем монстра... любого по желанию, предположим кровососа и ставим на уровень.
| + | |
− | Теперь дело за '''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'''
| + | |
− | | + | |
− | <code>
| + | |
− | [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
| + | |
− | //погода
| + | |
− | </code>
| + | |
− | | + | |
− | '''game_levels.ltx'''
| + | |
− | | + | |
− | <code>
| + | |
− | [levels]
| + | |
− | ...
| + | |
− | level190
| + | |
− | //номер вашего уровня
| + | |
− | | + | |
− | [level190]
| + | |
− | name = testing_ai
| + | |
− | caption = "testing_ai"
| + | |
− | offset = 2000.0, 800.0, 1000.0 // положение нового уровня на глобальной карте, X, Y, Z
| + | |
− | id = 193
| + | |
− | //индентифакционный номер, должен быть уникальным
| + | |
− | </code>
| + | |
− | | + | |
− | | + | |
− | '''game_graphs.ltx'''
| + | |
− | | + | |
− | <code>
| + | |
− | 018 = "testing_ai"
| + | |
− | </code>
| + | |
− | | + | |
− | Теперь открываем AI Compiler, указываем папку с '''сдк'''(.../level_editor, либо если он объединен с игрой, путь до нее). Выбираем ваш уровень.
| + | |
− | Проходим 1ую стадию чернового просчета аи карты('''шаг 1'''), либо если вы хотите долго ждать и просчитать укрытия для нпс то выбираем '''шаг 2'''.
| + | |
− | Далее строим граф и кросс-таблицу уровня шаг 3, потом граф игры '''шаг 4''' и наконец фаил .spawn '''шаг 5'''. После всех стадий заходим в gamedata\spawns\ и переименовываем '''test.spawn''' в '''all.spawn'''
| + | |
− | | + | |
− | {{Message_box|
| + | |
− | id =pseudoscience|
| + | |
− | align = left|
| + | |
− | backgroundcolor = #f9f9f9|
| + | |
− | image =Lamp.gif|
| + | |
− | heading = Важные моменты -- Loxotron|
| + | |
− | message = При правке конфигов не забывайте указывать реально существующую там погоду и картинку загрузки, иначе вылетит; также не пытайтесь запустить уровень через .bat фаил, подобный указанному ниже, тоже будет вылет
| + | |
− | <pre>bin\xr_3da.exe -ltx user.ltx -nointro -external -start server(level/single) client(localhost)</pre>
| + | |
− | | + | |
− | Правильный .bat фаил
| + | |
− | <pre>@start bin\XR_3DA.exe -start server(%1/single/alife) client(localhost)</pre>
| + | |
− | %1 - название левела
| + | |
− | }}
| + | |
− | <br clear="both" />
| + | |
− | | + | |
− | ==Углубленное изучение==
| + | |
− | Далее мы рассмотрим как собирать несколько уровней и устанавливать между ними переходы.
| + | |
− | | + | |
− | Итак у вас два уровня... на одном из них стоит '''actor'''. Начнем с него:
| + | |
− | создаем '''ai->level changer''', затем '''shape->sphere''', с помощью '''scale''' увеличиваем до необходимых размеров, теперь переключаемся в режим редактирования '''spawn element''', выделяем '''level changer''' и жмем '''commands->attach object''', а затем кликаем на сферу... Всё, сфера и level changer теперь связаны. Далее идем в закладку '''properties''', указываем название, например '''to_atp_2''', теперь нужно прописать в '''custom data''' вейпоинт для возврата, в случае отказа игрока от перемещения с локации на локации(обязательно). Вписываем вот это:
| + | |
− | <code>
| + | |
− | [pt_move_if_reject]
| + | |
− | path = atp_1_way_if_reject
| + | |
− | //в случае отказа от перемещения на вторую локу, возвращаемся назад
| + | |
− | </code>
| + | |
− | | + | |
− | В '''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''' пишем
| + | |
− | <code>
| + | |
− | [pt_move_if_reject]
| + | |
− | path = atp_2_way_if_reject //название вэйпоинта
| + | |
− | </code>
| + | |
− | В '''level to change''' указываем atp_1 //куда переходим с atp_2
| + | |
− | В '''level point to change''' - '''start_actor_01'''(дада, тот который мы создали на первом левеле :) )
| + | |
− | | + | |
− | Теперь здесь же на atp_2 создаем graph point с названием '''start_actor_01'''.
| + | |
− | И еще один где вписываем следущие значения:
| + | |
− | <code>
| + | |
− | Name: exit_atp_2_01
| + | |
− | Location: "свалка" //наименование локации
| + | |
− | | + | |
− | Connection:
| + | |
− | Level name: atp_1 //первый уровень
| + | |
− | Point name: exit_atp_1_01 //связующая точка с первого уровня
| + | |
− | </code>
| + | |
− | Незабудьте, что '''ACTOR''' должен быть только на одной локации(в нашем случае на atp_1), иначе компилятор выдаст ошибку. Всё!... Сохраняем, прекомпилим.
| + | |
− | | + | |
− | Запускаем '''Ai Compiler''', выбираем по очереди наши два уровня и просчитываем шаг 1, проверям сетку. Теперь создаем ''текстовый документ'' и вписываем туда
| + | |
− | <code>
| + | |
− | @start /wait bins\ai\1.exe -g atp_1
| + | |
− | @start /wait bins\ai\1.exe -g atp_2
| + | |
− | </code>
| + | |
− | сохраняем его как .bat и запускаем, в результате у каждого уровня
| + | |
− | появится свой '''level.graph'''(граф и кросс-таблица).
| + | |
− | | + | |
− | Создаем еще один текстовик, пишем
| + | |
− | <code>
| + | |
− | @start /wait bins\ai\1.exe -m
| + | |
− | </code>
| + | |
− | сохраняем как .bat и стартуем. Так мы собрали '''game.graph''' из '''level.graph''''ов.
| + | |
− | | + | |
− | И наконец.. создаем 3ий "бантик" для сборки '''all.spawn'''!
| + | |
− | <code>
| + | |
− | bins\ai\1.exe -s
| + | |
− | </code>
| + | |
− | | + | |
− | Компилим, заходим в '''gamedata\spawns\''', переименовываем получившийся спавн в '''all.spawn''' и запускаем через новую игру. Как видите, вы можете перемещаться с уровня на уровень, туда сюда без каких-либо проблем.
| + | |
− | | + | |
− | Чуть не забыл, обязательно временно, на время компиляции переместите все остальные левелы игры кроме ваших в любую другую папку, иначе
| + | |
− | могут быть ошибки при сборе графов и спавна.
| + | |
− | | + | |
− | Для сборки '''всех''' сингл уровней из оригинальной игры
| + | |
− | используйте bat фаил: [http://stalkerin.gameru.net/developer/mods/levelgraph_fullgame.bat fullgame.bat]
| + | |
− | Если будут ошибки связанные с алайфом, жмем ''продолжить''. Потом выполняйте процедуры как написано выше, сборка '''game.graph''', а затем '''all.spawn'''.
| + | |
− | | + | |
− | ==Добавляем наш уровень в сингл-плеер!==
| + | |
− | | + | |
− | Такс, продолжаем. Мне таки удалось наконец-то совместить свой тестовый левел с картами гсц. Итак приступим. Во первых нам необходим левел... свой, подготовленный. Если вы не читали инструкции выше, то дальше вам делать нечего. На нашем левеле должна быть во-первых '''connection point'''(соеденительная точка), вписываем в нее параметры данного примера, предположим такие:
| + | |
− | <code>
| + | |
− | Name: point_test_location_escape // название коннекшн-поинта
| + | |
− | | + | |
− | Connection
| + | |
− | Level Name:L01_Escape //с каким уровнем его связываем
| + | |
− | Point Name:esc_graph_point_0034 //соеденительный поинт на эскейпе, как
| + | |
− | //его добавить будет объяснено '''ниже'''.
| + | |
− | </code>
| + | |
− | Сделали?
| + | |
− | | + | |
− | Теперь создаем еще один граф на уровне, вписываем просто его имя...
| + | |
− | например '''Name: start_actor_01'''. Обязательно добавляем на уровень какой-нибудь уникальный объект... предположим '''машину'''. Зачем, узнаете потом. Но на левеле ни в коем случае не должно быть '''ACTOR''''а!! Сохраняем, прекомпилим левел. Компилим с помощью '''xrLC''' весь уровень, теперь открываем '''AICompiler''' от нео и выполняем '''1 или 2 и 3 шаги''' в отношении нашего левела.
| + | |
− | | + | |
− | Теперь нам нужно заручиться ОСОБЫМИ инструментами, в нашем случае понадобится [http://www.rapidshare.ru/532500 скрипт] от бардака, который позволяет узнать при запуске любого левела его '''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'ом с текстом
| + | |
− | <code>
| + | |
− | aiwrapper -extract_spawns
| + | |
− | </code>
| + | |
− | либо вводим тоже в тотал коммандере, с помощью этого ключа мы обновили '''level.spawn''''ы всех сингл-уровней, так как они не обновлялись со времен первого патча.
| + | |
− | | + | |
− | Теперь изучаем '''links.sample''' в блокноте. ничего не поняли? поясняю: '''aiwrapper''' обладает полезнейшим ключом '''-m2'''.
| + | |
− | <code>
| + | |
− | -m2 <файл> - склеить ИИ-графы карт в глобальный игровой граф с
| + | |
− | учётом поправок для связей из указанного файла
| + | |
− | </code>
| + | |
− | То есть с помощью него мы можем взять любой существующий граф на уровне гсц, который "не занят", и добавить ему нужные нам значения, например сделать его коннекшн поинтом(соеденительной точкой), а потом всё это склеится в общий глобальный '''game.graph'''.
| + | |
− | | + | |
− | Выполняем ''aiwrapper -dump_graph graphs.txt'' батом или тоталом. Комманда выведет нам список исходных вершин ИИ-графа в указанный файл, то есть список скомпиленных графов всех сингл-уровней гсц в фаил '''graphs.txt'''. Находим там точку '''esc_graph_point_0034'''. Видите что она пуста в плане связей в отличии от exit_escape_01,02? Значит мы можем ее использовать, в оригинале разрабы их ставили для путей ботов, то есть по ним перемещается аи, но мы ее заюзаем для связи с нашим тестовым левелом.
| + | |
− | | + | |
− | Итак, создаем например текстовик '''links_fixed.txt''' и вписываем туда
| + | |
− | <code>
| + | |
− | [l01_escape]
| + | |
− | ; добавляем переход для ИИ с Кордона на тестовый уровень.
| + | |
− | esc_graph_point_0034 = test_level_x, point_test_location_escape
| + | |
− | </code>
| + | |
− | '''test_level_x''' - название нашего уровня.
| + | |
− | '''point_test_location_escape''' - коннекшн поинт на нашем уровне.
| + | |
− | То есть мы прописываем у графпоинта на эскейпе эти два параметра, которые препращают его в коннекшн-поинт, связанный с тем, что на нашем левеле; сохраняем текстовик.
| + | |
− | | + | |
− | Выполняем батом или тотал коммандером:
| + | |
− | <code>
| + | |
− | aiwrapper -m2 links_fixed.txt
| + | |
− | </code>
| + | |
− | ЗЫЫ Желательно перед этим действом временно переместить куда-нибудь неиспользуемые левелы(мультиплеерные тоже) от греха подальше.
| + | |
− | Ждем пока соберется '''game_graph''', ошибок быть недолжно.
| + | |
− | {{Message_box|
| + | |
− | id =pseudoscience|
| + | |
− | align = left|
| + | |
− | backgroundcolor = #f9f9f9|
| + | |
− | image =Lamp.gif|
| + | |
− | heading = Важные моменты 2 -- Loxotron|
| + | |
− | message = Найден более простой способ вычисления '''game_vertex_id'''. В папке '''utils''' у компилятора бардака есть тулза '''ggtool.pl''' - утилита для показа межуровневых связей в '''game.graph'''. Копируем к утилите откомпилированный '''game.graph''' из '''gamedata\''' и выполняем прогу (в командной строке или через батник):
| + | |
− | <pre>
| + | |
− | ggtool.pl game.graph >svyazi.txt
| + | |
− | </pre>
| + | |
− | В результате в фаиле '''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''''ами.
| + | |
− | }}
| + | |
− | <br clear="both" />
| + | |
− | | + | |
− | Теперь дело за '''all.spawn''':
| + | |
− | <code>
| + | |
− | aiwrapper -s
| + | |
− | </code>
| + | |
− | В результате соберется полноценный '''all.spawn''' из всех уровней которые есть в папке '''levels'''. Но на этом работа только начинается, теперь надо '''отредактировать''' этот получившийся '''all.spawn''' и добавить '''level_changer''' на уровень гсц, чтобы мы смогли перейти с него на наш.(в нашем случае с эскейпа на test_level_x). Копируем получившийся '''all.spawn''' в <туда, куда вы распаковали aiwrapper>\utils и создаем .bat с таким текстом:
| + | |
− | <code>
| + | |
− | acdc.pl -d all.spawn
| + | |
− | </code>
| + | |
− | В результате мы разобрали all.spawn на ltx'сы, нам нужен '''alife_l01_escape.ltx''', вписываем в конец туда это:
| + | |
− | | + | |
− | <code>
| + | |
− | [не забитый номер]
| + | |
− | ;например 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 = <<END
| + | |
− | [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)
| + | |
− | </code>
| + | |
− | Еще одно определение двух параметров для непонятливых:
| + | |
− | <pre>
| + | |
− | game_vertex_id - ставится как коннекшн поинт ('''graph_point''' c соответствующими настройками)
| + | |
− | level_vertex_id - '''graph_point''' - ставится как обычная граф поинт с уникальным номером без параметров
| + | |
− | </pre>
| + | |
− | | + | |
− | В них вписываем уникальный ID для каждого уровня, то есть в некоторых случаях просто смотрим эти два параметра у соседних объектов этого левела и вписываем значения. Как правило, '''level_vertex_id''' можно поставить '''-1''', но не для всех объектов, '''game_vertex_id''' = ид уровня.
| + | |
− | | + | |
− | Устали? =) А ведь еще не всё, нужно создать вейпоинт, который мы прописали в '''custom data''' '''level changer''''а. Открываем '''way_l01_escape.ltx''' и вписываем чтото типа:
| + | |
− | <code>
| + | |
− | [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
| + | |
− | </code>
| + | |
− | Поставили? Всё, осталось только собрать '''all.spawn''', батом или тотал коммандером выполняем это:
| + | |
− | <code>
| + | |
− | acdc.pl -c all.ltx
| + | |
− | </code>
| + | |
− | Теперь копируем получившийся '''all.spawn.new''' в '''gamedata\spawns\''' и переименовываем его в '''all.spawn'''.
| + | |
− | | + | |
− | Мученья окончились :) Запускайте новую игру и наслаждайтесь вашим переходом...
| + | |
− | | + | |
− | ==В заключении==
| + | |
− | Если вы хотите, чтобы ваша точка перехода отображалась на карте игрока, то лезем в '''level_tasks.script''' и добавляем в '''function add_lchanger_location()''' секцию, подобную представленной ниже:
| + | |
− | <code>
| + | |
− | -- 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
| + | |
− | </code>
| + | |
− | В строке (obj.id, "level_changer", "'''exit_to_new_location_from_esc'''") выделенный текст - наименование вашего '''level_changer''', а число - его уникальный '''story_id''' на уровне, например на эскейпе или вашем левеле, список занятых '''story_id''' смотреть в '''lua_help.script'''
| + | |
− | | + | |
− | | + | |
− | | + | |
− | ==Список необходимых программ ==
| + | |
− | *[http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=165 AiCompiler 0.1] от '''Neo'''
| + | |
− | *[http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=166 AiWrapper] от '''bardak''''а
| + | |
− | *[http://www.rapidshare.ru/532500 Info_LVID_GVID] скрипт от '''bardak''''а
| + | |
− | *[http://files.gsc-game.com/st/xray-sdk-setup-v0.4.exe SDK 0.4] от '''GSC'''
| + | |
− | *[http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewdownload&cid=13 SDK Update] от '''Neo''' + '''GSC'''
| + | |
− | | + | |
− | | + | |
− | '''written by Loxotron'''
| + | |
− | | + | |
− | '''updated 11.01.08 by Loxotron'''
| + | |
− | [[Категория:Программы]][[Категория:SDK]]
| + | |