private bool LoadUserGameStatsSchema() { string path; try { path = API.Steam.GetInstallPath(); path = Path.Combine(path, "appcache"); path = Path.Combine(path, "stats"); path = Path.Combine(path, string.Format("UserGameStatsSchema_{0}.bin", this._GameId)); if (File.Exists(path) == false) { return(false); } } catch { return(false); } var kv = KeyValue.LoadAsBinary(path); if (kv == null) { return(false); } var currentLanguage = this._SteamClient.SteamApps003.GetCurrentGameLanguage(); //var currentLanguage = "german"; this._AchievementDefinitions.Clear(); this._StatDefinitions.Clear(); var stats = kv[this._GameId.ToString(CultureInfo.InvariantCulture)]["stats"]; if (stats.Valid == false || stats.Children == null) { return(false); } foreach (var stat in stats.Children) { if (stat.Valid == false) { continue; } var rawType = stat["type_int"].Valid ? stat["type_int"].AsInteger(0) : stat["type"].AsInteger(0); var type = (APITypes.UserStatType)rawType; switch (type) { case API.Types.UserStatType.Invalid: { break; } case APITypes.UserStatType.Integer: { var id = stat["name"].AsString(""); string name = GetLocalizedString(stat["display"]["name"], currentLanguage, id); this._StatDefinitions.Add(new Stats.IntegerStatDefinition() { Id = stat["name"].AsString(""), DisplayName = name, MinValue = stat["min"].AsInteger(int.MinValue), MaxValue = stat["max"].AsInteger(int.MaxValue), MaxChange = stat["maxchange"].AsInteger(0), IncrementOnly = stat["incrementonly"].AsBoolean(false), DefaultValue = stat["default"].AsInteger(0), Permission = stat["permission"].AsInteger(0), }); break; } case APITypes.UserStatType.Float: case APITypes.UserStatType.AverageRate: { var id = stat["name"].AsString(""); string name = GetLocalizedString(stat["display"]["name"], currentLanguage, id); this._StatDefinitions.Add(new Stats.FloatStatDefinition() { Id = stat["name"].AsString(""), DisplayName = name, MinValue = stat["min"].AsFloat(float.MinValue), MaxValue = stat["max"].AsFloat(float.MaxValue), MaxChange = stat["maxchange"].AsFloat(0.0f), IncrementOnly = stat["incrementonly"].AsBoolean(false), DefaultValue = stat["default"].AsFloat(0.0f), Permission = stat["permission"].AsInteger(0), }); break; } case APITypes.UserStatType.Achievements: case APITypes.UserStatType.GroupAchievements: { if (stat.Children != null) { foreach (var bits in stat.Children.Where( b => b.Name.ToLowerInvariant() == "bits")) { if (bits.Valid == false || bits.Children == null) { continue; } foreach (var bit in bits.Children) { string id = bit["name"].AsString(""); string name = GetLocalizedString(bit["display"]["name"], currentLanguage, id); string desc = GetLocalizedString(bit["display"]["desc"], currentLanguage, ""); this._AchievementDefinitions.Add(new Stats.AchievementDefinition() { Id = id, Name = name, Description = desc, IconNormal = bit["display"]["icon"].AsString(""), IconLocked = bit["display"]["icon_gray"].AsString(""), IsHidden = bit["display"]["hidden"].AsBoolean(false), Permission = bit["permission"].AsInteger(0), }); } } } break; } default: { throw new InvalidOperationException("invalid stat type"); } } } return(true); }
private bool LoadUserGameStatsSchema() { string path; try { path = Path.Combine(Path.Combine(Path.Combine(Steam.GetInstallPath(), "appcache"), "stats"), string.Format("UserGameStatsSchema_{0}.bin", (object)this.GameId)); if (!System.IO.File.Exists(path)) { return(false); } } catch { return(false); } KeyValue keyValue1 = KeyValue.LoadAsBinary(path); if (keyValue1 == null) { return(false); } string currentGameLanguage = this.SteamClient.SteamApps003.GetCurrentGameLanguage(); this.AchievementDefinitions.Clear(); this.StatDefinitions.Clear(); KeyValue keyValue2 = keyValue1[this.GameId.ToString()]["stats"]; if (!keyValue2.Valid || keyValue2.Children == null) { return(false); } foreach (KeyValue child1 in keyValue2.Children) { if (child1.Valid) { switch (child1["type"].AsInteger(0)) { case 1: string defaultValue1 = child1["name"].AsString(""); string localizedString1 = this.GetLocalizedString(child1["display"]["name"], currentGameLanguage, defaultValue1); List <StatDefinition> statDefinitions1 = this.StatDefinitions; IntegerStatDefinition integerStatDefinition1 = new IntegerStatDefinition(); integerStatDefinition1.Id = child1["name"].AsString(""); integerStatDefinition1.DisplayName = localizedString1; integerStatDefinition1.MinValue = child1["min"].AsInteger(int.MinValue); integerStatDefinition1.MaxValue = child1["max"].AsInteger(int.MaxValue); integerStatDefinition1.MaxChange = child1["maxchange"].AsInteger(0); integerStatDefinition1.IncrementOnly = child1["incrementonly"].AsBoolean(false); integerStatDefinition1.DefaultValue = child1["default"].AsInteger(0); integerStatDefinition1.Permission = child1["permission"].AsInteger(0); IntegerStatDefinition integerStatDefinition2 = integerStatDefinition1; statDefinitions1.Add((StatDefinition)integerStatDefinition2); continue; case 2: case 3: string defaultValue2 = child1["name"].AsString(""); string localizedString2 = this.GetLocalizedString(child1["display"]["name"], currentGameLanguage, defaultValue2); List <StatDefinition> statDefinitions2 = this.StatDefinitions; FloatStatDefinition floatStatDefinition1 = new FloatStatDefinition(); floatStatDefinition1.Id = child1["name"].AsString(""); floatStatDefinition1.DisplayName = localizedString2; floatStatDefinition1.MinValue = child1["min"].AsFloat(float.MinValue); floatStatDefinition1.MaxValue = child1["max"].AsFloat(float.MaxValue); floatStatDefinition1.MaxChange = child1["maxchange"].AsFloat(0.0f); floatStatDefinition1.IncrementOnly = child1["incrementonly"].AsBoolean(false); floatStatDefinition1.DefaultValue = child1["default"].AsFloat(0.0f); floatStatDefinition1.Permission = child1["permission"].AsInteger(0); FloatStatDefinition floatStatDefinition2 = floatStatDefinition1; statDefinitions2.Add((StatDefinition)floatStatDefinition2); continue; case 4: case 5: if (child1.Children != null) { using (IEnumerator <KeyValue> enumerator = child1.Children.Where <KeyValue>((Func <KeyValue, bool>)(b => b.Name.ToLowerInvariant() == "bits")).GetEnumerator()) { while (enumerator.MoveNext()) { KeyValue current = enumerator.Current; if (current.Valid && current.Children != null) { foreach (KeyValue child2 in current.Children) { string defaultValue3 = child2["name"].AsString(""); string localizedString3 = this.GetLocalizedString(child2["display"]["name"], currentGameLanguage, defaultValue3); string localizedString4 = this.GetLocalizedString(child2["display"]["desc"], currentGameLanguage, ""); this.AchievementDefinitions.Add(new AchievementDefinition() { Id = defaultValue3, Name = localizedString3, Description = localizedString4, Icon = child2["display"]["icon"].AsString(""), IconGray = child2["display"]["icon_gray"].AsString(""), Hidden = child2["display"]["hidden"].AsBoolean(false), Permission = child2["permission"].AsInteger(0) }); } } } continue; } } else { continue; } default: throw new InvalidOperationException("invalid stat type"); } } } return(true); }