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);
        }
Ejemplo n.º 2
0
        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);
        }