protected void Page_Load(object sender, EventArgs e) { string playerStr = PageUtility.GetQueryString(Request, "player"); var realm = PageUtility.GetQueryRealm(Request); if (realm == VF_RealmPlayersDatabase.WowRealm.Unknown) { return; } string guildLimit = PageUtility.GetQueryString(Request, "GuildLimit", null); string rankingDetailsInstance = PageUtility.GetQueryString(Request, "RankDetailInstance", null); this.Title = playerStr + " @ " + RealmPlayersServer.StaticValues.ConvertRealmParam(realm) + " | RaidStats"; m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome() + PageUtility.BreadCrumb_AddFinish(realm.ToString()) + PageUtility.BreadCrumb_AddFinish(playerStr)); var summaryDatabase = ApplicationInstance.Instance.GetSummaryDatabase(); if (summaryDatabase == null) { return; } var currPlayerSummary = summaryDatabase.GetPlayerSummary(playerStr, realm); if (currPlayerSummary == null || currPlayerSummary.PlayerBossStats == null || currPlayerSummary.PlayerBossStats.Count == 0) { return; } var realmPlayer = ApplicationInstance.Instance.GetRealmPlayer(playerStr, realm); System.Text.StringBuilder pageBuilder = new System.Text.StringBuilder(10000); pageBuilder.Append("<h1>" + realmPlayer.Name + "</h1>"); pageBuilder.Append("<h4>Character profile: " + PageUtility.CreateLink_Armory_Player_Colored(realmPlayer) + "</h4>"); pageBuilder.Append("<h4>Attended raids in groups</h4>"); var orderedBossFights = currPlayerSummary.AttendedFights.OrderByDescending((_Value) => _Value.EndDateTime); List <VF_RDDatabase.Raid> attendedRaids = new List <VF_RDDatabase.Raid>(); foreach (var attendedBossFight in orderedBossFights) { attendedRaids.AddUnique(attendedBossFight.CacheRaid); } List <string> groupsAttended = new List <string>(); attendedRaids.ForEach((_Value) => groupsAttended.AddUnique(_Value.CacheGroup.GroupName)); foreach (var group in groupsAttended) { var raidsInGroup = attendedRaids.Where((_Value) => _Value.CacheGroup.GroupName == group); //Sorted, last raid attended is the first in list! var factionColor = PageUtility.GetFactionTextColor(raidsInGroup.First().CacheGroup.GetFaction(ApplicationInstance.Instance.GetRealmDB)); pageBuilder.Append(PageUtility.CreateColorString(group, factionColor) + "(" + raidsInGroup.Count() + " raids between " + raidsInGroup.Last().RaidStartDate.ToDateStr() + " and " + raidsInGroup.First().RaidEndDate.ToDateStr() + ")<br/>"); //foreach (var raid in raidsInGroup) //{ // pageBuilder.Append(PageUtility.CreateLink_RaidOverview(raid, raid.RaidStartDate.ToString("yyyy-MM-dd")) + ", "); //} //pageBuilder.Append("<br/>"); } pageBuilder.Append("<h4><a href='BossList.aspx?realm=" + RealmPlayersServer.StaticValues.ConvertRealmParam(realmPlayer.Realm) + "&player=" + realmPlayer.Name + "'>Best boss performances</a></h4>"); //pageBuilder.Append("<p><h3>vs Everything</h3>"); //var averageAll = AverageOverview.GenerateAverageDataSet("All", null, null, realm, guildLimit); //float averageDPS, averageHPS; //var dpsRank = GetDPSRank(averageAll, realmPlayer.Name, out averageDPS); //var hpsRank = GetHPSRank(averageAll, realmPlayer.Name, out averageHPS); //pageBuilder.Append("<h4>Average DPS rank: " + PageUtility.CreateLink("AverageOverview.aspx?Instance=All&realm=" + RealmPlayersServer.StaticValues.ConvertRealmParam(realmPlayer.Realm) + "&andplayer=" + realmPlayer.Name, "#" + dpsRank) + " with DPS " + averageDPS.ToStringDot("0.0") + "</h4>"); //pageBuilder.Append("<h4>Average HPS rank: " + PageUtility.CreateLink("AverageOverview.aspx?Instance=All&realm=" + RealmPlayersServer.StaticValues.ConvertRealmParam(realmPlayer.Realm) + "&andplayer=" + realmPlayer.Name, "#" + hpsRank) + " with HPS " + averageHPS.ToStringDot("0.0") + "</h4>"); //pageBuilder.Append("</p>"); //pageBuilder.Append("<br />"); var realmProgress = GetRealmProgress(realm); string instanceSummary = ""; if (rankingDetailsInstance == "Naxxramas" || (instanceSummary == "" && (int)realmProgress >= (int)VF_RealmPlayersDatabase.WowInstance.Naxxramas)) { instanceSummary = GenerateSummaryForInstance(currPlayerSummary, realmPlayer, "Naxxramas - All Quarters", realm, guildLimit); } if (rankingDetailsInstance == "AQ40" || (instanceSummary == "" && (int)realmProgress >= (int)VF_RealmPlayersDatabase.WowInstance.Temple_Of_Ahn_Qiraj)) { instanceSummary = GenerateSummaryForInstance(currPlayerSummary, realmPlayer, "Ahn'Qiraj Temple", realm, guildLimit); } if (rankingDetailsInstance == "BWL" || (instanceSummary == "" && (int)realmProgress >= (int)VF_RealmPlayersDatabase.WowInstance.Blackwing_Lair)) { instanceSummary = GenerateSummaryForInstance(currPlayerSummary, realmPlayer, "Blackwing Lair", realm, guildLimit); } if (rankingDetailsInstance == "MC" || instanceSummary == "") { instanceSummary = GenerateSummaryForInstance(currPlayerSummary, realmPlayer, "Molten Core", realm, guildLimit); } if (rankingDetailsInstance == "ZG" || instanceSummary == "") { instanceSummary = GenerateSummaryForInstance(currPlayerSummary, realmPlayer, "Zul'Gurub", realm, guildLimit); } pageBuilder.Append(instanceSummary); ///////////////////////////////////////////// pageBuilder.Append("<h2>Attended raids</h2>"); foreach (var attendedRaid in attendedRaids) { pageBuilder.Append(PageUtility.CreateLink_RaidOverview(attendedRaid, attendedRaid.RaidInstance + " @ " + attendedRaid.RaidStartDate) + "<br/>"); } //pageBuilder.Append("<h2>Average Performance vs</h2>"); //foreach (var bossData in currPlayerSummary.PlayerBossStats) //{ // if (bossData.Value.GetSamplesCount() < 3) // continue; // List<VF_RDDatabase.PlayerFightData> dpsSamplesUsed = null; // List<VF_RDDatabase.PlayerFightData> hpsSamplesUsed = null; // List<VF_RDDatabase.PlayerFightData> deathSamplesUsed = null; // float averageDPS = bossData.Value.GetAverageDPS(5, 6, 3, out dpsSamplesUsed); // float averageEffectiveHPS = bossData.Value.GetAverageEffectiveHPS(5, 6, 3, out hpsSamplesUsed); // float averageRawHPS = bossData.Value.GetAverageRawHPS(5, 6, 3); // float averageDeaths = bossData.Value.GetAverageDeaths(5, 6, 3, out deathSamplesUsed); // pageBuilder.Append("<h3>" + bossData.Key + ":</h3>"); // if (averageDPS > 100 || averageEffectiveHPS < 20) // { // pageBuilder.Append("<br/>DPS(<font color='#ff0000'>" + averageDPS.ToStringDot("0.0") + "</font>) Samples("); // foreach (var dpsSample in dpsSamplesUsed) // { // pageBuilder.Append(PageUtility.CreateLink_FightOverview(dpsSample.CacheBossFight, dpsSample.CacheBossFight.StartDateTime.ToString("yyyy-MM-dd")) + ", "); // } // pageBuilder.Length = pageBuilder.Length - 2; // pageBuilder.Append(")"); // } // if(averageEffectiveHPS >= 20) // { // pageBuilder.Append("<br/>Effective HPS(<font color='#ff0000'>" + averageEffectiveHPS.ToStringDot("0.0") + "</font>) Samples("); // foreach (var hpsSample in hpsSamplesUsed) // { // pageBuilder.Append(PageUtility.CreateLink_FightOverview(hpsSample.CacheBossFight, hpsSample.CacheBossFight.StartDateTime.ToString("yyyy-MM-dd")) + ", "); // } // pageBuilder.Length = pageBuilder.Length - 2; // pageBuilder.Append(")"); // } // pageBuilder.Append("<br/>Deaths(<font color='#ff0000'>" + averageDeaths.ToStringDot("0%") + "</font>) Samples("); // foreach (var deathSample in deathSamplesUsed) // { // pageBuilder.Append(PageUtility.CreateLink_FightOverview(deathSample.CacheBossFight, deathSample.CacheBossFight.StartDateTime.ToString("yyyy-MM-dd")) + ", "); // } // pageBuilder.Length = pageBuilder.Length - 2; // pageBuilder.Append(")<br/>"); //} m_PageHTML = new MvcHtmlString(pageBuilder.ToString()); }
protected void Page_Load(object sender, EventArgs e) { var realm = PageUtility.GetQueryRealm(Request); if (realm == WowRealm.Unknown) { return; } var wowVersion = StaticValues.GetWowVersion(realm); var onlinePlayersDB = DatabaseAccess.GetRealmOnlinePlayers(this, realm); this.Title = "OnlineStats @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers"; m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome() + PageUtility.BreadCrumb_AddRealm(realm) + PageUtility.BreadCrumb_AddFinish("OnlineStats")); m_PageInfoHTML = new MvcHtmlString("<h1>OnlineStats" + "</h1><p>OnlineStats for realm " + StaticValues.ConvertRealmViewing(realm) + "</p>" + "<p>" + onlinePlayersDB.OnlineEntries.Count + " nr of onlinestats entries!</p>"); string graphSection = ""; { List <int> dataX = new List <int>(); List <int> dataY1 = new List <int>(); List <int> dataY2 = new List <int>(); List <int> dataY3 = new List <int>(); List <int> dataY4 = new List <int>(); List <int> dataY5 = new List <int>(); List <string> labels = new List <string>(); DateTime currOnlineDateTime = DateTime.UtcNow.AddDays(-14); currOnlineDateTime = currOnlineDateTime.AddMinutes(-currOnlineDateTime.Minute).AddSeconds(-currOnlineDateTime.Second).AddHours(1); //Remove minute and second significants int day = 0; HashSet <string> onlinePlayers = new HashSet <string>(); HashSet <string> playersInRaidAndDungeons = new HashSet <string>(); HashSet <string> playersInBattlegrounds = new HashSet <string>(); HashSet <string> playersAtLvl60 = new HashSet <string>(); Action addGraphEntry = () => { labels.Add(currOnlineDateTime.ToDateStr() + "<br />Players online: " + PageUtility.CreateColorString(onlinePlayers.Count.ToString(), System.Drawing.Color.Green) + "<br />Players in Raids/Dungeons: " + PageUtility.CreateColorString(playersInRaidAndDungeons.Count.ToString() + (onlinePlayers.Count != 0 ? " ( " + (((double)playersInRaidAndDungeons.Count / (double)onlinePlayers.Count) * 100).ToStringDot("0.0") + "% )" : ""), System.Drawing.Color.Yellow) + "<br />Players in Battlegrounds: " + PageUtility.CreateColorString(playersInBattlegrounds.Count.ToString() + (onlinePlayers.Count != 0 ? " ( " + (((double)playersInBattlegrounds.Count / (double)onlinePlayers.Count) * 100).ToStringDot("0.0") + "% )" : ""), System.Drawing.Color.Red) + "<br />Players below lvl 60: " + PageUtility.CreateColorString((onlinePlayers.Count - playersAtLvl60.Count).ToString() + (onlinePlayers.Count != 0 ? " ( " + (((double)(onlinePlayers.Count - playersAtLvl60.Count) / (double)onlinePlayers.Count) * 100).ToStringDot("0.0") + "% )" : ""), System.Drawing.Color.Cyan) + "<br />Players at lvl 60: " + PageUtility.CreateColorString(playersAtLvl60.Count.ToString() + (onlinePlayers.Count != 0 ? " ( " + (((double)playersAtLvl60.Count / (double)onlinePlayers.Count) * 100).ToStringDot("0.0") + "% )" : ""), System.Drawing.Color.Purple)); dataX.Add(++day); dataY1.Add(onlinePlayers.Count); dataY2.Add(playersInRaidAndDungeons.Count); dataY3.Add(playersInBattlegrounds.Count); dataY4.Add(playersAtLvl60.Count); dataY5.Add(onlinePlayers.Count - playersAtLvl60.Count); onlinePlayers.Clear(); playersInRaidAndDungeons.Clear(); playersInBattlegrounds.Clear(); playersAtLvl60.Clear(); }; foreach (var onlineEntry in onlinePlayersDB.OnlineEntries) { if (onlineEntry.DateTime_EndSpan < currOnlineDateTime) { continue; } while (currOnlineDateTime <= onlineEntry.DateTime_StartSpan.AddHours(-8)) { addGraphEntry(); currOnlineDateTime = currOnlineDateTime.AddHours(8); } foreach (var entry in onlineEntry.OnlinePlayers) { onlinePlayers.Add(entry.Key); if (StaticValues.IsZoneRaid(entry.Value.Zone) || StaticValues.IsZoneDungeon(entry.Value.Zone)) { playersInRaidAndDungeons.Add(entry.Key); } if (StaticValues.IsZoneBattleground(entry.Value.Zone)) { playersInBattlegrounds.Add(entry.Key); } if (entry.Value.Level == 60) { playersAtLvl60.Add(entry.Key); } } foreach (var entry in onlineEntry.OnlinePlayers_Duplicates) { if (StaticValues.IsZoneRaid(entry.Zone) || StaticValues.IsZoneDungeon(entry.Zone)) { playersInRaidAndDungeons.Add(entry.Name); } if (StaticValues.IsZoneBattleground(entry.Zone)) { playersInBattlegrounds.Add(entry.Name); } if (entry.Level == 60) { playersAtLvl60.Add(entry.Name); } } } addGraphEntry(); graphSection += "<div class='fame' style='min-width: 1100px; max-width: 1100px'>" + PageUtility.CreateGraph(dataX, new List <Tuple <List <int>, System.Drawing.Color> > { new Tuple <List <int>, System.Drawing.Color>(dataY5, System.Drawing.Color.Cyan), new Tuple <List <int>, System.Drawing.Color>(dataY4, System.Drawing.Color.Purple), new Tuple <List <int>, System.Drawing.Color>(dataY3, System.Drawing.Color.Red), new Tuple <List <int>, System.Drawing.Color>(dataY2, System.Drawing.Color.Yellow), new Tuple <List <int>, System.Drawing.Color>(dataY1, System.Drawing.Color.Green) }, labels , 1100, 400) + "</div>"; } m_BodyHTML = new MvcHtmlString(graphSection); }
private static string GenerateSummaryForInstance(VF_RDDatabase.PlayerSummary _PlayerSummary, PlayerData _Player, string _Instance, VF_RealmPlayersDatabase.WowRealm _Realm, string _GuildLimit = null) { string realmStr = RealmPlayersServer.StaticValues.ConvertRealmParam(_Realm); System.Text.StringBuilder page = new System.Text.StringBuilder(""); int bossesData = 0; foreach (var boss in BossInformation.BossesInInstanceNoOptional[_Instance]) { if (_PlayerSummary.PlayerBossStats.ContainsKey(boss) == false) { continue; } if (bossesData == 0) { page.Append("<table class='table'><thead><tr><th>Boss</th><th>DPS #Rank</th><th>HPS #Rank</th><th>Average DPS</th><th>Average HPS</th><th>Top DPS</th><th>Top HPS</th><th>Kill Count</th></thead><tbody>"); } ++bossesData; List <VF_RDDatabase.PlayerFightData> dpsSamplesUsed = null; List <VF_RDDatabase.PlayerFightData> hpsSamplesUsed = null; var playerBossData = _PlayerSummary.PlayerBossStats[boss]; if (playerBossData.m_PlayerFightDatas.Count < 3 || (_Instance != "Molten Core" && playerBossData.m_PlayerFightDatas.Count < 4)) { return(""); } playerBossData.GetAverageDPS(5, 6, 3, out dpsSamplesUsed); playerBossData.GetAverageEffectiveHPS(5, 6, 3, out hpsSamplesUsed); float bwlBossDPS = 0.0f; float bwlBossHPS = 0.0f; var bwlBossDataSet = AverageOverview.GenerateAverageDataSet(boss, null, null, _Realm, _GuildLimit); var bwlBossDPSRank = GetDPSRank(bwlBossDataSet, _PlayerSummary.Name, out bwlBossDPS); var bwlBossDPSRankClass = GetDPSRank(bwlBossDataSet, _PlayerSummary.Name, out bwlBossDPS, (PlayerData _Character) => { return(_Character.Character.Class == _Player.Character.Class); }); var bwlBossHPSRank = GetHPSRank(bwlBossDataSet, _PlayerSummary.Name, out bwlBossHPS); var bwlBossHPSRankClass = GetHPSRank(bwlBossDataSet, _PlayerSummary.Name, out bwlBossHPS, (PlayerData _Character) => { return(_Character.Character.Class == _Player.Character.Class); }); //page += "<h5>" + boss + "</h5>"; //page += "DPS Rank: #" + bwlBossDPSRank + " with DPS " + bwlBossDPS.ToStringDot("0.0"); string dpsSamplesStr = ""; if (dpsSamplesUsed.Count > 0) { dpsSamplesStr = " ("; for (int i = 0; i < dpsSamplesUsed.Count; ++i) { dpsSamplesStr += PageUtility.CreateLink_FightOverview(dpsSamplesUsed[i].CacheBossFight, dpsSamplesUsed[i].DPS.ToStringDot("0.0")) + ", "; } dpsSamplesStr = dpsSamplesStr.Substring(0, dpsSamplesStr.Length - 2); dpsSamplesStr += ")"; } string hpsSamplesStr = ""; if (hpsSamplesUsed.Count > 0) { hpsSamplesStr = " ("; for (int i = 0; i < hpsSamplesUsed.Count; ++i) { hpsSamplesStr += PageUtility.CreateLink_FightOverview(hpsSamplesUsed[i].CacheBossFight, hpsSamplesUsed[i].EffectiveHPS.ToStringDot("0.0")) + ", "; } hpsSamplesStr = hpsSamplesStr.Substring(0, hpsSamplesStr.Length - 2); hpsSamplesStr += ")"; } page.Append("<tr>"); page.Append("<td>" + boss + "</td>"); if (bwlBossDPS != 0.0f || bwlBossHPS != 0.0f) { page.Append("<td>" + PageUtility.CreateLink("AverageOverview.aspx?Boss=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, PageUtility.CreateColorString("#" + bwlBossDPSRank, RPColor.Red)) + " / "); page.Append(PageUtility.CreateLink("AverageOverview.aspx?Boss=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name + "&ClassLimit=" + ClassControl.GetClassLimitStr(_Player.Character.Class), PageUtility.CreateColorString("#" + bwlBossDPSRankClass, _Player.Character.Class)) + "</td>"); page.Append("<td>" + PageUtility.CreateLink("AverageOverview.aspx?Boss=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, PageUtility.CreateColorString("#" + bwlBossHPSRank, RPColor.Green)) + " / "); page.Append(PageUtility.CreateLink("AverageOverview.aspx?Boss=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name + "&ClassLimit=" + ClassControl.GetClassLimitStr(_Player.Character.Class), PageUtility.CreateColorString("#" + bwlBossHPSRankClass, _Player.Character.Class)) + "</td>"); } else { page.Append("<td>#??(inactive)</td>"); page.Append("<td>#??(inactive)</td>"); } page.Append("<td>" + PageUtility.CreateLink("AverageOverview.aspx?Boss=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, PageUtility.CreateColorString(bwlBossDPS.ToStringDot("0.0"), RPColor.Red)) + dpsSamplesStr + "</td>"); page.Append("<td>" + PageUtility.CreateLink("AverageOverview.aspx?Boss=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, PageUtility.CreateColorString(bwlBossHPS.ToStringDot("0.0"), RPColor.Green)) + hpsSamplesStr + "</td>"); page.Append("<td>" + PageUtility.CreateLink("FightOverallOverview.aspx?FightName=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, "view") + "</td>"); page.Append("<td>" + PageUtility.CreateLink("FightOverallOverview.aspx?FightName=" + boss + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, "view") + "</td>"); page.Append("<td>" + _PlayerSummary.AttendedFights.Count((_Value) => _Value.BossName == boss) + "</td>"); page.Append("</tr>"); } if (bossesData == 0) { return(""); } else if (bossesData > 0) { page.Append("</tbody></table>"); } string averagePageData = "<p><h3>Active Ranking in " + _Instance + "</h3>"; { var bwlDataSet = AverageOverview.GenerateAverageDataSet(_Instance, null, null, _Realm, _GuildLimit); float bwlDPS = 0.0f; string bwlDPSRank = GetDPSRank(bwlDataSet, _PlayerSummary.Name, out bwlDPS).ToString(); string bwlDPSRankClass = GetDPSRank(bwlDataSet, _PlayerSummary.Name, out bwlDPS, (PlayerData _Character) => { return(_Character.Character.Class == _Player.Character.Class); }).ToString(); float bwlHPS = 0.0f; string bwlHPSRank = GetHPSRank(bwlDataSet, _PlayerSummary.Name, out bwlHPS).ToString(); string bwlHPSRankClass = GetHPSRank(bwlDataSet, _PlayerSummary.Name, out bwlHPS, (PlayerData _Character) => { return(_Character.Character.Class == _Player.Character.Class); }).ToString(); if (bwlDPS != 0.0f || bwlHPS != 0.0f) { string bossIdentifierStr = BossesControl.MC_ALL; if (_Instance == "Molten Core") { bossIdentifierStr = BossesControl.MC_ALL; } else if (_Instance == "Blackwing Lair") { bossIdentifierStr = BossesControl.BWL_ALL; } else if (_Instance == "Ahn'Qiraj Temple") { bossIdentifierStr = BossesControl.AQ40_ALL; } else if (_Instance == "Naxxramas - All Quarters") { bossIdentifierStr = BossesControl.NAXX_ALL_QUARTERS; } bwlDPSRank = PageUtility.CreateLink("Ranking.aspx?Bosses=" + bossIdentifierStr + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, PageUtility.CreateColorString("#" + bwlDPSRank, RPColor.Red)); bwlHPSRank = PageUtility.CreateLink("Ranking.aspx?Bosses=" + bossIdentifierStr + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name, PageUtility.CreateColorString("#" + bwlHPSRank, RPColor.Green)); bwlDPSRankClass = PageUtility.CreateLink("Ranking.aspx?Bosses=" + bossIdentifierStr + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name + "&ClassLimit=" + ClassControl.GetClassLimitStr(_Player.Character.Class) , PageUtility.CreateColorString("#" + bwlDPSRankClass, _Player.Character.Class)); bwlHPSRankClass = PageUtility.CreateLink("Ranking.aspx?Bosses=" + bossIdentifierStr + "&realm=" + realmStr + "&andplayer=" + _PlayerSummary.Name + "&ClassLimit=" + ClassControl.GetClassLimitStr(_Player.Character.Class) , PageUtility.CreateColorString("#" + bwlHPSRankClass, _Player.Character.Class)); averagePageData += "<h5>DPS Rank: " + bwlDPSRank + " / " + bwlDPSRankClass + " with DPS " + bwlDPS.ToStringDot("0.0") + "</h5>"; averagePageData += "<h5>HPS Rank: " + bwlHPSRank + " / " + bwlHPSRankClass + " with HPS " + bwlHPS.ToStringDot("0.0") + "</h5>"; } else { averagePageData += "<h5>DPS Rank: #??(inactive)</h5>"; averagePageData += "<h5>HPS Rank: #??(inactive)</h5>"; } } return(averagePageData + page.ToString()); }