Esempio n. 1
0
        public PakFile(BSP bsp, List <string> sourceDirectories, List <string> includeFiles, List <string> excludedFiles, List <string> excludedDirs)
        {
            mdlcount   = vmtcount = pcfcount = sndcount = vehiclescriptcount = effectscriptcount = 0;
            sourceDirs = sourceDirectories;

            this.excludedFiles = excludedFiles;
            this.excludedDirs  = excludedDirs;

            Files = new Dictionary <string, string>();

            if (bsp.nav.Key != default(string))
            {
                Files.Add(bsp.nav);
            }

            if (bsp.detail.Key != default(string))
            {
                Files.Add(bsp.detail);
            }

            if (bsp.kv.Key != default(string))
            {
                Files.Add(bsp.kv);
            }

            if (bsp.txt.Key != default(string))
            {
                Files.Add(bsp.txt);
            }

            if (bsp.jpg.Key != default(string))
            {
                Files.Add(bsp.jpg);
            }

            if (bsp.radartxt.Key != default(string))
            {
                Files.Add(bsp.radartxt);
            }

            if (bsp.res.Key != default(string))
            {
                Files.Add(bsp.res);
                foreach (string material in AssetUtils.findResMaterials(bsp.res.Value))
                {
                    AddTexture(material);
                }
            }

            if (bsp.particleManifest.Key != default(string))
            {
                Files.Add(bsp.particleManifest);
                foreach (string particle in AssetUtils.findManifestPcfs(bsp.particleManifest.Value))
                {
                    AddParticle(particle);
                }
            }

            if (bsp.soundscape.Key != default(string))
            {
                Files.Add(bsp.soundscape);
                foreach (string sound in AssetUtils.findSoundscapeSounds(bsp.soundscape.Value))
                {
                    if (AddFile(sound, FindExternalFile(sound)))
                    {
                        sndcount++;
                    }
                }
            }

            if (bsp.soundscript.Key != default(string))
            {
                Files.Add(bsp.soundscript);
                foreach (string sound in AssetUtils.findSoundscapeSounds(bsp.soundscript.Value))
                {
                    if (AddFile(sound, FindExternalFile(sound)))
                    {
                        sndcount++;
                    }
                }
            }

            // find color correction files
            foreach (Dictionary <string, string> cc in bsp.entityList.Where(item => item["classname"] == "color_correction"))
            {
                if (cc.ContainsKey("filename"))
                {
                    AddFile(cc["filename"], FindExternalFile(cc["filename"]));
                }
            }

            foreach (KeyValuePair <string, string> vehicleScript in bsp.VehicleScriptList)
            {
                if (AddFile(vehicleScript.Key, vehicleScript.Value))
                {
                    vehiclescriptcount++;
                }
            }
            foreach (KeyValuePair <string, string> effectScript in bsp.EffectScriptList)
            {
                if (AddFile(effectScript.Key, effectScript.Value))
                {
                    effectscriptcount++;
                }
            }
            foreach (KeyValuePair <string, string> dds in bsp.radardds)
            {
                AddFile(dds.Key, dds.Value);
            }
            foreach (KeyValuePair <string, string> lang in bsp.languages)
            {
                AddFile(lang.Key, lang.Value);
            }
            foreach (string model in bsp.EntModelList)
            {
                AddModel(model);
            }
            for (int i = 0; i < bsp.ModelList.Count; i++)
            {
                AddModel(bsp.ModelList[i], bsp.modelSkinList[i]);
            }
            foreach (string vmt in bsp.TextureList)
            {
                AddTexture(vmt);
            }
            foreach (string vmt in bsp.EntTextureList)
            {
                AddTexture(vmt);
            }
            foreach (string sound in bsp.EntSoundList)
            {
                if (AddFile(sound, FindExternalFile(sound)))
                {
                    sndcount++;
                }
            }
            foreach (string vscript in bsp.vscriptList)
            {
                if (AddFile(vscript, FindExternalFile(vscript)))
                {
                    vscriptcount++;
                }
            }

            // add all manually included files
            // TODO right now the manually included files search for files it depends on. Not sure if this should be default behavior
            foreach (var file in includeFiles)
            {
                // try to get the source directory the file is located in
                FileInfo fileInfo = new FileInfo(file);

                // default base directory is the game folder
                string baseDir = GameConfigurationManager.GameConfiguration.GameFolder;

                var potentialSubDir = sourceDirs;
                potentialSubDir.Remove(baseDir);
                foreach (var folder in potentialSubDir)
                {
                    if (fileInfo.Directory != null &&
                        fileInfo.Directory.FullName.Contains(folder))
                    {
                        baseDir = folder;
                        break;
                    }
                }

                string internalPath = file.Replace(baseDir + "\\", "");

                // try to determine file type by extension
                switch (file.Split('.').Last())
                {
                case "vmt":
                    AddTexture(internalPath);
                    break;

                case "pcf":
                    AddParticle(internalPath);
                    break;

                case "mdl":
                    AddModel(internalPath);
                    break;

                case "wav":
                case "mp3":
                    AddFile(internalPath, file);
                    sndcount++;
                    break;

                default:
                    AddFile(internalPath, file);
                    break;
                }
            }
        }
Esempio n. 2
0
        public PakFile(BSP bsp, List <string> sourceDirectories)
        {
            mdlcount   = vmtcount = pcfcount = sndcount = 0;
            sourceDirs = sourceDirectories;

            Files = new Dictionary <string, string>();

            if (bsp.nav.Key != default(string))
            {
                Files.Add(bsp.nav);
            }

            if (bsp.detail.Key != default(string))
            {
                Files.Add(bsp.detail);
            }

            if (bsp.particleManifest.Key != default(string))
            {
                Files.Add(bsp.particleManifest);
                foreach (string particle in AssetUtils.findManifestPcfs(bsp.particleManifest.Value))
                {
                    AddParticle(particle);
                }
            }

            if (bsp.soundscape.Key != default(string))
            {
                Files.Add(bsp.soundscape);
                foreach (string sound in AssetUtils.findSoundscapeSounds(bsp.soundscape.Value))
                {
                    if (AddFile(sound, FindExternalFile(sound)))
                    {
                        sndcount++;
                    }
                }
            }

            if (bsp.soundscript.Key != default(string))
            {
                Files.Add(bsp.soundscript);
                foreach (string sound in AssetUtils.findSoundscapeSounds(bsp.soundscript.Value))
                {
                    if (AddFile(sound, FindExternalFile(sound)))
                    {
                        sndcount++;
                    }
                }
            }

            // find color correction files
            foreach (Dictionary <string, string> cc in bsp.entityList.Where(item => item["classname"] == "color_correction"))
            {
                AddFile(cc["filename"], FindExternalFile(cc["filename"]));
            }

            foreach (KeyValuePair <string, string> lang in bsp.languages)
            {
                AddFile(lang.Key, lang.Value);
            }
            foreach (string model in bsp.EntModelList)
            {
                AddModel(model);
            }
            for (int i = 0; i < bsp.ModelList.Count; i++)
            {
                AddModel(bsp.ModelList[i], bsp.modelSkinList[i]);
            }
            foreach (string vmt in bsp.TextureList)
            {
                AddTexture(vmt);
            }
            foreach (string vmt in bsp.EntTextureList)
            {
                AddTexture(vmt);
            }
            foreach (string sound in bsp.EntSoundList)
            {
                if (AddFile(sound, FindExternalFile(sound)))
                {
                    sndcount++;
                }
            }
        }