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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
rex44Дата: Пн, 14.12.2015, 18:08 | Сообщение # 526
Гражданский
Пользователи
Сообщений: 18
Награды: 0
Репутация: [ 0 ]

Да вопрос не столько в озеленении,меня вопрос по маске мучает,как правильно ее собрать-у меня не подхватывается она,а оригинальные текстуры террейна(даже из других игр) с масками своими нормально работают,а моя,самодельная текстура не хочет.Кстати,для тайловой текстуры террейна как маску делать-с самой текстуры или террейн рисовать?
 
denis2000Дата: Вт, 15.12.2015, 12:56 | Сообщение # 527
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата rex44 ()
меня не подхватывается она

Как подхватываете?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
rex44Дата: Вт, 15.12.2015, 15:39 | Сообщение # 528
Гражданский
Пользователи
Сообщений: 18
Награды: 0
Репутация: [ 0 ]

Да вот я и прошу помощи-объясните подробно как правильно маску настроить и применить.Смотрел кучу материалов и от Непряхина и на сталкерине,часто они друг другу противоречат,и у меня ни один из описанных ими способов не работает. Макрон (если знаете такого) скидывал файл,типа переименуйте в имя террейна и подсуньте в папку с ним-нифига не сработало,уже башня трещит,вроде такая мелочь,но где то что то неправильно делаю.Помнится,с Выжигателем тоже из за маски намучился,но как то сделал,уже не помню как((

Сообщение отредактировал rex44 - Вт, 15.12.2015, 15:40
 
denis2000Дата: Ср, 16.12.2015, 19:21 | Сообщение # 529
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата rex44 ()
как правильно маску настроить и применить

Все очень просто:
Берете текстуру террейна, закрашиваете землю чистым красным, асфальт, чистым зеленым, песок чистым синим. Под зданиями черным. Альфу заливаете черным. Сохраняете в tga и в SDK выбираете Тип 2D, формат DXT5. Сама текстура и thm в папке gamedata\textures\terrain. Все!

Цитата rex44 ()
вроде такая мелочь,но где то что то неправильно делаю

Вот, как вам помочь, если вы настойчиво отказываетесь сообщать, что делаете. Где искать ошибку? В хрустальном шаре?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
rex44Дата: Чт, 17.12.2015, 13:12 | Сообщение # 530
Гражданский
Пользователи
Сообщений: 18
Награды: 0
Репутация: [ 0 ]

Проблема была в альфе...Теперь,вроде,все работает,но вот какой вопрос: террейн из 4-5 материалов,на каждый своя текстура(тайловая).Как в таком случае делать маску?-для каждой текстуры с неё или рисовать общую текстуру маски и ложить с переименованием с каждой текстурой ?
 
denis2000Дата: Чт, 17.12.2015, 18:57 | Сообщение # 531
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

rex44, Террейн должен быть одним объектом с несколькими материалами (Не более трех) на разных участках. Текстура террейна должна быть одна (Именно поэтому возникает необходимость в маске - иначе как назначит одной текстуре несколько шейдеров?). Как собрать террейн и как срендерить единую текстуру террейна есть например в уроках Непряхина. Если у вас террейн состоит из нескольких объектов, с разными текстурами и разными шейдерами. Какие могут быть маски в этом случае?

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
rex44Дата: Пн, 18.01.2016, 11:31 | Сообщение # 532
Гражданский
Пользователи
Сообщений: 18
Награды: 0
Репутация: [ 0 ]

Вот такой вопрос,собрал мп карту,прописал дм и тдм режимы в сдк,упаковал с включеным автолоадом,карту видит движок,сервак выделеный запускается(из игры),при этом нивкакую не хочет работать с серверменеджером,пишет проверьте соединение или наличие уровня.Пробовал запустить другой уровень,а потом сменить карту,так пишет что неизвестный режим дм тдм.Ересь какая то...Пакую карту без автолоада,так ее движок не видит,а серверменеджер так же ругается на отсутствие режимов игры,хотя все прописано.
 
ТиграДата: Вт, 12.04.2016, 19:01 | Сообщение # 533
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
Награды: 18
Репутация: [ 1056 ]

Здравствуйте. Надеюсь, что мне, как и многим, тоже смогут помочь... ))

Итак, проблема:
Есть пустая локация Рыжий Лес. По урокам Непряхина на локации заспавнен актор и сквад. Они появляются в заданных местах, но сквад не принимает свою логику. По логике сквад должен был идти по заданному маршруту. Не идет. Сидят в точке спавна, при попытке разговора, естественно, вылет.
Кто может посмотреть, что я не так делаю? Я понимаю, что сейчас ответ может быть весьма простым: "Хрустальный шар в ремонте, а экстрасенс в отпуске". Так вот: какие файлы можно показать, какие мои действия рассказать, чтобы мне смогли помочь? )))
Очень прошу помощи или совета.




Сообщение отредактировал Тигра - Вт, 12.04.2016, 19:04
 
sergej5500Дата: Вт, 12.04.2016, 19:41 | Сообщение # 534
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Тигра,

Нужен лог вылета.
Секция сквада из squad_descr_***.
Логика сталкеров в смарте, если такая имеется.
Путь сталкеров в way_***.
 
ТиграДата: Вт, 12.04.2016, 21:00 | Сообщение # 535
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
Награды: 18
Репутация: [ 1056 ]

Цитата 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
 
sergej5500Дата: Вт, 12.04.2016, 21:12 | Сообщение # 536
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Тигра,

1. Что у вас в файле hunters_scout?
2. Выложен путь только для одного непися. Путь назван странно. Если смарт red_sim_1, то путь должен называться red_sim_1_hunters_scout_walk.
3. Что в логе вылета?
 
ТиграДата: Вт, 12.04.2016, 21:17 | Сообщение # 537
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
Награды: 18
Репутация: [ 1056 ]

Цитата 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 ()
Что в логе вылета?

Прошу прощения, я перепутала: в конкретно этом случае вообще нет вылета. Они просто стоят на месте, а ГГ может хоть на голове ходить, им пофиг. Правда, на стрельбу отвечают.


 
sergej5500Дата: Вт, 12.04.2016, 21:40 | Сообщение # 538
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Тигра ()
А... а я думала, это просто один маршрут для всех неписей в скваде.


Можно делать и так. Но лучше каждому дать свой индивидуальный путь. На одной работе неписи могут сталкиваться лбами. Это не очень красиво смотрится.

Цитата Тигра ()
Вроде, пробовали по-разному называть, в том числе и так...


Путь непися в way_*** должен начинаться с имени смарта. Если в логике путь назван hunters_scout_walk, то в way_*** онобязанназываться red_sim_1_hunters_scout_walk. Иначе получите вылет.

Цитата Тигра ()
Они просто стоят на месте


При стартовой схеме поведения remark так и должно быть. При переходе на схему walker игра вылетит. После инфопорции hunters_quest_start.
 
ТиграДата: Вт, 12.04.2016, 21:49 | Сообщение # 539
Зам лидера. Специалист-зоопсихолог НС
Ночные сталкеры
Сообщений: 2413
Награды: 18
Репутация: [ 1056 ]

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


 
sergej5500Дата: Вт, 12.04.2016, 22:19 | Сообщение # 540
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата Тигра ()
имена для way только для СДК критичны


СДК имена вообще по барабану. Что пропишете, то он и соберёт. А движку Зова Припяти нет. Для сквадовых НПС имя пути должно начинаться с имени смарта. Ваш пример с Воландом не очень корректен. Если секция начинается с [logic], то это непись несквадовый. С кастом-датой. Иначе бы игра вылетела после регистрации работы в файле смарта. Для Воланда правило "имя пути должно начинаться с имени смарта" не действует.
 
Поиск: