Пример #1
0
        internal static Dictionary <string, List <string> > dependencyCache;    // for some internal features that need to lookup dependencies after load

        internal static LocalMod[] FindMods()
        {
            Directory.CreateDirectory(ModLoader.ModPath);
            var mods = new List <LocalMod>();

            foreach (string fileName in Directory.GetFiles(ModLoader.ModPath, "*.tmod", SearchOption.TopDirectoryOnly))
            {
                if (Path.GetFileName(fileName) == "temporaryDownload.tmod")
                {
                    continue;
                }
                var lastModified = File.GetLastWriteTime(fileName);
                if (!modsDirCache.TryGetValue(fileName, out var mod) || mod.lastModified != lastModified)
                {
                    try
                    {
                        var modFile = new TmodFile(fileName);
                        modFile.Read();
                        modFile.VerifyCoreFiles();
                        mod = new LocalMod(modFile)
                        {
                            lastModified = lastModified
                        };
                        modFile.Close();
                    }
                    catch (Exception e)
                    {
                        if (!readFailures.Contains(fileName))
                        {
                            Logging.tML.Warn("Failed to read " + fileName, e);
                        }
                        else
                        {
                            readFailures.Add(fileName);
                        }
                        continue;
                    }
                    modsDirCache[fileName] = mod;
                }
                mods.Add(mod);
            }
            return(mods.OrderBy(x => x.Name, StringComparer.InvariantCulture).ToArray());
        }