public static CASCConfig LoadLocalStorageConfig(string basePath) { var config = new CASCConfig { OnlineMode = false, BasePath = basePath }; config.GameType = CASCGame.DetectLocalGame(basePath); if (config.GameType == CASCGameType.Agent || config.GameType == CASCGameType.Hearthstone) { throw new Exception("Local mode not supported for this game!"); } string buildInfoPath = Path.Combine(basePath, ".build.info"); using (Stream buildInfoStream = new FileStream(buildInfoPath, FileMode.Open)) { config._BuildInfo = VerBarConfig.ReadVerBarConfig(buildInfoStream); } Dictionary <string, string> bi = null; for (int i = 0; i < config._BuildInfo.Count; ++i) { if (config._BuildInfo[i]["Active"] == "1") { bi = config._BuildInfo[i]; break; } } if (bi == null) { throw new Exception("Can't find active BuildInfoEntry"); } string dataFolder = CASCGame.GetDataFolder(config.GameType); config.ActiveBuild = 0; config._Builds = new List <KeyValueConfig>(); string buildKey = bi["BuildKey"]; string buildCfgPath = Path.Combine(basePath, dataFolder, "config", buildKey.Substring(0, 2), buildKey.Substring(2, 2), buildKey); using (Stream stream = new FileStream(buildCfgPath, FileMode.Open)) { config._Builds.Add(KeyValueConfig.ReadKeyValueConfig(stream)); } string cdnKey = bi["CDNKey"]; string cdnCfgPath = Path.Combine(basePath, dataFolder, "config", cdnKey.Substring(0, 2), cdnKey.Substring(2, 2), cdnKey); using (Stream stream = new FileStream(cdnCfgPath, FileMode.Open)) { config._CDNConfig = KeyValueConfig.ReadKeyValueConfig(stream); } return(config); }
private void OpenIndexFile(string archive, int i) { try { string dataFolder = CASCGame.GetDataFolder(CASCConfig.GameType); string path = Path.Combine(CASCConfig.BasePath, dataFolder, "indices", archive + ".index"); using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) ParseIndex(fs, i); } catch { throw new Exception("OpenFile failed!"); } }
private Stream GetDataStream(int index) { if (DataStreams.TryGetValue(index, out Stream stream)) { return(stream); } string dataFolder = CASCGame.GetDataFolder(Config.GameType); string dataFile = Path.Combine(Config.BasePath, dataFolder, "data", string.Format("data.{0:D3}", index)); stream = new FileStream(dataFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); DataStreams[index] = stream; return(stream); }
private static List <string> GetIdxFiles(CASCConfig config) { List <string> latestIdx = new List <string>(); string dataFolder = CASCGame.GetDataFolder(config.GameType); string dataPath = Path.Combine(dataFolder, "data"); for (int i = 0; i < 0x10; ++i) { var files = Directory.EnumerateFiles(Path.Combine(config.BasePath, dataPath), string.Format("{0:X2}*.idx", i)); if (files.Count() > 0) { latestIdx.Add(files.Last()); } } return(latestIdx); }