예제 #1
0
        /// <summary>
        /// Extracts data and returns the package
        /// </summary>
        public Stream Run(UAssetCacheBlock cache, out string hash)
        {
            //Get pathnames that match this
            List <ArkAsset>[] files = DiscoveryService.DiscoverFiles(installation, this);

            //Load mod info if this is a mod. TODO

            //Load Primal Data for mod
            string              primalDataPathname = "/Game/PrimalEarth/CoreBlueprints/PrimalGameData_BP";
            ArkAsset            primalDataNs       = ArkAsset.GetAssetFromGame(primalDataPathname, installation);
            UAssetFileBlueprint primalData         = UAssetFileBlueprint.OpenFile(primalDataNs.filename, false, primalDataNs.name, this.installation.contentFolder);
            PropertyReader      primalDataReader   = new PropertyReader(primalData.GetFullProperties(cache));

            //Load all dino entries
            var dinoEntriesArray = primalDataReader.GetProperty <ArrayProperty>("DinoEntries");
            Dictionary <string, PropertyReader> dinoEntries = new Dictionary <string, PropertyReader>(); //Dino entries mapped by tag name

            foreach (var i in dinoEntriesArray.props)
            {
                var    ii  = ((ObjectProperty)i).GetReferencedFileBlueprint();
                var    iir = new PropertyReader(ii.GetFullProperties(cache));
                string tag = iir.GetPropertyStringOrName("DinoNameTag");
                if (!dinoEntries.ContainsKey(tag))
                {
                    dinoEntries.Add(tag, iir);
                }
                else
                {
                    dinoEntries[tag] = iir;
                }
            }

            //Import dinos
            var dinos = DinoExtractorService.ExtractDinos(cache, files[(int)ArkAssetType.Dino], patch, primalDataReader, dinoEntries);

            //Import items
            var items = ItemExtractorService.ExtractItems(cache, files[(int)ArkAssetType.InventoryItem], patch);

            Log.WriteSuccess("Export-Package-Run", $"Package {name}: Processed {dinos.Count} dinos, {items.Count} items");

            //Return the package
            return(CompilePackage(new Dictionary <string, object>
            {
                { "items.bson", items },
                { "dinos.bson", dinos }
            }, out hash));
        }