Перейти к содержимому
Zone of Games Forum

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

Плагин для Total Commander для работы с архивами движка Unity.

[En] This plugin for Total Commander (ghisler.com) can pack and unpack files stored in Unity archives.

Это альтернатива для UnityAssetsExplorer от Haoose.

[En] This is alternative for standalone UnityAssetsExplorer from Haoose

Текущая версия / Current version: 0.7.5

Возможности / Capabilities:

Открытие архивов от Unity / Open archives +

Распакова файлов из архива / Unpack archives +

Запаковка файлов в архив / Pack archives +

Запаковка в архив файлов отличного размера, от оригинального / Support pack of different size +

Поддержка архивов > 2Gb / Support size of arhives > 2 Gb +

Конвертация форматов / Supported formats +- [assets, tex, uogm] (Неполная поддержка / Partial support)

Этот плагин находится в стадии экспериментальной разработки и теоретически способен повредить файлы архивов Unity, открываемые с помощью него,

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

И естественно, я, как автор, не несу ответственности за действия вызванные этим плагином.

License: Creative Commons Attribution 4.0 International Public License

https://www.dropbox.com/s/6955280opkej8om/unity_wcx.zip

В Total Commander войдите в архив с предложенным плагином и выполните вопросы программы установки плагинов Total Commander.

[En] Run Total commander and press Enter at archive unity_wcx.zip for install. Press Ok when he ask you. Now you can view, extract, pack assets like other archives in Total Commander.

Мы можете использовать Ctrl + PgDown для входа в архивы tex, uogm.

[En] You can use Ctrl + PgDown for exploring tex, uogm.

Изменено пользователем RedSkotina
  • Лайк (+1) 1

Поделиться сообщением


Ссылка на сообщение
Пока обнаружил пару ошибок в текстурах ARGB32 (hx5), вроде это tga, a у вас dds, ну это не суть важно, под dds всё заточено. В общем, при конвертации из tex, переворачиваться должны все 4 байтовые значения картинки, а в плагине старший перемещается на младший и 3 байта влево. От этого каналы неправильно идут. В проге от Haoose это уже поправлено. А обратная конвертация у этого типа совсем не работает даже равный размер, вставляется в файл начало самого ассета. При замене этих tex всё в порядке.

Если возможно можете описать структуру шапки tex файлов. Знаю только: длинна, ширина, размер текстуры, формат.

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

я не пойму что за hx5, может dxt5 ? хотя я с ним вообще порядок байтов не меняю.

из описание формата tex в внутреннем языке

# imagetype Pac = record {  global_header: GlobalHeader;  image_pixels: ImagePixels(global_header.bytes);  } &let{    extension: stdstring = ext.getExtension();    fullname: stdstring =  ext.fullname( ext.tex_filename, extension);} &byteorder=littleendian ;# header of main storagetype GlobalHeader = record {  width: uint32;  height: uint32;  image_size: uint32;  compression_type: uint32;  mipmap: uint8;  readable: uint8;  read_allow: uint8;  dummy: uint8;  image_count: uint32;  texture_dimension: uint32;  filter_mode: uint32; #0:point 1:bilinear 2:trilinear  anisotropy: uint32; # 0..9  mip_bias:uint32;  wrap_mode:uint32; #0:repeat 1:clamp  lightmap_format:uint32; # unity version > 3 , fileGen >= 8  colorspace_or_not: case prefetch < 2 of {    true  -> colorspace:uint32; #unity version > 3.5 #fileGen == 9    false -> none:empty;  } &requires(prefetch);  bytes: uint32;} &let {    file_size: uint32 = bytes + 14 * 4;    prefetch: uint32 withinput $context.flow.pacdata(sourcedata, offsetof(lightmap_format)+4, 4 );    # change to begin_of_data + offsetof} &exportsourcedata;#array of pixels    type ImagePixels(bytes: uint32) = record {pixels: bytestring &transient &length=bytes;} enum TEX_FORMAT{    TEX_FORMAT_A8       = 1,    TEX_FORMAT_ABGR4444 = 2,    TEX_FORMAT_BGR24    = 3,    TEX_FORMAT_ABGR32   = 4,    TEX_FORMAT_RGBA32   = 5,    TEX_FORMAT_BGR565   = 7,    TEX_FORMAT_DXT1     = 10,    TEX_FORMAT_DXT5     = 12,    TEX_FORMAT_BGRA4bpp = 13,    TEX_FORMAT_PVRTC_RGB2       = 30, # invalid byteorder    TEX_FORMAT_PVRTC_RGBA2      = 31,    TEX_FORMAT_PVRTC_RGB4       = 32,    TEX_FORMAT_PVRTC_RGBA4      = 33,    TEX_FORMAT_ETC_RGB4         = 34,    TEX_FORMAT_ATC_RGB4         = 35,    TEX_FORMAT_ATC_RGBA8        = 36};

 

record { } описывает фактические поля

& let {} виртуальные поля

я в теме выкладывал исходники, кстати.

Поделиться сообщением


Ссылка на сообщение

Да мене это уже не нужно, конвертер уже написал. Вот здесь хорошо видно. https://yadi.sk/d/OA3eZi-hezwdQ

Вот этот TEX_FORMAT_RGBA32 = 5, да ддс.

За код спасибо.

Поделиться сообщением


Ссылка на сообщение
Пока обнаружил пару ошибок в текстурах ARGB32 (hx5), вроде это tga, a у вас dds, ну это не суть важно, под dds всё заточено. В общем, при конвертации из tex, переворачиваться должны все 4 байтовые значения картинки, а в плагине старший перемещается на младший и 3 байта влево. От этого каналы неправильно идут. В проге от Haoose это уже поправлено. А обратная конвертация у этого типа совсем не работает даже равный размер, вставляется в файл начало самого ассета. При замене этих tex всё в порядке.

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

По распаковке подвела документация по tex, название RGBA32 не соответсвовало действительности -

BGRA32 более соответсвует действительности.

Так что строка

TEX_FORMAT_RGBA32   = 5,

имеет неправильное название

По запаковке чисто моя ошибка.

History:

*исправлен баг с распаковкой tex типа 5 в dds

*исправлен баг с запаковкой dds в tex

Внимание: для запаковки принимаются только dds файлы формата A4R4G4B4, A8R8G8B8, DXT5

поддержка других не выполнена.

Внимание: перешел на новый компилятор gcc-tdm 2, так что вполне вероятны какие-нибудь новые проблемы.

0.7.3

https://www.dropbox.com/s/zgu6h4hjup7o2ld/u..._0.7.3.zip?dl=0

0.7.3 debug

https://www.dropbox.com/s/3sn9q684utfcb8q/u....7.3-d.zip?dl=0

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

Поделиться сообщением


Ссылка на сообщение

* ресурсы с типом 152 переименованы из ogm в uogm , для избежания путаницы.

так как представляют из себя контейнер для хранения ogm файлов

* добавлена начальная поддержка uogm

* исправлен баг с запаковкой tex файлов. не тестировалось тщательно.

* исправлен баг с сообщениями access violation во время открытия ассетов.

0.7.4 release

https://www.dropbox.com/s/enfmu4ons3mbyrc/u..._0.7.4.zip?dl=0

0.7.4 debug

https://www.dropbox.com/s/pvpj1xcae30kfw0/u....7.4-d.zip?dl=0

Поделиться сообщением


Ссылка на сообщение
* ресурсы с типом 152 переименованы из ogm в uogm , для избежания путаницы.

так как представляют из себя контейнер для хранения ogm файлов[/url]

Большое спасибо!

Поделиться сообщением


Ссылка на сообщение

* исправлена ошибка с обработкой последнего файла в архиве

* исправлена ошибка с извлечением ogm файлов в расширенном режиме

0.7.5 release

https://www.dropbox.com/s/zm14x48kxnv2cju/u..._0.7.5.zip?dl=0

0.7.5 debug

https://www.dropbox.com/s/8qyf1r5ugycktvx/u....7.5-d.zip?dl=0

Поделиться сообщением


Ссылка на сообщение
* исправлена ошибка с обработкой последнего файла в архиве

* исправлена ошибка с извлечением ogm файлов в расширенном режиме

0.7.5 release

https://www.dropbox.com/s/zm14x48kxnv2cju/u..._0.7.5.zip?dl=0

0.7.5 debug

https://www.dropbox.com/s/8qyf1r5ugycktvx/u....7.5-d.zip?dl=0

C ogm теперь проблем нет. Спасибо огромное!

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

 

RedSkotina текстуры и шрифты я всё равно через скрипт вытаскиваю и пакую на новых архивах. Меня сильно интересует запаковка бинарного текста как в предыдущих архивах, так как BMS реимпорт для этого не годится.

Поделиться сообщением


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

Получается что с Unity 5? очень ждем плагинчик. Предыдущие плагины здорово помогали в переводе, но сейчас часть игр идет на 5 версии движка.

Поделиться сообщением


Ссылка на сообщение

trpvla

Пока можешь поюзать софт в подписи ↓

Поделиться сообщением


Ссылка на сообщение
How can i edit the extracted font ? I tried import a new ttf font and it was crash.

Размер идентичен?

Новый .ttf должен равняться старому по размеру.

Если старый 1424009 байт, то новый обязан быть тоже 1424009 байт.

The file size is equal?

New .ttf must be = original .ttf.

If original size is 1424009 bytes, then new size must be 1424009 bytes too.

Или же попробуйте Unity Assets Explorer от Haoose. (http://quickbms.aluigi.org[/post]

math GUESS_NAMES = 1 # set to 0 to avoid possible rare problems

# or if you are sure that there are no names

quickbmsver "0.6.1d"

# from my tests:

# - all the mainData are nameless

# - only some *.assets are nameless

# I have not found a point where it's written if a resource is nameless or not

get FULL_NAME filename

if FULL_NAME == "mainData"

math GUESS_NAMES = 0

endif

get EXT extension

if EXT == "unity3d"

print "Error: you must use the unity3d_webplayer.bms script for this archive"

cleanexit

elif EXT == "split0"

callfunction combine_splits 1

open FDSE BNAME

endif

endian big

get HEADER_SIZE long

get FULL_SIZE long

get VERSION long

get BASE_OFF long

math ZERO_GUESS = 0

if VERSION <= 8

xmath OFFSET "FULL_SIZE - HEADER_SIZE"

goto OFFSET

get DUMMY byte

else

# version 9 tested

get ZERO_GUESS long

endif

endian little

endian guess ZERO_GUESS

if VERSION >= 8

get VERSION_STRING string

print "%VERSION_STRING%"

get DUMMY long

endif

if VERSION >= 0xe

get ZERO byte

get BASES long

for i = 0 < BASES

get DUMMY signed_long

if DUMMY < 0

getdstring DUMMY 0x20

else

getdstring DUMMY 0x10

endif

next i

else

get BASES long

for BASE = 0 < BASES

get DUMMY long

math SUB_ELEMENTS = 1

callfunction PARSE_TYPES

next BASE

endif

math ADDITIONAL_FIELD = 0

if VERSION >= 7

if VERSION < 0xe

get ADDITIONAL_FIELD long

endif

endif

get FILES long

if VERSION >= 0xe

padding 4

endif

for i = 0 < FILES

if VERSION >= 0xe

get INDEX long

get ZERO long

get OFFSET long

get SIZE long

get TYPE long

get XTYPE short # same as TYPE

get DUMMY short # -1

if VERSION >= 0xf

get ZERO long

endif

else

get INDEX long

if ADDITIONAL_FIELD != 0

get ZERO long

endif

get OFFSET long

get SIZE long

get TYPE long

get XTYPE long # same as TYPE

endif

savepos TMP_OFF

xmath OFFSET_TMP "OFFSET + BASE_OFF"

goto OFFSET_TMP

math GET_FILENAMES = 0

if GUESS_NAMES != 0

get NAMESZ long

if NAMESZ u< 128

getdstring NAME NAMESZ

strlen TMP NAME

if TMP == NAMESZ

math GET_FILENAMES = 1

endif

endif

goto OFFSET_TMP

endif

set NAME string ""

if GET_FILENAMES != 0

get NAMESZ long

getdstring NAME NAMESZ

padding 4

endif

savepos OFFSET

goto TMP_OFF

xmath TMP "SIZE - (OFFSET - OFFSET_TMP)"

if TMP < 0

math OFFSET = OFFSET_TMP

else

math SIZE = TMP

endif

get BNAME basename

getvarchr TMP NAME 0

if TMP <= 0x20

string NAME p= "%s_%d" BNAME i

endif

callfunction disttype 1

string FNAME p= "TYPE_%d/%s%s" TYPE NAME EXT

log FNAME OFFSET SIZE

next i

startfunction PARSE_TYPES

math ELEMENTS = SUB_ELEMENTS

for ELEMENT = 0 < ELEMENTS

get TYPE string

get NAME string

get SIZE long

get INDEX long

get ZERO long

get DUMMY long

get DUMMY long

get SUB_ELEMENTS long

if SUB_ELEMENTS != 0

callfunction PARSE_TYPES

endif

next ELEMENT

endfunction

startfunction disttype

savepos disttype_offset # backup offset

goto OFFSET # maybe useful

string EXT p= ".%d" TYPE

if TYPE == 21

set EXT ".mat"

elif TYPE == 28

set EXT ".tex"

elif TYPE == 48

set EXT ".shader"

elif TYPE == 49

get DUMMY long

getDstring TEST 4

if TEST == "<?xm"

math OFFSET += 4

math SIZE -= 4

set EXT ".xml"

endif

elif TYPE == 74

set EXT ".ani"

elif TYPE == 83

set EXT ".snd"

math OFFSET += 0x14

math SIZE -= 0x14

goto OFFSET

getDstring TEMP 4

if TEMP == "OggS"

set EXT ".ogg"

elif TEMP == "RIFF"

set EXT ".wav"

elif TEMP == "FORM"

set EXT ".aif"

else

goto OFFSET

get TEMP byte

if TEMP == 0xff

set EXT ".mp3"

elif TEMP == 0x49

goto OFFSET

getDstring TEMP 3

if TEMP == "ID3"

set EXT ".mp3"

else

math OFFSET -= 0x14

math SIZE += 0x14

endif

else # roll back changes

math OFFSET -= 0x14

math SIZE += 0x14

endif

endif

elif TYPE == 115

set EXT ".script"

elif TYPE == 128

set EXT ".ttf"

elif TYPE == 150

set EXT ".bin"

elif TYPE == 152

math OFFSET += 0x10

math SIZE -= 0x10

set EXT ".ogm"

elif TYPE == 156

set EXT ".ter"

elif TYPE == 184

set EXT ".sbam"

elif TYPE == 194

set EXT ".tes"

endif

goto disttype_offset

endfunction

startfunction combine_splits

get BNAME basename

append

for i = 0

string ONAME p= "%s.split%d" BNAME i

open FDSE ONAME 0 EXIST

if EXIST == 0

break

endif

get SIZE asize

log MEMORY_FILE 0 SIZE

next i

append

get SIZE asize MEMORY_FILE

log BNAME 0 SIZE MEMORY_FILE

endfunction

После этого создайте 2 .bat файла. И добавьте туда содержимое из под спойлеров.

Create 2 .bat files.

 

Spoiler

Unpack.bat

@echo off

color a

md Unpack

for %%a in (*.assets) do quickbms.exe -o assets_files.bms "%%a" Unpack\

pause

Pack.bat

@echo off

color a

for %%a in (*.assets) DO quickbms.exe -w -r assets_files.bms "%%a" Unpack\

pause

Поместите .assets файл в директорию с QuickBms (с двумя .bat файлами и файлом assets_files.bms)

Откройте unpack.bat

После этого достаньте шрифт из unpack/type_128 и прошейте в него кириллицу.

Put .assets file into QuickBMS dir (with 2 .bat and assets_files.bms).

Then open unpack.bat.

After that, get the font from unpack/type_128 and make a new font.

Важно!

Новый .ttf должен равняться старому по размеру.

Если старый 1424009 байт, то новый обязан быть тоже 1424009 байт.

Для BMS это особенно важно.

Important!

New .ttf must be = original .ttf.

If original size is 1424009 bytes, then new size must be 1424009 bytes too.

For BMS this is especially critical.

После этого откройте pack.bat и ваш .assets файл готов.

After that, open pack.bat and .assets file with new font is ready.

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

Поделиться сообщением


Ссылка на сообщение
The file size is equal?

New .ttf must be = original .ttf.

If original size is 1424009 bytes, then new size must be 1424009 bytes too.

Also try to use Unity Assets Explorer by Haoose. (https://www.dropbox.com/s/2qorsfd50ixvn6o/UnityAssetsExplorer.exe)

OR

QuickBMS by Aluigi.

Download Quick BMS and create file assets_files.bms

Then, past the script in this file.

 

Spoiler

Create 2 .bat files.

 

Spoiler

Unpack.bat

Pack.bat

Put .assets file into QuickBMS dir (with 2 .bat and assets_files.bms).

Then open unpack.bat.

After that, get the font from unpack/type_128 and make a new font.

Important!

For BMS this is especially critical.

After that, open pack.bat and .assets file with new font is ready.

i knew, but some games using very small font (~50KB) and i can't mod it smaller than orginal. Do you have other ways?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

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

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

Зарегистрируйтесь для получения аккаунта. Это просто!

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

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас популярно

  • Продвигаемые темы

  • Последние сообщения

    • через файл,но тени не трогал    
    • Изиви но уже полный зал, билеты раскуплены, а ты слить собрался?,) нет друже мы так не договаривались, с тебя как минимум сезон с сексом, интригами, расследованием и желательно с чьим нибудь баном в финале 
    • Спасибо. Не, продолжения не будет, тема закрыта.
    • UPD 31.10.26: 
      - Исправлена фамилия актёра в титрах
      - Исправлен тайминг субтитра в конце игры
    • так есть же "Untitled" Project X я когда то ее проверял там можно поставить японскую озвучку при том что стоит русский текст

      и не надо менять версию игры

      щас проверю и отпишу как он работает на последней стим версии 

      Проверил все работает и русификаторы и японская озвучка все вместе и ничего не надо откатывать все идеально работает
    • Прикольно, ты как то в ручную убрал весь RT хлам? потому как у меня в 4к c ФСР производительность (1080р) отличие в фпс на ультрах от самых минимальных не такое и большое  я кстати уже нашел пистолет и дошел до маяка.) и еще мне кажется или игра прям очень мутная ,(  у меня такое же мутное дерьмо было в алан воук 2,)
    • МД как раз лучшие в этом плане, что Контрол прошел с ними, что Фантом играю
    • @mnogomernuy закидываешь на любой файлообменник(яндекс, гугл и т.д.) и отправляешь в лс ссылку Можешь просто и сюда выложить, кому нужно воспользуются.
    • Магазин Steambuy опубликовал еженедельный список скидок и предзаказов на ожидаемые игры. Aliens: Colonial Marines — 199 рублей [-93%] BioShock Infinite — 249 рублей [-85%] Buckshot Roulette — 69 рублей [-30%] Bully: Scholarship  — 269 рублей [-80%] Call of Duty: Black Ops — 399 рублей [-89%] The Casting of Frank Stone — 679 рублей [-81%] Darksiders Warmastered  — 49 рублей [-84%] Dead by Daylight — 559 рублей [-69%] Deep Rock Galactic — 369 рублей [-66%] The Evil Within 2 — 459 рублей [-87%] Farming Simulator 25 — 1149 рублей [-41%] The Forest — 119 рублей [-73%] Generation Zero — 349 рублей [-84%] Gothic 1 Remake — 1999 рублей [-26%] Green Hell — 135 рублей [-94%] The Gunk — 69 рублей [-85%] Heavy Rain — 149 рублей [-90%] Kingdom Come: Deliverance — 349 рублей [-87%] Metro: Last Light Redux — 149 рублей [-92%] Mortal Kombat 11 — 299 рублей [-93%] Mount & Blade II: Bannerlord — 1499 рублей [-46%] Murdered: Soul Suspect — 179 рублей [-87%] The Outlast Trials — 499 рублей [-62%] Phantom Blade Zero — 3999 рублей Pharaoh: A New Era — 199 рублей [-75%] Phasmophobia — 699 рублей [-18%] R.E.P.O. — 359 рублей [-15%] Raft — 639 рублей [-25%] RESIDENT EVIL 2 — 499 рублей [-88%] Resident Evil 4 — 599 рублей [-85%] The Sherlock Holmes Collection — 279 рублей [-92%] Sons Of The Forest — 389 рублей [-65%] Tiny Tina's Wonderlands — 249 рублей [-91%] Tribes of Midgard Deluxe  — 99 рублей [-87%] Vampyr — 299 рублей [-86%] The Walking Dead: Definitive — 229 рублей [-86%] Warhammer 40,000: Dawn of War III — 349 рублей [-81%] Wolfenstein II: The New Colossus — 349 рублей [-90%] WRC 9 FIA World Rally Championship — 79 рублей [-87%] Zombie Army Trilogy — 169 рублей [-92%] Лидеры продаж: ARC Raiders — 1799 рублей [-44%] Rise of the Tomb Raider — 179 рублей [-93%] Shadow of the Tomb Raider — 249 рублей [-93%] DOOM Eternal Microsoft Store — 49 рублей [-99%] Risk of Rain 2 — 349 рублей [-84%] Mafia II: Definitive  — 249 рублей [-91%] Phantom Blade Zero — 3999 рублей  Tomb Raider — 129 рублей [-90%] Call of Duty: Black Ops — 399 рублей [-89%] Metro Exodus Gold  — 349 рублей [-90%]
    • @Jimmi Hopkins  Спасибо большое за руссификатор!
       
  • Изменения статусов

    • edifiei

      «Как говорил мой дед — делай добро и пихай его в гнома»
      · 0 ответов
    • goosemose  »  Orionus

      Здраствуйте
      Хотел спросить за руссификатор для Dragon Quest 3, есть ли бесплатный для пк? Или только платный недавно купил ее в стиме, думал что на пк есть руссификатор, уже некоторое время ищу и нахожу либу пустые файлы либо платные, хотя по коментариям вроде видно что был на пк бесплатный перевод.
      Подскажите пожалуйста.
       
      · 0 ответов
    • axe66  »  SerGEAnt

      здравствуйте. можете добавить на сайт раздел для игры She’s Leaving и русификатор к нему? и как и куда вам скинуть фото и сам русификатор?
      [h2] Версия: 1.0.1 (от 22.05.2026)
      Совместимость: для сборки 20909321 [/h2]
       Информация:
      Машинный перевод моделью gemma2:9b-instruct с несколькими этапами автоматической перепроверки (модель "самопроверялась") и финальными ручными правками.
      Это не финальная версия — по мере нахождения ошибок перевода будут выходить обновления.
      Известные нюансы:
      * Возможны неточности и ошибки в переводе.
      * Некоторые элементы интерфейса остались без перевода.
       Установка:
      1. Запустить Russifier.exe
      2. Нажать "Выбрать папку"
      3. Выбрать папку с игрой и нажать ОК
      4. Нажать "Установить"
      5. Дождаться завершения установки и закрыть программу.
      После установки запустите игру и наслаждайтесь!
      Если заметили ошибки или некорректные формулировки — оставляйте комментарии, будем исправлять!
       
      Автор: Serjik Sokolov История изменений:   Версия 1.0.1 от 22.05.2026 - Установщик теперь автоматически определяет корневую папку игры, даже если случайно выбрана вложенная папка.   Версия 1.0.0 от 03.12.2025 - Релиз
      · 1 ответ
    • Perfect End Strange  »  SerGEAnt

      Привет, озвучку для Silent Hill 4: The Room выпустил энтузиаст под ником Perfect End Strange, а вы написали совсем другую студию, пожалуйста, исправьте эту оплошность
      · 0 ответов
  • Лучшие авторы


×