Создание, редактирование, перенос локаций и добавление в игру
Работа с SDK и дополнительными программами для создания, редактирования и добовления локаций
Если у вас появились вопросы по созданию, редактированию, переносу локаций, а так же по добавлению их в игру. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Декомпиляция уровней в формат SDK. Спасибо VERvolF]Для декомпиляции игровых карт в формат LevelEditor'a используется консольная утилита converter.exe, входящая в пакет X-ray Game asset tools pack или X-ray Engine Tools (converter). Последнюю версию искать на сайте
Настройка Конвертера.
Открываем любым текстовым редакором файл converter.ini, в нем находим строки:
Здесь $game_data$ - путь до папки gamedata с распаковаными ресурсами игры, $game_levels$ - до папки levels в gamedata соответственно. Необходимо указать полные пути.
Здесь $sdk_root$ - путь до полного SDK (русифицированный не работает нормально с converter.exe). Правим путь на свой, не забывая поставить слэш в конце.
Более конкретная настройка СДК см. Ссылки.
Декомпиляция.
Конвертер полностью настроен, теперь нужно создать .bat-файл для конвертирования в формат SDK. Для этого создаем текстовой файл, пишем внутри команду и меняем формат файла с .txt на .bat:
Здесь <имя_карты> - имя папки с картой в каталоге gamedata\levels\, например l08_yantar (локация Янтарь из ТЧ), <имя_сцены> - имя карты после декомпиляции, можно не писать, в этом случае имя карты после декомпиляции не изменится. Далее выдержка из docs\converter.txt:
Quote
Ключ -mode задаёт режим работы: maya - декомпилировать только геометрию карты. le - декомпилировать в формат LE. le2 - декомпилировать в формат LE (для l12_stancia_2). raw - декомпилировать в формат LE (отладочный режим).
Ключ -with_lods обрабатывается в зависимости от значения -mode. Если он задан совместно с -mode maya, программа выдаст ещё и MU-модели. С остальными режимами его наличие заставляет converter разбивать LOD-текстуры, что необходимо для полной пересборки. Также ключ ''-with_lods'' следует использовать если планируется дальнейшая перекомпиляция уровня.
Отладочные параметры: -dbgcfrm, -dbgmrg.
То есть команда для декомпиляции в формат SDK, например, уровня l08_yantar будет выглядеть так:
Code
converter -level l08_yantar -out l08_yantar_decompiled -mode le -with_lods
Если все сделано правильно, то после запуска батника пойдет процесс декомпиляции.
Найти декомпилированную карту можно будет в каталоге $sdk_root$\maps (файл, читаемый SDK) и $sdk_root$\rawdata\objects\levels (обьекты, используемые данным уровнем). Ну а далее думаю всё и так понятно - в ЛЕ жмём File -> Open и открываем нашу карту. [/cut][cut=Создание LOD-текстур]Изначально в пакете SDK отсутствуют LOD'ы. Их придется создать самостоятельно. В свитке Scene Level Editor'a кликаем Objects-->Library Editor (Объекты-->Библиотека объектов). В открывшемся диалоговом окне выбираем нужный объект, ставим флажок Preview (Предпросмотр). Нажатием кнопки Make LOD (High Quality) или Make LOD (Low Quality) запускаем процесс создания LOD-текстур соответственно в высоком или низком качестве. Созданные LOD'ы можно найти в \rawdata\textures\lod\ (.tga) и \gamedata\textures\lod\ (.dds и .thm).
Если у объекта отсутствует .thm-файл с картинкой-превьюшкой, то можно создать его нажатием кнопки Make Thumbnail (Создать миниатюру), выбрав перед этим удобный ракурс для "съемки". [/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end
Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый:
Code
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)
Второй:
Code
Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'
[/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
sergej5500, По моему мнению, дело в том, что анимпоинты расположены чуть выше сетки и в результате движек теряется в построении маршрута для достижения НПС конкретного анимпоинта. К тому же движек X-Ray в принципе довольно привередлив к АИ-сетке с несколькими уровнями и такие баги у него частенько бывают. Например в ЗП на Затоне раненный сталкер на кровати иногда спускается вниз, ложиться горизонтально и "возноситься" на кровать уровнем выше. "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
Добрый день. Поставил на Болотах из ЧН смарт, в нем камп-зону и два анимпоинта. Смарт покрывает камп-зону, камп-зона покрывает анимпоинты. Нпс не спавнил. Получил вот такой вылет:
[cut noguest=Вылет] FATAL ERROR
[error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...e.r. - Зов Припяти\gamedata\scripts\bind_camp.script:28: attempt to index local 'ini' (a nil value) [/cut]
Эти 0 пользователя(ей) поблагодарили Довакин за это полезное сообщение:
Здравствуйте ,у меня проблема с переходом ,в Сигериус мод 2.2 добавил ещё две локации , Свалку и Янтарь ,заселил их сделал пару квестов ,получилось отлично ! Все переходы работают с Кордона на Свалку , с Свалки на Янтарь ,а вот обратно на Свалку выкидывает за пределы карты куда то в низ и виснет ,что я упустил ? Работал с all.spawn и с папками level_changers / to_yantar и level_changers / to_garbage . За Ранее спасибо! ROMIX
Эти 0 пользователя(ей) поблагодарили romix11111 за это полезное сообщение:
I'm not sure where to post my question,so I post here because it's concerning modding. First, I hope it doesn't bother you ,in any way, and if not, no problem I will delete that message. I'm French and it's very difficult for me to write in Russian.I translate many fabulous Russian mod,but I write en English.
I lost 2 years ago some of my data on which I was working. (An old hard drive decide to make a break after years of intensive use ). So today I have only few screens to try to find a so beautiful map,an incredible map level for SoC. I have lost everything about it.Remeber files date 2008/2010. But all this time, I have never been able to find this archive. I search in vain for it because I can't even remember the name of the archive,or the names of exceptional authors making this map. I thought it was a multiplayer map.
Perhaps some Stalkers here (a so big community with so many Stalker fans and awesome modders perhaps know this level and had information about it.
I would be infinitly grateful if anyone knew some infos about this awesome map . I found it a very long time ago ,from a Russian site for sure, but I don't remember where ... And I never managed to find again this so great train map.
I had managed to convert this level to work with the SDK COP.
I only know that in path terrain .object in the SDK there is mentioned the name of l2_9.
There was also in this map a swing bridge for trains was unique I believe in the levels of Stalker.
I know it does not much information ... But we never know, here is ...a lot of Stalkers here,perhaps knowing that map! I would be so happy to recover files level and textures ... It's a bit my quest for the Holy Grail... for all this time :)
Have a good evening Best Regards
Я знаю, что только в поле Путь в SDK .Object Существует упомянул имя l2_9.
Там был в этой карте качели мост для поездов сингла Я верю в уровнях Stalker.
Я знаю, это не много информации ... Цель мы никогда не знаем, вот ... много сталкеров Возможно, зная, что карта! Я бы так счастлив, чтобы восстановить файлы и текстуры на уровне ... Это немного мои поиски Святого Грааля ... за все это время :)
Иметь хороший вечер С наилучшими пожеланиями
I have ...always a little hope to find this somptuous map .
But,yes I think only old Stalker or multiplayer gamer perhaps, knows this old map. Or perhaps also ,a fan of builds ,like me, who collect original level map for Stalker since the beginning... But even in all of the 63 fonctionnals builds I have,I never seen such creativity as in this Train Station. And the more sad ...I even don't know the names of the so talented authors.
I'm sad also because I spend many time to work on it,in my dream it was to make a fully SP gamedata , with full correct AImap and spawns ,to enjoy all the extraordinaries possibilities which can offer this map. I had many ideas about it ,and imagine a story,but...it's like that.
У меня есть... всегда немного надежды :)
Но, да я понимаю. Только старый Сталкер или многопользовательский геймер, возможно, знает эту старую карту. Или возможно также, поклонник строит, как я, кто собирает оригинальную карту... Но даже во всех 63 fonctionnals строит, я имею, Я никогда замечаемый такая креативность как в этом Вокзале. И более печальное... Я даже не знаю названия так талантливые авторы.
Мне грустно также, потому что я трачу многих время, чтобы работать над ним в моей мечте, которую это должно было сделать полностью SP gamedata, с полным правильным AImap и икрой, чтобы обладать всеми extraordinaries возможностями, которые могут предложить эту карту. У меня было много идей об этом, и вообразите историю, но... вот то-то и оно.
Cпасибо
Hope my message not boring.Thank's. Have a good evening Best Regards
Иметь хороший вечер С наилучшими пожеланиями 3.4. На форуме запрещена любая реклама без согласования с администрацией сайта. WitaLiy
Эти 0 пользователя(ей) поблагодарили stalker74 за это полезное сообщение:
stalker74, Смотри свои личные сообщения (See your private messages). "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
Incredible! I 'm so happy to see that. :D Youpi,I'm going to continue working on it thanks to you. You're a so fine person.
I infinitly thank you for all you share us ,learn and teach us. I read so many tips and help from you and other awesome modders. Let me tell you the gratitude I owe you and for all the large Russian community modders, for all these wonderful mods that you create for our favorite game and with which we can enjoy so many pleasure hours .
I translated SGM since v1.7 and have all marvellous game still fonctionnal. I appreciate so much Gladiator1,2 Time alliance,and last part.
Thank's again for all. Have a good day,Dear Sir Today you make me so happy ,since the time I search to recover these fabulous files.
(Sorry ,I try a google russian traduction for the message ,but I think it's to "horrible" to publish it,but the heart is here). (I can't send you a private message,because the code authentification "capcha"is in russian cyrillics and I can't write it in French keyboard,apologize...) :D 3.4. На форуме запрещена любая реклама без согласования с администрацией сайта. WitaLiy
Сообщение отредактировал stalker74 - Ср, 28.10.2015, 12:50
Эти 0 пользователя(ей) поблагодарили stalker74 за это полезное сообщение:
keilin, X-Ray Engine Toolset в помощь (бывший конвертор от Бардака). "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
Я декомпилировал Кордон из Чистого Неба. Вырезал из него неподдерживаемые объекты. Сейчас заполняю локацию квестами. В сборке локация одна - Кордон. После выполнения операций с Кордоном в СДК, команды make_game на этапе сборки спавна всякий раз появляются такие сообщения.
Сборщик на что-то ругается. 6 строк. Видимо, на граф-пойнты. Эти граф-пойнты в Чистом Небе, видимо были связаны с граф-пойнтами на других локациях. И теперь связь нарушена.
Два вопроса.
1. Опасно ли отсутствие связи? Может ли это привести к вылетам? Пока я вылетов не замечал. 2. Можно ли найти эти 6 граф-пойнтов и поправить их? Как их вычислить? Проверять все 300 граф-пойнтов особого желания нет.
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение:
Сборщик на что-то ругается. 6 строк. Видимо, на граф-пойнты. Эти граф-пойнты в Чистом Небе, видимо были связаны с граф-пойнтами на других локациях. И теперь связь нарушена.
Совершенно верно.
Цитатаsergej5500 ()
Опасно ли отсутствие связи? Может ли это привести к вылетам?
Неопасно и к вылетам не приведет.
Цитатаsergej5500 ()
Можно ли найти эти 6 граф-пойнтов и поправить их? Как их вычислить?
Они должны находиться в районе где сделаны переходы между уровнями, за левел ченджерами. "Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение:
2. С помощью стандартной функции попробовал заспавнить тестовые рюкзаки.
[cut=Конфиг и скрипт]Скрипт ui_main_menu elseif dik==DIK_keys.DIK_F9 then xr_effects.spawn_object(actor,nil,{"test_inventory_box","esc_test_rukzak_1_spawn"}) xr_effects.spawn_object(actor,nil,{"test_inventory_box","esc_test_rukzak_2_spawn"})
Ребят,помощь нужна.Маска ни в какую не хочет подхватываться,как только уже не мудрил.Её нигде не надо инициализировать случаем?-стандартные маски со своими текстурами террейна работают нормально,а на своих даже растительность не пашет,в сдк все билдится ,а уровень при запуске голый(видимо из за маски).Как правильно создать и прописать маску ?
Эти 0 пользователя(ей) поблагодарили rex44 за это полезное сообщение:
sergej5500, Все из-за того, что если точка не на сетке, то попытка вызова ptr:level_vertex_id(0) или ptr:game_vertex_id(0) выдаст индексы не в существующем диапазоне, а попытка спавна обернется таким логом. Выход из ситуации - брать эти параметры из таблици:
Код
function spawn_object(actor, obj, p) --' p[1] - секция кого спаунить --' p[2] - имя патрульного пути где спа унить. --' p[3] - индекс точки патрульного пути. --' p[4] - угол разворота объекта. --' p[5] - имя уровня. local levels = { "escape" = {lv = 416158, gv = 127}, "zaton" = {lv = 36158, gv = 512} } local spawn_sect = p[1] if spawn_sect == nil then abort("Wrong spawn section for 'spawn_object' function %s. For object %s", tostring(spawn_sect), obj:name()) end
local path_name = p[2] if path_name == nil then abort("Wrong path_name for 'spawn_object' function %s. For object %s", tostring(path_name), obj:name()) end
if not level.patrol_path_exists(path_name) then abort("Path %s doesnt exist. Function 'spawn_object' for object %s ", tostring(path_name), obj:name()) end local ptr = patrol(path_name) local index = p[3] or 0 local yaw = p[4] or 0 local spawn_level = p[5]
local levelv = levels["escape"].lv local gamev = levels["escape"].gv if levels[spawn_level] ~= nil then levelv = levels[spawn_level].lv gamev = levels[spawn_level].gv end
--' printf("Spawning %s at %s, %s", tostring(p[1]), tostring(p[2]), tostring(p[3])) local se_obj = alife():create(spawn_sect, ptr:point(index), levelv, gamev) if IsStalker( nil, se_obj:clsid()) then se_obj:o_torso().yaw = yaw * math.pi / 180 elseif se_obj:clsid() == clsid.script_phys then se_obj:set_yaw(yaw * math.pi / 180) end end