public static CASCConfig LoadLocalStorageConfig(string basePath, string product = null) { var config = new CASCConfig { OnlineMode = false, BasePath = basePath, Product = product }; 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 = config.GetActiveBuild(product); 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 buildKey = "5a05c58e28d0b2c3245954b6f4e2ae66"; 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 cdnKey = "23d301e8633baaa063189ca9442b3088"; 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); } CDNCache.Init(config); return(config); }
public static CASCConfig LoadLocalStorageConfig(string basePath, string product, ILoggerOptions loggerOptions = null) { string buildInfoPath = Path.Combine(basePath, ".build.info"); if (!File.Exists(buildInfoPath)) { throw new Exception("Local mode not supported for this game!"); } Logger.Init(loggerOptions); var config = new CASCConfig { OnlineMode = false, BasePath = basePath, Product = product }; using (Stream buildInfoStream = new FileStream(buildInfoPath, FileMode.Open)) { config._BuildInfo = VerBarConfig.ReadVerBarConfig(buildInfoStream); } CASCGameType gameType; if (!HasConfigVariable(config._BuildInfo, "Product")) { var detectedGameType = CASCGame.DetectLocalGame(basePath, product, config.GetBuildInfoVariable("BuildKey")); if (detectedGameType.HasValue) { gameType = detectedGameType.Value; } else { throw new Exception($"No product {product} found at {basePath}"); } } else { string productUid = config.GetBuildInfoVariable("Product"); if (productUid == null) { throw new Exception($"No product {product} found at {basePath}"); } gameType = CASCGame.DetectGameByUid(product); } config.GameType = gameType; string dataFolder = CASCGame.GetDataFolder(config.GameType); config.ActiveBuild = 0; config._Builds = new List <KeyValueConfig>(); if (File.Exists("fakebuildconfig")) { using (Stream stream = new FileStream("fakebuildconfig", FileMode.Open)) { var cfg = KeyValueConfig.ReadKeyValueConfig(stream); config._Builds.Add(cfg); } } else { string buildKey = config.GetBuildInfoVariable("BuildKey"); //string buildKey = "5a05c58e28d0b2c3245954b6f4e2ae66"; 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)); } } if (File.Exists("fakecdnconfig")) { using (Stream stream = new FileStream("fakecdnconfig", FileMode.Open)) { config._CDNConfig = KeyValueConfig.ReadKeyValueConfig(stream); } } else { string cdnKey = config.GetBuildInfoVariable("CDNKey"); //string cdnKey = "23d301e8633baaa063189ca9442b3088"; 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); } } CDNCache.Init(config); return(config); }