Exemplo n.º 1
0
        /// <summary>
        /// Log out from current account
        /// </summary>
        private void Logout()
        {
            _updater.Stop();
            StopIdle();

            IsAuthorized = false;

            // Clear the account settings
            Storage.SessionId        = string.Empty;
            Storage.SteamLoginSecure = string.Empty;
            Storage.SteamParental    = string.Empty;
            UserName                      =
                ProfileUrl                =
                    Level                 =
                        AvatarUrl         =
                            BackgroundUrl = null;
            FavoriteBadge                 = null;
            Storage.IdleMode              = 0;
            Storage.BadgeFilter           =
                Storage.ShowcaseFilter    = string.Empty;

            AllBadges.Clear();
            IdleQueueBadges.Clear();

            Storage.Save();

            foreach (var showcase in AllShowcases)
            {
                showcase.IsCompleted = false;
                showcase.CanCraft    = false;
                showcase.IsOwned     = false;
            }
            Logger.Info("See you later");
        }
Exemplo n.º 2
0
        public void StopIdle()
        {
            try
            {
                lblGameName.Visible    = false;
                picApp.Image           = null;
                picApp.Visible         = false;
                GamesState.Visible     = false;
                btnPause.Visible       = false;
                btnSkip.Visible        = false;
                lblCurrentStatus.Text  = localization.strings.not_ingame;
                lblHoursPlayed.Visible = false;
                picIdleStatus.Image    = null;

                // Hide the status bar
                ssFooter.Visible = false;

                // Resize the form
                var graphics = CreateGraphics();
                var scale    = graphics.DpiY * 1.9583;
                Height = Convert.ToInt32(scale);

                // Kill the idling process
                foreach (var badge in AllBadges.Where(b => b.InIdle))
                {
                    badge.StopIdle();
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex, "frmMain -> StopIdle");
            }
        }
Exemplo n.º 3
0
 public void RemoveBadge(BadgeModel badge)
 {
     badge.RemainingCard = 0;
     AllBadges.Remove(badge);
     IdleQueueBadges.Remove(badge);
     badge.PropertyChanged -= BadgeIdleStatusChanged;
 }
Exemplo n.º 4
0
        public void SortBadges(string method)
        {
            lblDrops.Text = "Sorting results based on your settings, please wait...";
            switch (method)
            {
            case "mostcards":
                AllBadges = AllBadges.OrderByDescending(b => b.RemainingCard).ToList();
                break;

            case "leastcards":
                AllBadges = AllBadges.OrderBy(b => b.RemainingCard).ToList();
                break;

            case "mostvalue":
                var query = string.Format("http://api.enhancedsteam.com/market_data/average_card_prices/im.php?appids={0}",
                                          string.Join(",", AllBadges.Select(b => b.AppId)));
                var json          = new WebClient().DownloadString(query);
                var convertedJson = JsonConvert.DeserializeObject <EnhancedsteamHelper>(json);
                foreach (var price in convertedJson.Avg_Values)
                {
                    var badge = AllBadges.SingleOrDefault(b => b.AppId == price.AppId);
                    if (badge != null)
                    {
                        badge.AveragePrice = price.Avg_Price;
                    }
                }
                AllBadges = AllBadges.OrderByDescending(b => b.AveragePrice).ToList();
                break;

            default:
                return;
            }
        }
Exemplo n.º 5
0
 private void AutoNext()
 {
     if (IsAutoNextComplete == false && IsAutoNextOn == true)
     {
         if (!IsSteamReady)
         {
             return;
         }
         else if (lblCurrentStatus.Text == "多线程")
         {
             IsAutoNextComplete = true;
             return;
         }
         else if (lblCurrentStatus.Text == localization.strings.idling_complete)
         {
             IsAutoNextComplete = true;
             StopIdle();
             return;
         }
         else
         {
             StopIdle();
             AllBadges.RemoveAll(b => Equals(b, CurrentBadge));
             Thread.Sleep(AutoNextTime);
             StartIdle();
             AutoNext();
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Processes all badges on page
        /// </summary>
        /// <param name="document">HTML document (1 page) from x</param>
        private void ProcessBadgesOnPage(HtmlDocument document)
        {
            foreach (var badge in document.DocumentNode.SelectNodes("//div[@class=\"badge_row is_link\"]"))
            {
                var appIdNode = badge.SelectSingleNode(".//a[@class=\"badge_row_overlay\"]").Attributes["href"].Value;
                var appid     = Regex.Match(appIdNode, @"gamecards/(\d+)/").Groups[1].Value;

                if (string.IsNullOrWhiteSpace(appid) || Settings.Default.blacklist.Contains(appid) || appid == "368020" || appid == "335590" || appIdNode.Contains("border=1"))
                {
                    continue;
                }

                var hoursNode = badge.SelectSingleNode(".//div[@class=\"badge_title_stats_playtime\"]");
                var hours     = hoursNode == null ? string.Empty : Regex.Match(hoursNode.InnerText, @"[0-9\.,]+").Value;

                var nameNode = badge.SelectSingleNode(".//div[@class=\"badge_title\"]");
                var name     = WebUtility.HtmlDecode(nameNode.FirstChild.InnerText).Trim();

                var cardNode = badge.SelectSingleNode(".//span[@class=\"progress_info_bold\"]");
                var cards    = cardNode == null ? string.Empty : Regex.Match(cardNode.InnerText, @"[0-9]+").Value;

                var badgeInMemory = AllBadges.FirstOrDefault(b => b.StringId == appid);
                if (badgeInMemory != null)
                {
                    badgeInMemory.UpdateStats(cards, hours);
                }
                else
                {
                    AllBadges.Add(new Badge(appid, name, cards, hours));
                }
            }
        }
Exemplo n.º 7
0
        public void StopIdle()
        {
            try
            {
                lblGameName.Visible   = false;
                picApp.Image          = null;
                picApp.Visible        = false;
                lblCurrentStatus.Text = "Not in game";
                picIdleStatus.Image   = null;

                // Stop the card drop check timer
                tmrCardDropCheck.Enabled = false;

                // Hide the status bar
                ssFooter.Visible = false;

                // Resize the form
                var graphics = CreateGraphics();
                var scale    = graphics.DpiY * 1.9583;
                Height = Convert.ToInt32(scale);

                // Kill the idling process
                foreach (var badge in AllBadges.Where(b => b.InIdle))
                {
                    badge.StopIdle();
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex, "frmMain -> StopIdle");
            }
        }
Exemplo n.º 8
0
        private void lnkResetCookies_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            // Clear the settings
            Settings.Default.sessionid     = string.Empty;
            Settings.Default.steamLogin    = string.Empty;
            Settings.Default.myProfileURL  = string.Empty;
            Settings.Default.steamparental = string.Empty;
            Settings.Default.Save();

            // Stop the steam-idle process
            StopIdle();

            // Clear the badges list
            AllBadges.Clear();

            // Resize the form
            var graphics = CreateGraphics();
            var scale    = graphics.DpiY * 1.625;

            Height = Convert.ToInt32(scale);

            // Set timer intervals
            tmrCheckSteam.Interval      = 500;
            tmrCheckCookieData.Interval = 500;

            // Hide lblDrops and lblIdle
            lblDrops.Visible = false;
            lblIdle.Visible  = false;

            // Set IsCookieReady to false
            IsCookieReady = false;

            // Re-enable tmrReadyToGo
            tmrReadyToGo.Enabled = true;
        }
Exemplo n.º 9
0
        private void btnSkip_Click(object sender, EventArgs e)
        {
            if (!IsSteamReady)
            {
                return;
            }

            StopIdle();
            AllBadges.RemoveAll(b => Equals(b, CurrentBadge));
            StartIdle();
        }
Exemplo n.º 10
0
        private void RunNextIdle()
        {
            if (!IsSteamReady)
            {
                return;
            }

            StopIdle();
            AllBadges.RemoveAll(b => Equals(b, CurrentBadge));
            StartIdle();
        }
Exemplo n.º 11
0
        /// <summary>
        /// Performs reset to initial state
        /// </summary>
        private void ResetClientStatus()
        {
            // Clear the settings
            Settings.Default.sessionid        = string.Empty;
            Settings.Default.steamLogin       = string.Empty;
            Settings.Default.myProfileURL     = string.Empty;
            Settings.Default.steamparental    = string.Empty;
            Settings.Default.mainWindowLeft   = 0;
            Settings.Default.mainWindowTop    = 0;
            Settings.Default.useMainWindowPos = false;
            Settings.Default.Save();

            // Stop the steam-idle process
            StopIdle();

            // Clear the badges list
            AllBadges.Clear();

            // Resize the form
            var graphics = CreateGraphics();
            var scale    = graphics.DpiY * 1.625;

            Height = Convert.ToInt32(scale);

            // Set timer intervals
            tmrCheckSteam.Interval      = 500;
            tmrCheckCookieData.Interval = 500;

            // Hide signed user name
            if (Settings.Default.showUsername)
            {
                lblSignedOnAs.Text    = String.Empty;
                lblSignedOnAs.Visible = false;
            }

            // Hide spinners
            picReadingPage.Visible = false;

            // Hide lblDrops and lblIdle
            lblDrops.Visible = false;
            lblIdle.Visible  = false;

            // Set IsCookieReady to false
            IsCookieReady = false;

            // Re-enable tmrReadyToGo
            tmrReadyToGo.Enabled = true;
        }
Exemplo n.º 12
0
        public void SortBadges(string method)
        {
            lblDrops.Text = localization.strings.sorting_results;
            switch (method)
            {
            case "mostcards":
                AllBadges = AllBadges.OrderByDescending(b => b.RemainingCard).ToList();
                break;

            case "leastcards":
                AllBadges = AllBadges.OrderBy(b => b.RemainingCard).ToList();
                break;

            default:
                return;
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Processes all badges on page
        /// </summary>
        /// <param name="document">HTML document (1 page) from x</param>
        private void ProcessBadgesOnPage(HtmlDocument document) // AKA6
        {
            foreach (var badge in document.DocumentNode.SelectNodes("//div[@class=\"badge_row is_link\"]"))
            {
                var appIdNode = badge.SelectSingleNode(".//a[@class=\"badge_row_overlay\"]").Attributes["href"].Value;
                var appid     = Regex.Match(appIdNode, @"gamecards/(\d+)/").Groups[1].Value;

                if (string.IsNullOrWhiteSpace(appid) || Settings.Default.blacklist.Contains(appid) || appid == "368020" || appid == "335590" || appIdNode.Contains("border=1"))
                {
                    continue;
                }

                var hoursNode = badge.SelectSingleNode(".//div[@class=\"badge_title_stats_playtime\"]");
                var hours     = hoursNode == null ? string.Empty : Regex.Match(hoursNode.InnerText, @"[0-9\.,]+").Value;

                var nameNode = badge.SelectSingleNode(".//div[@class=\"badge_title\"]");
                var name     = WebUtility.HtmlDecode(nameNode.FirstChild.InnerText).Trim();

                var cardNode = badge.SelectSingleNode(".//span[@class=\"progress_info_bold\"]");
                var cards    = cardNode == null ? string.Empty : Regex.Match(cardNode.InnerText, @"[0-9]+").Value;

                var badgeInMemory = AllBadges.FirstOrDefault(b => b.StringId == appid);
                if (badgeInMemory != null)
                {
                    badgeInMemory.UpdateStats(cards, hours);
                }
                else
                {
                    // un 0 antes = desactivado
                    var ets2   = "227300";
                    var ats    = "270880"; // en blacklist
                    var gtav   = "271590"; // si no tiene cromos no pasa por la lista
                    var rocket = "0252950";
                    // Agregamos if para regular que juegos ingresan a la lista
                    // WhiteList
                    if (String.Equals(appid, gtav) || String.Equals(appid, ets2) || String.Equals(appid, ats) || String.Equals(appid, rocket))
                    {
                        AllBadges.Add(new Badge(appid, name, cards, hours));
                    }
                }
            }
        }
Exemplo n.º 14
0
        private void btnSkip_Click(object sender, EventArgs e)
        {
            if (!IsSteamReady)
            {
                return;
            }

            StopIdle();
            AllBadges.RemoveAll(b => Equals(b, CurrentBadge));
            UpdateStateInfo();
            if (CanIdleBadges.Any())
            {
                StartIdle(CanIdleBadges.First());
                UpdateStateInfo();
            }
            else
            {
                IdleComplete();
            }
        }
Exemplo n.º 15
0
        public void StopIdle()
        {
            try
            {
                LblGameName.Visible    = false;
                PbxApp.Image           = null;
                PbxApp.Visible         = false;
                LvwGamesState.Visible  = false;
                BtnPause.Visible       = false;
                BtnSkip.Visible        = false;
                LblCurrentStatus.Text  = localization.strings.not_ingame;
                LblHoursPlayed.Visible = false;
                PbxIdleStatus.Image    = null;

                // Stop the card drop check timer
                TmrCardDropCheck.Enabled = false;

                // Stop the statistics timer
                TmrStatistics.Stop();
                TmrStatistics.Enabled = false;

                // Hide the status bar
                SstFooter.Visible = false;

                // Resize the form
                var graphics = CreateGraphics();
                var scale    = graphics.DpiY * 1.9583;
                Height = Convert.ToInt32(scale);

                // Kill the idling process
                foreach (var badge in AllBadges.Where(b => b.InIdle))
                {
                    badge.StopIdle();
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex, "frmMain -> StopIdle");
            }
        }
Exemplo n.º 16
0
        private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Show the form
            String  previous          = Settings.Default.sort;
            Boolean previous_behavior = Settings.Default.OnlyOneGameIdle;
            Form    frm = new frmSettings();

            frm.ShowDialog();

            if (previous != Settings.Default.sort || previous_behavior != Settings.Default.OnlyOneGameIdle)
            {
                StopIdle();
                AllBadges.Clear();
                tmrReadyToGo.Enabled = true;
            }

            if (Settings.Default.showUsername && IsCookieReady)
            {
                lblSignedOnAs.Text    = SteamProfile.GetSignedAs();
                lblSignedOnAs.Visible = Settings.Default.showUsername;
            }
        }
Exemplo n.º 17
0
        private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Show the form
            var previous = Settings.Default.sort;
            var frm      = new frmSettings();

            frm.ShowDialog();

            if (previous != Settings.Default.sort)
            {
                StopIdle();
                AllBadges.Clear();
                tmrReadyToGo.Enabled = true;
            }

            if (Settings.Default.showUsername)
            {
                lblSignedOnAs.Text = "Signed in as " + GetUserName();
            }

            lblSignedOnAs.Visible = Settings.Default.showUsername;
        }
Exemplo n.º 18
0
 public async Task CheckCardDrops(Badge badge)
 {
     if (!await badge.CanCardDrops())
     {
         NextIdle();
         lblCurrentRemaining.Text = badge.RemainingCard + " " + localization.strings.card_drops_remaining;
         pbIdle.Value             = pbIdle.Maximum - badge.RemainingCard;
         lblHoursPlayed.Text      = badge.HoursPlayed + " " + localization.strings.hrs_on_record;
         UpdateStateInfo();
     }
     else
     {
         // zhenying make it skip to next item
         StopIdle();
         AllBadges.RemoveAll(b => Equals(b, CurrentBadge));
         AllBadges.Add(CurrentBadge);
         StartIdle();
         // Resets the clock based on the number of remaining drops
         //TimeLeft = badge.RemainingCard == 1 ? 300 : 900;
         //TimeLeft = badge.RemainingCard == 1 ? 10 : 30;
     }
 }
Exemplo n.º 19
0
        private async void btnSkip_Click(object sender, EventArgs e)
        {
            if (!IsSteamReady)
            {
                return;
            }

            lblCurrentStatus.Visible = false;
            StopIdle();
            AllBadges.RemoveAll(b => Equals(b, CurrentBadge));

            if (!CanIdleBadges.Any())
            {
                // If there are no more games to idle, reload the badges
                picReadingPage.Visible = true;
                lblIdle.Visible        = false;
                lblDrops.Visible       = true;
                lblDrops.Text          = localization.strings.reading_badge_page + ", " + localization.strings.please_wait;
                await LoadBadgesAsync();
            }

            StartIdle();
        }
Exemplo n.º 20
0
        private void _FillAveragePrice()
        {
            if (!AllBadges.Any() || AllBadges.First().AveragePrice != 0)
            {
                return;
            }

            var query = string.Format("http://api.enhancedsteam.com/market_data/average_card_prices/im.php?appids={0}",
                                      string.Join(",", AllBadges.Select(b => b.AppId)));
            var json = new WebClient()
            {
                Encoding = Encoding.UTF8
            }.DownloadString(query);
            var convertedJson = JsonConvert.DeserializeObject <EnhancedsteamHelper>(json);

            foreach (var price in convertedJson.Avg_Values)
            {
                var badge = AllBadges.SingleOrDefault(b => b.AppId == price.AppId);
                if (badge != null)
                {
                    badge.AveragePrice = price.Avg_Price;
                }
            }
        }
Exemplo n.º 21
0
 private void ReloadList()
 {
     StopIdle();
     AllBadges.Clear();
     tmrReadyToGo.Enabled = true;
 }
Exemplo n.º 22
0
        private async void tmrCardDropCheck_Tick(object sender, EventArgs e)
        {
            if (TimeLeft <= 0)
            {
                tmrCardDropCheck.Enabled = false;

                // solo mode
                if (CurrentBadge != null)
                {
                    CurrentBadge.Idle();

                    if (PreviousBadge != null)
                    {
                        await PreviousBadge.CanCardDrops();

                        if (PreviousCardsRemaining != PreviousBadge.RemainingCard)
                        {
                            //前のゲームのカードがドロップしたようなので、ファストモード成功。
                            //あと10秒くらいまって次のカードへ。
                            TimeLeft = 10;

                            //前のゲームにカードが残っているようなら、ファストモードにしておく。
                            if (PreviousBadge.RemainingCard > 0)
                            {
                                PreviousBadge.FastMode = true;

                                if (Settings.Default.checkNoDrop)
                                {
                                    //次も同じゲームをIdleする
                                    AllBadges.RemoveAll(b => Equals(b, PreviousBadge));
                                    AllBadges.Insert(0, PreviousBadge);
                                }
                                else
                                {
                                    //追加Idle
                                    if (PreviousBadge.HoursPlayed <= 10)
                                    {
                                        while (PreviousBadge.HoursPlayed > PreviousBadge.MinPlayTime)
                                        {
                                            PreviousBadge.MinPlayTime += 0.5;
                                        }
                                    }
                                    else
                                    {
                                        //Idle時間が10時間を越えていたならFastModeをやめる。
                                        PreviousBadge.FastMode = false;
                                    }
                                }
                            }
                        }
                        else
                        {
                            //ファストモード失敗。

                            //最低プレイ時間を30min間延ばす
                            //ただしプレイ時間が10時間以上のものは通常モードにする。
                            //(無限にIdleするのを防ぐため。)
                            if (PreviousBadge.HoursPlayed <= 10)
                            {
                                while (PreviousBadge.HoursPlayed > PreviousBadge.MinPlayTime)
                                {
                                    PreviousBadge.MinPlayTime += 0.5;
                                }

                                //あと20秒くらいまって次のカードへ。
                                TimeLeft = 10;
                            }
                            else
                            {
                                PreviousBadge.FastMode = false;

                                //次のゲームへ。
                                NextIdle();
                            }
                        }

                        //前のゲームの処理は終わり
                        PreviousBadge = null;
                    }
                    else
                    {
                        if (Settings.Default.fastModeEnable && CurrentBadge.FastMode)
                        {
                            //現在のゲームとカードドロップ数を記録しておく
                            PreviousCardsRemaining = CurrentBadge.RemainingCard;
                            PreviousBadge          = CurrentBadge;

                            //現在のゲームを最後尾へ
                            AllBadges.RemoveAll(b => Equals(b, CurrentBadge));
                            AllBadges.Add(CurrentBadge);

                            //次のゲームへ
                            NextIdle();
                        }
                        else
                        {
                            //通常モード
                            await CheckCardDrops(CurrentBadge);
                        }
                    }
                }

                var isMultipleIdle = CanIdleBadges.Any(b => !Equals(b, CurrentBadge) && b.InIdle);
                if (isMultipleIdle)
                {
                    await LoadBadgesAsync();

                    UpdateIdleProcesses();

                    isMultipleIdle = CanIdleBadges.Any(b => b.HoursPlayed < b.MinPlayTime && b.InIdle);
                    if (isMultipleIdle)
                    {
                        TimeLeft = 360;
                    }
                }

                // Check if user is authenticated and if any badge left to idle
                // There should be check for IsCookieReady, but property is set in timer tick, so it could take some time to be set.
                tmrCardDropCheck.Enabled = !string.IsNullOrWhiteSpace(Settings.Default.sessionid) && IsSteamReady && CanIdleBadges.Any() && TimeLeft != 0;
            }
            else
            {
                TimeLeft      = TimeLeft - 1;
                lblTimer.Text = TimeSpan.FromSeconds(TimeLeft).ToString(@"mm\:ss");
                if (Settings.Default.fastModeEnable && CurrentBadge != null)
                {
                    lblTimer.Text += CurrentBadge.FastMode ? "(F)" : "(N)";
                }
            }
        }
Exemplo n.º 23
0
 public void AddBadge(BadgeModel badge)
 {
     AllBadges.Add(badge);
     badge.PropertyChanged += BadgeIdleStatusChanged;
 }
Exemplo n.º 24
0
        public async Task LoadBadgesAsync()
        {
            var profileLink = Settings.Default.myProfileURL + "/badges";
            var document    = new HtmlDocument();
            var pages       = new List <string>()
            {
                "?p=1"
            };

            try
            {
                for (var i = 0; i < pages.Count; i++)
                {
                    var response = await CookieClient.GetHttpAsync(profileLink + pages[i]);

                    document.LoadHtml(response);

                    var pageNodes = document.DocumentNode.SelectNodes("//a[@class=\"pagelink\"]");
                    if (pageNodes != null)
                    {
                        pages.AddRange(pageNodes.Select(p => p.Attributes["href"].Value).Distinct());
                        pages = pages.Distinct().ToList();
                    }

                    foreach (var badge in document.DocumentNode.SelectNodes("//div[@class=\"badge_row is_link\"]"))
                    {
                        var appIdNode = badge.SelectSingleNode(".//a[@class=\"badge_row_overlay\"]").Attributes["href"].Value;
                        var appid     = Regex.Match(appIdNode, @"gamecards/(\d+)/").Groups[1].Value;

                        if (string.IsNullOrWhiteSpace(appid) || Settings.Default.blacklist.Contains(appid) || appid == "368020" || appid == "335590")
                        {
                            continue;
                        }

                        var hoursNode = badge.SelectSingleNode(".//div[@class=\"badge_title_stats_playtime\"]");
                        var hours     = hoursNode == null ? string.Empty : Regex.Match(hoursNode.InnerText, @"[0-9\.,]+").Value;

                        var nameNode = badge.SelectSingleNode(".//div[@class=\"badge_title\"]");
                        var name     = WebUtility.HtmlDecode(nameNode.FirstChild.InnerText).Trim();

                        var cardNode = badge.SelectSingleNode(".//span[@class=\"progress_info_bold\"]");
                        var cards    = cardNode == null ? string.Empty : Regex.Match(cardNode.InnerText, @"[0-9]+").Value;

                        var badgeInMemory = AllBadges.FirstOrDefault(b => b.StringId == appid);
                        if (badgeInMemory != null)
                        {
                            badgeInMemory.UpdateStats(cards, hours);
                        }
                        else
                        {
                            AllBadges.Add(new Badge(appid, name, cards, hours));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex, "Badge -> LoadBadgesAsync, for profile = " + Settings.Default.myProfileURL);
                // badge page didn't load
                picReadingPage.Image   = null;
                lblDrops.Text          = "Badge page didn't load, will retry in 10 seconds";
                ReloadCount            = 10;
                tmrBadgeReload.Enabled = true;
                return;
            }

            SortBadges(Settings.Default.sort);

            picReadingPage.Visible = false;
            UpdateStateInfo();

            if (CardsRemaining == 0)
            {
                IdleComplete();
            }
        }
Exemplo n.º 25
0
 /// <summary>
 /// Updates number of active idle processes
 /// </summary>
 private void CheckIdleStatus()
 {
     ActiveProcessCount = AllBadges.Concat(Games).Count(b => b.CardIdleActive);
 }