Example #1
0
        /// <summary>
        /// Gets match details for a single match, this includes player builds and details. Requires "MatchClass".
        /// </summary>
        public static MatchDetailsModel GetMatchDetail(long matchid)
        {
            string response = DownloadSteamAPIString(MATCHDETAILSURL, API + "&match_id=" + matchid);

            var detail = JsonConvert.DeserializeObject <MatchDetailsRootObject>(response);
            MatchDetailsModel match = detail.Result;

            #region MetaData

            if (LobbyType.TryGetValue(match.Lobby_Type, out string lobby))
            {
                match.Lobbytype = lobby;
            }

            if (GameModes.TryGetValue(match.Game_Mode, out string mode))
            {
                match.Game_ModeStr = mode;
            }

            match.StartTime = StringManipulation.UnixTimeStampToDateTime(match.Start_Time);
            string playedTimeAgo = "";

            if ((DateTime.Now - match.StartTime).TotalDays < 1)
            {
                playedTimeAgo = Math.Ceiling((DateTime.Now - match.StartTime).TotalHours).ToString() + " hours ago";
            }
            else
            {
                playedTimeAgo = Math.Ceiling((DateTime.Now - match.StartTime).TotalDays).ToString() + " days ago";
            }

            match.PlayedTimeAgo = playedTimeAgo;

            TimeSpan timeToConvert = TimeSpan.FromSeconds(match.Duration);
            match.DurationStr = timeToConvert.ToString(@"mm\:ss");

            timeToConvert             = TimeSpan.FromSeconds(match.First_Blood_Time);
            match.First_Blood_TimeStr = timeToConvert.ToString(@"mm\:ss");

            timeToConvert       = TimeSpan.FromSeconds(match.Start_Time);
            match.Start_TimeStr = match.StartTime.ToString(@"dd MMM yyyy HH\:mm\:ss");

            #endregion

            #region PlayerInfo

            foreach (var player in match.Players)
            {
                player.Name      = ConvertIDtoName(player.Hero_ID, Heroes);
                player.HeroImage = ConvertIDtoImageUrl(player.Hero_ID, Heroes);
                player.Steamid64 = StringManipulation.SteamIDConverter(player.Account_ID);
                player.Steamid32 = StringManipulation.SteamIDConverter64to32(player.Steamid64);

                SteamAccountPlayerModel steamaccount = GetSteamAccount(player.Account_ID);
                player.PlayerName = string.IsNullOrEmpty(steamaccount.PersonaName) ? "Anonymous" : steamaccount.PersonaName;

                player.Tower_Damage = player.Tower_Damage == 0 ? 0 : player.Tower_Damage;

                // getting item names based on the id number
                player.Item0      = player.Item_0 > 0 ? ConvertIDtoName(player.Item_0, Items) : null;
                player.Item0Image = player.Item_0 > 0 ? ConvertIDtoImageUrl(player.Item_0, Items) : BLANKIMG;

                player.Item1      = player.Item_1 > 0 ? ConvertIDtoName(player.Item_1, Items) : null;
                player.Item1Image = player.Item_1 > 0 ? ConvertIDtoImageUrl(player.Item_1, Items) : BLANKIMG;

                player.Item2      = player.Item_2 > 0 ? ConvertIDtoName(player.Item_2, Items) : null;
                player.Item2Image = player.Item_2 > 0 ? ConvertIDtoImageUrl(player.Item_2, Items) : BLANKIMG;

                player.Item3      = player.Item_3 > 0 ? ConvertIDtoName(player.Item_3, Items) : null;
                player.Item3Image = player.Item_3 > 0 ? ConvertIDtoImageUrl(player.Item_3, Items) : BLANKIMG;

                player.Item4      = player.Item_4 > 0 ? ConvertIDtoName(player.Item_4, Items) : null;
                player.Item4Image = player.Item_4 > 0 ? ConvertIDtoImageUrl(player.Item_4, Items) : BLANKIMG;

                player.Item5      = player.Item_5 > 0 ? ConvertIDtoName(player.Item_5, Items) : null;
                player.Item5Image = player.Item_5 > 0 ? ConvertIDtoImageUrl(player.Item_5, Items) : BLANKIMG;

                player.Backpack0      = player.Backpack_0 > 0 ? ConvertIDtoName(player.Backpack_0, Items) : null;
                player.Backpack0Image = player.Backpack_0 > 0 ? ConvertIDtoImageUrl(player.Backpack_0, Items) : BLANKIMG;

                player.Backpack1      = player.Backpack_1 > 0 ? ConvertIDtoName(player.Backpack_1, Items) : null;
                player.Backpack1Image = player.Backpack_1 > 0 ? ConvertIDtoImageUrl(player.Backpack_1, Items) : BLANKIMG;

                player.Backpack2      = player.Backpack_2 > 0 ? ConvertIDtoName(player.Backpack_2, Items) : null;
                player.Backpack2Image = player.Backpack_2 > 0 ? ConvertIDtoImageUrl(player.Backpack_2, Items) : BLANKIMG;

                if (player.Ability_Upgrades != null)
                {
                    foreach (var ability in player.Ability_Upgrades)
                    {
                        // clean up the object a bit and put
                        // id where it should be.
                        ability.ID = ability.Ability;

                        // map the id to a readable name.
                        ability.Name = ConvertIDtoName(Convert.ToInt32(ability.Ability), Abilities);

                        // add the upgrade seconds to the original start
                        // time to get the upgrade time.
                        ability.UpgradeTime = match.StartTime.AddSeconds(ability.Time);
                    }
                }
                else
                {
                    // sb.AppendLine("No abilities data");
                }
            }

            #endregion

            return(match);
        }