Недавно решил загрузить себя переносом локации(кордона) из ЧН в ЗП. Но так как я совсем новичек в этом деле(перенос локации это моя первая попытка сделать в моддинге сталкера что-нибудь) у меня возникли конешно некоторые проблемы. Есть батник ggtool, нужен для того чтоб узнать game vertex. У меня он почему то не работает , когда я его запускаю у меня вылазит окно -
Из-за этого я не могу узнать нужные вертексы и поэтому написал 934 - какие они было написано обычно бывают. И они не подошли , я словил вылет когда хотел проверить локу
Измени содержимое батника на такой: perl ggtools.pl section4.bin И пройди шаги, которые пропустил И не создавай новой темы, все можно было спросить в Вопросах
Измени содержимое батника на такой: perl ggtools.pl section4.bin И пройди шаги, которые пропустил И не создавай новой темы, все можно было спросить в Вопросах
Спасибо , помогло) Но там почему-то пишет вертексы 934 . а в игре есть вылет...
Trillville Ругань на невалидный LEVEL вертекс. Найди на локации какой нибудь объект (любой, но желательно не большой, или вообще лестницу) и скопируй с него position, level_vertex, game_vertex. Вылет должен пройти.
И не забудь, что у актора помимо строки position есть еще и upd:position, которую тоже нужно исправить
Ну надо же а! Я сейчас делал то же самое... Переносил кордон из ЧН в ЗП. И то же везде прописал вертексы 934, и то же словил вылет с ключевыми словами: zaton_actor. Искал решение, и случайно попал сюда)
Trillville У меня всё получилось с первого раза. Руководствовался вот этой статьёй:
Подготовка.
Устанавливаем active perl.
Заходим в папку с программой ggEditor_01.Создаем там папки Cs или Cop(Смотря на какую игру делаете) и папку Soc.В папке Soc создаем папку gamedata и кидаем в нее файл game.graph(Важно чтобы game.graph лежал там, иначе программа не прочитает.) из мода, или от ТЧ.В папке gamedata создаем папку levels и кидаем туда папку с уровнем, который мы хотим портировать. Далее возвращаемся в папку Soc и туда кидаем папку с ACDC для ТЧ, туда же кладём all.spawn.Запускаем соответствующий батник для распаковки all.spawn`а.
Далее в папку ggEditor_01\Cs или Cop, кидаем папку с соответствующим ACDC, опять-же кладем туда all.spawn, распаковываем.
В итоге у нас должно получиться 2 распакованных all.spawn`а, game.graph от ТЧ и папка с переносимым уровнем.
С приготовлениями всё. Основная работа.
Запускаем программу ggEditor.Видим там два окошка. В левом открываем game.graph от ТЧ, а в правом — от ЗП или ЧН(В ЗП и ЧН граф вшит в all.spawn, ищите его там.)(Нужно выбрать тип файлов для ЧН — graph.bin, а для ЗП — все файлы и открыть в папке с ACDC файл section4.bin). В окошках мы видим список уровней. В левом окошке находим нужный нам уровень и нажимаем на соответствующую стрелку для переноса уровня в нужный нам граф. Нажимаем в правом окошке «сохранить».После того, как граф сохранился, можно закрыть программу, она нам больше не понадобится. Потом этого шагаем в папку с ACDC для ЧН\ЗП и удаляем старые файлы section4.bin или graph.bin.Затем переименовываем файлы graph.bin.new или section4.bin.new в graph.bin и соответственно section4.bin.
Далее идем в папку с ACDC от ТЧ, находим там файл alife_наша_локация и копируем его. Затем шуруем в папку с ACDC от ЧН\ЗП, вставляем скопированный нами файл. Открываем этот файл, сносим все, оставляем только одну секцию спавна(Лучше всего если это будет какой-нибудь объект), присваиваем секции номер не меньше 20000, сворачиваем на время этот файл. Далее нужно подогнать вертексы. Для этого запускаем батник ggtool, ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией(в ЧН это скорее всего будет 1620, а в ЗП 934).Далее разворачиваем alife_ файл с нашей локацией, ищем там строку «game_vertex_id» и пишем там число которое появилось рядом с нашей локацией при запуске батника ggtool.Затем обращаем свой взор на строку «level_vertex_id».К исходному значению строки прибавляем число, которое мы записали в строку «game_vertex_id», полученное число записываем. Далее, в добавляемых потом секциях спавна нужно писать эти числа. Мы подогнали вертексы.
Затем открываем файл all.ltx.Вписываем туда свой alife_ файл локации, way_ файлы не трогаем. Меняем на соответствующее число локации строку level_count.
После этого открываем файл alife_zaton(для ЗП) или alife_marsh(для ЧН)и ищем там гг по строке «section_name = actor».Нашли?Отлично. Теперь присваиваем этой секции спавна позицию(новую позицию прописываем также в строке "upd:position = ") и вертексы как у единственного предмета в файле alife_новая_локация. При следующей распаковке, если вы все сделали правильно, наш актор окажется в файле alife_новая_лока.
Мы почти закончили с пробной сборкой новой локации(пока без перехода).
Осталось только прописать наш новый уровень в файл ACDC Cop\acdccop.pl(для ЗП)либо в файле ACDC Cs\stkutils\level.pm.
В этих файлах ищем такие строки(для ЗП):
use constant levels_info => ( { gvid0 => 934, }, { gvid0 => 883, name => 'jupiter_underground' }, { gvid0 => 857, name => 'labx8' }, { gvid0 => 666, name => 'pripyat' }, { gvid0 => 317, name => 'jupiter' }, { gvid0 => 0, name => 'zaton' },
И если у вас число когда мы запускали батник ggtool тоже 934 то прописываем так:
use constant levels_info => ( { gvid0 => 934, name => 'ваша_локация' }, { gvid0 => 883, name => 'jupiter_underground' }, { gvid0 => 857, name => 'labx8' }, { gvid0 => 666, name => 'pripyat' }, { gvid0 => 317, name => 'jupiter' }, { gvid0 => 0, name => 'zaton' },
А в файле level.pm от ACDC ЧН вы увидите такой текст:
use constant levels_info => ( { gvid0 => 1620, }, { gvid0 => 1573, name => 'l12_hospital' }, { gvid0 => 1565, name => 'l11_stancia2' }, { gvid0 => 1524, name => 'l10_limansk' }, { gvid0 => 1511, name => 'l09_agroprom_undeground' }, { gvid0 => 1313, name => 'l08_military' }, { gvid0 => 1212, name => 'l07_yantar' }, { gvid0 => 1057, name => 'l06_agroprom' }, { gvid0 => 961, name => 'l05_red_forest' }, { gvid0 => 743, name => 'l04_darkvalley' }, { gvid0 => 472, name => 'l03_escape' }, { gvid0 => 245, name => 'l02_garbage' }, { gvid0 => 0, name => 'l01_marsh' },
Прописать там свой уровень нужно точно так-же как в файле от ACDC ЗП:
use constant levels_info => ( { gvid0 => 1620, name => 'ваша_локация' }, { gvid0 => 1573, name => 'l12_hospital' }, { gvid0 => 1565, name => 'l11_stancia2' }, { gvid0 => 1524, name => 'l10_limansk' }, { gvid0 => 1511, name => 'l09_agroprom_undeground' }, { gvid0 => 1313, name => 'l08_military' }, { gvid0 => 1212, name => 'l07_yantar' }, { gvid0 => 1057, name => 'l06_agroprom' }, { gvid0 => 961, name => 'l05_red_forest' }, { gvid0 => 743, name => 'l04_darkvalley' }, { gvid0 => 472, name => 'l03_escape' }, { gvid0 => 245, name => 'l02_garbage' }, { gvid0 => 0, name => 'l01_marsh' },
Всё.Собираем all.spawn. Сборка геймдаты.
Осталось собрать gamedat`у для игры и смотреть что получилось. Итак, приступим:
В папке с игрой создаем папку gamedata, а в ней папки configs, levels, spawns.В папку spawns ложим получившийся при сборке all.spawn.new(или new.spawn), не забывая переименовать его в all.spawn.В папку levels ложим уровень из ggEditor_01\Soc\gamedata\levels\ваша_локация.Затем заходим в папку с уровнем, удаляем файл level.ai и переименовываем файл level.ai10 в level.ai.
Теперь осталось только прописать уровень в конфигах.Из распакованной геймдаты игры берем файлы configs\game_graphs.ltx, game_levels.ltx, game_maps_single.ltx.
Далее лезем в game_levels.ltx. Там в самом начале, где список уровней, вписываем "level183"(число не менее 183.) Листаем файл до самого конца и в конце пишем следующее:
[level183] name = ваша_локация caption = "ваша_локация" offset = 700.0, 1000.0, -840.0 weathers = [default] id = 183
Затем открываем файл game_maps_single.ltx и прописываем свой уровень в секции "[level_maps_single]", а затем создаем примерно такую секцию для нашего уровня:
Предлагаю вам не терять зря времени просто бегая по подключенной локации, а замерить координаты для создания перехода.Координаты будем снимать на 2-х локациях:на подключенной и на той на которую вы хотите сделать переход соответственно.На каждой локации нам нужно снять по две координаты(координата самого перехода и координата места в которое будет бросать при переходе с второй локации, вторую координату делаем на пару метров дальше, потому как если сделать близко, то сразу же будет кидать обратно, на локацию с которой переходим.).Как снять координаты, я думаю все знают, поэтому объяснять здесь не буду.
Мы отмерили все необходимые нам координаты.
Затем распаковываем сделанный нами ранее all.spawn.Теперь в нужных нам локациях, в alife_ файлах добавляем следующую секцию спавна:
[1] ; cse_abstract properties section_name = level_changer name = escgar_level_changer - уникальное имя position = 28.060224533081,16.556184768677,685.80151367188 - координаты перехода direction = 0,0,0 cse_abstract__unk1_h16 = 0x1 ; cse_alife_object properties game_vertex_id = 1142 - геймвертексы distance = 0 level_vertex_id = 308110 - геймвертексы object_flags = 0xffffff3e ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 1.25219917297363,0,0 shape0:axis_y = 0,3.09340000152588,0 shape0:axis_z = 0,0,1.25219917297363 shape0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 3 ; cse_alife_level_changer properties dest_game_vertex_id = 1187 - вертексы локи на которую ведет переход dest_level_vertex_id = 212769 - вертексы локи на которую ведет переход dest_position = 39.396331787109,0.48722490668297,-299.7674505469 - позиция куда кидает dest_direction = 0,0,0 - поворот гг dest_level_name = l02_garbage - на какую локу кидает dest_graph_point = start_actor_01 silent_mode = 1 ; se_level_changer properties
Изменяем только те места, которые я прокомментировал, комментарии соответственно, удаляем. Всё готово.Собираем all.spawn и запихиваем в игру.
Убедительная просьба к начинающим модмейкерам.Пожалуйста, если вы только начали заниматься модами, то я вам настоятельно не советую заниматься подключением локаций.Наберитесь опыта, подучитесь элементарному.Я вас учить этому не подписывался.
Да и еще.Если будете переносить секции спавна, то для массовой замены гейм вертексов и левел вертексов можно использовать блокнот: открываем наш файл в блокноте=> правка=> заменить, и пишем что на что заменять.
Автор статьи: БАТЯ-STALKER
О способе подключения поведал: джЭдай (ака Panisher)
Если у вас что-то не получается или появились вопросы, есть тема на форуме.
Далее нужно подогнать вертексы. Для этого запускаем батник ggtool, ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией(в ЧН это скорее всего будет 1620, а в ЗП 934).Далее разворачиваем alife_ файл с нашей локацией, ищем там строку «game_vertex_id» и пишем там число которое появилось рядом с нашей локацией при запуске батника ggtool.Затем обращаем свой взор на строку «level_vertex_id».К исходному значению строки прибавляем число, которое мы записали в строку «game_vertex_id», полученное число записываем. Далее, в добавляемых потом секциях спавна нужно писать эти числа. Мы подогнали вертексы.
Точку появления ГГ, лучше всего сделать в секции, где была лестница(climable_object).
Ну и вот ещё, небольшая статейка, по созданию переходов:
да все на самом деле не так страшно, можно и самому разобраться, главное заглянуть в all.spawn. Итак: В all.spawn, в файле alife_ нужной тебе локации создаешь подобную секцию: "level_changer" [Свободный номер] ; cse_abstract properties section_name = level_changer name = оригинальное имя, можно так exit_to_my_location position = координаты твоего level_changer на локации от куда будешь уходить direction = 0,0,0
; cse_alife_object properties game_vertex_id = соответственно координатам distance = 7 level_vertex_id = соответственно координатам object_flags = 0xffffff3e
custom_data = <<END [pt_move_if_reject] path = way_if_reject - можно задать свое имя END - В кустум дате прописываешь имя точки при отказе на переход. Саму точку прописывать в way_ файл уровня (см. ниже)
story_id = твой (свободный) айди. Потом впишешь его в файл game_story_ids.ltx где-то в таком виде: твой_айди = "имя_level_chenger"
; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 2.22939944267273,0,0 shape0:axis_y = 0,4.83859968185425,0 shape0:axis_z = 0,0,2.22939944267273 shape0:offset = 0,0,0 - это все размеры места, где ты будешь входить в level_changer и будет появляться предупреждение о переходе на новый уровень
; cse_alife_level_changer properties dest_game_vertex_id = соответственно координатам ниже dest_level_vertex_id = соответственно координатам ниже dest_position = координаты точки куда будешь перемещаться на другом уровне
dest_direction = направление взгляда при появлении на новом уровне dest_level_name = ИМЯ уровня из файла game_levels.ltx. Например для Бара это L05_Bar dest_graph_point = start_actor_01 "way_if_reject" [way_if_reject] - задаешь имя которое у тебя было в кустом дата points = p0,p1 p0:name = name00 p0:position = координаты места куда отбросит p0:game_vertex_id = в соответствие с координатами p0:level_vertex_id = в соответствие с координатами p0:links = p1(1)
p1:name = name01 p1:position = могу ошибаться, но кажеться координаты точки на которую будет смотреть актор когда его отбросит p1:game_vertex_id = в соответствие с координатами p1:level_vertex_id = в соответствие с координатами
Затем, чтобы отображалась метка перехода идешь в файл level_task.script и делаешь так: "level_task.script" Ищишь такую функцию: "add_lchanger_location" Код function add_lchanger_location() local sim = alife() if sim then -- escape local obj = sim:story_object(91) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") end
-- garbage obj = sim:story_object(191) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_agroprom") end obj = sim:story_object(192) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_agroprom") end obj = sim:story_object(193) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_escape") end obj = sim:story_object(194) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_bar") end obj = sim:story_object(195) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_darkvalley") end obj = sim:story_object(196) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_darkvalley") end
-- agroprom obj = sim:story_object(391) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") end obj = sim:story_object(392) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") end
-- darkvalley obj = sim:story_object(415) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") end obj = sim:story_object(416) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") end obj = sim:story_object(417) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_escape") end
-- rostok obj = sim:story_object(608) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_yantar") end
-- bar obj = sim:story_object(592) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_military") end obj = sim:story_object(593) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") end obj = sim:story_object(594) if obj then level.map_add_object_spot(obj.id, "level_changer", "bar_rostok") end
-- military obj = sim:story_object(771) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_bar") end obj = sim:story_object(773) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_radar") end
-- yantar obj = sim:story_object(925) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_rostok") end
-- radar obj = sim:story_object(1007) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_pripyat") end obj = sim:story_object(1008) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_military") end
-- pripyat obj = sim:story_object(833) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_radar") end obj = sim:story_object(832) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_aes") end ТУТ
end end и в конце вместо слова тут пишешь приблизительно следующее obj = sim:story_object(твой стори айди) if obj then level.map_add_object_spot(obj.id, "level_changer", "пишешь, что будет написано, если навести курсор на переход на карте") end
Сообщение отредактировал Earthworm-Jim - Воскресенье, 05.02.2012, 11:12
Я тож по этой же статье делал, но у меня проблема с вертексами, а точнее с ggtool. Для ЗП он вертексы не пишет, жалуется на отсутствие graph.bin. Видел на AMK решение: с помощью ggtool.pl (Раскоментировать строку $gg->show_level_gvids()) section4.bin. Сделал как надо, а при запуске ggtool непонятные закорючки...
Добавлено (05.02.2012, 11:47) --------------------------------------------- А хотя нет... Всё понял!!! Выбрал рандомный вертекс - 935. И всё пошло! Во:
Сообщение отредактировал Gaz1k - Воскресенье, 05.02.2012, 11:48
Gaz1k рад за тебя. Вижу, что ты забыл текстуры добавить. Копируешь папку textures от ЧН, сверху папку от ЗП, с заменой файлов.
Добавлено (05.02.2012, 11:56) --------------------------------------------- А я как-то забросил это дело. Всё равно эти все последующие махинации в SDK делать надо, а я ещё не особо в нём разобрался.
Gaz1k рад за тебя. Вижу, что ты забыл текстуры добавить. Копируешь папку textures от ЧН, сверху папку от ЗП, с заменой файлов. Добавлено (05.02.2012, 11:56) --------------------------------------------- А я как-то забросил это дело. Всё равно эти все последующие махинации в SDK делать надо, а я ещё не особо в нём разобрался.
Да с текстурами я уже до самого включения лок разобрался. Просто перенёс из gamedat'ы ЧН папку terrains а оттуда файлики с нужными террейнами локаций)
Вот это только бесит:
Блин, на Агропроме problem:
Сообщение отредактировал Gaz1k - Воскресенье, 05.02.2012, 13:00
знаю эту фигню, хотел и про неё написать, да думал ты сам разберёшся. Тебе надо найти текстуры и бампы этих моделей, в папке textures от ЧН. А потом после сверху скопировать, с заменой. Сам уже не помню где они находятся.
Quote
Блин, на Агропроме problem:
Не знаю, что за фигня. Впервые вижу. У меня нормально всё было когда подключил. Проверь, ты папку gamedata\levels\agroprom полностью скопировал.
знаю эту фигню, хотел и про неё написать, да думал ты сам разберёшся. Тебе надо найти текстуры и бампы этих моделей, в папке textures от ЧН. А потом после сверху скопировать, с заменой. Сам уже не помню где они находятся.
Quote Блин, на Агропроме problem:
Не знаю, что за фигня. Впервые вижу. У меня нормально всё было когда подключил. Проверь, ты папку gamedata\levels\agroprom полностью скопировал.
Спасибо большое, теперь разобрался.
Не по теме, но: Решил на Кордоне добавить торговца (Не Сидоровича, а то откуда мне знать как его на стул посадить)
Вот поставил Сыча:
А он болтать не хочет. Никто не может подсказать, как его можно заставить говорить?
Не по теме, но: Решил на Кордоне добавить торговца (Не Сидоровича, а то откуда мне знать как его на стул посадить) А он болтать не хочет. Никто не может подсказать, как его можно заставить говорить?
Затем вот возьмём npc_profile.xml и там в конец Code <character id="sasik"> <class>sasik</class> <specific_character>sasik</specific_character> </character>
Потом берём файл и пишем там spawn_sections_general.ltx Code [sasik]:stalker $spawn = "respawn\sasik" character_profile = sasik spec_rank = master community = stalker custom_data = scripts\sasik_lg.ltx story_id = stalker_sasik
Затем заходим сюда D:\Program Files\S.T.A.L.K.E.R. - Зов Припяти\gamedata\configs\scripts там создаём файл sasik.ltx и sasik_lg.ltx и пишем в нём Code [logic] active = remark1 danger = danger_ignore anim = desk_idle
ой заходим потом в D:\Program Files\S.T.A.L.K.E.R. - Зов Припяти\gamedata\scripts и создаём там файл sasik.script и в нём пишем Code function sasik () if not db.actor:has_info("spawn_sasik") then
alife():create("sasik",vector():set(828.914,-0.099,-42.506),359882,957) db.actor:give_info_port ion("spawn_sasik") end end
Заходим в конце в db.script и тут находим строку function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) npc.soldier() sasik.sasik() красная ghost.ghost() lol.lol() monolith1.monolith1() monolith2.monolith2() voyaka.voyaka() wolf.wolf() end зелёным это мои а красным берём и вписываем туда Code sasik.sasik()
Вот и всё ,НПС будет на моей локе ЧАЭС ,а вы поменяйте координаты ...{|}Всякие{|}{|}...{|}...{|}