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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Ср, 16.09.2015, 08:43 | Сообщение # 511
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, По моему мнению, дело в том, что анимпоинты расположены чуть выше сетки и в результате движек теряется в построении маршрута для достижения НПС конкретного анимпоинта. К тому же движек X-Ray в принципе довольно привередлив к АИ-сетке с несколькими уровнями и такие баги у него частенько бывают. Например в ЗП на Затоне раненный сталкер на кровати иногда спускается вниз, ложиться горизонтально и "возноситься" на кровать уровнем выше.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДовакинДата: Вс, 11.10.2015, 22:10 | Сообщение # 512
Командир д.г. быстрого реагирования
Пользователи
Сообщений: 688
Награды: 14
Репутация: [ 552 ]

Добрый день. Поставил на Болотах из ЧН смарт, в нем камп-зону и два анимпоинта. Смарт покрывает камп-зону, камп-зона покрывает анимпоинты. Нпс не спавнил. Получил вот такой вылет:

[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]


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

Довакин,

Значит, ошибка в камп-зоне. Для нормальной работы нужны два условия.

1. Имя камп зоны должно начинаться с имени смарта, который камп зона обслуживает.

Смарт esc_b1. Камп зона esc_b1_camp

2. У камп зоны должна быть ссылка на файл логики.

[camp]
cfg = scripts\camp.ltx

Вставляется с секцию custom_data.

Вероятно, одно из двух условий не выполнено.
 
romix11111Дата: Ср, 14.10.2015, 18:54 | Сообщение # 514
Гражданский
Пользователи
Сообщений: 2
Награды: 0
Репутация: [ 0 ]

Здравствуйте ,у меня проблема с переходом ,в Сигериус мод 2.2 добавил ещё две локации , Свалку и Янтарь ,заселил их сделал пару квестов ,получилось отлично ! Все переходы работают с Кордона на Свалку , с Свалки на Янтарь ,а вот обратно на Свалку выкидывает за пределы карты куда то в низ и виснет ,что я упустил ? Работал с all.spawn и с папками level_changers / to_yantar и level_changers / to_garbage . За Ранее спасибо!

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

Цитата romix11111 ()
вот обратно на Свалку выкидывает за пределы карты куда то в низ и виснет ,что я упустил ?


Проверяйте левел-чендер, ведущий на Свалку. Координаты точки выхода. За них отвечают строки

dest_game_vertex_id = 1280
dest_level_vertex_id = 103706
dest_position = 370.5791015625, -51.0681304931641, -340.111602783203

Их и нужно проверять.
 
stalker74Дата: Ср, 28.10.2015, 02:14 | Сообщение # 516
Гражданский
Пользователи
Сообщений: 14
Награды: 0
Репутация: [ 0 ]

Hello

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 smile ).
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



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.


Cпасибо

Hope my message not boring.Thank's.
Have a good evening
Best Regards

Иметь хороший вечер
С наилучшими пожеланиями


3.4. На форуме запрещена любая реклама без согласования с администрацией сайта. WitaLiy
 
denis2000Дата: Ср, 28.10.2015, 10:33 | Сообщение # 517
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

stalker74, Смотри свои личные сообщения (See your private messages).

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

Dear Sir Denis2000

I don't know how to thank you!

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
 
Sergeant_FoxДата: Пн, 09.11.2015, 17:15 | Сообщение # 519
Разработчик вооружения
Военные сталкеры
Сообщений: 10668
Награды: 16
Репутация: [ 539 ]

можно ли как нибуль вытащить локацию из игры в любой 3д редактор? если да, то подскажите, пожалуйста)
 
denis2000Дата: Пн, 09.11.2015, 19:05 | Сообщение # 520
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

keilin, X-Ray Engine Toolset в помощь (бывший конвертор от Бардака).

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вс, 06.12.2015, 14:43 | Сообщение # 521
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

Я декомпилировал Кордон из Чистого Неба. Вырезал из него неподдерживаемые объекты. Сейчас заполняю локацию квестами. В сборке локация одна - Кордон. После выполнения операций с Кордоном в СДК, команды make_game на этапе сборки спавна всякий раз появляются такие сообщения.



Сборщик на что-то ругается. 6 строк. Видимо, на граф-пойнты. Эти граф-пойнты в Чистом Небе, видимо были связаны с граф-пойнтами на других локациях. И теперь связь нарушена.

Два вопроса.

1. Опасно ли отсутствие связи? Может ли это привести к вылетам? Пока я вылетов не замечал.
2. Можно ли найти эти 6 граф-пойнтов и поправить их? Как их вычислить? Проверять все 300 граф-пойнтов особого желания нет.
 
denis2000Дата: Вс, 06.12.2015, 15:37 | Сообщение # 522
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Сборщик на что-то ругается. 6 строк. Видимо, на граф-пойнты. Эти граф-пойнты в Чистом Небе, видимо были связаны с граф-пойнтами на других локациях. И теперь связь нарушена.

Совершенно верно.
Цитата sergej5500 ()
Опасно ли отсутствие связи? Может ли это привести к вылетам?

Неопасно и к вылетам не приведет.
Цитата sergej5500 ()
Можно ли найти эти 6 граф-пойнтов и поправить их? Как их вычислить?

Они должны находиться в районе где сделаны переходы между уровнями, за левел ченджерами.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вс, 13.12.2015, 16:04 | Сообщение # 523
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем добрый день. Провёл такой эксперимент.

1. Поставил с помощью СДК на локации рядом друг с другом два спавн-пойнта. Один на сетке, другой нет.



[cut=Спавн-пойнты]
[esc_test_rukzak_1_spawn]
points = p0
p0:name = wp00
p0:position = 89.2356109619141,20.189905166626,157.165115356445
p0:game_vertex_id = 127
p0:level_vertex_id = 416158

[esc_test_rukzak_2_spawn]
points = p0
p0:name = wp00
p0:position = 91.073860168457,20.189905166626,157.259780883789
p0:game_vertex_id = 25328
p0:level_vertex_id = 4294967295
[/cut]

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"})

Тестовый рюкзак
[test_inventory_box]:inventory_box
$spawn = "devices\test_inventory_box"
visual = dynamics\devices\dev_rukzak\dev_rukzak.ogf[/cut]

3. Рюкзак на первом спавн-пойнте отреспился нормально. На втором спавн-пойнте получил жука.
[cut=Жук]

stack trace:

0023:080DADE1 xrGame.dll, CxIOFile::Scanf()

[error][ 87] : Параметр задан неверно.
[/cut]

Обратил внимание на строки

p0:game_vertex_id = 25328
p0:level_vertex_id = 4294967295

во втором спавн-пойнте. После их замены на строки

p0:game_vertex_id = 127
p0:level_vertex_id = 416158

из первого спавн-пойнта спавн рюкзаков прошёл нормально.




Можно ли как то решить данную проблему. Спавн объектов не на сетке.
 
rex44Дата: Вс, 13.12.2015, 17:12 | Сообщение # 524
Гражданский
Пользователи
Сообщений: 18
Награды: 0
Репутация: [ 0 ]

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

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





rex44, Видео уроки по программе X-Ray SDK 0.4 SDK 0.7 Часть-16 [ Озеленение, инициализация травы ]
И не забываем, что после инициализации деталобъектов, еще их нужно отдельно билдить в SDK и компилировать своей утилитой.


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