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

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


KD87

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

В нужные секции добавить специальный параметр, экспортировать копии файлов из папки spawns в конфиги, присоединить к system.ltx, и читать их

Хм, ... тут есть минусы.

1. Не факт, что какой-то модмейкер (новичков много) не создаст себе секцию типа [12345] - т.о. создав дубль.

Значит: импорт секций из алл.спавна должен быть отключен.

2. При разработке мода или держать экспорт постоянно - значит и лишнее время старта игры и лишние ресурсы в памяти компа/игры и немало забывчивых модмейкеров, которые мусор и рабочие файлы не чистят ...

3. При работе 'в двоем' или при желании стороннего содмейкера поковырять - потребуется изучать все скрипты и вытягивать из них все нужные индексы секций, дабы ими можно было воспользоваться.

 

Если хранить все такие метки в алл.спавне - нет необходимости в лишних действиях ... один раз пометил - пользуемся.

 

относительные пути и раньше поддерживались, просто не очевидно и никем нигде не указывалось

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

Кстати, реадме тоже нужно бы подправить в некоторых местах, а то ... "-c <dir> - папка, в которой лежит запакованный спавн." - слишком вводит в ступор некотрых.

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

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

Ссылка на комментарий
Artos, нет, так нельзя - хранить метки в спавне. Это ж как нет-пакет - читать/писать можно строго по шаблону. Метки в alife.ltx-конфигах будут храниться, моддер ведь с ними работает. Как вариант - можно сделать парсер скриптов и конфигов, чтобы оттуда выдирать используемые индексы и формировать список из них.
Ссылка на комментарий
Для движка никакой проблемы нет - проблема у скриптеров

Да за движок то я спокоен, абсолютно.

Я хочу секциям в алспавне давать имена (образно конечно) как в обычных конфигах...

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

всё легко

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

Да - нужна информация о текущей(!) связи некой "метки"(имени?) и номера секции в аллспавне. Artos-у в роде то-же, что-то такое требуется, хотя, тут я могу ошибиться.

 

ЗЫ:

Если в самом аллспавне нельзя ничего "лишнего" хранить, то может это, как-нибудь, через внешний индекс организовать можно. Или ещё как-нибудь - "по нашему" :russian_ru::)

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

всё легко

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

KD87

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

Например, ни что нам не мешает добавить в секцию интересующего нас объекта некий параметр в

custom_data = <<END

; ...

fix_index = my_name_1

END

 

Этот параметр не воспринимается игрою.

Если настроить парсер на чтение "за комментом", то типа: ; fix_index = my_name_1

вообще будет безвредной.

 

Ну а про парсер скриптов - я и не заикался. :-) Если это возможно - то это и будет наверное оптимальным решением.

Ведь метод пока вроде как один и маска по 'create(%d+)' - вполне может решить задачу.

Но тут может быть проблемы! В папках скриптов порою валяется нерабочий мусор (в оригинале их куча) и парсер настраивать на игнорирование мусора.

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

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

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

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

Artos, с парсером будем гемор, да. К тому же как минимум ему надо будет скармливать имена функций, из аргументов которых надо выдирать id.

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

KD87

Если нельзя метку будет хранить в самом алл.спавне, потеряется универсальность ACDC.

Это как с новыми секциями объектов. Или парсить или ... руками выдергивать из скриптов.

Для того, кто разрабатывает один - хранение во внешних файлах - решение. Для остальных - необходимость ковыряться в распакованном моде.

 

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

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

Artos, могу совместить оба подхода. Метка будет записываться в кастом дату и при распаковке восстанавливаться, а при запаковке будет генерироваться ltx конфиг с такими секциями:

[box_wood_01_0021]
id = 2907
story_id = -1

для тех, кто захочет получать id по имени объекта скриптом прямо из игры.

Ссылка на комментарий
KD87, похоже это один из вполне приемлемых и достаточных вариантов. ИМХО.

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

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

KD87, да - это то, что надо.

Может в олспане есть и ещё чего нужного - но я про это пока не знаю :)

 

 

 

Есть ещё один "оллспавн" - иконки - "забодало", с координатами возиться. Вот если бы было так: есть папка с раздельными файлами иконок, есть конфиг-файл с информацией о связи "имён" с этими файлами, и компилятор этих файлов в ui_icons_-файлы и координаты в xml-конфиги, что-бы сам писал, автоматом. То-есть - кинул иконку в папку, подредактировал строку - всё.

 

 

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

всё легко

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

Artos, два вопроса. Первый - как лучше записать метку в кастом дату, чтобы потом не обвалить какой-нибудь игровой скрипт, который ее парсит? Второй - список таких "помеченных" секций еще нужен? В каком виде его сделать - текстовый indices.log какой-нибудь?

 

Добавлено через 2 мин.:

7.9, можно, только желательно все поподробней расписать, можно даже по шагам - что должен делать скрипт.

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

Если прямо сейчас, то, в общем, где-то так:

 

1. Прочитать конфиг-файл (например: config\icons.ltx)

2. Собрать (склеить) иконки (например, графические файлы из папки "textures\icons\") в файлы в соответствии с секциями из конфиг-файла.

3. Прописать получившиеся координаты иконок в xml-конфиги соответствующих графических файлов.

 

[items_icon] ; секция файла инвентарных иконок

bread = bread.dds

medkit = medkit.dds

...

[npc_icons] ; секция файла простых НПС

sidor = sidor.dds

barmen = barmen.dds

...

[npc_unique] ; секция файла уникальных НПС

ui_npc_u_stalker_neytral_rukzak_4 = stalker_neytral_rukzak.dds

...

 

в ltx-конфиги всех предметов - координаты в сетке 50х50 в файле "textures\ui_icon_equipment.dds" и в xml-конфиги графических файлов (пиксельные координаты) "config\ui\ui_icons_npc.xml", "config\ui\ui_npc_monster.xml" и "config\ui\ui_npc_unique.xml". Это то, что я знаю. Есть ещё файлы иконок: "config\ui\ui_iconstotal.xml", "config\ui\ui_mp_icon_rank.xml" и "config\ui\ui_icons_map.xml"; но с ними я не знаком, и возможно есть ещё файлы про которые я не знаю.

 

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

всё легко

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

KD87

Если возможно, то модмейкер записывает в кастомдату:

custom_data = <<END
; ...
[fix_index];< метка
my_name_1 = id; < эксклюзивное имя и текуший индекс секции объекта
END

Т.е. при упаковке 'id' - заменяется на текущий индекс секции (дублирует его)

Т.о. можно даже из скрипта прочитать нужную секцию при наличии объекта в игре!

Тогда список таких секций не нужен (все в самом алл.спавне)

Если будет генериться ltx-конфиг, то по сути лог не нужен. Если не, тот логвполне приемлем и годен аналогично 'sections.ini', т.е. типа 'sections_fix.ini' с 'my_name_N = id' в строках

 

Если невозможно в кастом дату писать для метки получаемый индекс, тогда генерируемого ltx-конфига ИМХО достаточно, т.е. список не нужен.

И сам модмейкер пишет типа:

custom_data = <<END
; ...
fix_index = my_name_1;< параметр и эксклюзивное имя
END

 

Если будет генериться ltx-конфиг, то по сути лог не нужен. Если нет, то лог вполне приемлем и годен аналогично 'sections.ini', т.е. типа 'sections_fix.ini' с 'my_name_N = id' в строках или: [id] = my_name_N/

 

Мне неизвестны скрипты, которые могут споткнутся/обвалиться на таких записях в кастом-датах. Даже старенький АМК-рас(у)паковщик кастомдат с такими записями будет работать корректно и не обрезать их. Для парсеров логики и иже - они будут прозрачны.

Кстати, первый вариант - аналог (по форме) поменки статуса аномалии, сделанное при спавне динамических аномалий (АМК), т.е. проверено временем.

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

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

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

Новая версия: http://narod.ru/disk/25517088001/Universal%20ACDC.7z.html.

Что умеет нового:

1) появился ключ -idx <путь до ltx конфига>, который формирует ltx конфиг с подобными секциями:

[lights_camp_fire_omni_r1_r2_0010]
id = 4197
story_id = -1

В конфиг добавляются секции для всех объектов, он предназначен для получения id и story_id объекта по его имени из игры. Делается примерно так:

function id_by_name(name)
    local idx_file = ini_file("path_to_idx.ltx")
    if idx_file:line_exist(name, 'id') then
        return idx_file:r_s32(name, 'id')
    end
    return nil
end

2) в распакованном спавне для любой секции можно задать метку 'index' ([1276]:index). При запаковке в кастом_дату такой секции добавится следующее:

[fix_index]
name = id; вместо name будет имя объекта, вместо id - его текущей индекс в спавне.

С этим также можно работать из игры. При распаковке такого спавна, метка восстановится, из кастом даты запись удалится.

Если пользоваться метками и не использовать ключ -idx при этом, генерится лог-файл, в который записывается тоже самое, что и в кастом_дату 'помеченных' секций. Сделано просто для удобства. С ключом -idx такой лог не генерируется.

 

3) Теперь скрипт, наткнувшись на синтаксическую ошибку, вылетает с более понятными логами в следующих случаях:

-дулирование секций

-отсутствие параметров в секциях, для которых нет дефолтного значения.

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

[X]

Посоветуйте версию Perl-а и добавьте в шапку ссылку где его берёте.

А то я на офф.сайт пошёл - с меня там данные какие-то на английском требуют... так просто скачать не дают.

 

http://www.activestate.com/activeperl/downloads. KD87

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

всё легко

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

KD87

Проверена последняя версия из #35, в целом все работает. Спасибо! :rolleyes:

Помарка: При задании ключа '-idx' и (пути) имени файла для ltx-конфига - расширение 'itx' не присваивается файлу (файлу дается только имя).

 

Пожелалка: При не задании ключа '-idx' - в лог 'new_idx' выводить не только имя секции и индекс, но и хотя бы story_id.

Учитывая, что имя секции - может быть не эксклюзивно для разных локаций, указание доп.признаков позволит идентифицировать объект из 'кучи' аналогичных.

 

P.S.

Задав в батнике такое: perl universal_acdc.pl -c ../src -o ../all.spawn -idx fix_idx

Получаю файл 'fix_idx' в корне утилиты. Если с путем ( -idx ../fix_idx ) - то по указанному пути получаю такой же файл без расширения ltx

Т.к. в описании говорится о создании именно ltx-конфига ("скрипт сформирует ltx конфиг") - то пользователь подразумевает о необходимости задания только [пути]имени.

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

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

Ссылка на комментарий
Artos, эм, в смысле? С ключом надо вводить путь и имя файла вместе с расширением, например, ../idx.ltx. Ты про то, что в ридми про расширение не написано?
Ссылка на комментарий

Всем добрый вечер! Может я не по теме обращаюсь, но все же спрошу.У меня стоит activeperl 5.10.0.1004 скачал acdc shoc с готовым компилером и декомпилером, как по редми все копирую в перл запускаю декомпилер, результатов ноль

распакованного ал спавн нет. Что делать и как быть? Плиз подскажите. Вдруг,что не ругайте я только учусь. За раннее спасибо.

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

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

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

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

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

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

Войти

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

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

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

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