Это популярное сообщение. 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 Ссылка на комментарий
KD87 718 Опубликовано 3 Ноября 2011 Автор Поделиться Опубликовано 3 Ноября 2011 Artmys, можно-то можно, однако, стоит придумать более приличную реализацию. Так как насчет спавна СГМ? Интересует тебя исправление багов или нет? Ссылка на комментарий
Artos 99 Опубликовано 4 Ноября 2011 Поделиться Опубликовано 4 Ноября 2011 (изменено) KD87 Т.к. ошибка парсинга похожа схожа и с моим случаем, вероятно поковыряться с конфигами и алл.спавном SGM не помешает. Вот комплект конфигов и all.spawn из "SGM_COP_v1.7" +FIX_31.08: ссылка (~7.5 МБ). В комплект вложил и используемый ACDC с вручную дополненным section.ini и собственно распакованный (после ручного пополнения секций) алл.спавн. Проблема с парсингом файла: \gamedata\configs\zones\sgm_anomalies.ltx , хотя он вполне корректно подключен и не имеет синтаксических ошибок ... Примечание: Попробовал слить все конфиги из оригиналньной игры (ЗП 1.6.002) и мода и распаковать 'полный' вариант - в результате ACDC завис ... При снятии окна консоли - в консоле успевает промелькнуть некая строка ошибки, которую оч.слжно успеть прочитать. Изменено 4 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 4 Ноября 2011 Автор Поделиться Опубликовано 4 Ноября 2011 (изменено) Artos, спасибо за спавн. Да, не все конфиги парсит. Добавлено через 101 мин.: В общем, пробуйте вот это: http://narod.ru/disk/30507725001/un_acdc.7z.html Бета-версия universal acdc. Сильно переработан код, не скажу, что будет работать быстрее, но поддерживать его теперь намного удобней. Починены все ранее заявленные функции - конвертация спавна, замена вертексов, разбивка спавнов на level.spawn. Вообще переделал парсер, теперь классы секций определяются более надежно. Для удобства стандартные спавны ТЧ, ЧН, ЗП распаковываются без конфигов. Поскольку это бета-версия, которая еще в работе, ридми нет, могут быть баги и, скорее всего, билд-спавны распаковываться не будут. В синтаксисе запуска есть некоторые изменения. Вместо ключа -o теперь -out, вместо -с теперь -compile (или -com, -comp, любое сокращение не короче com). Мини-справка из скрипта: Decompilation: acdc -d <spawn_file> [-o <outdir>] [-scan <scandir>] [-g <graph_dir>] [-l] Compilation: acdc -com <source_dir> [-o <outfile>] [-scan <scandir>] [-l] [-idx <index_file>] [-f <flag1,flag2,...>] Convertation: acdc -convert <source_file> [-o <outfile>] [-scan <scandir>] [-g <graph_dir>] [-l] [-ver <new_version>] Split spawns: acdc -split <spawn_file> [-o <outdir>] [-scan <scandir>] [-g <graph_dir>] [-use_graph] Parse vertices: acdc -parse <source_file> [-o <outfile>] [-scan <scandir>] [-old <old_gvid>] [-new <new_gvid>] Изменено 4 Ноября 2011 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 4 Ноября 2011 Поделиться Опубликовано 4 Ноября 2011 KD87 Попытался поработать с новым вариантом ACDC ... пока не удалось почти ничего. 1. Попытка распаковать оригинальный all.spawn из SHOC закончилась логом 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... Can't use an undefined value as a symbol reference at universal_acdc.pl line 1370, <GEN493> line 507 (#1) (F) A value used as either a hard reference or a symbolic reference must be a defined value. This helps to delurk some insidious errors. Uncaught exception from user code: Can't use an undefined value as a symbol reference at universal_acdc.pl line 1370, <GEN493> line 507. at universal_acdc.pl line 1370 main::read_graph() called at universal_acdc.pl line 1171 main::decompile() called at universal_acdc.pl line 1147 Для продолжения нажмите любую клавишу . . . - при этом sections.ini сформировался без проблем. 2. Попробовал на своем моде: 2.1. Пришлось вручную забивать в scan.pm добавленные в моде классы (ZS_ICE,ZS_MINE, ...), что не очень удобно для универсального варианта. После этого sections.ini создался вроде как корректно. 2.2. Попытка распаковать уже имеющийся спавн заткнулась с логом: reading service information... scanning your gamedata folder...done! 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... handling error with wpn_bm16 Uncaught exception from user code: FATAL ERROR! Function: stkutils::data_packet::error_handler Line: 366 Expression: Description: unhandled exception at stkutils/debug.pm line 1 stkutils::debug::fail('stkutils::data_packet::error_handler', 366, '', 'unhandled exception\x{a}') called at stkutils/data_packet.pm line 366 stkutils::data_packet::error_handler('stkutils::data_packet=HASH(0x368b650)', 'cse_alife_item_weapon_shotgun=HASH(0x368ad5c)', 'C') called at stkutils/data_packet.pm line 185 stkutils::data_packet::unpack_properties('stkutils::data_packet=HASH(0x368b650)', 'cse_alife_item_weapon_shotgun=HASH(0x368ad5c)', 'HASH(0x3090e48)') called at stkutils/entity.pm line 5858 cse_alife_item_weapon_shotgun::update_read('cse_alife_item_weapon_shotgun=HASH(0x368ad5c)', 'stkutils::data_packet=HASH(0x368b650)') called at stkutils/entity.pm line 109 stkutils::entity::_read_m_update('stkutils::entity=HASH(0x3689844)', 'stkutils::data_packet=HASH(0x368b650)') called at stkutils/entity.pm line 79 stkutils::entity::read_new('stkutils::entity=HASH(0x3689844)', 'stkutils::chunked=HASH(0x340f91c)', 'stkutils::ini_file=HASH(0x2151890)') called at stkutils/entity.pm line 52 stkutils::entity::read('stkutils::entity=HASH(0x3689844)', 'stkutils::chunked=HASH(0x340f91c)', 118, 'stkutils::ini_file=HASH(0x2151890)') called at universal_acdc.pl line 258 all_spawn::read_alife('all_spawn=HASH(0x124f48)', 'stkutils::chunked=HASH(0x340f91c)') called at universal_acdc.pl line 189 all_spawn::read('all_spawn=HASH(0x124f48)') called at universal_acdc.pl line 1169 main::decompile() called at universal_acdc.pl line 1147 Для продолжения нажмите любую клавишу . . . - может на дефисе в наименовании модели (wpn_bm-16) оружия споткнулся? 2.3. Решил запаковать то, что уже имелось новой версией - запаковалось без ругани в логе. А вот распаковать запакованное НЕ удалось. Распаковка затыкается с сообшением: 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... Uncaught exception from user code: FATAL ERROR! Function: stkutils::chunked::r_chunk_close Line: 59 Expression: $self->{offset} <= $offset Description: current position is outside current chunk at stkutils/debug.pm line 1 stkutils::debug::fail('stkutils::chunked::r_chunk_close', 59, '$self->{offset} <= $offset', 'current position is outside current chunk') called at stkut ils/chunked.pm line 59 stkutils::chunked::r_chunk_close('stkutils::chunked=HASH(0x28f0ac8)') called at universal_acdc.pl line 261 all_spawn::read_alife('all_spawn=HASH(0x124f08)', 'stkutils::chunked=HASH(0x28f0ac8)') called at universal_acdc.pl line 189 all_spawn::read('all_spawn=HASH(0x124f08)') called at universal_acdc.pl line 1169 main::decompile() called at universal_acdc.pl line 1147 Для продолжения нажмите любую клавишу . . . Пока остановился ... в скрипты ACDC тоже пока не полез разбираться с причинами. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 4 Ноября 2011 Автор Поделиться Опубликовано 4 Ноября 2011 (изменено) Artos, 1. Нет графа, либо не указал путь до графа. 2. А каким образом ты добавляешь идентификаторы классов (ZS_ICE,ZS_MINE)? Это что же - правки движка? Иначе какой смысл в таких clsid? В движке имеется набор зарегистрированных сочетаний <серверный класс>/<клиентский класс>. Каждому такому сочетанию присвоен уникальный номер - идентификатор класса. Этот номер в секции файла system.ltx указывается через строковый идентификатор, а в коде ему же соответствует один из членов класса clsid. Набор этих сочетаний имеется в движке исходно, даже если ничего не делать.Может, я чего-то не понял? Каким образом добавляются строковые clsid? По распаковке ничего сказать не могу, нужен спавн. Дефис в названии ни при чем. Изменено 4 Ноября 2011 пользователем KD87 Ссылка на комментарий
Malandrinus 615 Опубликовано 4 Ноября 2011 Поделиться Опубликовано 4 Ноября 2011 (изменено) KD87, 2. А каким образом ты добавляешь идентификаторы классов (ZS_ICE,ZS_MINE)? Это что же - правки движка? Иначе какой смысл в таких clsid? Может, я чего-то не понял? Каким образом добавляются строковые clsid? новые сеты (пары клиентский/серверный класс) добавляются через class_registrator.script. Ничем не отличаются от встроенных движковых. Это автоматом добавляет как новую константу к перечислению clsid, так и новую константу вида ZS_ICE для использования в секциях в параметре class. здесь я это описывал Изменено 4 Ноября 2011 пользователем malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
KD87 718 Опубликовано 4 Ноября 2011 Автор Поделиться Опубликовано 4 Ноября 2011 malandrinus, спасибо. Тогда высказывайте предложения, как удобней будет класть class_registrator.script. В папке конфигов? Отдельно? Нужен ли отдельный ключ? Ссылка на комментарий
Artos 99 Опубликовано 4 Ноября 2011 Поделиться Опубликовано 4 Ноября 2011 KD87 По п.1. ясно, моя заморочка, т.к. не вставил в новый батник ключик для графа. После добавления - оригинальный спавн распковывается. По п.2: Добавляю стандартным путем, котрый был уже в Zenobian-моде (TURRETMG - турельки, Z_MINES - мины) и в иных модах, где для некоторых аномалий заданы "свои" классы для отображения детекторами на миникартах. Т.е. в файл class_registrator.script (можно и в game_registrator.script) добавлены строки: function register(object_factory) --/ ... предыдущие строки кода --/#+# Added classes cs_register (object_factory, "CTushkano", "se_monster.se_monster", "SM_RAT", "rat") --/#+# крысы cs_register (object_factory, "CMincer", "se_zones.se_zone_anom", "ZS_STUDEN", "zone_buzz_s") --/#+# buzz cs_register (object_factory, "CMosquitoBald", "se_zones.se_zone_anom", "ZS_ELECTR", "zone_elec_s") --/#+# electra cs_register (object_factory, "CMosquitoBald", "se_zones.se_zone_anom", "ZS_ZHARKA", "zone_zhar_s") --/#+# zharka cs_register (object_factory, "CMosquitoBald", "se_zones.se_zone_anom", "ZS_ICE", "zone_ice_s") --/#+# снежинка cs_register (object_factory, "CMosquitoBald", "se_zones.se_zone_mine", "ZS_MINE", "zone_mine_s") --/#+# мины cs_register (object_factory, "CMosquitoBald", "se_zones.se_zone_campfire", "ZS_CFIRE", "zone_campfire") --/#+# пламя костров cs_register (object_factory, "CHelicopter", "se_car.se_turret_mgun", "TURRETMG", "turret_mgun") --/#+# турели cs_register (object_factory, "hanging_lamp", "se_item.se_lamp", "SO_HLAMP", "hlamp_s") --/#+# лампы cs_register (object_factory, "CScope", "se_item.se_docfake", "II_DOCF", "obj_docfake_s") --/#+# поясной сепаратор end Соответственно в конфигах секций для объектов указаны новые классы, и в скриптах сделаны необходимые дополнения. Смысл создания новых классов: 1. Для различия детекторами различных типов аномалий. Также, гораздо проще в аномальных схемах (спавн/обход/...) различать по классам, а не парсить каждый раз секции. 2. Для того, чтобы крысы не воспринимались как тушканчики. 3. Костровое пламя и мины вынесены из "аномалий" и обрабатываются кодами/схемами отдельно. 4. Лампы на арене управляются независимо от остальных осветителей. 5. Поясной раздеоитель, не являясь по сути никаким предметом (фейк) при манипуляциях спавна/дропа/тэйка не учитывается коллбэками и пр. кодами. ... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 4 Ноября 2011 Автор Поделиться Опубликовано 4 Ноября 2011 Artos, я понимаю. Для учета подобных вещей нужно парсить class_registrator.script. Распарсить-то не проблема - как его учитывать? Требовать класть в папку с acdc? Или в папку scripts, а уже ее в класть в папку с acdc? Или ввести ключ, который будет указывать расположение скрипта? Как будет удобней? Ссылка на комментарий
Artos 99 Опубликовано 4 Ноября 2011 Поделиться Опубликовано 4 Ноября 2011 (изменено) KD87: ... высказывайте предложения, как удобней будет класть class_registrator.script Я все же за разумную универсальность ... Все и вся добавить конечно можно, но ... удобство применения, как правило, снижается, вероятность ошибок - увеличиваетсмя. Мысли такие: Модмейкеры добавляют свои классы, давая самые разные имена. Запрещать - нельзя, Навязывать "разрешенные имена" - неразумно. Парсить все и вся? Тоже не выход (ИМХО). Тем более и клиентский класс можно делать свой, на базе доступных - а тогла придется парсить и пользовательские скрипты. Подстраивать ACDC по каждый мало-мальски значимый мод? И глупо и накладно и неразумно. ИМХО, при парсинге конфигов стОит считывать все встречающиеся классы и те, которые не определены как 'штатные' - заносить в отдельный массив/список/файл. При декомпиляции, если в спавне нет нештатных классов - все стандартно и не прерывать распаковку. При компиляции - также при отсутствии в спавне нештатных - паковать! Ну а если модмейкер засовывает в спавн "свои" классы - тут требуется доработка. - возможен пользовательский файл-инклуд для scan.pm, т.е. модмейкер сам задает соотошение добавленных классов и соответствующих им штатных серверных классов. Само собою, если новый класс требует новых параметров для спавна - это только чеоез доработку ACDC, но до такого вряд ли скоро дойдет ... Например для моего случая требуется считать вот это: # SIMBION SM_RAT => 'se_monster', ZS_STUDEN => 'se_zone_anom', ZS_ELECTR => 'se_zone_anom', ZS_ZHARKA => 'se_zone_anom', ZS_ICE => 'se_zone_anom', ZS_MINE => 'cse_alife_anomalous_zone', ZS_CFIRE => 'cse_alife_anomalous_zone', TURRETMG => 'cse_alife_helicopter', II_DOCF => 'cse_alife_item_document', Изменено 4 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 4 Ноября 2011 Автор Поделиться Опубликовано 4 Ноября 2011 (изменено) Artos, тогда просто сделаю таблицу mod_clsid в scan.pm, добавляйте свои классы туда. Вот такой вопрос - нужно ли редактирование/просмотр второй секции спавна - то есть, мест спавна артефактов? Изменено 4 Ноября 2011 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 5 Ноября 2011 Поделиться Опубликовано 5 Ноября 2011 (изменено) И все же непонятно на чем затыкается распаковка: 1. Добавил в конец section_to_clsid вроде как все секции: #SIMBION 'm_rat_e' => 'SM_RAT', 'rat_resp' => 'SM_RAT', 'rat_weak' => 'SM_RAT', 'rat_normal' => 'SM_RAT', 'rat_strong' => 'SM_RAT', 'zone_buzz' => 'ZS_STUDEN', 'zone_buzz_weak' => 'ZS_STUDEN', 'zone_buzz_average' => 'ZS_STUDEN', 'zone_buzz_average' => 'ZS_STUDEN', 'dyn_zone_buzz_weak' => 'ZS_STUDEN', 'dyn_zone_buzz_average' => 'ZS_STUDEN', 'dyn_zone_buzz_average' => 'ZS_STUDEN', 'zone_witches_galantine' => 'ZS_ELECTR', 'zone_witches_galantine_weak' => 'ZS_ELECTR', 'zone_witches_galantine_average' => 'ZS_ELECTR', 'zone_witches_galantine_strong' => 'ZS_ELECTR', 'dyn_zone_witches_galantine_weak' => 'ZS_ELECTR', 'dyn_zone_witches_galantine_average' => 'ZS_ELECTR', 'dyn_zone_witches_galantine_strong' => 'ZS_ELECTR', 'zone_zharka_static' => 'ZS_ZHARKA', 'zone_zharka_static_weak' => 'ZS_ZHARKA', 'zone_zharka_static_average' => 'ZS_ZHARKA', 'zone_zharka_static_strong' => 'ZS_ZHARKA', 'dyn_zone_zharka_static_weak' => 'ZS_ZHARKA', 'dyn_zone_zharka_static_average' => 'ZS_ZHARKA', 'dyn_zone_zharka_static_strong' => 'ZS_ZHARKA', 'zone_ice' => 'ZS_ICE', 'zone_ice_weak' => 'ZS_ICE', 'zone_ice_average' => 'ZS_ICE', 'zone_ice_strong' => 'ZS_ICE', 'dyn_zone_ice' => 'ZS_ICE', 'dyn_zone_ice_weak' => 'ZS_ICE', 'dyn_zone_ice_average' => 'ZS_ICE', 'dyn_zone_ice_strong' => 'ZS_ICE', 'caps_mine_field' => 'ZS_MINE', 'zone_flame_small' => 'ZS_CFIRE', 'turret_mgun' => 'TURRETMG', 'document_fake' => 'II_DOCF', 2. Добавил в конец clsid_to_class новые соотношения: # SIMBION SM_RAT => 'se_monster', ZS_STUDEN => 'se_zone_anom', ZS_ELECTR => 'se_zone_anom', ZS_ZHARKA => 'se_zone_anom', ZS_ICE => 'se_zone_anom', ZS_MINE => 'cse_alife_anomalous_zone', ZS_CFIRE => 'cse_alife_anomalous_zone', TURRETMG => 'cse_alife_helicopter', II_DOCF => 'cse_alife_item_document', 3. Запаковывается нормально (ранее распакованное из мода). 4. При распаковке вновь созданного спавна остановка и вылезает: checking version of ../new.spawn... This is a spawn of S.T.A.L.K.E.R. Shadow Of Chernobyl (1.0001 or higher) opening ../new.spawn... reading header... reading alife objects... Uncaught exception from user code: FATAL ERROR! Function: stkutils::chunked::r_chunk_close Line: 59 Expression: $self->{offset} <= $offset Description: current position is outside current chunk at stkutils/debug.pm line 1 stkutils::debug::fail('stkutils::chunked::r_chunk_close', 59, '$self->{offset} <= $offset', 'current position is outside current chunk') called at stkut ils/chunked.pm line 59 stkutils::chunked::r_chunk_close('stkutils::chunked=HASH(0x32fe794)') called at universal_acdc.pl line 261 all_spawn::read_alife('all_spawn=HASH(0x304f48)', 'stkutils::chunked=HASH(0x32fe794)') called at universal_acdc.pl line 189 all_spawn::read('all_spawn=HASH(0x304f48)') called at universal_acdc.pl line 1169 main::decompile() called at universal_acdc.pl line 1147 Для продолжения нажмите любую клавишу . . . Не пойпу, на что ругается? Похоже на какую-то аномалию ... но как определить на какую? Добавлено через 7 мин.: P.S. По редактированию второй секции спавна: Не совсем по адресу вопрос .. ;-) Я сторонник гибких методов, которые доступны модмейкеру в процессе разработки и сопровождения мода. Доступность мест спавна артов вероятно не помешает, но ... мне гораздо проще не ждать респапвна аномалиями, а спавнить там и то,где и что мне потребовалось. Т.е. не быть привязанным к заранее заданному. В общем я бы ответил - 50:50, т.е. не помешает, но и не ожидаемо мною. Изменено 5 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 5 Ноября 2011 Автор Поделиться Опубликовано 5 Ноября 2011 Artos, отошли спавн и конфиги в личку. Ссылка на комментарий
KD87 718 Опубликовано 7 Ноября 2011 Автор Поделиться Опубликовано 7 Ноября 2011 Новая версия - 1.1b: http://narod.ru/disk/30742284001/un_acdc.7z.html Что нового: [+] проверена распаковка билд-спавнов, решена проблема декомпиляции спавнов билдов 25хх. [+] добавлен контроль наличия параметра version в секциях распакованного спавна. исправлено исключение файла со spawn_ids объектов при сканировании конфигов. Также могут быть проблемы с конвертацией. Скажем, ЧН->ЗП, ЗП->ЧН конвертируются нормально, с остальными вариантами могут быть проблемы. Связано это с необходимостью адаптации конфигов, так что если кому-то нужна подобная конвертация - пишите в личку, будем искать решение. Список модов, распаковку спавнов которых проверил лично: -АМК 1.4.1 -Z.E.N.O.B.I.A.N mod -NLC 6 -SIMBION (SOC) -OGSM Final (SOC) -SGM 1.7 Пока не поддерживаются спавны модов: -Народная солянка -OGSM (CS) Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) KD87, в очередной раз - спасибо за твою работу по ACDC! Скачал опробовал ... серьезных замечаний пока нет. Но есть вопрос(ы)/уточнялки: 1. Как я понял (и из реадми) пока портировать секции новых классов ACDC не обучен? Т.е. нельзя простеньким инклуд-конфигом подключить дополнтьельные классы объектов. Планируется ли нечто подобное? 2. Ранее предлагал при распаковке и/или запаковке алл.спавна не принимать во внимание отсутствие в сосканнированном sections.ini секций, которые не присутствуют в собственно алл.спавне. Ведь отсутствие всех классов в спавне ни коим образом не препятствяет его распаковке. Возникает дилемма для разработчиков: или не (рас)паковывать или удалять из конфигов новые добавленные классы, но еще не знакомые AСDC или руками править ACDC. Оперативность в работе несколько падает ... 3. Уже в scan.pm присутствуют рудиментарные классы. Например, 'Z_BBL' (NLC 6) незадействованный класс (а вот 'Z_GRED' - пропущен). 'ZS_BUZZ' (NC) - вообще нерабочий, т.к. клиентский класс 'CBuzz' недоступен. Т.о. будут накапливаться рудименты, которые в какой то момент могут вызвать конфликт с модами, в которых модмейкеры пересекутся по названиям ... ИМХО, стОит предусмотреть некий механизм (в виде опционального конфига), в котором можно было бы разработчику: - указывать новые добавленные классы; - переопределять существующие классы; - отключать классы/секции несущественные для работы ACDC; - указывать классы/секции/файлы исключаемые из сканирования; - и т.п. Понимаю, для малоопытных с ACDC модмейкерам это будет напряжно читать/понимать/применять, но ... не часто им потребно будет туда нос совать, а опытным будет подспорье. Пример который планирую подключить к универсальному модулю для работы с нет пакетами в модах: [added_classes] ; clsid | script_clsid | server_object_class SM_RAT = rat , se_monster ZS_STUDEN = zone_buzz_s , se_zone_anom ZS_ELECTR = zone_elec_s , se_zone_anom ZS_ZHARKA = zone_zhar_s , se_zone_anom ZS_ICE = zone_ice_s , se_zone_anom Z_MINEF = zone_mine , cse_alife_anomalous_zone TURRETMG = turret_mgun , se_turret_mgun W_FIST = wpn_fist_s , cse_alife_item_weapon W_GGUN = wpn_ggun_s , cse_alife_item_weapon_magazined WP_ZOOM = wpn_zoom_s , cse_alife_item_weapon_magazined II_FAKE = obj_fake_s , cse_alife_item II_DOCF = unknown , not_used 4. Руководствуясь if you are editing this hash please report to developer, прошу внести правки для "SIMBION" в след.версию ACDC: Класс II_DOCF => 'cse_alife_item_document' заменен на II_FAKE => 'cse_alife_item' Класс ZS_MINE => 'cse_alife_anomalous_zone' заменен на Z_MINEF => 'cse_alife_anomalous_zone' Исключить класс 'ZS_CFIRE' (заменен на имеющийся Z_CFIRE) Добавить классы: W_FIST => 'cse_alife_item_weapon', W_GGUN => 'cse_alife_item_weapon_magazined', WP_ZOOM => 'cse_alife_item_weapon_magazined' Добавлено через 49 мин.: P.S. Забыл добавить, что при распаковке в окне после скана секций начитают мелькать строки всех секций спавна ... Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 7 Ноября 2011 Автор Поделиться Опубликовано 7 Ноября 2011 Artos, 1,3. Можно же править scan.pm. Если больше нравится конфигом - могу сделать конфигом. 2. Я добавлял в таблицу те классы, на отсутствие которых ругался парсер конфигов. Пропуск незадействованных в спавне классов сделаю. 4. Добавлю. Мелькание - да, забыл это убрать. В новой версии уберу, а пока закомментируй символом # строки 47 и 105 в data_packet.pm Ссылка на комментарий
Artos 99 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 (изменено) KD87 1. Да, конечно можно править исходники скрипта (мне это даже предпочтительнее), но: - стОит ли давать такую возможность/необходимость порою малоопытным модмейкерам, тем более язык Perl'а все же несколько отличен; - при обновлении версии основного скрипта/библиотек не требуется периодически подправлять ... - если такой инклуд-конфиг прикладывать к моду или даже класть в /config - то стороннему кодеру-распаковщику не потребуется гадать над что/как подправлять. Т.е. универсальный распаковщик обеспечивает общий для всех игр/модов функционал, а сами моды дают небольшую подстройку для расширения/изменения этого функционала. 2. В модах (в их конфигах), да и в самих оригинальных играх встречается мусор. Я все же сторонник при создании нового не тащить весь багаж хлама дальше ... вот и предлагаю не включать все и вся ... ;-) Занятые же хламом места классов вполне кому-то могут понадобиться -> возникнет коллизия и потребуется эксклюзивная правка. По мельканию: по-мне, мелькание даже больше нДравится, ;-) Как никак хоть какой-то индикатор работы. Если бы не мелькание, то ... более пол-минуты распаковки воспринял бы как зависон ... Но для общего употребления все же стОит убрать (вот и напомнил), а то критиканов немало позубоскалить понапрасну. Изменено 7 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 7 Ноября 2011 Автор Поделиться Опубликовано 7 Ноября 2011 Artos, завтра будет новая версия. Полминуты распаковки - это с мельканием строк? Если да, то так долго распаковывает как раз из-за вывода в лог Ссылка на комментарий
Artmys 0 Опубликовано 7 Ноября 2011 Поделиться Опубликовано 7 Ноября 2011 KD87, Artos, ну камрады, молодцы, порадовали! Ещё вопрос, а как можно номера секций в одном отдельном alife_хххх.ltx поменять? Например у меня идут от 0 до 1500, а мне нужно, ну скажем от 20000 до 25000. Ссылка на комментарий
Artos 99 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 KD87 Да, с закомментированной строкою 38 (а не 47) и 105 в data_packet.pm распаковка занимает ~ 7 секунд, а с ними - под минуту ... Artmys Поменять то номера ты можешь сам (ручками) - вот только толку от этого не будет никакого. Диапазон всех номеров секций (0...XXXXX) обязан быть непрерывным! Упаковщик все секции из распакованных файлов переномеровывает в соответствии с заложенным в него алгоритмом. Сооьветственно при обратной распаковке - ты видишь что получилось. Менять алгоритм конечно можно (с сохранением обязательной сплошной индексацией), но(!) никто не будет подстраиваться под твои похотелки, если на то нет общих существенных причин (коих пока не наблюдается). Если у всех в all.spawn запихивается не более 10К объектов, а тебе захотелось нумеровать с 20К - то что, предлагаешь в игру спавнить 20К пустых объектов? Не жирно ли будет расходовать понапрасну столько игровых идентификаторов? Так что - подстраивай ты под то что имеется, а не ожидай, что кто-то будет подстраиваться под твои возникшие сиюминутные (и вполне может проходящие) пожелания. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти