PDA

Просмотр полной версии : Картинки из L2 (Icon.utx)


Yegor
04.08.2011, 00:16
Добрый вечер. Для чтения маленьких картинок из файла клиента L2 "Icon.utx" использую компонент TUt_packages, но он не поддерживает новые версии этого файла и соответвенно нет очень многих новых значков.
Подскажите есть ли какой то компонент для извлечения картинок из клиента хотя бы Эпилога?

Yegor
05.08.2011, 12:49
Удалось открыть item.utx из эпилога, предварительно обработав файл утилитой L2UTX_Fixer_CT2.3. Все нужные иконки там практически есть.

Теперь другая задача. Нужны иконки (хотя бы просто в виде графических файлов) кубиков для заточек. NC soft почему то решил запихнуть их текстуры в большой файл branchsys2.utx. Но при открытии его редактором просмотра ресурсов utpt20beta5 нужные текстуры в списке есть но отрыть их не удается :(.

xkor
05.08.2011, 15:27
Yegor, через utpt20beta5 открой item.utx от нужных тебе хроник и от хроник нормально открывающихся, далее открой из обоих файлов одну и ту же текстуру в хекс виде и увидишь что в новых версиях просто данные изображения сдвинуты на несколько десятков байт, далее в TUt_packages находишь (я искал через пошаговую отладку при попытке получения данных текстуры) место где считываются данные картинки и добавляешь там соответствующий офсет.
Я своего бота так учил новые item.utx открывать, но это было давно, возможно в последних item.utx что то ещё изменилось, хотя сомневаюсь что это так.

Добавлено через 12 минут
у меня похоже на строке 6445 исправлено с такого:
else if FOwner.GameHint=UTPGH_Lineage2 then
FOwner.read_dword(buffer) // TODO : unknown dword in Lineage 2
else if FOwner.GameHint=UTPGH_Unreal2 then

на такое: else if FOwner.GameHint=UTPGH_Lineage2 then begin
buffer.Seek(37,soFromCurrent); // null array
FOwner.read_sizedascii(buffer); // texture name
FOwner.read_byte(buffer);
FOwner.read_sizedascii(buffer);
FOwner.read_dword(buffer) // TODO : unknown dword in Lineage 2
end else if FOwner.GameHint=UTPGH_Unreal2 then
возможно такая правка и с новыми будет пахать, не проверял

Yegor
14.10.2011, 18:37
возможно такая правка и с новыми будет пахать, не проверял

Сработало даже для файла icon.utx из ГОДа. Мегаспасибо.

Добавлено через 23 часа 50 минут
Вот только почему то некоторые даже старые иконки не соответствуют названию текстуры :(. При этом название текстуры проверял в файле etcitemgrp.dat из клиента GOD.

Запрос l2IconsData.ExportIndex['scroll_of_enchant_weapon_i06', 'Texture']
возвращает индекс 6512, но по нему читается вообще левая картинка.

Перебрав в цикле ближайшие по списку иконки обнаружил что искомая находится по индексу 6556.

Почему может не совпадать список экспортируемых названий текстур с их изображениями?

xkor
14.10.2011, 19:52
Yegor, а вот самому интересно...

Hint
14.10.2011, 19:54
Удобная и быстрая консольная утилита:
http://www.gildor.org/en/projects/umodel
UTX_Fixer не нужен.

Yegor
14.10.2011, 20:04
Кстати уже успел еще раз прогнать фиксером. Теперь изображение совпадает, только поменялись префиксы названий текстур. Так что немного переделал функцию поиска индекса текступры по имени и все работает.

SeregaZ
14.10.2011, 22:22
и мне и мне сделайте. хочу мини-жава-сервер. состоящий из одной локации, и с возможностью программирования поведения нпсей.

supernewbie
15.10.2011, 10:43
SeregaZ, да нах жаву, на делфи серв запили!

SeregaZ
15.10.2011, 15:56
как представлю объем работы - сразу плохо становится.

supernewbie
20.10.2011, 03:28
да че там не там уж много :D

Johnson
09.12.2011, 01:26
>> Вот только почему то некоторые даже старые иконки не соответствуют названию текстуры .

С проблемой не разобрались?
Та же беда, иконки после (примерно) середины списка начинают отставать/обгонять имена. Примерно там же замечена абракадабра в названиях объектов...

После фиксера имена читаются, но намного меньше (по количеству объектов), чем в оригинальном файле, да и иконки не извлекаются.

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