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

Распаковка файлов .PAC

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

Нужна помощь в извлечении текста из визуальной новеллы Kara no Shoujo – The Second Episode, сделана она в unity, и все скрипты запакованы в свой формат .pac, нашёл в интернете такой код

 

Spoiler
idstring "MGPK"get DUMMY longget FILES longfor i = 0 < FILES   get NAMESZ byte   getdstring NAME 0x1f   get OFFSET long   get SIZE long   get ZERO long   get ZERO long   log NAME OFFSET SIZEnext i

 

По нему распаковывается, но сами файлы повреждены. Может кто помочь?

файл, который надо распаковать: тык

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

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


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

 

Viload, сами данные пожаты или закриптованы, вообщем к гадалке

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


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

Скорее криптованы, ибо размеров несжатой инфы не указано.

Пиши название игры, может кто экзешник посмотрит.

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

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


Ссылка на сообщение
Нужна помощь в извлечении текста из визуальной новеллы, сделана она в unity, и все скрипты запакованы в свой формат .pac, нашёл в интернете такой код

 

Spoiler
idstring "MGPK"get DUMMY longget FILES longfor i = 0 < FILES   get NAMESZ byte   getdstring NAME 0x1f   get OFFSET long   get SIZE long   get ZERO long   get ZERO long   log NAME OFFSET SIZEnext i

 

По нему распаковывается, но сами файлы повреждены. Может кто помочь?

файл, который надо распаковать: тык[/post]

 

Не?

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


Ссылка на сообщение
Скорее криптованы, ибо размеров несжатой инфы не указано.

Пиши название игры, может кто экзешник посмотрит.

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

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


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

 

        if (encode)        {            GameAssetManager.KeyEncode(b);        }        if (compress)        {            return CLZF2.Decompress(b);        }        return b;

 



Spoiler

 

        public static void KeyEncode(byte[] b)        {            byte[] buffer = new byte[] { 0xa2, 0x65, 0xba, 0x1a, 0x2d, 0xc6, 0x7f, 0x93, 70, 0x15, 0x84, 0 };            for (int i = 0; i < b.Length; i++)            {                b[i] = (byte) (b[i] ^ buffer[i % AssetConfig.Key.Length]);                buffer[i % buffer.Length] = (byte) (buffer[i % buffer.Length] + 0x1b);            }        }

 



Класс для распаковки, если упаковано, тут

https://github.com/thatfool/SCAN/blob/master/CLZF2.cs

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


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

 

        if (encode)        {            GameAssetManager.KeyEncode(b);        }        if (compress)        {            return CLZF2.Decompress(b);        }        return b;

 

 

Spoiler

 

        public static void KeyEncode(byte[] b)        {            byte[] buffer = new byte[] { 0xa2, 0x65, 0xba, 0x1a, 0x2d, 0xc6, 0x7f, 0x93, 70, 0x15, 0x84, 0 };            for (int i = 0; i < b.Length; i++)            {                b[i] = (byte) (b[i] ^ buffer[i % AssetConfig.Key.Length]);                buffer[i % buffer.Length] = (byte) (buffer[i % buffer.Length] + 0x1b);            }        }

 

Класс для распаковки, если упаковано, тут

https://github.com/thatfool/SCAN/blob/master/CLZF2.cs[/post]

Что-то я не понял, что с этим делать...

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


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

Здравствуйте! Решил не дублировать тему, поскольку у меня возник схожий вопрос.

Заинтересовала музыка (BGM) из игры, но, к сожалению, файл запакован в уже упомянутый формат .pac

Подскажите, пожалуйста, каким способом можно его открыть? К сожалению, не разбираюсь в теме вскрытия игровых ресурсов, но, немного ознакомившись с форматом, подозреваю, что у каждой отдельной игры способ упаковки файлов в .pac, и, соответственно, распаковки, различается.

Интересующий файл

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


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

Вообщем решил недавно взяться за распаковку этой игры...

Задекомпилил Assembly-CSharp.dll и нашел следующий код:

 

Spoiler

 

private string name;        private string path;        private readonly Dictionary<string, PacEntity> EntityList = new Dictionary<string, PacEntity>();        private List<string> fileList = new List<string>();        private FileStream stream;        private BinaryReader reader;        public void Create(string pack)        {            this.name = pack;            this.path = Path.Combine("GameData", pack + ".pac");            try            {                this.stream = new FileStream(this.path, FileMode.Open, FileAccess.Read, FileShare.Read);                this.reader = new BinaryReader(this.stream);                string a = new string(this.reader.ReadChars(4));                if (a != "MGPK")                {                    throw new FileLoadException("File is not a valid pac file.");                }                int num = this.reader.ReadInt32();                if (num != 1)                {                    throw new FileLoadException("Cannot read from pac archive! Incorrect archive version.");                }                int num2 = this.reader.ReadInt32();                for (int i = 0; i < num2; i++)                {                    this.stream.Seek((long)(12 + 48 * i), SeekOrigin.Begin);                    string text = this.reader.ReadString();                    this.stream.Seek((long)(12 + 48 * i + 32), SeekOrigin.Begin);                    int offset = this.reader.ReadInt32();                    int size = this.reader.ReadInt32();                    PacEntity value = new PacEntity(text.ToLower(), offset, size);                    this.EntityList.Add(text.ToLower(), value);                    this.fileList.Add(text.ToLower());                }            }            catch (Exception arg)            {                Debug.LogError(string.Format("Failed to open PacArchive {0}!\nException: {1}", this.path, arg));            }        }        public byte[] GetPacFile(string filename, bool encode, bool compress)        {            PacEntity pacEntity;            this.EntityList.TryGetValue(filename.ToLower(), out pacEntity);            if (pacEntity == null)            {                Debug.LogError("Could not find archive " + filename + " in pac file " + this.name);                return new byte[0];            }            this.stream.Seek((long)pacEntity.Offset, SeekOrigin.Begin);            byte[] array = this.reader.ReadBytes(pacEntity.Size);            if (encode)            {                GameAssetManager.KeyEncode(array);            }            if (compress)            {                return CLZF2.Decompress(array);            }            return array;        }

 

 

Долго мучаясь и пытаясь понять что тут к чему, я все же понял, эти .pac в начале содержат информацию о файлах (название файла, его оффсет и размер), и только потом сами данные.

Функция Create создает как раз список файлов (с оффсетом и размером), а дальше через функцию GetPacFile можно из архива вытащить нужный файл.

Либо вот этим кодом можно легко вытащить все до единого файла:

 

Spoiler

 

            Create("script"); //Название нужного архива без .pac            foreach (string s in fileList)            {                try                {                    File.WriteAllBytes(Path.Combine("decompressed", s), GetPacFile(s, false, false)); //Вытаскивает все файлы в папку "decompressed" (папку нужно предварительно создать)                }                catch// (Exception ex)                {                    //Debug.Write(ex.ToString());                }            }

 

 

Все, конечно, без проблем достается, но есть одна большая проблема...

Все скрипты (текст) криптуется и вдобавку сжимается CLZF2 (порт LZF на C#), картинки просто криптуются, без обжима, ну а аудио вообще и не криптуется и не сжимается.

И на первый взгляд эта проблема легко решается, но нет:

1. Разкриптованные картинки битые

2. CLZF2 не хочет разжимать скрипты (пишет что-то про BufferOverflow)

Вывод таков: нормально достать у меня получилось только аудио.

Может быть написанное выше кому нибудь поможет, так как я уже, если честно, задолбался пытаться распаковать эти грёбанные .pac'и))

P.S.: Можно попробовать поразжимать скрипты другими портами, вдруг что-нибудь да и получится.

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

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


Ссылка на сообщение
1. Разкриптованные картинки битые

2. CLZF2 не хочет разжимать скрипты (пишет что-то про BufferOverflow)

Скорее всего, просто указан неверный ключ криптования для метода KeyEncode, рабочий можно найти там же (в Assembly-CSharp.dll):

 

Spoiler

 

    public class AssetConfig    {        public static string PubKey = "+lnoSXyNGucQdOV15esJFY7+zA1F1yXqwQgpmsyGRX7OKdp6RL5PkdzbVJMa5Ef25EGNaOCqgi/HbsuQG1Fqj/ldmHMI5bs/EA2J+2PVdkWPwuFIKVqkHsxK5bd7rS0aWtwgxxPlVUjoR8BIcBGiEqpOJKf7xRkV+0bYsQ0thsSCIXz/Nv3OFM44kJbrMPoT8mMAqmq0jJYBnTyoTPr1dsFAo8xAZYIux51qcgeS02bAZAGlwi5BHrOWXfZ766ZP6SUZZ6p/1AXoWHbiMuAHmiy0UpRrVIPq+HUm+Wa3hXc61uvdK1PwA/jANV/N450tFfNc8E4hwkGzpPELjTyHSdDHSrkgwMeGcpwpzYEGV0y0+Eb6Z2TRk11sJL36HNBnTpG/6AkMbZctoQ73llvnMg173CSxL81Ye/g2pBVYOcUljh55udnuBVXtEMqyNlWD340iZdZF+aVu90OU1dkC/zWqdhf1QbKakBiHcIFtzJMYti+n+1YRjG2N73NYlb26I9NuG6SAEl47yYdr8HO6yUzq62QT3XotTTAAQZM=";        public static readonly byte[] Key = new byte[]        {            229,            101,            186,            26,            61,            198,            127,            158,            70,            21,            137        };        public static string[] Folders = new string[]        {            "bgm",            "cg_bmp",            "chara",            "script",            "se",            "voice",            "patch"        };        public static string AssetUrl = "http://mangagamer_public.s3.amazonaws.com/kns2webdemofiles/";        public static int BundleVersion = 1;    }

 

Метод KeyEncode тоже из Assembly-CSharp.dll (в классе GameAssetManager, естественно):

 

Spoiler

 

        public static void KeyEncode(byte[] b)        {            byte[] array = (byte[])AssetConfig.Key.Clone();            for (int i = 0; i < b.Length; i++)            {                b[i] ^= array[i % AssetConfig.Key.Length];                byte[] expr_35_cp_0 = array;                int expr_35_cp_1 = i % array.Length;                expr_35_cp_0[expr_35_cp_1] += 27;            }        }

 

И CLZF2 там есть:

 

Spoiler

 

public static class CLZF2{    private static readonly uint HLOG = 14u;    private static readonly uint HSIZE = 16384u;    private static readonly uint MAX_LIT = 32u;    private static readonly uint MAX_OFF = 8192u;    private static readonly uint MAX_REF = 264u;    private static readonly long[] HashTable = new long[CLZF2.HSIZE];    public static byte[] Compress(byte[] inputBytes)    {        int num = inputBytes.Length * 2;        byte[] src = new byte[num];        int num2;        for (num2 = CLZF2.lzf_compress(inputBytes, ref src); num2 == 0; num2 = CLZF2.lzf_compress(inputBytes, ref src))        {            num *= 2;            src = new byte[num];        }        byte[] array = new byte[num2];        Buffer.BlockCopy(src, 0, array, 0, num2);        return array;    }    public static byte[] Decompress(byte[] inputBytes)    {        int num = inputBytes.Length * 2;        byte[] src = new byte[num];        int num2;        for (num2 = CLZF2.lzf_decompress(inputBytes, ref src); num2 == 0; num2 = CLZF2.lzf_decompress(inputBytes, ref src))        {            num *= 2;            src = new byte[num];        }        byte[] array = new byte[num2];        Buffer.BlockCopy(src, 0, array, 0, num2);        return array;    }    public static int lzf_compress(byte[] input, ref byte[] output)    {        int num = input.Length;        int num2 = output.Length;        Array.Clear(CLZF2.HashTable, 0, (int)CLZF2.HSIZE);        uint num3 = 0u;        uint num4 = 0u;        uint num5 = (uint)((int)input[(int)((UIntPtr)num3)] << 8 | (int)input[(int)((UIntPtr)(num3 + 1u))]);        int num6 = 0;        while (true)        {            if ((ulong)num3 < (ulong)((long)(num - 2)))            {                num5 = (num5 << 8 | (uint)input[(int)((UIntPtr)(num3 + 2u))]);                long num7 = (long)((ulong)((num5 ^ num5 << 5) >> (int)(24u - CLZF2.HLOG - num5 * 5u) & CLZF2.HSIZE - 1u));                long num8 = CLZF2.HashTable[(int)(checked((IntPtr)num7))];                CLZF2.HashTable[(int)(checked((IntPtr)num7))] = (long)((ulong)num3);                long num9;                if ((num9 = (long)((ulong)num3 - (ulong)num8 - 1uL)) < (long)((ulong)CLZF2.MAX_OFF) && (ulong)(num3 + 4u) < (ulong)((long)num) && num8 > 0L && input[(int)(checked((IntPtr)num8))] == input[(int)((UIntPtr)num3)] && input[(int)(checked((IntPtr)(unchecked(num8 + 1L))))] == input[(int)((UIntPtr)(num3 + 1u))] && input[(int)(checked((IntPtr)(unchecked(num8 + 2L))))] == input[(int)((UIntPtr)(num3 + 2u))])                {                    uint num10 = 2u;                    uint num11 = (uint)(num - (int)num3 - (int)num10);                    num11 = ((num11 <= CLZF2.MAX_REF) ? num11 : CLZF2.MAX_REF);                    if ((ulong)num4 + (ulong)((long)num6) + 1uL + 3uL >= (ulong)((long)num2))                    {                        break;                    }                    do                    {                        num10 += 1u;                    }                    while (num10 < num11 && input[(int)(checked((IntPtr)(unchecked(num8 + (long)((ulong)num10)))))] == input[(int)((UIntPtr)(num3 + num10))]);                    if (num6 != 0)                    {                        output[(int)((UIntPtr)(num4++))] = (byte)(num6 - 1);                        num6 = -num6;                        do                        {                            output[(int)((UIntPtr)(num4++))] = input[(int)(checked((IntPtr)(unchecked((ulong)num3 + (ulong)((long)num6)))))];                        }                        while (++num6 != 0);                    }                    num10 -= 2u;                    num3 += 1u;                    if (num10 < 7u)                    {                        output[(int)((UIntPtr)(num4++))] = (byte)((num9 >> 8) + (long)((ulong)((ulong)num10 << 5)));                    }                    else                    {                        output[(int)((UIntPtr)(num4++))] = (byte)((num9 >> 8) + 224L);                        output[(int)((UIntPtr)(num4++))] = (byte)(num10 - 7u);                    }                    output[(int)((UIntPtr)(num4++))] = (byte)num9;                    num3 += num10 - 1u;                    num5 = (uint)((int)input[(int)((UIntPtr)num3)] << 8 | (int)input[(int)((UIntPtr)(num3 + 1u))]);                    num5 = (num5 << 8 | (uint)input[(int)((UIntPtr)(num3 + 2u))]);                    CLZF2.HashTable[(int)((UIntPtr)((num5 ^ num5 << 5) >> (int)(24u - CLZF2.HLOG - num5 * 5u) & CLZF2.HSIZE - 1u))] = (long)((ulong)num3);                    num3 += 1u;                    num5 = (num5 << 8 | (uint)input[(int)((UIntPtr)(num3 + 2u))]);                    CLZF2.HashTable[(int)((UIntPtr)((num5 ^ num5 << 5) >> (int)(24u - CLZF2.HLOG - num5 * 5u) & CLZF2.HSIZE - 1u))] = (long)((ulong)num3);                    num3 += 1u;                    continue;                }            }            else if ((ulong)num3 == (ulong)((long)num))            {                goto Block_13;            }            num6++;            num3 += 1u;            if ((long)num6 == (long)((ulong)CLZF2.MAX_LIT))            {                if ((ulong)(num4 + 1u + CLZF2.MAX_LIT) >= (ulong)((long)num2))                {                    return 0;                }                output[(int)((UIntPtr)(num4++))] = (byte)(CLZF2.MAX_LIT - 1u);                num6 = -num6;                do                {                    output[(int)((UIntPtr)(num4++))] = input[(int)(checked((IntPtr)(unchecked((ulong)num3 + (ulong)((long)num6)))))];                }                while (++num6 != 0);            }        }        return 0;        Block_13:        if (num6 != 0)        {            if ((ulong)num4 + (ulong)((long)num6) + 1uL >= (ulong)((long)num2))            {                return 0;            }            output[(int)((UIntPtr)(num4++))] = (byte)(num6 - 1);            num6 = -num6;            do            {                output[(int)((UIntPtr)(num4++))] = input[(int)(checked((IntPtr)(unchecked((ulong)num3 + (ulong)((long)num6)))))];            }            while (++num6 != 0);        }        return (int)num4;    }    public static int lzf_decompress(byte[] input, ref byte[] output)    {        int num = input.Length;        int num2 = output.Length;        uint num3 = 0u;        uint num4 = 0u;        while (true)        {            uint num5 = (uint)input[(int)((UIntPtr)(num3++))];            if (num5 < 32u)            {                num5 += 1u;                if ((ulong)(num4 + num5) > (ulong)((long)num2))                {                    break;                }                do                {                    output[(int)((UIntPtr)(num4++))] = input[(int)((UIntPtr)(num3++))];                }                while ((num5 -= 1u) != 0u);            }            else            {                uint num6 = num5 >> 5;                int num7 = (int)(num4 - ((num5 & 31u) << 8) - 1u);                if (num6 == 7u)                {                    num6 += (uint)input[(int)((UIntPtr)(num3++))];                }                num7 -= (int)input[(int)((UIntPtr)(num3++))];                if ((ulong)(num4 + num6 + 2u) > (ulong)((long)num2))                {                    return 0;                }                if (num7 < 0)                {                    return 0;                }                output[(int)((UIntPtr)(num4++))] = output[num7++];                output[(int)((UIntPtr)(num4++))] = output[num7++];                do                {                    output[(int)((UIntPtr)(num4++))] = output[num7++];                }                while ((num6 -= 1u) != 0u);            }            if ((ulong)num3 >= (ulong)((long)num))            {                return (int)num4;            }        }        return 0;    }}

 

Эти примеры взяты из демо-версии Kara no Shoujo – The Second Episode с официального сайта. Вполне возможно, что ключи и методы для распаковки от версии к версии меняются, поэтому нужно смотреть код этих методов и классов в своих файлах.

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

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


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

Именно с Вашим кодом KeyEncode у меня все получилось... Спасибо огромное! Пока что удачно распаковал только картинки, но щас разберусь с LZF и пойду вытаскивать скрипты. Отпишусь если все получится :)

UPD: О да, боже, у меня наконец-то получилось) Благодарю за нормальный KeyEncode)) Осталось научиться обратно запаковывать, и можно начинать переводить)))

UPD2: Только что заметил, что ILSpy'ем достается тот же KeyEncode, что и у Вас... Чорт, ну а раньше-то почему не получалось? Всё же тоже самое было...

UPD3: Привел KeyEncode в более читабельный вид:

 

Spoiler

 

        public static void KeyEncode(ref byte[] b)        {            byte[] key = new byte[]            {                162,                101,                186,                26,                45,                198,                127,                147,                70,                21,                132            };            byte[] array = (byte[])key.Clone();            for (int i = 0; i < b.Length; i++)            {                int integer = i % array.Length;                b[i] ^= array[integer];                array[integer] += 27;            }        }

 

 

Начал пытаться хоть кое-как понять код :)

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

Пример:

 

Spoiler

 

            byte[] b = File.ReadAllBytes("test.txt");            KeyEncode(ref b);            File.WriteAllBytes("test_1.txt", b);            byte[] bb = File.ReadAllBytes("test_1.txt");            KeyEncode(ref b);            File.WriteAllBytes("test_2.txt", b);            //Итоги запуска кода:            //Содержимое test.txt - test            //Содержимое test_1.txt - D600C96E в хексе (не стал писать обычным текстом, т.к. понятно что файл содержит не читаемое содержимое)            //Содержимое test_2.txt - test                        Environment.Exit(0);

 

 

Осталось научиться собирать архивы :)

UPD5: Короче вот:

 

Spoiler

ed888cee04.jpg

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

Позже выложу исходники распаковщика и запаковщика, надо только в порядок привести всё это дело.

UPD6: В общем после долгого перерыва (мне было тупо лень) сегодня я все же решился доделать распаковщик и дать ему хоть какой то интерфейс.

Вот что у меня получилось:

Скачать

VT

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

    • В руках разработчиков уже есть прототип, а финальную версию устройства хотят продавать аж за 47 тысяч рублей. Студенты Донского государственного технического университета работают над «российским аналогом PlayStation» — консолью под названием PlaySpace. «Сможет ли она составить конкуренцию конкуренцию разработкам Sony, Microsoft и Nintendo?» — спрашивает журналист «Известий» Иван Черноусов, которому выпала честь первым рассказать о проекте. Учитывая, что для инновационного устройства не будет требоваться наличие геймпада (его роль будет выполнять смартфон), его успех выглядит бесспорным. Лидер проекта Артем Пазин рассказал, что внутри PlaySpace «трудится» процессор Intel Atom X5, которому помогают 4 Гб оперативной и 64 Гб встроенной памяти. Девайс поддерживает Bluetooth и Wi-Fi, а сингал выводится с помощью HDMI. Софт работает на «собственной« операционной системе. В руках разработчиков уже есть прототип, а финальную версию устройства хотят продавать аж за 47 тысяч рублей (для сравнения, PS5 в России стоит от 57 тысяч рублей). В сети от души пожелали «российской консоли» удачи: на маркетплейсах точно такие же устройства можно найти за 8 тысяч рублей. Впрочем, опрошенные эксперты в один голос утверждают, что в России вполне возможно наладить производство собственных консолей. Главное — найти пустующую нишу и не стремиться к конкуренции с лидерами рынка. Да и бюджеты осваивать надо, сами понимаете.
    • В бесплатной версии можно опробовать вступление и уровень вплоть до первого босса. На PlayStation 5 на этот раз уже точно вышла демоверсия секси-слэшера Stellar Blade. В бесплатной версии можно опробовать вступление и уровень вплоть до первого босса. Прохождение займет около часа. Stellar Blade выйдет 26 апреля 2024 года эксклюзивно на PS5. Игру до сих пор критикуют за излишнюю сексуальность героини, но корейской студии Shift Up на это, похоже, наплевать.
    • Вышли Alone in the Dark (1999 рублей) и Outcast A New Beginning (2199 рублей), из интересного: WWE 2K Battlegrounds (99 рублей), The Suicide of Rachel Foster (59 рублей), Trine 3: The Artifacts of Power (49 рублей). Магазин Steambuy опубликовал еженедельный список скидок и предзаказов на ожидаемые игры. Вышли Alone in the Dark (1999 рублей) и Outcast A New Beginning (2199 рублей), из интересного: WWE 2K Battlegrounds (99 рублей), The Suicide of Rachel Foster (59 рублей), Trine 3: The Artifacts of Power (49 рублей). Предзаказ Ghost of Tsushima DIRECTOR'S CUT стоит 4499 рублей (не активируется на русских аккаунтах). Alone in the Dark — 1999 рублей Ashen — 399 рублей (-68%) Dead Rising 2 — 499 рублей (-29%) Dragon’s Dogma 2 — 4999 рублей (-21%) Dragon’s Dogma: Dark Arisen — 599 рублей (-50%) Dying Light: Definitive Edition — 1899 рублей Evil Genius 2: World Domination — 149 рублей For The King — 149 рублей (-66%) Ghost of Tsushima DIRECTOR'S CUT — 4499 рублей Gloomhaven — 799 рублей (-27%) God of War — 1499 рублей HELLDIVERS 2 — 4449 рублей Hogwarts Legacy — 1199 рублей Injustice 2 — 399 рублей Last Epoch — 1839 рублей Mass Effect 2 — 99 рублей Ni no Kuni Wrath of the White Witch Remastered — 299 рублей (-83%) Nioh 2 — The Complete Edition — 1499 рублей Outcast A New Beginning — 2199 рублей (-11%) Prey — 599 рублей Rain World — 399 рублей (-55%) Resident Evil 4 — 2499 рублей S.T.A.L.K.E.R.: Bundle — 2999 рублей The Settlers: New Allies — 1789 рублей Shadow Tactics: Blades of the Shogun — 99 рублей Sifu — 599 рублей (-50%) Sniper: Ghost Warrior 2 — 249 рублей (-58%) The Suicide of Rachel Foster — 59 рублей Trine 3: The Artifacts of Power — 49 рублей Tropico 6 — 499 рублей (-78%) Ведьмак 3: Дикая Охота — Полное издание — 799 рублей WWE 2K Battlegrounds — 99 рублей Лидеры продаж: Ведьмак 3: Дикая Охота — Полное издание — 799 рублей Evil Genius 2: World Domination — 149 рублей Dragon’s Dogma 2 — 4999 рублей (-21%) Grand Theft Auto V: Premium Edition — 1229 рублей DARK SOULS II: Scholar of the First Sin — 599 рублей (-75%) Horizon Forbidden West Complete Edition — 5499 рублей Trine 3: The Artifacts of Power — 49 рублей RESIDENT EVIL 7 — 399 рублей Saints Row IV: Полное издание — 399 рублей Baldur’s Gate 3 — 2469 рублей
    • Что за чушь? Вы рынком технологии интересуется? или только краем? и то левым ухом вскользь? Китайцы во многих сферах электроники уже на столько преуспели, что дают европейским брендам только прикусывать за щеку, и в плане качества, и в плане возможностей/характеристик.  В мобильном сегменте, последние годы какое-то развитие делают только китайцы, а не европейцы и американцы. В плане фото съёмки, сейчас самые крутые китайцы, Эпл со своим Айфуном с каждым годом пытается их нагнать. Только нагонит, выпустит какой-нибудь Виво, Оппо или Хуавей свой новый телефон, опять Айфон и с Самсунгом на задворках валяются в плане качество фото. И это не моя прихоть, это подтверждают куча сравнении на просторах интернета а также европейское рейтинговое агентство dxomark, где на первых местах стоять не корейцы, и американец Айфон, а именно китайцы в плане фото камеры. Только копируют, да? Ничего не развивают? Единственное, Айфон ещё в плане видеосъёмки выигрывает, но и то уже пол шишки, разница не критическая, и думаю в ближайшее годы, и там начнут уже отставать. Где ваши когда-то великие европейцы в мобильном сегменте LG, Nokia, HTC, Motorola? А всё, нету их, сдохли, проиграли конкуренцию китайцам. Кое как строй держит Самсунг и то с каждым годом ситуация ухудшается, а потому, что китайцы давят и показывают всем как надо делать смартфоны, но ещё есть Сони, но они тоже больше мертвец, чем жилец. Только Айфон в этой конкуренции держится стабильно, но это и понятно, основной рынок сбыта у Айфона США, а туда китайцев не любят пускать потому, что ссутся конкуренции.  Возьмём какой-нибудь рынок робото-пылесосов. Все самые крутые и навороченные робот-пылесосы у китайских брендов. У европейцев одно говно там. Возьмём телевизоры, сейчас какой-нибудь китаец Haier или Hisense спокойно может дать прикурить какой-нибудь Самсунг или Сони за ту же цену. А если брать мелко бытовую технику, то там много где сейчас китайцы впереди и далеко вперёд ушли по отношению бывших европейских лидеров. Поэтому ваше утверждение, что Китай только всё по быстрому копирует со среднем качеством и ничего не развивает, это лишь говорит о вашем невежестве и неумение разбираться в вопросе. Китайцы и правда, всегда начинают с того, что копируют лучших представителей рынка, и что с того? а кто сейчас не копирует? Даже Эпл и то копирует идей у конкурентов, даже у тех китайцев. Только ЕГС ничего скопировать не могут, поэтому находятся в жопе. Копировать не априори плоха, нужно ещё уметь скопировать, чтобы это было хорошо. Китайцы с этим успешно справились и потом спокойно начали своё развивать. Раньше многие недалёкие смеялись над флагманами китайских телефонов — да у вас прошивка говно, через год будет тормозить, обновления год по выпускают и забросят. Сейчас кто в теме, уже не смеётся, а в серьёз рассматривают к покупке флагманы, так как камеры крутые, прошивки давно отшлифованы до ума и функциональны, не тормозят, а поддержка обновлениями не хуже чем у Эпл, и не через год, и не через два-три тормозить не начнут. Потому, что китайцы не стоят на месте, а постоянно развиваются. Да, где-то ещё они не преуспели, где-то ещё можно найти подвал-подвальный, собранный из всего подряд, это нормально, потому, что рынок большой и разносторонний, но он постоянно растёт и улучшается. Когда-то вчера ты над чем-нибудь китайским смеялся, завтра ты будешь в очереди стоять за их продукцией, так как они вполне могут стать лучше и успешнее европейца.  И на счёт тачек. У них автопром на столько быстро развивается, можно только позавидовать, нашим бы в пример взять, когда я смотрю на нашу новую ниву в старом кузове за 1лям и когда смотрю на нового китайца за туже цену, хочется плакать. Вы посмотрите, что китайцы выпускали лет 5 назад в плане автопрома и, что выпускают сейчас. Просто невероятный скачок, который не описать словами. Многие бренды к такому скачку шли годами, десятилетиями, а китайцы за считанные годы навёрстывают упущенное. Сейчас они вторые в мире по производству электротачек, обгоняя немцев, японцев и других. Не за горами, как и их обгонят, и похоронят, как это было со многими европейскими брендами в мобильном сегменте. Да и сейчас молодёжь больше знает о всяких Лисян, чем о какой-нибудь Пежо. Вы ещё помните, что существовал такой бренд Пежо? Вот и я уже забыл, а таких брендов не мало, о которых уже не помнят, зато знают новых китайцев на ура. Все ваши рассуждения на счёт китайцев, что они только копируют и среднего качества, это курам на смех, а там реально идёт развитие, при чём постоянное, такое какое бы нам начать делать и перенимать опыт.
    • @edifiei тоже лежит в закромах и ждет своей очереди)
    • Для начала необходимо посмотреть, что входит в этот мод, как он устроен, сколько текста можно внести уже в этот мод, и сколько останется для перевода. По объёму текста учитывая игру без модов, то по моим расчетам, где-то на большую часть игрового контента. По времени, если плотно засесть за перевод, то уйдет около 5 - 7 месяцев для одного человека. Поскольку упирается в личное время по 3 часа в день в будние дни и по 4 - 6 часов в воскресенье. Пока возьму за просмотр технической составляющей и как мод реализован.
    • Версия 0.25 от 29.03.24 •    Переведена карта.
      •    Переведен интерфейс боя, лог боя.
      •    Переведено меню Исследования.
      •    Переведен экран прокачки Навыков и Заклинаний.
      •    Мелкие правки. СКАЧАТЬ РУСИФИКАТОР
    • 18 часов с dlc, что в целом соответствует среднему времени по how long to beat У меня лично они пропали после какого-то обновления драйверов нвидии, как и краши. Но у меня i7 13700 и 4090 Взял по скидосику вместе с форспокеном, обе игры справляются с тем, что и должны делать игры, а именно развлекать.
  • Изменения статусов

  • Лучшие авторы


Zone of Games © 2003–2024 | Реклама на сайте.

×