Это популярное сообщение. KD87 718 Опубликовано 16 Сентября 2011 Это популярное сообщение. Поделиться Опубликовано 16 Сентября 2011 Как некоторым, может быть, известно, на X-Ray Engine Toolset идет развитие утилит, доставшихся нам вместе с исходниками от выдающихся программистов коммьюнити (прежде всего, конечно, bardak'a). В силу своих скудных навыков по программированию я занимаюсь прежде всего perl-скриптами - ACDC, game.graph recompiler и т.д. В этой теме я прошу тех мододелов, кто часто работает с perl-скриптами, помочь с отловом багов. Прежде всего интересует Universal ACDC - спавны каких модов не распаковывает, какие фичи не работают, все, что найдете. Здравые мысли по развитию скриптов также приветствуются. Надеюсь на вашу помощь. ----------------------------------------------------------- --S.T.A.L.K.E.R. *.spawn compiler/decompiler-- ----------------------------------------------------------- Версия: 1.38 Дата последних правок: 21.05.2014 Данный acdc предназначен для распаковки и запаковки all.spawn/level.spawn от любого билда, начиная с 1265. Основные фичи: -распаковка оригинальных спавнов ТЧ, ЧН, ЗП и билдов ТЧ, начиная с xrCore build 1265. -распаковка спавнов от модов (требуется папка конфигов от мода) -конвертация спавна в любую другую версию. -массовая замена гейм-вертексов в распакованном спавне. -разбивка all.spawn на level.spawn'ы и level.game'ы -сравнение файлов распакованного спавна -обновление вертексов согласно координат объектов Что нужно для работы: -собственно, сам спавн (all.spawn, level.spawn) -game.graph (только если распаковываете all.spawn). Если all.spawn от билда 3120, ЧН или ЗП - game.graph не нужен (он вшит в спавн). -папка configs (если распаковываете мод и acdc жалуется на unknown section) Для корректной работы используйте с папкой stkutils строго последней версии. Использование: Кладете all.spawn (или level.spawn) и game.graph в папку с программой, делаете батник (команды ниже), запускаете батник, радуетесь жизни. Пояснение по дальнейшему тексту: в угловых скобочках (<>) указано значение опции. Это путь до спавна, папка для распаковки и т.п., то есть то, что нужно вписывать вам. В квадратных скобочках ([]) указаны необязательные опции. Опции без скобочек - обязательны. Режим предназначен для распаковки файлов all.spawn и level.spawn Команда: universal_acdc.pl -d <spawn_file> [common_options] -d <spawn_file> - путь до спавна. common_options - общие опции. Читайте про них ниже. При распаковке спавнов от модов может возникнуть ошибка "unknown section". Это означает, что в моде используются нестандартные секции предметов/мобов. Для распаковки такого спавна необходимо использовать ключ -scan, указав ему в качестве параметра путь до папки config/configs. Пример смотрите в батнике acdc_decompile_scan. Режим предназначен для запаковки распакованных текстовых файлов спавна в all.spawn или level.spawn Команда: universal_acdc.pl -compile <dir> [-idx <index_file>] [-f <flag1,flag2,...>] [common_options] -compile <dir> - папка, в которой лежит распакованный спавн. Если работаете в текущей папке, <dir> не нужно. common_options - общие опции. Читайте про них ниже. -idx <index_file> - с этим ключом скрипт сформирует ltx конфиг с секциями вида: [13_box_wood_01_0021] ;формат - "индекс_локации"_"имя_объекта" id = 2907 ;id объекта story_id = -1 ;story_id объекта Такие записи создадутся для ВСЕХ объектов из спавна. Если указать ключ -idx без пути до конфига, он появится в папке с acdc (spawn_ids). Зачем это нужно? В игре вы сможете открыть этот файл из скриптов и найти нужный вам объект. Если раньше для нахождения нужного id объекта по имени требовалось перебрать все объекты в игре, теперь это можно сделать, просто считав id из нужной секции конфига. Также есть кое-какие дополнительные фичи: - при компиляции для правильной работы необязательно проставлять всем секциям в спавне параметры version и script_version. Достаточно поставить их в секции актора, ацдц далее будет использовать их. Полезно, когда спавн "сборный". - при компиляции контролируется уникальность параметров story_id, чтобы не мучиться потом с вылетами игры. Режим позволяет конвертировать спавны ТЧ, ЧН, ЗП между собой. Команда: universal_acdc.pl -convert <file> -version <new_version> [common_options] -convert <file> - файл, который нужно сконвертировать. Можно указывать как запакованный (*.spawn) спавн, так и распакованный (alife_***.ltx). Внимание! Так как граф и кросс-таблицы в ЧН и ЗП вшиты в спавн, для конвертирования ЗАПАКОВАННЫХ спавнов ТЧ в эти форматы вам потребуется положить в папку с acdc папку levels из игры. Необязательно копировать все файлы, достаточно оставить в папке с каждой локацией файл level.gct. -version <new_version> - новая версия спавна. Подобрать версию вы сможете, посмотрев файл spawn_versions.txt common_options - общие опции. Читайте про них ниже. Также поддерживается тонкая настройка конвертации через файл convert.ini. В файле есть две секции: [exclude] и [change]. В секции exclude можно прописать те секции, которые надо удалить из спавна при конвертации. Пример: [exclude] sections = m_trader, m_car, flesh_weak В секции change прописываются имена тех секций, в которых нужно что-то поменять или дополнить. Пример: [change] sections = inventory_box Далее заполняете файл записями для тех секций, которые вы прописали в change. Пример: [inventory_box] //section_name нужной секции add:custom_data = PREVED //префикс add используется для тех параметров, в которые нужно добавить add:game_vertex_id = 10000 //необходимое значение (если число - складывается, если строка - добавляется в конец) rep:level_vertex_id = 0 //префикс rep используется для параметров, которые необходимо заменить на что-то Общий пример. Следующий конфиг приведет к тому, что у всех сталкеров прибавится 500 к гейм-вертексу и визуал сменится на визуал вояки в противогазе: [exclude] [change] sections = stalker [stalker] add:game_vertex_id = 500 rep:visual_name = actors/soldier/soldier_antigas.ogf При подключении новых локаций без перекомпиляции графа возникает необходимость одновременного сдвига всех гейм-вертексов спавна новых локаций на какое-то определенное значение. Это можно сделать в этом режиме. Команда: acdc -parse <file> -old <old_gvid0> -new <new_gvid0> [-way] [common_options] -parse <file> - имя ltx, в котором находится спавн. -old <old_gvid0> - старый начальный game_vertex_id локации. -new <new_gvid0> - новый начальный game_vertex_id локации. -way - обрабатывает также файл way_***.ltx для этой же локации. Пример: acdc -parse alife_l01_escape.ltx -old 0 -new 934 Разбивка all.spawn на level.spawn может быть полезна при одновременной правке спавна в СДК и с помощью ACDC. Команда: acdc -split <file> [-use_graph] [-way] [common_options] -split <file> - разбиваемый спавн. Для восстановления граф-поинтов необходимы level.spawn для всех локаций, находящихся в графе. Их следует поместить в папку levels согласно их положению в геймдате сталкера - по папкам, соответствующим локациям. Папка levels должна быть в папке с acdc (или путь до нее можно задать ключом - читайте далее). -use_graph - использование game.graph для восстановления граф-поинтов. Плюс - не нужны level.spawn, минус - не восстанавливаются имена граф-поинтов (за исключением граф-поинтов переходов). -way - также из спавна генерируются level.game В этом режиме сравниваются два текстовых файла спавна. Итоговый файл формируется на основе первого файла. Все секции, которых нет во втором файле, но есть в первом, удаляются, а те секции, которые есть во втором, но нет в первом, переносятся в итоговый файл. Параметры секций не меняются. Режим позволяет сэкономить время в случае, если надо совместить два файла, причем секции там идут вразнобой. Команда: acdc -compare <file1,file2> [common_options] -compare <file1,file2> - файлы для сравнения Зачем нужно: при изменении аи-сетки у объектов изменяются game_vertex_id и level_vertex_id. Это влечет за собой необходимость повторного снятия данных параметров в игре. Данный режим позволяет автоматически обновить вертексы у всех секций спавна. Команда: universal_acdc -update <spawn_name> [common_options] -update <spawn_name> - all.spawn, для которого надо обновить вертексы. Режим update требует дополнительной настройки. В папке с acdc есть файл fs_vertex.ltx В этот файл необходимо вписать путь до локаций с ОБНОВЛЕННОЙ аи-сеткой. Обязательно должны присутствовать файлы level.ai, level.gct для всех локаций из спавна. ВНИМАНИЕ! Для нормальной отработки режима геймграф должен быть СТАРЫЙ, использовавшийся до перекомпиляции. После нормальной отработки режима спавн можно распаковывать уже с НОВЫМ геймграфом. -out <file> - путь до файла/папки с результатом. Имеет разный смысл для разных опций: для decompile, parse - папка с результатом для compile, convert - результрующий файл. для split - папка levels, куда сохранять level.spawn. -scan <scan_dir> - путь до папки с конфигами. Используется в случае спавнов от модов. -g <graph_dir> - путь до папки с game.graph. Бесполезен для compile и parse, а также, если работаете со спавном ЧН, ЗП, build 3120. -level - обрабатывать спавн как level.spawn. -af - также распаковываются\запаковываются места спавна артефактов в аномалиях (section2.bin). -nofatal - отключает вылет при фатальной ошибке, заменяя ее предупреждением. Если acdc генерирует ошибку 'unknown clsid ... for section...', это означает, что в данном моде добавлены новые пары клиентский/серверный класс в class_registrator.script. Дабы не усложнять работу с acdc, такие пары не определяются автоматически. Лучше всего сообщить об этом мне, однако, если вы понимаете, что находится внутри class_registrator.script, можете добавить новые сеты в clsids.ini сами. Сеты добавляются в таком формате: clsid = соответствующий_серверный_класс Пример: ZS_ELECT = se_zone_anom ================================= Любые имена опций можно сокращать. К примеру, необязательно использовать именно -use_graph, скрипт поймет также и -use, и -u. Однако ряд опций при сокращении их имени могут конфликтовать друг с другом. -compile нельзя сократить до -c, поскольку в таком случае скрипту неясно, что имеется ввиду: -compile или -convert. В таком случае наиболее короткое имя для compile будет таким: -com 1.38: [!] добавлена поддержка релизного спавна Lost Alpha [!] исправлена конвертация и конвертация 1.37: [+] добавлена распаковка и запаковка спавна билда Lost Alpha [!] все не распознанные пути при сплите теперь сваливаются в unrecognized_ways.game 1.36: [!] исправлена разбивка спавна на level.spawn и level.game [!] исправлено сканирование конфигов 1.35: [!] исправлено автоназначение версии при отсутствии этого параметра в секции [!] убрано чтение game.graph при компиляции 1.34: [!] исправлено обновление вертексов [+] добавлено обновление параметра distance при обновлении вертексов [+] добавлен контроль уникальности story_id при компиляции 1.33: [!] исправлена распаковка спавнов некоторых билдов [+] добавлен режим обновления вертексов [+] добавлен "умный" разбор way-объектов по локациям для режима split 1.322: [+] добавлено сравнение распакованных файлов 1.321: [!] исправлена распаковка спавнов ЗП 1.32: [!] guids.ltx больше не нужен без ключа -idx [+] реализована сортировка way-объектов по алфавиту [+] реализовано определение принадлежности way-секции к локации по gvid и префиксу [+] реализована сортировка alife-объектов 1.31: [!] изменен алгоритм сканирования конфигов [!] изменен приоритет запросов из clsids.ini, теперь данные из него перекрывают внутренние таблицы [!] скрипт адаптирован под новую систему отладочных сообщений [f] поправлена логика работы с пакетом актора в ЧН [+] добавлена возможность вынесения лога в файл [+] добавлена возможность вынесения сетов в отдельный конфиг-файл 1.30: [f] теперь новая версия обработчика ошибок по-прежнему обрабатывает спавн Народной солянки [f] исправлены проблемы распаковки level.spawn некоторых билдов 1.29: [f] исправлена ошибка распаковки level.spawn билдов [f] исправлена ошибка распаковки спавна ЧН [f] всякие мелкие правки 1.28: [f] исправлено игнорирование парсером ключа -way в режиме split. [f] исправлена ошибка сканирования конфигов при компиляции. [f] исправлена ошибка чтения секций некоторых se-классов. [f] исправлена ошибка разбивки спавна, из-за которой генерировались левел спавны неправильного формата. [+] добавлен контроль дубликатов актора при компиляции. 1.27: [f] исправлена ошибка парсера, в некоторых случаях приводившая к порче логики. [f] исправлено создание папок при сохранении результата. [+] добавлена переинициализация параметров секции после смены класса при конвертации. Это расширяет диапазон версий, доступных для конвертирования. [+] добавлена поддержка масок при конвертации. [+] добавлен ключ -ini в режиме конвертации 1.26: [f] поправлена распаковка спавнов ЧН. [+] добавлено автоматическое заполнение версии спавна из первой секции (если актора в спавне нет). [+] что-то еще по мелочи, не помню. 1.25: [f] отключен вывод пустого параметра spawned_obj при распаковке. [+] реализовано автоматическое заполнение параметров version и script_version при запаковке спавнов с секциями из разных версий игры. Версия берется из конфига актора. 1.24: [f] исправлена распаковка/запаковка спавна билда 2571. [f] исправлена запись guids.ltx [f] мелкие правки 1.23b: [+] убрано предупреждение "state data left" при распаковке спавнов ЗП, запакованных ранее с помощью acdccop. [f] исправлены ошибки split, из-за которых могли получаться кривые level.spawn [f] переделана логика чтения/записи пакетов se_stalker/se_monster [f] мелкие изменения 1.22b: [+] добавлен ключ -nofatal 1.21b: [f] исправлены небольшие опечатки в коде. [f] парсер теперь корректно читает значения с комментариями. 1.2b: [f] небольшие правки по конвертации. [+] добавленные в модах соответствия clsid -> серверный класс теперь редактируются в отдельном конфиге (clsids.ini). [+] ошибка при встрече незнакомого clsid теперь выдается при распаковки секции спавна с таким clsid, а не при сканировании конфигов, как раньше. 1.1b: [+] проверена распаковка билд-спавнов, решена проблема декомпиляции спавнов билдов 25хх. [+] добавлен контроль наличия параметра version в секциях распакованного спавна. [f] исправлено исключение файла со spawn_id объектов при сканировании конфигов. 1.0b: [+] основательно переработан код, часть скрипта вынесена в отдельные модули. [f] исправлены все не работавшие функции. [+] увеличена скорость выполнения кода, уменьшены требования по памяти. ACDC для ТЧ - bardak, для ЗП - bardak, @Kolmogor. Все остальное - @KD87 Используйте/выкладывайте где и как хотите, с указанием авторов. Новичкам в редактировании спавна поможет краткая инструкция: Чтобы не плодить сторонних папок и все было под рукой для работы и игры - будем работать прямо в рабочей папке с игрой/модом. Устанавливаем и настраиваем комплект ACDC: 1. Открываем папку 'gamedata\spawns' и в ней создаем папку 'acdc'. 2. В эту папку (acdc) копируем (распаковываем) весь комплект файлов из архива 'Universal ACDC.7z', т.е. в папке должны лежать: - universal_acdc.pl - перл-скрипт утилиты; - acdc_decompile.bat - командный файл для распаковки; - acdc_compile.bat - командный файл для запаковки; - stkutils - папка со служебными библиотеками утилиты; ... - необязательные или технологические файлы (universal_acdc_readme.txt и т.п.). 4. Выходим опять в папку 'gamedata\spawns' и создаем в ней папку 'unpack' - в этой папке будут находиться файлы распакованного спавна. 5. Открываем командный файл (батник) 'acdc_decompile.bat' и изменяем в нем строку на эту: universal_acdc.pl -d ../all.spawn -o ../unpack -g ../../ -scan ../../config/ 6. Открываем командный файл (батник) 'acdc_compile.bat' и изменяем в нем строку на эту: universal_acdc.pl -c ../unpack -o ../all.spawn 7. Проверьте, есть ли в папке 'gamedata' файл 'game.graph'. Если его нет - распакуйте его из пак-файлов (gamedata.db*) оригинальной игры и скопируйте в папку 'gamedata' мода. 8. Важно! Для вашей безопасности скопируйте файл 'all.spawn' в удобное вам место (зарезервируйте) для возможности восстановления исходного файла спавна после возможных ваших ошибок при редактировании. Все, ваш комплект готов для работы с 'all/spawn'-ом на лету, т.е. вы можете запускать игру и играть, можете распаковывать, редактировать и запаковывать файл спавна. - Распаковка - запускаете 'acdc_decompile.bat' (см. по пути '\gamedata\spawns\acdc'); - Редактируете в папке 'unpack' (см. по пути '\gamedata\spawns\unpack'); - Запаковка - запускаете 'acdc_compile.bat' (см. по пути '\gamedata\spawns\acdc'); - ... проверяете в игре. Примечание: Если у вас стоит ОС Windows 7 - возможно потребуется в начало командных строк добавить вызов 'perl': perl universal_acdc.pl -d ../all.spawn -o ../unpack -g ../../ -scan ../../config/ perl universal_acdc.pl -c ../unpack -o ../all.spawn Успехов в модмейкерстве! :-) Для удобства выкладываю ссылку на ACDC отдельно (папка stkutils - ставить обязательно!) Версия 1.38 Для работы необходим Active Perl (брать с официального сайта) - LA (билд) - АМК v.1.4.1 - Z.E.N.O.B.I.A.N mod - NLC 2-6 - SIMBION - OGSM v.2.3.1 Final - Народная солянка 2010 от 19.04 (с ключом -nofatal) - R.M.A. v.1.1 - Oblivion_Lost - SRP - Тайные тропы 2 - Lost World - Requital - Lost World - Trops of Doom - OGSM v.1.7 (для распаковки исправьте в w_vintorez.ltx class = WP_VINT на class = WP_AK74 либо используйте ключ -nofatal) - Difficult Zone Mod v.1.0 (аналогично OGSM) - SolinX v.1.1.3 - SolinX v.2.0 (без сканирования) - Full Realism Mod v.1.0 - Shoker Mod v.1.2 (без сканирования) - SGM v.1.7 - SGM v.2.0 - Slayer mod beta 0.17 - ARS v.0.5.2 (без сканирования) - AMK ЗП v.0.4 Priboi Story не распаковывается из-за xrSpawner. Кому надо, вот распакованный спавн. Постите результаты распаковки спавнов, полученные вами. Внимание! Для повторного сканирования конфигов необходимо удалить файл sections.ini. Или воспользоваться батником acdc_decompile_scan (распаковка). Собрал большинство перл-скриптов в кучу и адаптировал их под единую библиотеку модулей stkutils. Написал пару новых скриптов. Итак: gamemtl.xr (поддерживается полная распаковка)lanims.xr (поддерживается полная распаковка)particles.xr (поддерживается только распаковка на бинарные файлы)shaders.xr (поддерживается полная распаковка)shaders_xrlc.xr (поддерживается полная распаковка)senvironment.xr (поддерживается полная распаковка) levellevel.snd_staticlevel.ps_static Распаковщик спавнов universal acdc 1.35 Распаковщик сохранений save unpacker 0.4 Сборщик/разборщик файлов RIFF-формата: chunk parser Скрипт для массовой замены строк файлах формата ini сталкера: data repclacement ini Скрипт для массовой замены строк в произвольных текстовых файлах: data repclacement text Скрипт для изменения высоты травы: details height changer Скрипт для копирования ресурсов разрабатываемой локации из СДК: resource copier Распакованную библиотеку модулей (папка stkutils) нужно положить в папку со скриптом или (советую) в C:\Perl\lib (или аналогичную папку, если вы установили ActivePerl в другую папку). Во втором случае stkutils будет работать для всех скриптов сразу независимо от расположения. Universal ACDC.exe от @PSI - версия утилиты, собранная в виде единого .exe файла и не требующая установки дополнительного софта.Репозиторий проектаСсылки на скачивание Universal ACDC v1.40 от @abramcumner - добавлено чтение секций из system.ltx - исправлены переносы строк при разбиении all.spawnРепозиторий проектаСcылки на скачивание 6 9 8 Ссылка на комментарий
ur3icf 16 Опубликовано 19 Августа 2012 Поделиться Опубликовано 19 Августа 2012 KD87, Декомпилировал all.spawn мода "Dream Reader - The Leper Area" успешно, а скомпилировать не удается, выдает ошибку: В чем проблема? AMD FX-8370 8 X 4.34GHz; RAM 16Gb; MSI GTX-1070X 8G; Windows10(х64) Ссылка на комментарий
Kondr48 314 Опубликовано 19 Августа 2012 Поделиться Опубликовано 19 Августа 2012 ur3icf, хоть я и не KD87, но отвечу: никогда не пробовал перевести лог с английского? У тебя повторяется секция пути, angar_zonequard_walk в файле way_l05_bar.ltx. Ссылка на комментарий
KD87 718 Опубликовано 20 Августа 2012 Автор Поделиться Опубликовано 20 Августа 2012 Корн, ну вот, что и требовалось доказать. Нет части конфигов. Вампир35 Ругается на M_SPAWN Это исправлено в 1.28, кажется. За сеты спасибо, добавлю. Ссылка на комментарий
Vasserman 0 Опубликовано 20 Августа 2012 Поделиться Опубликовано 20 Августа 2012 KD87, а есть что-нибудь по моей проблеме? Ссылка на комментарий
Kondr48 314 Опубликовано 20 Августа 2012 Поделиться Опубликовано 20 Августа 2012 KD87, версия 1. 28 ссылка умерла, версия 1. 29 и 1. 30 ругаются на M_SPAWN, кстати 1.30 еще не удаляет все секции прописанные по маске, при конвертации алл. спавна. Ссылка на комментарий
KD87 718 Опубликовано 20 Августа 2012 Автор Поделиться Опубликовано 20 Августа 2012 (изменено) Вампир35, не подтверждаю этих багов. Для тестов использовал 1.30. Разбил оригинальный спавн ТЧ на куски - каждый level.spawn нормально распаковался с ключом -l, как ему и положено. Сконвертировал в формат ЧН с маской stalker* в секции exclude - все сталкерские секции выбросились. Ты, очевидно, что-то не то делаешь. Можешь дать мне спавн/граф/конфиги/полное описание того, с чем ты пытаешься работать, но это от спавна по идее не зависит. Vasserman, у себя проблемы не увидел, все корректно отрабатывает, в скором времени еще люди потестят. Изменено 20 Августа 2012 пользователем KD87 Ссылка на комментарий
Kondr48 314 Опубликовано 23 Августа 2012 Поделиться Опубликовано 23 Августа 2012 KD87, разобрался, мои были косячности). Сейчас заменил ал. спавн и геймграф на те что были до эксперементов и вс заработало. Ссылка на комментарий
Marafon6540 757 Опубликовано 24 Августа 2012 Поделиться Опубликовано 24 Августа 2012 (изменено) Обращаюсь со старой своей проблемой. Так и не смог подключить Кордон из ЧН к оригинальным локам ТЧ. Использую правленый ggrc_fixed и stkutils 7 версии. Расположение файлов такое: ggrc.pl -g1 game.graph,soc -l1 l02_garbage,l03_agroprom,l03u_agr_underground,l04_darkvalley,l04u_labx18,l05_bar ,l06_rostok,l08_yantar,l08u_brainlab,l07_military,l10_radar,l11_pripyat,l12_stan c ia,l12u_sarcofag,l12u_control_monolith,l12_stancia_2,l10u_bunker -g2 section4.bin,cop -l2 escape pause Получаю вот такой C:\gamedata>ggrc.pl -g1 game.graph,soc -l1 l02_garbage,l03_agroprom,l03u_agr_und erground,l04_darkvalley,l04u_labx18,l05_bar,l06_rostok,l08_yantar,l08u_brainlab, l07_military,l10_radar,l11_pripyat,l12_stancia,l12u_sarcofag,l12u_control_monoli th,l12_stancia_2,l10u_bunker -g2 section4.bin,cop -l2 escape reading game.graph... reading header... reading levels... reading vertices... reading edges... reading section4.bin... reading header... reading levels... reading vertices... reading edges... reading cross tables... cross table offset for marsh is 4623122 size = 3173814 cross table offset for escape is 7796936 size = 3749754 cross table offset for garbage is 11546690 size = 2148444 cross table offset for darkvalley is 13695134 size = 2165892 cross table offset for agroprom is 15861026 size = 2251446 cross table offset for agroprom_underground is 18112472 size = 32136 cross table offset for yantar is 18144608 size = 886320 cross table offset for red_forest is 19030928 size = 989022 cross table offset for military is 20019950 size = 2311980 cross table offset for limansk is 22331930 size = 369192 cross table offset for hospital is 22701122 size = 47238 cross table offset for stancia_2 is 22748360 size = 1220214 forming new graph... writing level graphs... writing new graph... writing levels... writing vertices... writing edges... writing level points... writing cross tables... updating old cross tables... writing new cross tables... updating level.ai... updating escape... updating level... Died at C:\gamedata\ggrc.pl line 1449. C:\gamedata>pause Для продолжения нажмите любую клавишу . . . Кто-нибудь может подсказать в чем дело? Бьюсь с проблемой все лето - а воз и ныне там... Пробовал так же подключить Агропром ЧН - результат такой же, с ошибкой в той же строке. Изменено 25 Августа 2012 пользователем Marafon6540 Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
krovosnork 257 Опубликовано 25 Августа 2012 Поделиться Опубликовано 25 Августа 2012 (изменено) Marafon6540, вроде нужно перекомпилировать Изменено 25 Августа 2012 пользователем krovosnork Ссылка на комментарий
KD87 718 Опубликовано 26 Августа 2012 Автор Поделиться Опубликовано 26 Августа 2012 (изменено) Marafon6540, нет файлов level для локаций. ggrc проверяет, не надо ли править версию xrlc в нем. Вместо того, чтобы биться, лучше бы спросил. Изменено 26 Августа 2012 пользователем KD87 Ссылка на комментарий
Marafon6540 757 Опубликовано 27 Августа 2012 Поделиться Опубликовано 27 Августа 2012 (изменено) KD87, нет файлов level для локацийНе пойму, а где взять эти файлы? Я уж и через СДК попробовал, но там тоже проблемы возникли. На всякий случай - вот содержимое папки с локацией. Файл level там есть. Или нужны какие-то другие файлы? Изменено 27 Августа 2012 пользователем Marafon6540 Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
KD87 718 Опубликовано 28 Августа 2012 Автор Поделиться Опубликовано 28 Августа 2012 Marafon6540, файл level проверяется для первой локации из родительского графа и первой локации подключаемого графа. Среди файлов escape у тебя level есть, ну так и для l02_garbage должен быть тоже. Ссылка на комментарий
Marafon6540 757 Опубликовано 28 Августа 2012 Поделиться Опубликовано 28 Августа 2012 KD87, спасибо! Но теперь возникла другая проблема. Извиняюсь, что пространно получается, но опишу Собираю game.graph. Граф собрался. Лог: D:\MyNew\gamedata>ggrc.pl -g1 game.graph,soc -l1 l01_escape,l02_garbage,l03_agro prom,l03u_agr_underground,l04_darkvalley,l04u_labx18,l05_bar,l06_rostok,l08_yant ar,l08u_brainlab,l07_military,l10_radar,l11_pripyat,l12_stancia,l12u_sarcofag,l1 2u_control_monolith,l12_stancia_2,l10u_bunker -g2 section4.bin,cop -l2 escape reading game.graph... reading header... reading levels... reading vertices... reading edges... reading section4.bin... reading header... reading levels... reading vertices... reading edges... reading cross tables... cross table offset for marsh is 4623122 size = 3173814 cross table offset for escape is 7796936 size = 3749754 cross table offset for garbage is 11546690 size = 2148444 cross table offset for darkvalley is 13695134 size = 2165892 cross table offset for agroprom is 15861026 size = 2251446 cross table offset for agroprom_underground is 18112472 size = 32136 cross table offset for yantar is 18144608 size = 886320 cross table offset for red_forest is 19030928 size = 989022 cross table offset for military is 20019950 size = 2311980 cross table offset for limansk is 22331930 size = 369192 cross table offset for hospital is 22701122 size = 47238 cross table offset for stancia_2 is 22748360 size = 1220214 forming new graph... writing level graphs... writing new graph... writing levels... writing vertices... writing edges... writing level points... writing cross tables... updating old cross tables... writing new cross tables... updating level.ai... updating escape... updating level... done! D:\MyNew\gamedata>pause Для продолжения нажмите любую клавишу . . . Раскрываю получившийся граф, все нормально, лог: D:\MyNew\gamedata>ggrc.pl -g1 game.graph.new,soc -o links.txt -g reading game.graph.new... reading header... reading levels... reading vertices... reading edges... reading level points... exporting... exporting header... exporting levels... exporting vertices... exporting edges... exporting level points... level points: 359319 D:\MyNew\gamedata>pause Для продолжения нажмите любую клавишу . . . Вот что получилось, файл guids.txt: l01_escape (0) -- 1206.28771972656 --> l02_garbage (415) l01_escape (1) -- 21.1956653594971 --> l02_garbage (252) l02_garbage (252) -- 21.1956653594971 --> l01_escape (1) l02_garbage (254) -- 359.349212646484 --> l03_agroprom (701) l02_garbage (255) -- 415.383026123047 --> l05_bar (1168) l02_garbage (256) -- 571.261352539063 --> l04_darkvalley (816) l02_garbage (414) -- 382.628173828125 --> l05_bar (1307) l02_garbage (415) -- 1206.28771972656 --> l01_escape (0) l03_agroprom (654) -- 204.328735351563 --> l03u_agr_underground (718) l03_agroprom (701) -- 359.349212646484 --> l02_garbage (254) l03u_agr_underground (718) -- 204.328735351563 --> l03_agroprom (654) l04_darkvalley (811) -- 329.950958251953 --> l04u_labx18 (1167) l04_darkvalley (816) -- 571.261352539063 --> l02_garbage (256) l04u_labx18 (1167) -- 329.950958251953 --> l04_darkvalley (811) l05_bar (1168) -- 415.383026123047 --> l02_garbage (255) l05_bar (1246) -- 807.048889160156 --> l07_military (1545) l05_bar (1248) -- 730.219116210938 --> l06_rostok (1308) l05_bar (1307) -- 382.628173828125 --> l02_garbage (414) l06_rostok (1308) -- 730.219116210938 --> l05_bar (1248) l06_rostok (1409) -- 582.198852539063 --> l08_yantar (1460) l08_yantar (1460) -- 582.198852539063 --> l06_rostok (1409) l08_yantar (1461) -- 201.319061279297 --> l08u_brainlab (1540) l08_yantar (1528) -- 2940.1162109375 --> l10_radar (2116) l08u_brainlab (1540) -- 201.319061279297 --> l08_yantar (1461) l07_military (1545) -- 807.048889160156 --> l05_bar (1246) l07_military (1547) -- 391.152313232422 --> l10_radar (1867) l10_radar (1865) -- 646.896240234375 --> l11_pripyat (2271) l10_radar (1867) -- 391.152313232422 --> l07_military (1547) l10_radar (1977) -- 247.964981079102 --> l10u_bunker (2791) l10_radar (2116) -- 2940.1162109375 --> l08_yantar (1528) l11_pripyat (2271) -- 646.896240234375 --> l10_radar (1865) l11_pripyat (2272) -- 2129.45922851563 --> l12_stancia (2400) l12_stancia (2400) -- 2129.45922851563 --> l11_pripyat (2272) l12u_sarcofag (2465) -- 177.621780395508 --> l12u_control_monolith (2468) l12u_sarcofag (2466) -- 451.325103759766 --> l12_stancia (2385) l12u_control_monolith (2468) -- 177.621780395508 --> l12u_sarcofag (2465) l12u_control_monolith (2470) -- 1104.79431152344 --> l12_stancia_2 (2660) l12_stancia_2 (2660) -- 1104.79431152344 --> l12u_control_monolith (2470) l10u_bunker (2791) -- 247.964981079102 --> l10_radar (1977) { gvid0 => 0, name => 'l01_escape' }, { gvid0 => 252, name => 'l02_garbage' }, { gvid0 => 416, name => 'l03_agroprom' }, { gvid0 => 703, name => 'l03u_agr_underground' }, { gvid0 => 811, name => 'l04_darkvalley' }, { gvid0 => 1109, name => 'l04u_labx18' }, { gvid0 => 1168, name => 'l05_bar' }, { gvid0 => 1308, name => 'l06_rostok' }, { gvid0 => 1438, name => 'l08_yantar' }, { gvid0 => 1529, name => 'l08u_brainlab' }, { gvid0 => 1545, name => 'l07_military' }, { gvid0 => 1862, name => 'l10_radar' }, { gvid0 => 2117, name => 'l11_pripyat' }, { gvid0 => 2273, name => 'l12_stancia' }, { gvid0 => 2402, name => 'l12u_sarcofag' }, { gvid0 => 2467, name => 'l12u_control_monolith' }, { gvid0 => 2517, name => 'l12_stancia_2' }, { gvid0 => 2661, name => 'l10u_bunker' }, { gvid0 => 2792, name => 'escape' }, Распаковываю all.spawn от ЧН, все нормально: D:\MyNew\acdc>universal_acdc.pl -d all.spawn -out all_cs Universal ACDC v.1.30 checking version of all.spawn... This is a spawn of S.T.A.L.K.E.R. Clear Sky (1.5.00 - 1.5.02) opening all.spawn... reading header... reading alife objects... reading artefact spawn places... reading way objects... reading game graph... reading header... reading levels... reading vertices... exporting alife objects... exporting alife objects on level marsh... exporting alife objects on level escape... exporting alife objects on level garbage... exporting alife objects on level darkvalley... exporting alife objects on level agroprom... exporting alife objects on level agroprom_underground... exporting alife objects on level yantar... exporting alife objects on level red_forest... exporting alife objects on level military... exporting alife objects on level limansk... exporting alife objects on level hospital... exporting alife objects on level stancia_2... exporting raw data... exporting way objects on level military... exporting way objects on level limansk... exporting way objects on level hospital... exporting way objects on level agroprom... exporting way objects on level darkvalley... exporting way objects on level red_forest... exporting way objects on level yantar... exporting way objects on level marsh... exporting way objects on level agroprom_underground... exporting way objects on level garbage... exporting way objects on level stancia_2... exporting way objects on level escape... exporting graph... 10 wallclock secs ( 9.98 usr + 0.11 sys = 10.09 CPU)done! D:\MyNew\acdc>pause Для продолжения нажмите любую клавишу . . . Распаковываю all.spawn от ТЧ, все нормально: D:\MyNew\acdc>universal_acdc.pl -d all.spawn -out all_soc Universal ACDC v.1.30 checking version of all.spawn... This is a spawn of S.T.A.L.K.E.R. Shadow Of Chernobyl (1.0001 or higher) opening all.spawn... reading header... reading alife objects... reading artefact spawn places... reading way objects... reading game graph... reading header... reading levels... reading vertices... exporting alife objects... exporting alife objects on level l01_escape... exporting alife objects on level l02_garbage... exporting alife objects on level l03_agroprom... exporting alife objects on level l03u_agr_underground... exporting alife objects on level l04_darkvalley... exporting alife objects on level l04u_labx18... exporting alife objects on level l05_bar... exporting alife objects on level l06_rostok... exporting alife objects on level l08_yantar... exporting alife objects on level l08u_brainlab... exporting alife objects on level l07_military... exporting alife objects on level l10_radar... exporting alife objects on level l11_pripyat... exporting alife objects on level l12_stancia... exporting alife objects on level l12u_sarcofag... exporting alife objects on level l12u_control_monolith... exporting alife objects on level l12_stancia_2... exporting alife objects on level l10u_bunker... exporting raw data... exporting way objects on level l08_yantar... exporting way objects on level l02_garbage... exporting way objects on level l08u_brainlab... exporting way objects on level l12u_sarcofag... exporting way objects on level l12_stancia... exporting way objects on level l12_stancia_2... exporting way objects on level l10_radar... exporting way objects on level l03u_agr_underground_hw... exporting way objects on level l07_military... exporting way objects on level l06_rostok... exporting way objects on level l03_agroprom... exporting way objects on level l04u_labx18... exporting way objects on level l11_pripyat... exporting way objects on level l01_escape... exporting way objects on level l03u_agr_underground... exporting way objects on level l05_bar... exporting way objects on level l12u_control_monolith... exporting way objects on level l04_darkvalley... exporting way objects on level l10u_bunker... 8 wallclock secs ( 7.58 usr + 0.03 sys = 7.61 CPU)done! D:\MyNew\acdc>pause Для продолжения нажмите любую клавишу . . . Копирую в папку с ACDC новый граф. Копирую в папку с распакованным спавном ТЧ файл alife_escape.ltx из ЧН. Изменяю файл all.ltx таким образом: [header] ; don't touch these graph_version = 8 guid = 9a80c83291738f42b33b35903cead544 graph_guid = 138f121ee1b47f4f88fcd4dc9e7ca70c level_count = 19 [alife] source_files = <<END alife_l01_escape.ltx, alife_l02_garbage.ltx, alife_l03_agroprom.ltx, alife_l03u_agr_underground.ltx, alife_l04_darkvalley.ltx, alife_l04u_labx18.ltx, alife_l05_bar.ltx, alife_l06_rostok.ltx, alife_l08_yantar.ltx, alife_l08u_brainlab.ltx, alife_l07_military.ltx, alife_l10_radar.ltx, alife_l11_pripyat.ltx, alife_l12_stancia.ltx, alife_l12u_sarcofag.ltx, alife_l12u_control_monolith.ltx, alife_l12_stancia_2.ltx, alife_l10u_bunker.ltx, alife_escape.ltx END [section2] binary_files = section2.bin [way] source_files = <<END way_l08_yantar.ltx, way_l02_garbage.ltx, way_l08u_brainlab.ltx, way_l12u_sarcofag.ltx, way_l12_stancia.ltx, way_l12_stancia_2.ltx, way_l10_radar.ltx, way_l03u_agr_underground_hw.ltx, way_l07_military.ltx, way_l06_rostok.ltx, way_l03_agroprom.ltx, way_l04u_labx18.ltx, way_l11_pripyat.ltx, way_l01_escape.ltx, way_l03u_agr_underground.ltx, way_l05_bar.ltx, way_l12u_control_monolith.ltx, way_l04_darkvalley.ltx, way_l10u_bunker.ltx END Подгоняю вертексы: Изменяю файл alife_escape.ltx таким образом: [1698] ; cse_abstract properties section_name = explosive_barrel name = esc_explosive_barrel position = 123.772254943848, -7.70411586761475, -2.74230599403381 direction = -0.000134000001708046, -1.99999999495049e-006, -1.10000000859145e-005 id = 65535 version = 122 script_version = 8 ; cse_alife_object properties game_vertex_id = 245 level_vertex_id = 25 object_flags = 0xffffff3f ; cse_visual properties visual_name = dynamics\balon\bochka_fuel ; cse_alife_inventory_item properties condition = 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Изменяю строки game_vertex_id = 245 на game_vertex_id = 2792 (взял из guids.txt), и level_vertex_id = 25 на level_vertex_id = 3037 (2792+25). Для пробы сразу делаю переход с Кордона ТЧ на Кордон ЧН. В файле alife_l01_escape.ltx нахожу секцию перехода на Свалку и изменяю координаты. Вход в переход делаю на верхних ступеньках бункера Сидора, а выход - уже на новой локе, возле объекта, что я оставил в спавне из ЧН: [285] ; cse_abstract properties section_name = level_changer name = exit_to_garbage_01 position = -255.82, -19.49, -127.34 (здесь поставил вход) direction = 0, 0, 0 id = 65535 version = 118 script_version = 6 ; cse_alife_object properties game_vertex_id = 1 distance = 7 level_vertex_id = 309788 object_flags = 0xffffff3e custom_data = <<END [pt_move_if_reject] path = esc_way_if_reject END story_id = 91 ; cse_shape properties shapes = 1 shape_0:type = box shape_0:axis_x = 2.22939944267273,0,0 shape_0:axis_y = 0,4.83859968185425,0 shape_0:axis_z = 0,0,2.22939944267273 shape_0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 3 ; cse_alife_level_changer properties (здесь ставлю координаты и вертексы на подключаемой локе) dest_game_vertex_id = 2792 dest_level_vertex_id = 3037 dest_position = 36.4117431640625, 0.481237411499023, -305.824523925781 dest_direction = 0.0111562451347709, -0.000250374461757019, 0.0224392339587212 dest_level_name = escape dest_graph_point = start_actor_01 D:\MyNew\acdc>universal_acdc.pl -compile allsoc -out new.spawn Universal ACDC v.1.30 importing alife objects... importing alife objects from file alife_l01_escape.ltx... importing alife objects from file alife_l02_garbage.ltx... importing alife objects from file alife_l03_agroprom.ltx... importing alife objects from file alife_l03u_agr_underground.ltx... importing alife objects from file alife_l04_darkvalley.ltx... importing alife objects from file alife_l04u_labx18.ltx... importing alife objects from file alife_l05_bar.ltx... importing alife objects from file alife_l06_rostok.ltx... importing alife objects from file alife_l08_yantar.ltx... importing alife objects from file alife_l08u_brainlab.ltx... importing alife objects from file alife_l07_military.ltx... importing alife objects from file alife_l10_radar.ltx... importing alife objects from file alife_l11_pripyat.ltx... importing alife objects from file alife_l12_stancia.ltx... importing alife objects from file alife_l12u_sarcofag.ltx... importing alife objects from file alife_l12u_control_monolith.ltx... importing alife objects from file alife_l12_stancia_2.ltx... importing alife objects from file alife_l10u_bunker.ltx... importing alife objects from file alife_escape.ltx... importing artefact spawn places data... importing way objects from file way_l08_yantar.ltx... importing way objects from file way_l02_garbage.ltx... importing way objects from file way_l08u_brainlab.ltx... importing way objects from file way_l12u_sarcofag.ltx... importing way objects from file way_l12_stancia.ltx... importing way objects from file way_l12_stancia_2.ltx... importing way objects from file way_l10_radar.ltx... importing way objects from file way_l03u_agr_underground_hw.ltx... importing way objects from file way_l07_military.ltx... importing way objects from file way_l06_rostok.ltx... importing way objects from file way_l03_agroprom.ltx... importing way objects from file way_l04u_labx18.ltx... importing way objects from file way_l11_pripyat.ltx... importing way objects from file way_l01_escape.ltx... importing way objects from file way_l03u_agr_underground.ltx... importing way objects from file way_l05_bar.ltx... importing way objects from file way_l12u_control_monolith.ltx... importing way objects from file way_l04_darkvalley.ltx... importing way objects from file way_l10u_bunker.ltx... writing allsoc... writing header... writing alife objects... writing artefact spawn places... writing way objects... writing graph... done! D:\MyNew\acdc>pause Для продолжения нажмите любую клавишу . . . [location_0] 000 = "..." 001 = "эскейп" 002 = "свалка" 003 = "агропром" 004 = "агропром-подземка" 005 = "темная долина" 006 = "лаборатория X-18" 007 = "даркскейп" 008 = "Бар" 009 = "Росток" 010 = "Янтарь" 011 = "лаборатория X-16" 012 = "Милитари" 013 = "Мертвый город" 014 = "Радар" 015 = "Радар бункер" 016 = "Припять" 017 = "станция АЭС" 018 = "escape" [location_1] 000 = "..." 001 = "ограниченный доступ" 002 = "запрещенный доступ" [location_2] 000 = "..." 001 = "не для игрока" [location_3] 000 = "..." [levels] level01 level02 level03 level04 level05 level06 level07 level08 level09 level10 level11 ; level12 level13 level14 level15 level16 level17 ; level18 level19 level20 ; level21 level22 .... [level_22] name = escape caption = "escape" offset = 2000.0, 1000.0, 0.0 id = 22 [level_maps_single] L01_escape L02_garbage L03_agroprom L03u_agr_underground l04_darkvalley l04u_LabX18 L05_bar L06_rostok l07_military l08_yantar l10_radar l11_pripyat l12_stancia l12_stancia_2 l12u_control_monolith l12u_sarcofag l08u_brainlab escape ... [escape] texture = map\map_escape global_rect = 22.0, 2113.0, 352.0, 2443.000000 bound_rect = -445.000000,-445.000000,755.000000,755.000000 weathers = default music_tracks = l01_escape_musics (координаты global_rect и bound_rect выставил "от балды" - на месте Болот ЧН) Копирую в gamedata получившиеся при сборке графа папки levels с локациями. Копирую собранный all.spawn и game.graph Запускаю игру. Вижу на карте свою подключенную локацию - escape. Захожу в переход - "Перейти на другую локацию?" - "Да" - начинается загрузка и ... вылет без лога. Пробовал не делать level_changer, а сразу спавнить актора на подключаемой локе - тот же самый вылет без лога. Где и что я сделал не так? Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
krovosnork 257 Опубликовано 29 Августа 2012 Поделиться Опубликовано 29 Августа 2012 Marafon6540, попробуй убрать локацию из алл.спауна Ссылка на комментарий
Marafon6540 757 Опубликовано 29 Августа 2012 Поделиться Опубликовано 29 Августа 2012 krovosnork, и что потом? А зачем тогда я столько бился, чтобы ее подключить, и теперь убрать из спавна? Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
Vadimische 515 Опубликовано 30 Августа 2012 Поделиться Опубликовано 30 Августа 2012 'Marafon6540' Когда попробуешь перейти на новую локацию посмотри на какой стадии будет вылет и покажи последние строчек 10 из лога. Ссылка на комментарий
Marafon6540 757 Опубликовано 30 Августа 2012 Поделиться Опубликовано 30 Августа 2012 Vadimische, Вылет происходит без лога - файл чист. На экране успеваю прочитать "Загрузка симуляции жизни" - и вылет. С помощью переделки функции в _g.script от SkyLoader смог вывести лог последние строки: Сервер: Старт... ! Unknown command: start_game_callback_called function printf(fmt,...) local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") end Выводит в лог все действия игры Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
Vadimische 515 Опубликовано 31 Августа 2012 Поделиться Опубликовано 31 Августа 2012 (изменено) Marafon6540 Попробуй уменьшить радиус загрузки локации в "alife.ltx", пропиши так : switch_distance = 8 если карта загрузится, то можно будет походив по ней определить более конкретное место вылета Изменено 31 Августа 2012 пользователем Vadimische Ссылка на комментарий
Marafon6540 757 Опубликовано 31 Августа 2012 Поделиться Опубликовано 31 Августа 2012 Vadimische, уменьшил даже до 3. Не помогло. Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
antreg 178 Опубликовано 31 Августа 2012 Поделиться Опубликовано 31 Августа 2012 (изменено) Marafon6540, В списке файла all.ltx в секции [way] присутствует какой-то второй way_l03u_agr_underground_hw.ltx, но нет файла путей для подключённой локи. А именно: way_escape.ltx Вернее, может сам файл то путей и есть, но он не зарегистрирован в all.ltx, а значит аллспавн его не видит. Наверняка в файле alife_escape.ltx есть секции с обращением логики к путям, а файл с путями для этой локации в аллспавне не активен. Вылеты без лога наиболее часто встречаются именно из-за отсутствия адресата, указанного в логике объекта, или неверного адресата. Изменено 31 Августа 2012 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти