Перейти к контенту

Universal ACDC и другие perl-скрипты


KD87

Рекомендуемые сообщения

Artmys, можно-то можно, однако, стоит придумать более приличную реализацию. Так как насчет спавна СГМ? Интересует тебя исправление багов или нет? :)
Ссылка на комментарий

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 завис ... При снятии окна консоли - в консоле успевает промелькнуть некая строка ошибки, которую оч.слжно успеть прочитать.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

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

Изменено пользователем KD87
Ссылка на комментарий

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 тоже пока не полез разбираться с причинами.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Artos,

1. Нет графа, либо не указал путь до графа.

2. А каким образом ты добавляешь идентификаторы классов (ZS_ICE,ZS_MINE)? Это что же - правки движка? Иначе какой смысл в таких clsid?

В движке имеется набор зарегистрированных сочетаний <серверный класс>/<клиентский класс>. Каждому такому сочетанию присвоен уникальный номер - идентификатор класса. Этот номер в секции файла system.ltx указывается через строковый идентификатор, а в коде ему же соответствует один из членов класса clsid. Набор этих сочетаний имеется в движке исходно, даже если ничего не делать.
Может, я чего-то не понял? Каким образом добавляются строковые clsid?

По распаковке ничего сказать не могу, нужен спавн. Дефис в названии ни при чем.

Изменено пользователем KD87
Ссылка на комментарий

KD87,

2. А каким образом ты добавляешь идентификаторы классов (ZS_ICE,ZS_MINE)? Это что же - правки движка? Иначе какой смысл в таких clsid?

Может, я чего-то не понял? Каким образом добавляются строковые clsid?

новые сеты (пары клиентский/серверный класс) добавляются через class_registrator.script. Ничем не отличаются от встроенных движковых.

Это автоматом добавляет как новую константу к перечислению clsid, так и новую константу вида ZS_ICE для использования в секциях в параметре class.

здесь я это описывал

Изменено пользователем malandrinus
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

malandrinus, спасибо.

Тогда высказывайте предложения, как удобней будет класть class_registrator.script. В папке конфигов? Отдельно? Нужен ли отдельный ключ?

Ссылка на комментарий

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. Поясной раздеоитель, не являясь по сути никаким предметом (фейк) при манипуляциях спавна/дропа/тэйка не учитывается коллбэками и пр. кодами.

...

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, я понимаю. Для учета подобных вещей нужно парсить class_registrator.script. Распарсить-то не проблема - как его учитывать? Требовать класть в папку с acdc? Или в папку scripts, а уже ее в класть в папку с acdc? Или ввести ключ, который будет указывать расположение скрипта? Как будет удобней?
Ссылка на комментарий
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',

 

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Artos, тогда просто сделаю таблицу mod_clsid в scan.pm, добавляйте свои классы туда.

Вот такой вопрос - нужно ли редактирование/просмотр второй секции спавна - то есть, мест спавна артефактов?

Изменено пользователем KD87
Ссылка на комментарий

И все же непонятно на чем затыкается распаковка:

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, т.е. не помешает, но и не ожидаемо мною.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Новая версия - 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)

Ссылка на комментарий

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. Забыл добавить, что при распаковке в окне после скана секций начитают мелькать строки всех секций спавна ...

 

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Artos,

1,3. Можно же править scan.pm. Если больше нравится конфигом - могу сделать конфигом.

2. Я добавлял в таблицу те классы, на отсутствие которых ругался парсер конфигов. Пропуск незадействованных в спавне классов сделаю.

4. Добавлю.

 

Мелькание - да, забыл это убрать. В новой версии уберу, а пока закомментируй символом # строки 47 и 105 в data_packet.pm

Ссылка на комментарий

KD87

1. Да, конечно можно править исходники скрипта (мне это даже предпочтительнее), но:

- стОит ли давать такую возможность/необходимость порою малоопытным модмейкерам, тем более язык Perl'а все же несколько отличен;

- при обновлении версии основного скрипта/библиотек не требуется периодически подправлять ...

- если такой инклуд-конфиг прикладывать к моду или даже класть в /config - то стороннему кодеру-распаковщику не потребуется гадать над что/как подправлять.

Т.е. универсальный распаковщик обеспечивает общий для всех игр/модов функционал, а сами моды дают небольшую подстройку для расширения/изменения этого функционала.

 

2. В модах (в их конфигах), да и в самих оригинальных играх встречается мусор. Я все же сторонник при создании нового не тащить весь багаж хлама дальше ... вот и предлагаю не включать все и вся ... ;-)

Занятые же хламом места классов вполне кому-то могут понадобиться -> возникнет коллизия и потребуется эксклюзивная правка.

 

По мельканию: по-мне, мелькание даже больше нДравится, ;-) Как никак хоть какой-то индикатор работы. Если бы не мелькание, то ... более пол-минуты распаковки воспринял бы как зависон ...

Но для общего употребления все же стОит убрать (вот и напомнил), а то критиканов немало позубоскалить понапрасну.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, завтра будет новая версия. Полминуты распаковки - это с мельканием строк? Если да, то так долго распаковывает как раз из-за вывода в лог :)
Ссылка на комментарий

KD87, Artos, ну камрады, молодцы, порадовали! Ещё вопрос, а как можно номера секций в одном отдельном alife_хххх.ltx поменять? Например у меня идут от 0 до 1500, а мне нужно, ну скажем от 20000 до 25000.

Ссылка на комментарий

KD87

Да, с закомментированной строкою 38 (а не 47) и 105 в data_packet.pm распаковка занимает ~ 7 секунд, а с ними - под минуту ...

 

Artmys

Поменять то номера ты можешь сам (ручками) - вот только толку от этого не будет никакого.

Диапазон всех номеров секций (0...XXXXX) обязан быть непрерывным! Упаковщик все секции из распакованных файлов переномеровывает в соответствии с заложенным в него алгоритмом. Сооьветственно при обратной распаковке - ты видишь что получилось.

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

 

Если у всех в all.spawn запихивается не более 10К объектов, а тебе захотелось нумеровать с 20К - то что, предлагаешь в игру спавнить 20К пустых объектов? Не жирно ли будет расходовать понапрасну столько игровых идентификаторов?

Так что - подстраивай ты под то что имеется, а не ожидай, что кто-то будет подстраиваться под твои возникшие сиюминутные (и вполне может проходящие) пожелания.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
  • Куратор(ы) темы:

×
×
  • Создать...