예제 #1
0
        private static Task <PakIndex?> loadPakIndex(string paksFolderPath)
        {
            var tcs = new TaskCompletionSource <PakIndex?>();

            Task.Run(() =>
            {
                try
                {
                    var filter   = new PakFilter(new[] { Constants.PAKS_FILTER_STRING }, false);
                    var pakIndex = new PakIndex(path: paksFolderPath, cacheFiles: true, caseSensitive: true, filter: filter);
                    if (pakIndex.PakFileCount == 0)
                    {
                        throw new FileNotFoundException($"No files were found at {paksFolderPath}");
                    }
                    if (!unlockPakIndex(pakIndex))
                    {
                        throw new InvalidOperationException($"Could not decrypt pak files at {paksFolderPath}");
                    }
                    tcs.SetResult(pakIndex);
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Could not load Minecraft Dungeons Paks: {e}");
                    tcs.SetException(e);
                }
            });
            return(tcs.Task);
        }
예제 #2
0
        public void TestExtractGameFiles()
        {
            string?paksFolderPath = _model.usableGameContentIfExists();

            if (string.IsNullOrWhiteSpace(paksFolderPath))
            {
                Assert.Fail("No usable Game Content Files found");
                return;
            }

            PakFilter?filter   = new PakFilter(new[] { Constants.PAKS_FILTER_STRING }, false);
            PakIndex? pakIndex = new PakIndex(path: paksFolderPath !, cacheFiles: true, caseSensitive: true, filter: filter);

            pakIndex.UseKey(FGuid.Zero, Secrets.PAKS_AES_KEY_STRINGS[0].Substring(2).ToBytesKey());
            Assert.AreEqual(64969, pakIndex.Count());

            var pakImageResolver = new PakImageResolver(pakIndex, null);

            pakImageResolver.loadPakFiles();
            Assert.AreEqual(242, ItemExtensions.all.Count);
            Assert.AreEqual(108, EnchantmentExtensions.allEnchantments.Count);

            //Find all the missing and mismatched strings

            foreach (var item in ItemExtensions.all)
            {
                R.itemName(item);
                R.itemDesc(item);
            }

            foreach (var enchantment in EnchantmentExtensions.allEnchantments)
            {
                R.enchantmentName(enchantment);
                //R.enchantmentEffect(enchantment); //missing many of these strings
                R.enchantmentDescription(enchantment);
            }

            foreach (var armorProperty in ItemExtensions.armorProperties)
            {
                R.armorProperty(armorProperty);
                R.armorPropertyDescription(armorProperty);
            }
        }
예제 #3
0
        private static Task <PakIndex?> loadPakIndex()
        {
            var tcs = new TaskCompletionSource <PakIndex?>();

            Task.Run(() =>
            {
                try
                {
                    var filter   = new PakFilter(new[] { "/dungeons/content" });
                    var pakIndex = new PakIndex(path: Constants.PAKS_FOLDER, cacheFiles: true, caseSensitive: false, filter: filter);
                    pakIndex.UseKey(BinaryHelper.ToBytesKey(Constants.PAKS_AES_KEY_STRING));
                    tcs.SetResult(pakIndex);
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Could not load Minecraft Dungeons Paks: {e}");
                    tcs.SetResult(null);
                }
            });
            return(tcs.Task);
        }