Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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Дата: Пн, 12.01.2015, 19:05 | Сообщение # 451
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Невозможно ничего добавить. Глюк СДК.

Обоснуйте, почему нельзя добавить?
Цитата sergej5500 ()
Сколько граф-пойнтов достаточно для локации?

В принципе локация соберется и с одним, но будут косяки со сквадами или с отдельными НПС. ИМХО для локации достаточно 100 на 1 кв км, главное где ставить: побольше на часто проходимых маршрутах, плюс по несколько на пустырях.
Цитата sergej5500 ()
Нужно ли все граф-пойнты привязывать к смартам?

Вопрос не корректный, вот так правильнее: нужно ли вообще привязывать к смартам графпоинты? Мое мнение не нужно, хотя многие рекомендуют, в любом случае лишним не будет (по моему это нужно только лищь для симуляционных сквадов)

Цитата sergej5500 ()
Зачем нужны первые три секции?

Для постановки многих видов графпоинтов не связанных со смартами.
Цитата sergej5500 ()
Если в первые три секции скопировать содержимое четвертой секции... Можно ли так делать?

Объясните глубинный смысл данной манипуляции...
Цитата sergej5500 ()
Верно ли, что сталкеры идут от одного граф-пойнта к другому. На Кордоне, подключенном к СГМ от ЧН, они ходят своебразно. От одной точки до другой 20 метров. Непись из симуляции по дороге делает крюк на 40 метров в сторону

И да и нет, в офлайне ходят исключительно по разрешенным узлам АИ-сети (то есть графпоинтам, обратите внимание что не все графпоинты разрешены для НПС), в онлайне ходят по нодам АИ-сети (то есть по "клеткам" АИ-сети), но есть один момент: если НПС идет не по маршруту (например в схеме walker), а по пути рассчитанному патфайндером (например на первую точку работы), то маршрут будет тяготеть к графпоинтам, то есть НПС может пойти не прямым путем а по ломаной линии с углами на графпоинтах.


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

denis2000,

Спасибо за информацию.

Цитата denis2000 ()
Обоснуйте, почему нельзя добавить?


Это закономерность. По крайней мере у меня. Проверил неоднократно. Несколько раз переустанавливал СДК. Если локация декомпилирована с использованием файлов, полученных при разбивка спавна на game и spawn, то наблюдаю такую картину.

[cut=Суть проблемы]
1. Открыл локацию. Чистонебовский графпойнт на месте. Смарт и пути, которые я ставил, тоже на месте.


2. Выбираю пункт "Добавить граф-пойнт". Можно добавлять все, что угодно. Картина всегда одна и та же.


3. При добавлении вначале вылезает это.


4. Нажимаю "продолжить". Вылезает это.


Последняя картинка вылезает бесконечно при любой операции с мышью. Если использовать level.spawn, полученный из alife_escape, то таких проблем нет. Граф-пойнтов тоже нет.

[/cut]

Причин такого поведения СДК не знаю.
 
denis2000Дата: Вт, 13.01.2015, 19:01 | Сообщение # 453
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500,
То есть применяя
Код
universal_acdc.pl -split all.spawn -out levels -way -use
получаете level.spawn и level.game подкладываете конвертору он успешно декомпилирует, но SDK ругается, а если использовать
Код
universal_acdc.pl -compile all -l
, то естественно графпоинтов нет (их и не может то быть в файле alife_<имя локации>.ltx) и SDK нормально работает.
Выложите файлы декомпилированной локации полученные при декомпиляции локации с файлами level.game и level.spawn полученными разбивкой all.spawn, очень вероятно что файл spawn.part содержит не корректные секции объектов.


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

denis2000,

Для декомпиляяции я использовал оригинальное Чистое Небо с заменой level.game и level.spawn.

Команда для батника декомпиляции converter -level cop:escape -out escape_2 -mode le

Секция в convert.ini

[3870_config]:3456_config
$game_data$ = C:\GSC World Publishing\Ресурс ЗП\gamedata\
$game_levels$ = C:\GSC World Publishing\Ресурс ЗП\levels\
spawn_version = cop

В архиве есть декомпилированная глючная локация, all.spawn сборки и ACDC. На всякий случай положил полную паку configs от СДК. Если потребуются модели и текстуры, то их можно скачать по ссылке Основная часть аддона

Архив с глючной локацией
 
denis2000Дата: Вт, 13.01.2015, 21:21 | Сообщение # 455
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Как я и думал секции графпоинтов в нормальной распаковке и глючной ОТЛИЧАЮТЬСЯ как по количеству параметров так и по некоторым значениям!
[cut]
Нормально работающая обычный графпоинт (без специальных настроек):
Код
[object_1051]
                  clsid                    = 6
                  co_flags                           = 2
                  flags                    = 0
                  name                    = esc_graph_point_0007
                  position                           = 17.476986, 0.933553, 21.592663
                  rotation                           = 0.118163, -0.006586, 0.055812
                  scale                    = 1.000000, 1.000000, 1.000000
                  type                    = 2
                  version                            = 23
[object_1051_spawndata]
                  000001                             = 1
                  000002                             = "graph_point"
                  000003                             = "esc_graph_point_0007"
                  000004                             = 0
                  000005                             = 254
                  000006                             = 17.476986, 0.933553, 21.592663
                  000007                             = 0.118163, -0.006586, 0.055812
                  000008                             = 0
                  000009                             = 65535
                  000010                             = 65535
                  000011                             = 65535
                  000012                             = 33
                  000013                             = 128
                  000014                             = 65535
                  000015                             = 12
                  000016                             = 0
                  000017                             = 17311
                  000018                             = 0
                  000019                             = ""
                  000020                             = ""
                  000021                             = 0
                  000022                             = 0
                  000023                             = 0
                  000024                             = 0
                  000025                             = 62
                  fl                    = 0
                  name                    = graph_point

Глючная локация обычный графпоинт:
Код
[object_192]
                 clsid                            = 6
                 co_flags                         = 2
                 name                             = escape_graph_point_1790
                 position                         = 35.538956, -2.062803, 9.189672
                 rotation                         = 0.000000, 0.000000, 0.000000
                 scale                            = 1.000000, 1.000000, 1.000000
                 type                             = 2
                 version                          = 23
                   
[object_192_spawndata]
                 000001                           = 1
                 000002                           = "graph_point"
                 000003                           = "escape_graph_point_1790"
                 000004                           = 0
                 000005                           = 254
                 000006                           = 35.538956, -2.062803, 9.189672
                 000007                           = 0.000000, 0.000000, 0.000000
                 000008                           = 0
                 000009                           = 0
                 000010                           = 65535
                 000011                           = 65535
                 000012                           = 33
                 000013                           = 128
                 000014                           = 65535
                 000015                           = 12
                 000016                           = 0
                 000017                           = 52428
                 000018                           = 0
                 000019                           = ""
                 000020                           = ""
                 000021                           = 0
                 000022                           = 0
                 000023                           = 0
                 000024                           = 0
                 fl                    = 0
                 name                             = graph_point

[/cut]
В чем причина этой разницы пока сложно понять, то ли настройки game_graphs.ltx влияют, то ли разбивка all.spawn на level.spawn и level.game некорректно проходит, то ли конвертер что-то неправильно делает, вероятно из-за того, что эта локация была добавлена при помощи склейки геймграфа программой от АМК. В любом случае это не глюк SDK, просто файлы локаций не совсем ему подходят.

Кстати вот примеры файлов game_graphs.ltx:
[cut]
От SP собрано полностью в SDK:
Код
[location_0]
000    = "..."
001    = "sim_smart_1"
002    = "sim_smart_2"
003    = "sim_smart_3"
004    = "sim_smart_4"
005    = "sim_smart_5"
006    = "sim_smart_6"
007    = "sim_smart_7"
008    = "sim_smart_8"
009    = "sim_smart_base"

[location_1]
000    = "..."
001    = "ограниченный доступ"
002    = "запрещенный доступ"

[location_2]
000    = "..."
001    = "не для игрока"

[location_3]
000    = "..."
001    = "test_graph_point_01"
002    = "test_graph_point_02"
003    = "lab_x14_graph_point"
004    = "lab_x14_graph_point_0000"
005    = "level_city_graph_point"
006    = "level_city_graph_point_0000"
007    = "level_city_graph_point_0001"
008    = "level_city_graph_point_0002"

            
      [graph_points_draw_color_palette]
default    = 0x6000ffff     
000_000_000_000  = 0x60ff00ff

От SGM склеено АМК-программой:
Код
[location_0]
      000          = "..."
      001          = "sim_smart_1"
      002          = "sim_smart_2"
      003          = "sim_smart_3"
      004          = "sim_smart_4"
      005          = "sim_smart_5"
      006          = "sim_smart_6"
      007          = "sim_smart_7"
      008          = "sim_smart_8"
      009          = "sim_smart_base"
      010        = "darkvalley"
      011          = "military"
      012          = "l04u_labx18"
      013          = "digger_stash"
      014        = "agroprom"
      015        = "agroprom_underground"
      016        = "marsh"
      017        = "escape"
      018        = "red_forest"
           

[location_1]
      000          = "..."
      001          = "ограниченный доступ"
      002     = "запрещенный доступ"
          
[location_2]
      000          = "..."
      001     = "не для игрока"

[location_3]
      000          = "..."
      001          = "zat_a1"
      002          = "zat_a23_smart_terrain"
      003          = "zat_b100"
      004          = "zat_b101"
      005          = "zat_b103_merc_smart"
      006          = "zat_b104_zombied"
      007          = "zat_b106_smart_terrain"
      008          = "zat_b12"
      009          = "zat_b14_smart_terrain"
      010          = "zat_b18"
      011          = "zat_b20_smart_terrain"
      012          = "zat_b28"
      013          = "zat_b33"
      014          = "zat_b38_zat_b38u"
      015          = "zat_b39"
      016          = "zat_b40_smart_terrain"
      017          = "zat_b42_smart_terrain"
      018          = "zat_b52_zat_medic_home_smart"
      019          = "zat_b53"
      020          = "zat_b54"
      021          = "zat_b56"
      022          = "zat_b5_smart_terrain"
      023          = "zat_b7_zat_b7_stalker_raider"
      024          = "zat_stalker_base_smart"
      025          = "zat_b55"
      026          = "zat_sim_1"
      027          = "zat_sim_2"
      028          = "zat_sim_3"
      029          = "zat_sim_4"
      030          = "zat_sim_5"
      031          = "zat_sim_6"
      032          = "zat_sim_7"
      033          = "zat_sim_8"
      034          = "zat_sim_9"
      035          = "zat_sim_10"
      036          = "zat_sim_11"
      037          = "zat_sim_12"
      038          = "zat_sim_13"
      039          = "zat_sim_14"
      040          = "zat_sim_15"
      041          = "zat_sim_16"
      042          = "zat_sim_17"
      043          = "zat_sim_18"
      044          = "zat_sim_19"
      045          = "zat_sim_20"
      046          = "zat_sim_21"
      047          = "zat_sim_22"
      048          = "zat_sim_23"
      049          = "zat_sim_24"
      050          = "zat_sim_25"
      051          = "zat_sim_26"
      052          = "zat_sim_27"
      053          = "zat_sim_28"
      054          = "zat_sim_29"
      055          = "zat_sim_30"
      056          = "jup_a10_smart_terrain"
      057        = "jup_a12"
      058        = "jup_a12_merc"
      059        = "jup_a6"
      060        = "jup_a9"
      061        = "jup_b1"
      062        = "jup_b19"
      063        = "jup_b200"
      064        = "jup_b200_tushkan_smart_terrain"
      065        = "jup_b202"
      066        = "jup_b203"
      067        = "jup_b204"
      068        = "jup_b205_smart_terrain"
      069        = "jup_b205_smart_terrain_tushkano"
      070        = "jup_b206"
      071        = "jup_b207"
      072        = "jup_b207_depot_attack"
      073        = "jup_b208"
      074        = "jup_b209"
      075        = "jup_b211"
      076        = "jup_b212"
      077        = "jup_b219"
      078        = "jup_b25"
      079        = "jup_b32"
      080        = "jup_b4"
      081        = "jup_b41"
      082        = "jup_b46"
      083        = "jup_b47"
      084        = "jup_b6_anom_2"
      085        = "jup_b8_smart_terrain"
      086        = "jup_sim_1"
      087        = "jup_sim_10"
      088        = "jup_sim_11"
      089        = "jup_sim_12"
      090        = "jup_sim_13"
      091        = "jup_sim_14"
      092        = "jup_sim_15"
      093        = "jup_sim_16"
      094        = "jup_sim_17"
      095        = "jup_sim_18"
      096        = "jup_sim_19"
      097        = "jup_sim_2"
      098        = "jup_sim_20"
      099        = "jup_sim_21"
      100        = "jup_sim_3"
      101        = "jup_sim_4"
      102        = "jup_sim_5"
      103        = "jup_sim_6"
      104        = "jup_sim_7"
      105        = "jup_sim_8"
      106        = "jup_sim_9"
      107          = "pri_a15"
      108          = "pri_a16"
      109          = "pri_a17"
      110          = "pri_a18_smart_terrain"
      111          = "pri_a21_smart_terrain"
      112          = "pri_a22_smart_terrain"
      113          = "pri_a25_smart_terrain"
      114          = "pri_a28_arch"
      115          = "pri_a28_base"
      116          = "pri_b28_evac"
      117          = "pri_a28_heli"
      118          = "pri_a28_school"
      119          = "pri_a28_shop"
      120          = "pri_b301"
      121          = "pri_b302"
      122          = "pri_b303"
      123          = "pri_b304_monsters_smart_terrain"
      124          = "pri_b305_dogs"
      125          = "pri_b306"
      126          = "pri_b307"
      127          = "pri_b35_mercs"
      128          = "pri_b35_military"
      129          = "pri_b36_smart_terrain"
      130          = "pri_sim_1"
      131          = "pri_sim_2"
      132          = "pri_sim_3"
      133          = "pri_sim_4"
      134          = "pri_sim_5"
      135          = "pri_sim_6"
      136          = "pri_sim_7"
      137          = "pri_sim_8"
      138          = "pri_sim_9"
      139          = "pri_sim_10"
      140          = "pri_sim_11"
      141          = "pri_sim_12"
      142        = "darkvalley"
      143          = "military"
      144          = "l04u_labx18"
      145          = "digger_stash"
      146        = "agroprom"
      147        = "agroprom_underground"
      148        = "marsh"
      149        = "escape"
      150        = "red_forest"
                 
[graph_points_draw_color_palette]
default    = 0x6000ffff     
000_000_000_000  = 0x60ff00ff

[/cut]
Обратите внимание, что в первом случае секции [location_0], [location_1], [location_2] вообще не подвергались правке, а секция [location_3] не содержит имен локаций, а только имена подключаемых к графам других графпоинтов или подкючаемых смартов.

Добавлено (13.01.2015, 21:21)
---------------------------------------------
А теперь подумаем, что со всем этим делать:
1. Вручную править несколько сотен секций в файле spawn.part сложновато и не гарантирует успех (может не только секции графпоинтов отличаются, но и других объектов)
2. Попробовать привести в порядок файл game_graphs.ltx и снова попробовать разбить и декомпилировать
3. Если проблема не в game_graphs.ltx, а в ACDC или конвертере (поскольку они не совсем понимают склеенный геймграф), то решение окажется таким: заново расставить графпоинты и с нуля связать локации переходами.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДизельДата: Ср, 14.01.2015, 02:24 | Сообщение # 456
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Извините, может уже был такой вопрос. Почему монстры спавненые в смартах иногда буксуют на месте. То есть бежит на месте. Дело в граф-поинтах?

andreyholkin
 
AndreySolДата: Ср, 14.01.2015, 07:26 | Сообщение # 457
Удаленные



Здравствуйте.
Вопрос по добавлению новой локации в чистую ТЧ. Добавил локацию, сделал переход на нее. Запустил игру, сходил на локацию - все нормально. Начал заселять, и тут попер вылет:
[cut=лог]! Cannot build GAME path! (object dcm_lager_dk_stalker_03)
! CURRENT LEVEL : l30_dead_city
! CURRENT game point position : [-46.838272][1.081451][79.971336]
! TARGET LEVEL : l07_military
! TARGET game point position : [-410.092133][-20.844643][7.337811]
! Target point mask [0][0][0][0]
! Object masks (3) :
! [8][1][255][255]
! [12][1][255][255]
! [255][0][255][255]

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ...k\level_editor\gamedata\scripts\smart_terrain.script:724: C stack overflow[/cut]
Что может быть причиной ? Проверил с помощью ggtool:
[cut=список]l01_escape => 0
l02_garbage => 252
l03_agroprom => 416
l03u_agr_underground => 703
l04_darkvalley => 811
l04u_labx18 => 1109
l05_bar => 1168
l06_rostok => 1308
l08_yantar => 1438
l08u_brainlab => 1529
l07_military => 1546
l10_radar => 1863
l11_pripyat => 2118
l12_stancia => 2274
l12u_sarcofag => 2404
l12u_control_monolith => 2469
l12_stancia_2 => 2519
l10u_bunker => 2663
l30_dead_city => 2794[/cut]вроде нормально все - лока идет последней и с максимальным начальным вертексом.
Правда AI-переходы не делал пока, может это быть причиной ?


Сообщение отредактировал AndreySol - Ср, 14.01.2015, 07:28
 
alex_xp_77Дата: Ср, 14.01.2015, 12:52 | Сообщение # 458
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Цитата AndreySol ()
[error]Arguments : LUA error: ...k\level_editor\gamedata\scripts\smart_terrain.script:724: C stack overflow

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




Сообщение отредактировал alex_xp_77 - Ср, 14.01.2015, 12:54
 
denis2000Дата: Ср, 14.01.2015, 18:02 | Сообщение # 459
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Дизель ()
Почему монстры спавненые в смартах иногда буксуют на месте. То есть бежит на месте.

Сделайте верификацию АИ-сетки и сразу все поймете.
Сетка состоящая из множества не связанных кусков в общем случае не подходит для локации.


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

Добрый вечер. Провел такой эксперимент.

Разобрал спавн от своей сборки на level.game и level.spawn. Взял пару файлов от Кордона.
Компилятором спавна от СДК собрал спавн из одной локации - Кордон. Полученный спавн разобрал.

Обнаружил следующее.

[cut=Секция из оригинального спавна][esc_utilizator_box_spawn]
points = p0
p0:name = wp00
p0:position = -182.350006103516,-20.2800006866455,-162.5
p0:game_vertex_id = 1620
p0:level_vertex_id = 67494
[/cut]

[cut=Секция из нового спавна][esc_utilizator_box_spawn]
points = p0
p0:name = wp00
p0:position = -182.350006103516,-20.2800006866455,-162.5
p0:game_vertex_id = 45792
p0:level_vertex_id = 4294967295[/cut]

Гейм и левел вертексы приняли фантастические значения. На Кордоне 271 граф-пойнт. Максимальный гейм-вертекс должен быть 270-271. С левел-вертексом вообще непонятная картина. В чем может причина сбоя и можно ли с ним бороться?
 
denis2000Дата: Чт, 15.01.2015, 00:39 | Сообщение # 461
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
В чем может причина сбоя и можно ли с ним бороться?

Где сбой? Собранный спавн работает?


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

Цитата denis2000 ()
Собранный спавн работает?


Из-за этого спавн-пойнта произошел вылет.

[cut=Лог]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 : ...hing\Зов Припяти\gamedata\scripts\sgm_battery.script:112: attempt to compare nil with number


stack trace:[/cut]

Вылет из-за батареек. На старте новой игры в стартовой секции рестриктора вызывается функция.

[cut=Функция]function start_game_poratation()
sgm_mechanics.mechanics_update()
sgm_utilizator.utilizator_update()
--sgm_world.sgm_gps_secrets_spawn()
if r_mod_params("bool","create_mines_permition",true) then
sgm_world.spawn_mines()
end
give_info("agreement_check_friend")
sgm_battery.get_battery_manager():initialize()
end
[/cut]

Спавнятся утилизаторы, ящики для запчастей, СГМ-мины и запускается контроль батареек. После замены "неестественных" вертексов на значения в исходной секции с учетом сдвига вертексов вылет пропал.
В первом случае спавн зависал на утилизаторе, до батареек дело не доходило и игра вылетала.
 
denis2000Дата: Чт, 15.01.2015, 01:32 | Сообщение # 463
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Если собираете спавн одной локации, то ид_вертексов могут начинаться не с нуля. Если собираете спавн из нескольких локаций, то не факт что последовательность локаций совпадет и стало быть ид_вертексов могут измениться. А это означает: если изменить все вертексы в скриптах и конфигах SGM ваша локация стартанет и с новым спавном.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ДизельДата: Ср, 21.01.2015, 13:15 | Сообщение # 464
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

Сам задам вопрос и сам отвечу: Почему на одной локации видимость лучше, чем на другой, при одинаковой погоде.

Этот вопрос уже задавался кем то, уже не помню когда, тогда я не знал ответа.

Ответ прост. На локации с хорошей видимостью, применён $env mod из категории спавн-элементов.

$env mod применен на всю локацию. Это очень похоже на спейс-рескриктор или аномалию, короче попробуйте и сами увидите. Работает только на максимальном качестве компиляции.


andreyholkin
 
sergej5500Дата: Чт, 22.01.2015, 10:48 | Сообщение # 465
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Доброе утро.

На этапе сборки спавна с помощью СДК вылезает лог.

[cut=Лог]FATAL ERROR

[error]Expression : E
[error]Function : CLevelGameGraph::CLevelGameGraph
[error]File : D:\prog_repository\sources\trunk\utils\xrAI\xr_graph_merge.cpp
[error]Line : 207
[error]Description : Can't create entity.
[error]Arguments : m_car


stack trace:[/cut]

Этот самый кар находится в ТД. Секция кара имеется в sistem.ltx и выглядит так. Точно такая же секция в ЧН.

[cut=Секция][m_car]
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "vehicles\car"
cform = skeleton
class = SCRPTCAR

inv_weight = 1000
cost = 100000
inv_grid_width = 1
inv_grid_height = 1

script_binding = bind_physic_object.init[/cut]

[cut=Кар][7920]

; cse_abstract properties
section_name = m_car
name = val_m_car
position = 2.27868294715881, 2.80893611907959, -38.3601608276367
direction = -0.00237999996170402, 0.442820996046066, 0.0110290003940463
id = 65535
version = 128
script_version = 12
spawn_id = 2048

; cse_alife_object properties
game_vertex_id = 934
level_vertex_id = 271667
object_flags = 0xffffffba

; cse_visual properties
visual_name = dynamics\weapons\wpn_mounted\wpn_mounted_btr

; cse_ph_skeleton properties

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]

Этот кар можно и убрать. Вопрос теоретический. Почему спавн не собирается. Чем СДК не нравится этот самый кар?
 
Поиск: