Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Создание и редактирование локаций
denis2000Дата: Пн, 10.10.2011, 21:29 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Создание, редактирование, перенос локаций и добавление в игру

Работа с 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
InvuLДата: Вс, 03.02.2013, 19:26 | Сообщение # 106
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

Люди, как сделать для *.dds текстуры *.thm файл, инет перерерыл, не нашёл. Мне нужен файл trees_fuflo.thm, я знаю как *.thm для файлов *.object, если можете скинте ссылку на этот файл, а вот для dds...

trees_fuflo.thm
denis2000
 
dmitry778Дата: Вс, 03.02.2013, 19:49 | Сообщение # 107
Советник «Свободы»
Свобода
Сообщений: 727
Награды: 15
Репутация: [ 159 ]

InvuL, Качай. Сам парился с ней. biggrin

СОВСЕМ НЕ ВАЖНО ОТ ЧЕГО ПОМРЕШЬ - ГОРАЗДО ВАЖНЕЕ ДЛЯ ЧЕГО РОДИЛСЯ.
 
denis2000Дата: Вс, 03.02.2013, 19:54 | Сообщение # 108
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

InvuL, Помести текстуру в формате tga в папку rawdata\textures и открыв например Actor Editor и выбрав Images -> Image Editor делаешь текстуру в формате dds плюс thm.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
InvuLДата: Пт, 08.02.2013, 09:28 | Сообщение # 109
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

При компиляции спавна происходит вылет:
[cut]
Код

Expression    : assertion failed
Function      : CGraphMerger::CGraphMerger
File          : D:\prog_repository\sources\trunk\utils\xrAI\xr_graph_merge.cpp
Line          : 597
Description   : tpGraphs.size()

[/cut]
Как я понял, это что то связано с геймграфами, но у меня на карте их только 3.
 
denis2000Дата: Пт, 08.02.2013, 10:44 | Сообщение # 110
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

InvuL, Правильно настрой файлы game_graphs.ltx, game_levels.ltx, game_maps_single.ltx

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
InvuLДата: Пт, 08.02.2013, 11:01 | Сообщение # 111
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

Я не знаю как правильно настраивать их надо, много форумов перерыл, понять не мог, но как то настроил. Вот:
[cut=game_maps_single.ltx]
Код
...
[level_maps_single]
    ;       stohe_selo       =
     zaton        =
     jupiter        =
     jupiter_underground     =
     pripyat        =
     labx8        =
     yantar_single                       =
;  plecha_selo       =
;  weapons_test      =

...

;[yantar_single]
;  global_rect = 307.0, 90.0, 717.0, 500.000000
;  music_tracks                     = zaton_musics
;  weathers = dynamic_default

[/cut]
При том если я раскоментирую строки yantar_single, то при компиляции спавна вылет:
[cut=Вылет]
Код
Expression    : fatal error
Function      : CInifile::Load
File          : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
Line          : 274
Description   : <no expression>
Arguments     : Duplicate section 'yantar_single' found.

[/cut]
[cut=game_graph.ltx]
Код

...

[location_3]

...

140 = "pri_sim_11"
141 = "pri_sim_12"
142 = "yantar_single"
143 = "yan_smart_terrain_1"
144 = "yan_sim_1"
145 = "yan_sim_2"
146 = "yan_sim_3"

...

[/cut]
[cut=game_levels.ltx]
Код
[levels]

...

     level183
     level184
     tgm_bug_test_3
     tgm_jupiter_test

     level185     
     level186

...

[level185]
name   = yantar_single
caption = "yantar_single"
offset  = 12000.0,     1000.0,    10000.0
weathers = [default]
id  = 185

[level186]
name   = yan_smart_terrain_1
caption = "yan_smart_terrain_1"
offset  = 12000.0,     1000.0,    10000.0
weathers = [default]
id  = 186

[/cut]

Ну что же тут не так?


Сообщение отредактировал InvuL - Пт, 08.02.2013, 11:03
 
denis2000Дата: Пт, 08.02.2013, 23:29 | Сообщение # 112
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

InvuL, Где-то продублировал секцию yantar_single

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
InvuLДата: Вс, 10.02.2013, 07:53 | Сообщение # 113
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

Проблема: Я нормально переконвертировал карту, взял спавн только этой карты, пытаюсь через ACDC разобрать спавн, а он мне выдаёт, когда читает секции alife:
[cut]
Код
FATAL ERROR!
Function      : stkutils::entity::_read_m_spawn
Line          : 94
Expression  : defined $class_name
Description   : unkown class for section mp_medkit

[/cut]

Я нашёл эту аптечку, удалил её с карты, сохранил, заного ВСЁ перекомпилировал, всёравно при разборе НОВОГО спавна находит аптечку, хотя я на карте через список объектов, все спавно элементы проверил, и просто камерой обшарил, аптечки нигде нету, как это можно исправить, или обойти?

Удалите ВСЕ объекты относящиеся к мультиплеерной игре. denis2000

Добавлено (10.02.2013, 07:53)
---------------------------------------------
Удалил уже всё что можно на карте, всёравно при распаковке спавна вылет, НО уже другой:
[cut]
Код
FATAL ERROR!   
Function      : stkutils::ini_file::value   
Line          : 424   
Expression  : defined $self->{sections_hash}{$section}
Description   : sections is undefined

[/cut]

Не известное распаковщику имя секции. Выложи файлы spawn.part и way.part своей локации. denis2000
 
Red_DevilДата: Пн, 11.02.2013, 14:52 | Сообщение # 114
Гражданский
Пользователи
Сообщений: 10
Награды: 0
Репутация: [ 0 ]

Всем привет. Меня интересует почему в СДК не все объекты из сталкера? К примеру всяких домов, навесов, и прочих зданий там нет. Только всякие школы и многоэтажки, и из Лиманска дома, а ангаров, деревянных домиков и прочих строений там нет. Я на торренте нашел пак, там написано, что все объекты из сталкера присутствуют, скачал (14Гб!), нашел там файлы в формате *.object засунул их по адресу в СДК SDK\editors\rawdata\objects\ но после открытия СДК в нем никаких изменений по кол-вы объектов не произошло. Подскажите что не так я сделал? Или может есть у кого ссыль на объекты или сами объекты строений. Поделитесь плиз. Очень нужно.

 
denis2000Дата: Пн, 11.02.2013, 22:22 | Сообщение # 115
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата (Red_Devil)
Меня интересует почему в СДК не все объекты из сталкера?

Зачем? Если в игровых архивах итак все есть!
Цитата (Red_Devil)
файлы в формате *.object засунул их по адресу в СДК SDK\editors\rawdata\objects\

Именно так и все работает!


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
KarmaДата: Ср, 20.02.2013, 15:21 | Сообщение # 116
Удаленные



Вобщем перехожу я на ЗП-шный СДК. Было все нормально, пока после загрузки локации не вылезло это:
[cut noguest=При загрузке локации вылазиет это окно, что это могло значить?][/cut]

Игнорируйте. denis2000
 
Игорь_ГоДата: Пн, 25.02.2013, 14:35 | Сообщение # 117
Отмычка
Пользователи
Сообщений: 26
Награды: 0
Репутация: [ 0 ]

Всем привет.
Сделал террейн, сделал несколько строений и хоться на террейне сделать площадочки под эти строения.
Надо, чтобы НПС-ы бегали внутри этих строений, т.е внутри них будет ai-сетка, а отсель вопрос: как совместить расположение строений с этой сеткой на террейне?
Али нужно сделать сетку, потом ужо размещать строения и вырезать площадки?

Как по науке эт делается?

1. Аи-сетка делается в последнюю очередь.
2. Хотите по науке есть видеоуроки по работе в SDK в соседней теме. denis2000
 
KarmaДата: Вс, 03.03.2013, 13:49 | Сообщение # 118
Удаленные



При компиляции локации в CoP SDK остановилась компиляция с ошибкой:

Код
FATAL ERROR
     
[error]Expression    : assertion failed
[error]Function      : CBuild::Load
[error]File          : .\Build_Load.cpp
[error]Line          : 273
[error]Description   : L_static().rgb.size()


Я так понял что-то связанно со светом, хотя я ставил его.

Все разобрался, у меня отсутствовал $static


Сообщение отредактировал Karma - Вс, 03.03.2013, 15:12
 
sergej5500Дата: Вс, 03.03.2013, 15:10 | Сообщение # 119
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Возник следующий вопрос. В SGM 2.1 сделал на Затоне несколько рестрикторов и сейфов с определённй логикой. Всё прописано в alife_zaton и работает как надо. Декомпилировал Затон для обработки в SDK. Можно ли перенести элементы из alife_zaton версии 2.1 в распакованную локацию. Локации Затон в этом моде нет и она берётся из ресурсов игры. Откуда при распаковке берутся данные о рестрикторах, боксах, террайнах и т.д?
 
denis2000Дата: Вс, 03.03.2013, 16:17 | Сообщение # 120
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, При декомпиляции локации в формат SDK информация о спавн-объектах берется из файла level.spawn, что находиться в директории с локацией levels\<имя локации>.
Можно ли перенести элементы из alife_zaton версии 2.1 в распакованную локацию? Конечно, можно, нужно в SDK создать эти спавн элементы заново. Причем это касается абсолютно ВСЕХ спавн элементов добавленных прямым редактированием all.spawn, в том числе и добавленных модом.
Другой способ - конвертировать all.spawn в набор level.spawn при помощи universal_acdc.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: