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; } } }
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++; } } }