Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

Иконки


Guest koster
 Share

Recommended Posts

Guest gsomgsom

Иконки хранятся в файле Interface.pak.

После распаковки, иконки вещей находятся тут: \Interface\Icons\Equipment\

Разберём на примере кольца:

Interface\Icons\Equipment\Jewelry\TheRing.(UITexture).bin

782c3a37198d.png

Распакуем ZLib, и получим файл, размером 2056 байт.

По сути, файл является DDS файлом с отрезанным заголовком.

Содержимое размером 2048 байт и заголовок 128 байт.

8 байт уже есть.

Вот, недостающая часть, 120 байт:

Code:
0000000000: 44 44 53 20 7C 00 00 00 │ 07 10 08 00 40 00 00 00  DDS |   •►◘ @

0000000010: 40 00 00 00 00 08 00 00 │ 00 00 00 00 00 00 00 00  @    ◘

0000000020: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00

0000000030: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00

0000000040: 00 00 00 00 00 00 00 00 │ 00 00 00 00 20 00 00 00

0000000050: 04 00 00 00 44 58 54 31 │ 00 00 00 00 00 00 00 00  ♦   DXT1

0000000060: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 10 00 00               ►

0000000070: 00 00 00 00 00 00 00 00 │

Склеиваем заголовок и данные, и получаем DDS файл, который легко открывается и конвертируется.

Например, DDS-tools от NVidia (во вложении)

Link to comment
Share on other sites

питон

Code:
import zlib, sys

name = sys.argv [1] 

file = open(name, 'rb').read()

decompressed = zlib.decompress(file)

dds_header = open('D:/allods_pak/header.bin','rb').read()

n_file = open('D:/allods_pak/texture.bin', 'wb') 

n_file.write(dds_header+decompressed)

n_file.close())

огромное спасибо!

PS а как сделать фон прозрачным, или его нельзя сделать прозрачным?

PPS некоторые файлы почемуто распаковываются такими fb675da7446f.jpg, я как понял это от неправильного размера картинки указаного в ддс хедере, где взять размер иконки?

Link to comment
Share on other sites

Guest gsomgsom

Заголовок сделан для метода сжатия DXT1.

Файлы могут быть сжаты с помощью DXT3, DXT5.

Отличить DXT1 от DXT3 и DXT5 можно по размеру, а DXT3 от DXT5 только по результату.

Прозрачный (альфа) канал уже зашит в эти текстуры. Поставь плагин для Photoshop-а, с помощью него можно конвертить DDS в PNG, например.

В игре, размеры текстур и тип сжатия прописаны в файле pack.bin. Но, к сожалению, пока мы его не расшифровали полностью.

Если есть руки и желание, то помогай)

Link to comment
Share on other sites

Guest DmitriyMX

использовал сокращенную версию вашего скрипта

Code:
import zlib, sys

file = open('D:/Games/Allods Online/data/Packs/Interface.pak', 'rb').read()

decompressed = zlib.decompress(file)

выдал такое сообщение:

Code:
Traceback (most recent call last):

  File "C:\Python26\test.py", line 3, in <module>

    decompressed = zlib.decompress(file)

zlib.error: Error -3 while decompressing data: incorrect header check

С питоном я мало знаком, сразу говорю. Мне просто нужен инструмент для декомпрессии .pak файлов, чтобы можно было с текстурами разбираться

Link to comment
Share on other sites

Guest DmitriyMX

то что эти ЗИП я знаю. Но тогда скажите как мне правильно распаковать эти зипы, чтобы можно было получить нормальные dds без заголовков?

Link to comment
Share on other sites

Guest Valltron

Вот софтинка если кому нужна - указываем папку с *.bin файлами иконок (64х64) и на выходе получаем готовые иконки. определяется 99.9% нормально.

если положить в папку nvdecompress.exe то он его подцепит и получите еще и переконвертированный вариант

Link to comment
Share on other sites

Valltron, первый баг в твоей программе: она пытается сконвертировать ВСЕ файлы в указанной директории. Как только ей попался .RAR архив, она и его попробовала сконвертировать, и, естественно, вылетела.

В общем, перед открытием файла, она должна проверять, есть ли в нём сигнатура ZLib (hex: "78 9С").

P.S. Что-то не понял, из-за каких-то багов форума, не появляется моё сообщение. Придётся дописать здесь:

Ура, товарищи!

Формат текстур ПОЛНОСТЬЮ разобран.

Креатив скоро будет:

http://ui9.ru/forum/develop/topic/54

Link to comment
Share on other sites

Guest Valltron

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

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

а найти способов как программу уронить всегда можно найти много :)

Link to comment
Share on other sites

  • 1 year later...
Guest backdrift

Есть ли где-нибудь база соответствий itemId и иконок из Interface.pak/Interface/Icons/Equipment? Идентификаторы целочисленные, ясно-понятно. Но иконки хранятся с именами типа "Interface.pak/Interface/Icons/Equipment/Leather/BeltLeatherCrude.(UITexture).bin"

Link to comment
Share on other sites

Guest backdrift

Потому что это принцип любой базы данных. Грубо говоря, есть таблица с предметами, где у каждого свой ID и все остальные атрибуты (имя, тип, уровень и т.п.). Есть таблица с иконками, где у каждой свой ID и остальные атрибуты (имя файла в паке, например). И есть таблица связей между ними. Либо в таблице предметов явно указано в поле "ID иконки" идентификатор этой самой иконки.

И вот в API есть такая функция GetItemInfo(), которая помимо прочего возвращает свойство icon - это и есть ID иконки, если я правильно понял мануал. В общем это подтверждает мою догадку, но свойство это доступно только в UI и я не очень понимаю, что это значит. Но например в лог эту информацию не выведешь.

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

Link to comment
Share on other sites

Guest Valltron

GetItemInfo выдает "ссылку на иконку" в формате USERDATA. то есть это иконка, которая хранится в самом клиенте, и которую через API ты можешь использовать в UI... короче чтобы вывести на экран. визуализировать...

в общем как то так. никаких ID у иконки нет. так вот оно реализовано...

Link to comment
Share on other sites

Guest backdrift

Тогда подходит последний абзац из моего сообщения. Каким-то же образом налажена связь между "Бушлат краеведа ИВО" и FurryUndershirt.(UITexture).bin? Совпадения случайны, просто для примера привёл два первых попавшихся названия.

Link to comment
Share on other sites

Guest gsomgsom

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

Нет никакого item id, айдишники возвращаются для сеансовых экземпляров предметов в клиенте.

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

Quote:
Каким-то же образом налажена связь между "Бушлат краеведа ИВО" и FurryUndershirt.(UITexture).bin?

Соответствие скорее всего описано в файле pack.bin, но к сожалению этот файл пока не поддался распаковке.

В этом файле запакованы некоторые таблицы игровой механики, и также, например, xdb файлы, отвечающие за отображение текстур (ширина, высота, некоторые атрибуты).

Если сможешь расколупать файл, будешь первым, кто сможет описать соответствия предметов и их иконок.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use