Модостроение. Создание и редактирование локаций
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:29 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Создание, редактирование, перенос локаций и добавление в игру Работа с SDK и дополнительными программами для создания, редактирования и добовления локаций Если у вас появились вопросы по созданию, редактированию, переносу локаций, а так же по добавлению их в игру. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП 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, в нем находим строки: Code ; 2947+ (финалка включая обновления) [2947_config]:2945_config $game_data$ = c:\temp\1\gamedata.3312\ $game_levels$ = c:\temp\1\gamedata.3312\levels\
; 3456+ (Clear Sky включая обновления) [3456_config]:2947_config $game_data$ = c:\temp\1\gamedata.3502\ $game_levels$ = c:\temp\1\gamedata.3502\levels\ fake_mu_gamemtls = 34xx_fake_mu_gamemtls fake_gamemtls = 34xx_fake_gamemtls Здесь $game_data$ - путь до папки gamedata с распаковаными ресурсами игры, $game_levels$ - до папки levels в gamedata соответственно. Необходимо указать полные пути.
В файле fsconverter.ltx находим следующую строку: Code $sdk_root$ = false| false| c:\program files\x-ray sdk\level_editor\ Здесь $sdk_root$ - путь до полного SDK (русифицированный не работает нормально с converter.exe). Правим путь на свой, не забывая поставить слэш в конце.
Более конкретная настройка СДК см. Ссылки.
Декомпиляция.
Конвертер полностью настроен, теперь нужно создать .bat-файл для конвертирования в формат SDK. Для этого создаем текстовой файл, пишем внутри команду и меняем формат файла с .txt на .bat: Code converter -level <имя_карты> -out <имя_сцены> -mode maya|le|le2 -with_lods pause Здесь <имя_карты> - имя папки с картой в каталоге 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 за это полезное сообщение: |
|
|
rex44 | Дата: Пн, 14.12.2015, 18:08 | Сообщение # 526 |
Гражданский
Пользователи
Сообщений: 18
| Да вопрос не столько в озеленении,меня вопрос по маске мучает,как правильно ее собрать-у меня не подхватывается она,а оригинальные текстуры террейна(даже из других игр) с масками своими нормально работают,а моя,самодельная текстура не хочет.Кстати,для тайловой текстуры террейна как маску делать-с самой текстуры или террейн рисовать?
|
|
|
Эти 0 пользователя(ей) поблагодарили rex44 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 15.12.2015, 12:56 | Сообщение # 527 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата rex44 ( ) меня не подхватывается она Как подхватываете?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
rex44 | Дата: Вт, 15.12.2015, 15:39 | Сообщение # 528 |
Гражданский
Пользователи
Сообщений: 18
| Да вот я и прошу помощи-объясните подробно как правильно маску настроить и применить.Смотрел кучу материалов и от Непряхина и на сталкерине,часто они друг другу противоречат,и у меня ни один из описанных ими способов не работает. Макрон (если знаете такого) скидывал файл,типа переименуйте в имя террейна и подсуньте в папку с ним-нифига не сработало,уже башня трещит,вроде такая мелочь,но где то что то неправильно делаю.Помнится,с Выжигателем тоже из за маски намучился,но как то сделал,уже не помню как((
Сообщение отредактировал rex44 - Вт, 15.12.2015, 15:40 |
|
|
Эти 0 пользователя(ей) поблагодарили rex44 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 16.12.2015, 19:21 | Сообщение # 529 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата rex44 ( ) как правильно маску настроить и применить Все очень просто: Берете текстуру террейна, закрашиваете землю чистым красным, асфальт, чистым зеленым, песок чистым синим. Под зданиями черным. Альфу заливаете черным. Сохраняете в tga и в SDK выбираете Тип 2D, формат DXT5. Сама текстура и thm в папке gamedata\textures\terrain. Все!
Цитата rex44 ( ) вроде такая мелочь,но где то что то неправильно делаю Вот, как вам помочь, если вы настойчиво отказываетесь сообщать, что делаете. Где искать ошибку? В хрустальном шаре?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
rex44 | Дата: Чт, 17.12.2015, 13:12 | Сообщение # 530 |
Гражданский
Пользователи
Сообщений: 18
| Проблема была в альфе...Теперь,вроде,все работает,но вот какой вопрос: террейн из 4-5 материалов,на каждый своя текстура(тайловая).Как в таком случае делать маску?-для каждой текстуры с неё или рисовать общую текстуру маски и ложить с переименованием с каждой текстурой ?
|
|
|
Эти 0 пользователя(ей) поблагодарили rex44 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 17.12.2015, 18:57 | Сообщение # 531 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| rex44, Террейн должен быть одним объектом с несколькими материалами (Не более трех) на разных участках. Текстура террейна должна быть одна (Именно поэтому возникает необходимость в маске - иначе как назначит одной текстуре несколько шейдеров?). Как собрать террейн и как срендерить единую текстуру террейна есть например в уроках Непряхина. Если у вас террейн состоит из нескольких объектов, с разными текстурами и разными шейдерами. Какие могут быть маски в этом случае?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
rex44 | Дата: Пн, 18.01.2016, 11:31 | Сообщение # 532 |
Гражданский
Пользователи
Сообщений: 18
| Вот такой вопрос,собрал мп карту,прописал дм и тдм режимы в сдк,упаковал с включеным автолоадом,карту видит движок,сервак выделеный запускается(из игры),при этом нивкакую не хочет работать с серверменеджером,пишет проверьте соединение или наличие уровня.Пробовал запустить другой уровень,а потом сменить карту,так пишет что неизвестный режим дм тдм.Ересь какая то...Пакую карту без автолоада,так ее движок не видит,а серверменеджер так же ругается на отсутствие режимов игры,хотя все прописано.
|
|
|
Эти 0 пользователя(ей) поблагодарили rex44 за это полезное сообщение: |
|
|
Тигра | Дата: Вт, 12.04.2016, 19:01 | Сообщение # 533 |
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
| Здравствуйте. Надеюсь, что мне, как и многим, тоже смогут помочь... ))
Итак, проблема: Есть пустая локация Рыжий Лес. По урокам Непряхина на локации заспавнен актор и сквад. Они появляются в заданных местах, но сквад не принимает свою логику. По логике сквад должен был идти по заданному маршруту. Не идет. Сидят в точке спавна, при попытке разговора, естественно, вылет. Кто может посмотреть, что я не так делаю? Я понимаю, что сейчас ответ может быть весьма простым: "Хрустальный шар в ремонте, а экстрасенс в отпуске". Так вот: какие файлы можно показать, какие мои действия рассказать, чтобы мне смогли помочь? ))) Очень прошу помощи или совета.
Сообщение отредактировал Тигра - Вт, 12.04.2016, 19:04 |
|
|
Эти 0 пользователя(ей) поблагодарили Тигра за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 12.04.2016, 19:41 | Сообщение # 534 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Тигра,
Нужен лог вылета. Секция сквада из squad_descr_***. Логика сталкеров в смарте, если такая имеется. Путь сталкеров в way_***.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Тигра | Дата: Вт, 12.04.2016, 21:00 | Сообщение # 535 |
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
| Цитата sergej5500 ( ) Секция сквада из squad_descr_***.
Код [red_sim_1_hunters_squad]:online_offline_group faction = hunters npc = hunters_scout_1, hunters_scout_2, hunters_scout_3, hunters_scout_4 target_smart = red_sim_1 ;spawn_point = red_sim_1_spawn_point story_id = red_sim_1_hunters_squad
Цитата sergej5500 ( ) Логика сталкеров в смарте, если такая имеется.
Код [smart_terrain];red_sim_1 squad_id = 1 max_population = 3
[exclusive] hunters_scout_1 = red_forest\hunters_scout.ltx hunters_scout_2 = red_forest\hunters_scout.ltx hunters_scout_3 = red_forest\hunters_scout.ltx hunters_scout_4 = red_forest\hunters_scout.ltx
Цитата sergej5500 ( ) Путь сталкеров в way_***.
Код [sim_1_hunters_scout_look] points = p0,p1,p2 p0:name = p0:flags = 0x1 p0:position = -14,0,-341.5 p0:game_vertex_id = 0 p0:level_vertex_id = 54144 p0:links = p1(1)
p1:name = wp01 p1:flags = 0x2 p1:position = -17.5,0,-316 p1:game_vertex_id = 0 p1:level_vertex_id = 50974 p1:links = p2(1)
p2:name = wp02 p2:flags = 0x4 p2:position = -22,0,-327.300018310547 p2:game_vertex_id = 0 p2:level_vertex_id = 46854
[sim_1_hunters_scout_walk] points = p0,p1,p2 p0:name = wp00 p0:flags = 0x1 p0:position = -15.1999998092651,0,-337.5 p0:game_vertex_id = 0 p0:level_vertex_id = 52857 p0:links = p1(1)
p1:name = wp01 p1:flags = 0x2 p1:position = -17.2000007629395,0,-318.100006103516 p1:game_vertex_id = 0 p1:level_vertex_id = 50971 p1:links = p2(1)
p2:name = wp02 p2:flags = 0x4 p2:position = -21,0,-327.200012207031 p2:game_vertex_id = 0 p2:level_vertex_id = 47523 p2:links = p0(1)
Сообщение отредактировал Тигра - Вт, 12.04.2016, 21:01 |
|
|
Эти 0 пользователя(ей) поблагодарили Тигра за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 12.04.2016, 21:12 | Сообщение # 536 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Тигра,
1. Что у вас в файле hunters_scout? 2. Выложен путь только для одного непися. Путь назван странно. Если смарт red_sim_1, то путь должен называться red_sim_1_hunters_scout_walk. 3. Что в логе вылета?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Тигра | Дата: Вт, 12.04.2016, 21:17 | Сообщение # 537 |
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
| Цитата sergej5500 ( ) Что у вас в файле hunters_scout?
Код [logic@hunters_scout_1] suitable = {=check_npc_name(hunters_scout_1)} active = remark@scout_1 prior = 200
[remark@scout_1] no_move = true invulnerable = true anim = guard_na combat_ignore_cond = true combat_ignore_keep_when_attacked = true gather_items_enabled = false corpse_detection_enabled = false help_wounded_enabled = false meet = no_meet on_info = {+hunters_quest_start} walker@scout_1
[danger_ignore] ignore_distance = 300 ignore_distance_grenade = 300 ignore_distance_corpse = 300 ignore_distance_hit = 300 ignore_distance_sound = 300
[smart_terrains] none = true
[walker@scout_1] path_walk = hunters_scout_walk path_look = hunters_scout_look meet = no_meet
[logic@hunters_scout_2] suitable = {=check_npc_name(hunters_scout_2)} active = remark@scout_2 prior = 200
[remark@scout_2] no_move = true invulnerable = true anim = guard_na combat_ignore_cond = true combat_ignore_keep_when_attacked = true gather_items_enabled = false corpse_detection_enabled = false help_wounded_enabled = false meet = no_meet on_info = {+hunters_quest_start} walker@scout_2
[walker@scout_2] path_walk = hunters_scout_walk path_look = hunters_scout_look meet = no_meet
[logic@hunters_scout_3] suitable = {=check_npc_name(hunters_scout_3)} active = remark@scout_3 prior = 200
[remark@scout_3] no_move = true invulnerable = true anim = guard_na combat_ignore_cond = true combat_ignore_keep_when_attacked = true gather_items_enabled = false corpse_detection_enabled = false help_wounded_enabled = false meet = no_meet on_info = {+hunters_quest_start} walker@scout_3
[walker@scout_3] path_walk = hunters_scout_walk path_look = hunters_scout_look meet = no_meet
[logic@hunters_scout_4] suitable = {=check_npc_name(hunters_scout_4)} active = remark@scout_4 prior = 200
[remark@scout_4] no_move = true invulnerable = true anim = guard_na combat_ignore_cond = true combat_ignore_keep_when_attacked = true gather_items_enabled = false corpse_detection_enabled = false help_wounded_enabled = false meet = no_meet on_info = {+hunters_quest_start} walker@scout_4
[walker@scout_4] path_walk = hunters_scout_walk path_look = hunters_scout_look meet = no_meet
Цитата sergej5500 ( ) Выложен путь только для одного непися. А... а я думала, это просто один маршрут для всех неписей в скваде. Разве нет?
Цитата sergej5500 ( ) Если смарт red_sim_1, то путь должен называться red_sim_1_hunters_scout_walk. Вроде, пробовали по-разному называть, в том числе и так...
Цитата sergej5500 ( ) Что в логе вылета? Прошу прощения, я перепутала: в конкретно этом случае вообще нет вылета. Они просто стоят на месте, а ГГ может хоть на голове ходить, им пофиг. Правда, на стрельбу отвечают.
|
|
|
Эти 0 пользователя(ей) поблагодарили Тигра за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 12.04.2016, 21:40 | Сообщение # 538 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата Тигра ( ) А... а я думала, это просто один маршрут для всех неписей в скваде.
Можно делать и так. Но лучше каждому дать свой индивидуальный путь. На одной работе неписи могут сталкиваться лбами. Это не очень красиво смотрится.
Цитата Тигра ( ) Вроде, пробовали по-разному называть, в том числе и так...
Путь непися в way_*** должен начинаться с имени смарта. Если в логике путь назван hunters_scout_walk, то в way_*** онобязанназываться red_sim_1_hunters_scout_walk. Иначе получите вылет.
Цитата Тигра ( ) Они просто стоят на месте
При стартовой схеме поведения remark так и должно быть. При переходе на схему walker игра вылетит. После инфопорции hunters_quest_start.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Тигра | Дата: Вт, 12.04.2016, 21:49 | Сообщение # 539 |
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
| sergej5500, а имена для way только для СДК критичны, значит? Потому что при спавне патрулей скриптом, они работают без указания смарта. Вот например:
Код [logic] active = remark@1 suitable = {=check_npc_name(voland)} true prior = 100 danger = danger_ignore combat_ignore_cond = true commander = true
[danger_ignore]
[remark@1] no_move = true invulnerable = true commander = true combat_ignore_cond = true meet = meet@1 on_info = {+voland_about_notebook_hack_dialog_done -anim_end -notebook_zabrat} walker@1 %=give_task(notebook_zabrat) +notebook_zabrat% on_info2 = gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false
[walker@1] path_walk = voland_walk path_look = voland_look no_move = true invulnerable = true commander = true combat_ignore_cond = true meet = no_meet gather_items_enabled = false
|
|
|
Эти 0 пользователя(ей) поблагодарили Тигра за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 12.04.2016, 22:19 | Сообщение # 540 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата Тигра ( ) имена для way только для СДК критичны
СДК имена вообще по барабану. Что пропишете, то он и соберёт. А движку Зова Припяти нет. Для сквадовых НПС имя пути должно начинаться с имени смарта. Ваш пример с Воландом не очень корректен. Если секция начинается с [logic], то это непись несквадовый. С кастом-датой. Иначе бы игра вылетела после регистрации работы в файле смарта. Для Воланда правило "имя пути должно начинаться с имени смарта" не действует.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|