コード例 #1
0
        public static List <ArkAsset>[] DiscoverFiles(ArkInstall install, DeltaExportPackage package)
        {
            //Create exclude regexes
            Regex[] excludes = new Regex[Program.config.exclude_regex.Length];
            for (var i = 0; i < excludes.Length; i += 1)
            {
                excludes[i] = new Regex(Program.config.exclude_regex[i]);
            }

            //Create output
            List <ArkAsset>[] assets = new List <ArkAsset> [3];
            for (int i = 0; i < assets.Length; i++)
            {
                assets[i] = new List <ArkAsset>();
            }

            //Loop through dirs
            var dirs = install.GetChildren();

            foreach (var d in dirs)
            {
                DiscoverNamespace(d, excludes, assets, package);
            }

            //Write done
            Log.WriteSuccess("Discovery", $"Seek finished. Found {assets[0].Count} dinos, {assets[1].Count} structures, {assets[2].Count} items");
            return(assets);
        }
コード例 #2
0
        private static void DiscoverNamespace(ArkNamespace name, Regex[] excludes, List <ArkAsset>[] assets, DeltaExportPackage package)
        {
            //Check if this namespace is permitted to be used by this package
            if (!package.CheckIfNameIsInPackage(name))
            {
                return;
            }

            //Check all files inside of this namespace
            var files = name.GetAssetChildren();

            foreach (var f in files)
            {
                //Skip if we match any of the exclude regexes
                bool ok = true;
                for (var i = 0; i < excludes.Length; i++)
                {
                    if (excludes[i].IsMatch(f.fullName))
                    {
                        ok = false;
                    }
                }

                //Stop if we failed
                if (!ok)
                {
                    continue;
                }

                //Check if we already know this type
                List <ArkAssetType> types;
                if (package.patch.persist.type_cache.ContainsKey(f.fullName))
                {
                    //Use from cache
                    types = package.patch.persist.type_cache[f.fullName];
                }
                else
                {
                    //We'll need to determine it ourselves
                    types = f.QuickGuessType();
                    package.patch.persist.type_cache.Add(f.fullName, types);
                }

                //Handle
                foreach (var t in types)
                {
                    int typeInt = (int)t;
                    if (typeInt != -1)
                    {
                        assets[typeInt].Add(f);
                    }
                }
            }

            //Loop through dirs
            var dirs = name.GetChildren();

            foreach (var d in dirs)
            {
                DiscoverNamespace(d, excludes, assets, package);
            }
        }