Exemplo n.º 1
0
        public static string CreateLootDroppedData(List <Tuple <string, int> > _ItemDrops, VF_RaidDamageDatabase.RealmDB _RealmDB, VF_RPDatabase.ItemSummaryDatabase _ItemSummaryDatabase, Func <int, VF_RealmPlayersDatabase.WowVersionEnum, RealmPlayersServer.ItemInfo> _GetItemInfoFunc)
        {
            var    wowVersion          = VF_RealmPlayersDatabase.StaticValues.GetWowVersion(_RealmDB.Realm);
            string currentItemDatabase = RealmPlayersServer.DatabaseAccess.GetCurrentItemDatabaseAddress();
            string lootDropped         = "";

            if (_ItemDrops.Count > 0)
            {
                int recvItemIndex = 0;
                int xMax          = 58;
                int yMax          = 58;

                string itemLinks = "";
                foreach (var itemDrop in _ItemDrops)
                {
                    VF_RealmPlayersDatabase.PlayerData.Player itemReceiver = _RealmDB.m_RealmDB.FindPlayer(itemDrop.Item1);
                    int itemID   = itemDrop.Item2;
                    var itemInfo = _GetItemInfoFunc(itemID, wowVersion);
                    if (itemInfo != null && itemInfo.ItemQuality >= 4)
                    {
                        var usageCount = _ItemSummaryDatabase.GetItemUsageCount(_RealmDB.Realm, itemID, 0);

                        int    xPos     = (recvItemIndex % 4) * 58;
                        int    yPos     = (int)(recvItemIndex / 4) * 58;
                        string itemLink = currentItemDatabase + "?item=" + itemID + (wowVersion == VF_RealmPlayersDatabase.WowVersionEnum.TBC ? "-1" : "-0");

                        itemLinks += "<div style='background: none; width: 58px; height: 58px;margin: " + yPos + "px " + xPos + "px;'>"
                                     + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>"
                                     + "<div class='quality' id='" + RealmPlayersServer.CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>"
                                     + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>"
                                     + "<a class='itemlink' href='" + itemLink + "'></a>"
                                     + (usageCount > 0 ? "<a class='itemplayersframe' href='http://realmplayers.com/ItemUsageInfo.aspx?realm=" + StaticValues.ConvertRealmParam(_RealmDB.Realm) + "&item=" + itemID + "'>" + usageCount + "</a>" : "")
                                     + (/*Reliable Received*/ true ? "<a class='itemreceiveframe' style='" + (itemReceiver == null ? "color: #CCC !important' href='" + itemLink + "'>???" : "color: " + PageUtility.GetClassColor(itemReceiver) + " !important' href='"
                                                                                                              //+ "http://realmplayers.com/CharacterViewer.aspx?realm=" + StaticValues.ConvertRealmParam(_RealmDB.Realm) + "&player=" + itemReceiver.Name
                                                                                                              + itemLink
                                                                                                              + "'>" + itemReceiver.Name) + "</a>" : "")
                                     + "</div>";

                        if (xPos + 58 > xMax)
                        {
                            xMax = xPos + 58;
                        }
                        if (yPos + 58 > yMax)
                        {
                            yMax = yPos + 58;
                        }
                        ++recvItemIndex;
                    }
                    else// if(itemInfo == null)
                    {
                        //Logger.ConsoleWriteLine("ItemInfo could not be found for ItemID: " + itemID, ConsoleColor.Red);
                    }
                }
                itemLinks  = "<div class='inventory' style='background: none; width: " + xMax + "px; height: " + yMax + "px;'>" + itemLinks;
                itemLinks += "</div>";

                lootDropped += itemLinks;
            }
            return(lootDropped);
        }
Exemplo n.º 2
0
        internal static int CalculateHKChange(Player _Player, PlayerHistory _PlayerHistory)
        {
            DateTime beforeLastRankUpdate = CalculateLastRankUpdadeDateUTC(_Player.Realm, _Player.LastSeen).AddHours(-1.0);
            var      lastweekHonorEntry   = _PlayerHistory.GetHonorItemAtTime(beforeLastRankUpdate);

            var lastweekHonorData = lastweekHonorEntry.Data;

            if (lastweekHonorEntry.Uploader.GetTime() < CalculateLastRankUpdadeDateUTC(_Player.Realm, _Player.LastSeen).AddDays(-6.5))
            {
                return(-1);
            }

            return((_Player.Honor.LifetimeHK - _Player.Honor.ThisWeekHK) - (lastweekHonorData.LifetimeHK - lastweekHonorData.ThisWeekHK));
        }
Exemplo n.º 3
0
        public static float CalculateRankChange(Player _Player, PlayerHistory _PlayerHistory)
        {
            DateTime beforeLastRankUpdate = CalculateLastRankUpdadeDateUTC(_Player.Realm, _Player.LastSeen).AddHours(-1.0);
            var      lastweekHonorData    = _PlayerHistory.GetHonorItemAtTime(beforeLastRankUpdate).Data;

            if (lastweekHonorData != null)
            {
                return(_Player.GetRankTotal() - lastweekHonorData.GetRankTotal());
            }
            else
            {
                return(_Player.GetRankTotal());
            }
        }
Exemplo n.º 4
0
        public void CalculateChartData(VF_RaidDamageDatabase.FightData _Fight
                                       , FightDataCollection _FightDataCollection
                                       , VF_RealmPlayersDatabase.PlayerData.Player _Player
                                       , Func <VF_RaidDamageDatabase.UnitData, double> _GetValueLambda
                                       , out List <int> _RetChartSectionData, out List <int> _RetChartSectionLabels)
        {
            _RetChartSectionData   = new List <int>();
            _RetChartSectionLabels = new List <int>();
            int unitID = -1;

            try
            {
                unitID = _FightDataCollection.GetUnitIDFromName(_Player.Name);
            }
            catch (Exception)
            {
                return;
            }
            int firstTimeSliceIndex = _Fight.TimeSlices.FindIndex((_TimeSlice) => { return(_TimeSlice.Event.StartsWith("Start")); });
            int timeStart           = _Fight.TimeSlices[firstTimeSliceIndex].Time;
            int timeEnd             = timeStart + _Fight.FightDuration;
            int lastTimeSliceTime   = timeStart;

            foreach (var timeSlice in _Fight.TimeSlices)
            {
                if (timeSlice.Time < timeStart || timeSlice.Time > timeEnd)
                {
                    continue;
                }
                if (timeSlice.UnitDatas.ContainsKey(unitID) == false)
                {
                    continue;
                }
                double currValue = _GetValueLambda(timeSlice.UnitDatas[unitID]);
                if (timeSlice.Time == lastTimeSliceTime)
                {
                    continue;
                }

                _RetChartSectionData.Add((int)currValue);
                _RetChartSectionLabels.Add(timeSlice.Time - timeStart);
                lastTimeSliceTime = timeSlice.Time;
            }
        }
Exemplo n.º 5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            int pageNr    = PageUtility.GetQueryInt(Request, "page", 1);
            int pageIndex = pageNr - 1;//Change range from 0 to * instead of 1 to *
            int count     = PageUtility.GetQueryInt(Request, "count", 100);

            if (count > 500)
            {
                count = 500;
            }

            var realm = RealmControl.Realm;

            if (realm == VF_RealmPlayersDatabase.WowRealm.Unknown)
            {
                return;
            }
            var wowVersion = StaticValues.GetWowVersion(realm);
            int itemID     = PageUtility.GetQueryInt(Request, "item", 19364);
            int suffixID   = PageUtility.GetQueryInt(Request, "suffix", 0);

            this.Title = "\"" + itemID + "\" ItemUsage @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

            m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome()
                                                 + PageUtility.BreadCrumb_AddFinish("ItemUsage"));

            var itemSummaryDB = Hidden.ApplicationInstance.Instance.GetItemSummaryDatabase();

            using (VF.SQLComm comm = new VF.SQLComm())
            {
                List <Tuple <DateTime, string> > players = null;
                players = itemSummaryDB.GetItemUsage(realm, itemID, suffixID);//, out players) == true)
                {
                    string currentItemDatabase = DatabaseAccess.GetCurrentItemDatabaseAddress();

                    var itemInfo = DatabaseAccess.GetItemInfo(itemID, wowVersion);
                    m_ItemUsageInfoHTML = new MvcHtmlString("<div style='overflow: hidden; display: table;'><div style='display: table-cell;'><h1>Players with&nbsp;<h1></div>"
                                                            + "<div class='inventory' style='background: none; width: 58px; height: 58px; display: table-cell;'><div>"
                                                            + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>"
                                                            + "<div class='quality' id='" + CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>"
                                                            + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>"
                                                            + CharacterViewer.GenerateItemLink(currentItemDatabase, itemID, suffixID, wowVersion)
                                                            + "</div></div>"
                                                            + "<span class='badge badge-inverse'>" + players.Count + " Players</span></div>" + "<p>Sorted by date \"aquired\"</p>");

                    Dictionary <PlayerColumn, string[]> extraColumns = new Dictionary <PlayerColumn, string[]>();
                    PlayerColumn ItemAndAquiredDateAfterColumn       = PlayerColumn.Number;
                    extraColumns.Add(ItemAndAquiredDateAfterColumn, new string[] { "Item", "Date Aquired" });
                    m_TableHeadHTML = new MvcHtmlString(PageUtility.CreatePlayerTableHeaderRow(Table_Columns, extraColumns));

                    string tableBody = "";
                    int    nr        = 0;
                    Func <Tuple <DateTime, string>, DateTime> lambdaComparison = (_Tuple) => { return(_Tuple.Item1); };
                    players = players.OrderBy(lambdaComparison).ToList();
                    foreach (var playerDateAndName in players)
                    {
                        Player player = DatabaseAccess.FindRealmPlayer(this, realm, playerDateAndName.Item2);
                        if (player != null)
                        {
                            ++nr;
                            // style='position: absolute; margin: auto; width:58px; height:58px;'
                            if (nr > pageIndex * count && nr <= (pageIndex + 1) * count)
                            {
                                //string itemLink = "";
                                VF_RealmPlayersDatabase.PlayerData.ItemInfo playerItemData = null;
                                try
                                {
                                    playerItemData = player.Gear.Items.First((_Item) => { return(_Item.Value.ItemID == itemID); }).Value;
                                }
                                catch (Exception)
                                {
                                    playerItemData = null;
                                }
                                if (playerItemData != null)
                                {
                                    //Data fanns i gearen som playern använder för tillfället!
                                    //itemLink = currentItemDatabase + "?item=" + playerItemData.ItemID + "' rel='rand=" + playerItemData.SuffixID + ";ench=" + playerItemData.EnchantID;
                                }
                                else
                                {
                                    //Måste titta igenom history!
#if NO_SQL
                                    PlayerHistory playerHistory = DatabaseAccess.FindRealmPlayerHistory(this, realm, playerDateAndName.Item2);
                                    if (playerHistory != null)
                                    {
                                        for (int i = playerHistory.GearHistory.Count - 1; i >= 0; --i)
                                        {
                                            try
                                            {
                                                playerItemData = playerHistory.GearHistory[i].Data.Items.First((_Item) => { return(_Item.Value.ItemID == itemID); }).Value;
                                            }
                                            catch (Exception)
                                            {
                                                playerItemData = null;
                                            }
                                            if (playerItemData != null)
                                            {
                                                //Data fanns i gearen som playern använder för tillfället!
                                                //itemLink = currentItemDatabase + "?item=" + playerItemData.ItemID + "' rel='rand=" + playerItemData.SuffixID + ";ench=" + playerItemData.EnchantID;
                                                break;
                                            }
                                        }
                                    }
#else
                                    /*Disable this for now. it is too slow...*/
                                    //playerItemData = comm.GetLatestItemInfoForPlayer(playerDateAndName.Item2, realm, itemID);
#endif
                                }
                                if (playerItemData == null)
                                {
                                    playerItemData = new VF_RealmPlayersDatabase.PlayerData.ItemInfo {
                                        Slot = VF_RealmPlayersDatabase.ItemSlot.Unknown, ItemID = itemID, SuffixID = 0, EnchantID = 0, UniqueID = 0, GemIDs = null
                                    };
                                }
                                extraColumns[ItemAndAquiredDateAfterColumn] = new string[] {
                                    "<div class='inventory' style='background: none; width: 58px; height: 58px;'><div>"
                                    + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>"
                                    + "<div class='quality' id='" + CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>"
                                    + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>"
                                    + CharacterViewer.GenerateItemLink(currentItemDatabase, playerItemData, wowVersion)
                                    + "</div></div>"
                                    , playerDateAndName.Item1.ToString("yyyy-MM-dd")
                                };
                                tableBody += PageUtility.CreatePlayerRow(nr, realm, player, Table_Columns, null, extraColumns);
                            }
                            if (nr >= (pageIndex + 1) * count)
                            {
                                break;
                            }
                        }
                    }
                    if (nr != 0 && nr <= pageIndex * count)
                    {
                        pageIndex = (nr - 1) / count;
                        Response.Redirect(PageUtility.CreateUrlWithNewQueryValue(Request, "page", (pageIndex + 1).ToString()));
                    }
                    m_TableBodyHTML = new MvcHtmlString(tableBody);

                    int maxPageNr = 1000000 / count;
                    m_PaginationHTML = new MvcHtmlString(PageUtility.CreatePagination(Request, pageNr, ((players.Count - 1) / count) + 1));
                }
            }
        }
Exemplo n.º 6
0
        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());
        }
Exemplo n.º 7
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string sectionStr = PageUtility.GetQueryString(Request, "section", "ranks");
            int    count      = PageUtility.GetQueryInt(Request, "count", 100);

            if (count > 500)
            {
                count = 500;
            }

            var realm = RealmControl.Realm;

            if (realm == WowRealm.Unknown)
            {
                return;
            }
            var wowVersion = StaticValues.GetWowVersion(realm);

            PlayerColumn[] lifetimeKillsColumns = Table_Lifetime_Kills_Columns;
            PlayerColumn[] rankColumns          = Table_Ranks_Columns;
            Func <KeyValuePair <string, Player>, double> rankSorterLambda = (KeyValuePair <string, Player> _Player) => { return(_Player.Value.GetRankTotal()); };
            Func <Player, bool> rankShowLambda = (Player _Player) => { return(_Player.ReceivedStandingLastWeek() == true && ((DateTime.UtcNow - _Player.LastSeen).TotalDays <= 7.0)); };

            if (wowVersion == VF_RealmPlayersDatabase.WowVersionEnum.TBC)
            {
                lifetimeKillsColumns = Table_Lifetime_Kills_Columns_TBC;
                rankColumns          = Table_Ranks_Columns_TBC;
                rankSorterLambda     = (KeyValuePair <string, Player> _Player) => {
                    return(_Player.Value.GetArenaRatingTotal());
                };
                rankShowLambda = (Player _Player) => {
                    return(_Player.Arena != null);
                };
            }
            if (sectionStr == "standings")
            {
                this.Title = "Standings @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

                m_PageHTML = new MvcHtmlString(CreateStandingsTable(realm, count, (player) => { return(player.ReceivedStandingLastWeek()); }));

                if (wowVersion == VF_RealmPlayersDatabase.WowVersionEnum.TBC)
                {
                    GeneratePageDetails("Standings", count * 2, "TBC works with a different PVP system so there are no standings.");
                }
                else
                {
                    var rankUpdateDay = StaticValues.GetRankUpdadeDayType(realm);
                    switch (rankUpdateDay)
                    {
                    case VF_RealmPlayersDatabase.StaticValues.RankUpdateDayType.Wednesday_Morning:
                        GeneratePageDetails("Standings", count * 2, "Last weeks standings for players. Only shows players who received a standing last week. This list resets when the realm calculates new standings for players every wednesday morning.");
                        break;

                    case VF_RealmPlayersDatabase.StaticValues.RankUpdateDayType.Wednesday_Midday:
                        GeneratePageDetails("Standings", count * 2, "Last weeks standings for players. Only shows players who received a standing last week. This list resets when the realm calculates new standings for players every wednesday.");
                        break;

                    case VF_RealmPlayersDatabase.StaticValues.RankUpdateDayType.Sunday_Midnight:
                        GeneratePageDetails("Standings", count * 2, "Last weeks standings for players. Only shows players who received a standing last week. This list resets when the realm calculates new standings for players every sunday midnight.");
                        break;

                    default:
                        break;
                    }
                }
            }
            else if (sectionStr == "twink_ranks")
            {
                this.Title = "Twinks @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

                m_PageHTML = new MvcHtmlString(CreatePVPTable(realm, count, Table_Twink_Ranks_Columns
                                                              , (KeyValuePair <string, Player> _Player) => { return(_Player.Value.GetRankTotal()); }
                                                              , (Player _Player) => { return(_Player.Character.Level > 10 && _Player.Character.Level < 60 && _Player.Honor.CurrentRank > 0 && (DateTime.UtcNow - _Player.LastSeen).TotalDays <= 30); }));
                GeneratePageDetails("Twinks", count, "PVP Ranks for players that are below lvl 60. This is meant to show active twinks on the realm. Only shows players that was seen less than 30 days ago");
            }
            else if (sectionStr == "lifetime_kills")
            {
                this.Title = "Lifetime Kills @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

                m_PageHTML = new MvcHtmlString(CreatePVPTable(realm, count, lifetimeKillsColumns
                                                              , (KeyValuePair <string, Player> _Player) => { return(_Player.Value.Honor.LifetimeHK); }
                                                              , (Player _Player) => { return(true); }));

                GeneratePageDetails("Lifetime Kills", count, "List sorted by the amount of total honorable kills received. This is to show the players who have pvped the most overall.");
            }
            else if (sectionStr == "highest_ranks")
            {
                this.Title = "Highest Ranks @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

                if (wowVersion == VF_RealmPlayersDatabase.WowVersionEnum.TBC)
                {
                    m_PageHTML = new MvcHtmlString("");
                    GeneratePageDetails("Highest Ranks", count, "TBC works with a different PVP system so there are no lifetime highest ranks.");
                }
                else
                {
                    var      playerSummaryDB     = Hidden.ApplicationInstance.Instance.GetPlayerSummaryDatabase();
                    var      pvpSummaries        = playerSummaryDB.GetPVPSummaries(realm);
                    DateTime referenceDateTime   = new DateTime(2010, 1, 1);
                    var      orderedPVPSummaries = pvpSummaries.OrderByDescending((_Value) => ((int)_Value.Value.m_HighestRank.Key) * 100000 - (_Value.Value.m_HighestRank.Value != DateTime.MinValue ? (int)((_Value.Value.m_HighestRank.Value - referenceDateTime).TotalDays) : 0));
                    //////////////////////////////////
                    int pageIndex = PageUtility.GetQueryInt(Request, "page", 1) - 1;//Change range from 0 to * instead of 1 to *

                    PlayerColumn[] playerColumns = new PlayerColumn[] {
                        PlayerColumn.Number,
                        PlayerColumn.Character_And_Guild,
                        PlayerColumn.Race_And_Class,
                        PlayerColumn.Total_HKs,
                        PlayerColumn.LastSeen,
                    };
                    Dictionary <PlayerColumn, string[]> extraColumns = new Dictionary <PlayerColumn, string[]>();

                    extraColumns[PlayerColumn.Number] = new string[] { "Rank", "Date Achieved" };
                    //extraColumns[PlayerColumn.Total_HKs] = new string[] { "Weeks with standing" };

                    string table = "<table class='table'>";
                    table += "<thead>" + PageUtility.CreatePlayerTableHeaderRow(playerColumns, extraColumns) + "</thead>";
                    table += "<tbody>";
                    var playerArray = DatabaseAccess.GetRealmPlayers(this, realm, NotLoadedDecision.RedirectAndWait);
                    int nr          = 0;
                    foreach (var pvpSummary in orderedPVPSummaries)
                    {
                        nr++;
                        if (nr > pageIndex * count && nr <= (pageIndex + 1) * count)
                        {
                            Player playerData = null;
                            if (playerArray.TryGetValue(playerSummaryDB.GetPlayer(pvpSummary), out playerData) == true)
                            {
                                VF_RealmPlayersDatabase.PlayerFaction playerFaction = StaticValues.GetFaction(playerData.Character.Race);
                                int   rank         = (int)pvpSummary.Value.m_HighestRank.Key;
                                float rankProgress = pvpSummary.Value.m_HighestRank.Key - (float)rank;
                                extraColumns[PlayerColumn.Number] = new string[] { PageUtility.CreatePlayerRankDiv(rank, rankProgress, playerFaction), pvpSummary.Value.m_HighestRank.Value.ToString("yyyy-MM-dd") };
                                //extraColumns[PlayerColumn.Total_HKs] = new string[] { pvpSummary.Value.m_ActivePVPWeeks.ToString() };
                                table += PageUtility.CreatePlayerRow(nr, realm, playerData, playerColumns, null, extraColumns);
                            }
                        }
                        if (nr >= (pageIndex + 1) * count)
                        {
                            break;
                        }
                    }
                    table += "</tbody></table>";

                    if (nr != 0 && nr <= pageIndex * count)
                    {
                        pageIndex = (nr - 1) / count;
                        Response.Redirect(PageUtility.CreateUrlWithNewQueryValue(Request, "page", (pageIndex + 1).ToString()));
                    }
                    m_PageHTML = new MvcHtmlString(table);
                    //////////////////////////////////

                    GeneratePageDetails("Highest Ranks", count, "Highest lifetime achieved PVP Ranks for players, sorted by date of achievment");
                }
            }
            else// if (sectionStr == "ranks")
            {
                this.Title = "Ranks @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

                if (realm == WowRealm.Nostalrius || realm == WowRealm.NostalriusPVE)
                {
                    rankShowLambda = (Player _Player) =>
                    {
                        return((DateTime.UtcNow - _Player.LastSeen).TotalDays < 14);
                    };
                    GeneratePageDetails("Ranks", count, "Highest PVP Ranks for active players.");
                }
                else if (wowVersion == VF_RealmPlayersDatabase.WowVersionEnum.TBC)
                {
                    GeneratePageDetails("Arena Ranking", count, "Shows the highest rated arena teams, sorted by a sum of the total rating for 5v5, 3v3 and 2v2.");
                }
                else
                {
                    GeneratePageDetails("Ranks", count, "Highest PVP Ranks for players. Only lists players who received standing last week. This is because no rank decay would make the list extremely boring(filled with players that dont even pvp).");
                }
                m_PageHTML = new MvcHtmlString(CreatePVPTable(realm, count, rankColumns
                                                              , rankSorterLambda, rankShowLambda));
            }
            //href='javascript:navigateWithNewQuery(\"page\",\"1\")'
            int pageNr    = PageUtility.GetQueryInt(Request, "page", 1);
            int maxPageNr = 1000000 / count;

            m_PaginationHTML = new MvcHtmlString(PageUtility.CreatePagination(Request, pageNr, maxPageNr));
        }
Exemplo n.º 8
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string pageView = RealmPlayersServer.PageUtility.GetQueryString(Request, "view", "players");
            var    realm    = PageUtility.GetQueryRealm(Request);

            if (realm == WowRealm.Unknown)
            {
                return;
            }
            var wowVersion = StaticValues.GetWowVersion(realm);

            string guildStr = PageUtility.GetQueryString(Request, "guild");

            var realmDB        = DatabaseAccess.GetRealmPlayers(this, realm);
            var guildSummaryDB = Hidden.ApplicationInstance.Instance.GetGuildSummaryDatabase();
            var guild          = guildSummaryDB.GetGuildSummary(realm, guildStr);// DatabaseAccess.GetRealmGuild(this, realm, guildStr, NotLoadedDecision.RedirectAndWait);

            if (guild == null)
            {
                return;
            }
            guild.GenerateCache(realmDB);

            this.Title = guildStr + " @ " + StaticValues.ConvertRealmParam(realm) + " | RealmPlayers";

            m_ProgressInfoHTML = new MvcHtmlString("<div id='" + guild.GuildName.Replace(' ', '_') + "-Progress'></div>");

            var    membersArray            = guild.GetMembers();
            var    orderedPlayersArray     = membersArray.OrderBy((player) => { return(player.Item2.History.Last().GuildRankNr); });
            int    progressComparisonValue = 0;
            string guildProgressData       = GuildList.CreateProgressStr(this, guild, realm, out progressComparisonValue);

            m_GuildScriptData = new MvcHtmlString("<script>var guildProgress = new Array();" + guildProgressData + "</script>");

            if (pageView == "players")
            {
                m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome()
                                                     + PageUtility.BreadCrumb_AddRealm(realm)
                                                     + PageUtility.BreadCrumb_AddGuilds(realm)
                                                     + PageUtility.BreadCrumb_AddFinish(guild.GuildName));

                m_GuildInfoHTML = new MvcHtmlString("<h1><img src='assets/img/icons/ui-pvp-"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + ".png'/><span class='"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + "-color'>" + guild.GuildName
                                                    + "</span><span class='badge badge-inverse'>" + membersArray.Count + " Members</span></h1>"
                                                    + "<p>Guild on the server " + StaticValues.ConvertRealmViewing(realm) + "</p>"
                                                    + "<p><a href='/GuildViewer.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "&view=latestevents'>View Latest Events</a></p>"
                                                    + "<p><a href='/RaidStats/RaidList.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View recorded raids on RaidStats</a></p>");

                string page = "";
                foreach (var player in orderedPlayersArray)
                {
                    page += PageUtility.CreatePlayerRow(0, realm, player.Item1, Table_Columns);
                }
                m_CharactersTableHeadHTML = new MvcHtmlString(PageUtility.CreatePlayerTableHeaderRow(Table_Columns));
                m_CharactersTableBodyHTML = new MvcHtmlString(page);
            }
            else if (pageView == "latestmembers")
            {
                m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome()
                                                     + PageUtility.BreadCrumb_AddRealm(realm)
                                                     + PageUtility.BreadCrumb_AddGuilds(realm)
                                                     + PageUtility.BreadCrumb_AddGuild(realm, guild.GuildName)
                                                     + PageUtility.BreadCrumb_AddFinish("Latest Members"));

                m_GuildInfoHTML = new MvcHtmlString("<h1><img src='assets/img/icons/ui-pvp-"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + ".png'/><span class='"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + "-color'>" + guild.GuildName
                                                    + "</span><span class='badge badge-inverse'>" + membersArray.Count + " Members</span></h1>"
                                                    + "<p>Guild on the server " + StaticValues.ConvertRealmViewing(realm) + "</p>"
                                                    + "<p><a href='/GuildViewer.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View Members</a></p>"
                                                    + "<p><a href='/RaidStats/RaidList.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View recorded raids on RaidStats</a></p>");
            }
            else if (pageView == "latestitems")
            {
                m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome()
                                                     + PageUtility.BreadCrumb_AddRealm(realm)
                                                     + PageUtility.BreadCrumb_AddGuilds(realm)
                                                     + PageUtility.BreadCrumb_AddGuild(realm, guild.GuildName)
                                                     + PageUtility.BreadCrumb_AddFinish("Latest Items"));

                m_GuildInfoHTML = new MvcHtmlString("<h1><img src='assets/img/icons/ui-pvp-"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + ".png'/><span class='"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + "-color'>" + guild.GuildName
                                                    + "</span><span class='badge badge-inverse'>" + membersArray.Count + " Members</span></h1>"
                                                    + "<p>Guild on the server " + StaticValues.ConvertRealmViewing(realm) + "</p>"
                                                    + "<p><a href='/GuildViewer.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View Members</a></p>"
                                                    + "<p><a href='/RaidStats/RaidList.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View recorded raids on RaidStats</a></p>");
            }
            else if (pageView == "latestevents")
            {
                m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome()
                                                     + PageUtility.BreadCrumb_AddRealm(realm)
                                                     + PageUtility.BreadCrumb_AddGuilds(realm)
                                                     + PageUtility.BreadCrumb_AddGuild(realm, guild.GuildName)
                                                     + PageUtility.BreadCrumb_AddFinish("Latest Events"));

                m_GuildInfoHTML = new MvcHtmlString("<h1><img src='assets/img/icons/ui-pvp-"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + ".png'/><span class='"
                                                    + StaticValues.GetFactionCSSName(guild.Faction) + "-color'>" + guild.GuildName
                                                    + "</span><span class='badge badge-inverse'>" + membersArray.Count + " Members</span></h1>"
                                                    + "<p>Guild on the server " + StaticValues.ConvertRealmViewing(realm) + "</p>"
                                                    + "<p><a href='/GuildViewer.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View Members</a></p>"
                                                    + "<p><a href='/RaidStats/RaidList.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + guildStr + "'>View recorded raids on RaidStats</a></p>");
            }

            if (pageView == "latestmembers" || pageView == "latestevents")
            {
                var guildSummary = Hidden.ApplicationInstance.Instance.GetGuildSummary(realm, guildStr);
                if (guildSummary == null)
                {
                    return;
                }

                var statusChanges = guildSummary.GenerateLatestStatusChanges(DateTime.UtcNow.AddDays(-14));

                string latestmembersStr = "";
                statusChanges.Reverse();
                foreach (var sChange in statusChanges)
                {
                    if (realmDB.ContainsKey(sChange.Player))
                    {
                        var playerData = realmDB[sChange.Player];

                        string statusChangeDescription = "";
                        if (sChange.FromStatus == null || sChange.FromStatus.IsInGuild == false)
                        {
                            if (sChange.ToStatus.IsInGuild == true)
                            {
                                statusChangeDescription = "Added to the Guild as Rank \"" + sChange.ToStatus.GuildRank + "\"";
                            }
                            else
                            {
                                continue;
                            }
                        }
                        else if (sChange.ToStatus.IsInGuild == false)
                        {
                            statusChangeDescription = "Removed from the Guild";
                        }
                        else
                        {
                            statusChangeDescription = "Changed Rank From \"" + sChange.FromStatus.GuildRank + "\" to \"" + sChange.ToStatus.GuildRank + "\"";
                        }

                        latestmembersStr += PageUtility.CreateTableRow(""
                                                                       , PageUtility.CreateTableColumn(PageUtility.CreateColorCodedPlayerLink(realm, playerData))
                                                                       + PageUtility.CreateTableColumn("<div style='overflow: hidden;white-space: nowrap;'>" + statusChangeDescription + "</div>")
                                                                       + PageUtility.CreateTableColumn("<div style='overflow: hidden;white-space: nowrap;'>" + sChange.ToStatus.DateTime.ToLocalTime().ToString("yyyy-MM-dd") + "</div>"));
                    }
                }
                m_LatestMembersHTML = new MvcHtmlString(latestmembersStr);
            }

            if (pageView == "latestitems" || pageView == "latestevents")
            {
                List <Tuple <DateTime, Player, List <Tuple <PlayerItemInfo, ItemInfo> > > > latestItems = new List <Tuple <DateTime, Player, List <Tuple <PlayerItemInfo, ItemInfo> > > >();

                var realmHistory = DatabaseAccess._GetRealmPlayersHistory(this, realm, NotLoadedDecision.SpinWait);
                foreach (var data in orderedPlayersArray)
                {
                    Player        player        = data.Item1;
                    PlayerHistory playerHistory = null;
                    if (realmHistory.TryGetValue(player.Name, out playerHistory) == true)
                    {
                        var recvItems = HistoryGenerator.GenerateLatestReceivedItems(playerHistory, DateTime.MinValue);

                        var orderedRecvItems = recvItems.OrderByDescending(_Value => _Value.Key);
                        int i = 0;
                        foreach (var recvItem in orderedRecvItems)
                        {
                            if (i++ > 10)
                            {
                                break;
                            }

                            List <Tuple <PlayerItemInfo, ItemInfo> > newestItems = new List <Tuple <PlayerItemInfo, ItemInfo> >();
                            foreach (var item in recvItem.Value)
                            {
                                var itemInfo = DatabaseAccess.GetItemInfo(item.ItemID, wowVersion);
                                if (itemInfo.ItemQuality >= 4) //Atleast epic(4)
                                {
                                    newestItems.Add(Tuple.Create(item, itemInfo));
                                }
                            }
                            if (newestItems.Count > 0)
                            {
                                latestItems.Add(Tuple.Create(recvItem.Key, player, newestItems));
                            }
                        }
                    }
                }

                string latestItemsStr = "";
                {
                    var itemSummaryDB = Hidden.ApplicationInstance.Instance.GetItemSummaryDatabase();

                    string currentItemDatabase = DatabaseAccess.GetCurrentItemDatabaseAddress();

                    var orderedLatestItems = latestItems.OrderByDescending((_Value) => _Value.Item1);

                    int i = 0;
                    foreach (var recvItem in orderedLatestItems)
                    {
                        if (i++ > 100)
                        {
                            break;
                        }

                        int recvItemIndex = 0;
                        int xMax          = 58 * 3;
                        int yMax          = (int)((recvItem.Item3.Count - 1) / 3) * 58;

                        yMax += 58;
                        string itemLinks = "<div class='inventory' style='background: none; width: " + xMax + "px; height: " + yMax + "px;'>";
                        foreach (var item in recvItem.Item3)
                        {
                            int xPos = (recvItemIndex % 3) * 58;
                            int yPos = (int)(recvItemIndex / 3) * 58;
                            //string itemLink = currentItemDatabase + "?item=" + item.Item1.ItemID + "' rel='rand=" + item.Item1.SuffixID + ";ench=0";

                            var itemInfo = item.Item2;
                            itemLinks += "<div style='background: none; width: 58px; height: 58px;margin: " + yPos + "px " + xPos + "px;'>"
                                         + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>"
                                         + "<div class='quality' id='" + CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>"
                                         + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>"
                                         + CharacterViewer.GenerateItemLink(currentItemDatabase, item.Item1, wowVersion);

                            var itemUsageCount = itemSummaryDB.GetItemUsageCount(realm, item.Item1);
                            itemLinks += "<a class='itemplayersframe' href='ItemUsageInfo.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&item=" + item.Item1.ItemID + (item.Item1.SuffixID != 0 ? "&suffix=" + item.Item1.SuffixID : "") + "'>" + itemUsageCount + "</a>";
                            itemLinks += "</div>";
                            ++recvItemIndex;
                        }

                        itemLinks      += "</div>";
                        latestItemsStr += PageUtility.CreateTableRow(""
                                                                     , PageUtility.CreateTableColumn(itemLinks)
                                                                     + PageUtility.CreateTableColumn(PageUtility.CreateColorCodedPlayerLink(realm, recvItem.Item2))
                                                                     + PageUtility.CreateTableColumn("<div style='overflow: hidden;white-space: nowrap;'>" + recvItem.Item1.ToString("yyyy-MM-dd") + "</div>"));
                    }
                }
                m_LatestItemsHTML = new MvcHtmlString(latestItemsStr);
            }
        }
Exemplo n.º 9
0
        public static string Generate(RealmDB _RealmDB, RaidSummary _RaidSummary, RaidBossFight _Fight, GenerateDetails _Details)
        {
            var    attemptType = _Fight.GetFightData().GetAttemptType();
            string attemptStr  = "";

            if (attemptType == AttemptType.KillAttempt)
            {
                attemptStr = "(kill)";
            }
            else if (attemptType == AttemptType.WipeAttempt)
            {
                attemptStr = "(wipe)";
            }
            else if (attemptType == AttemptType.TrashAttempt)
            {
                attemptStr = "(trash)";
            }

            string fightOverViewInfo = "<h1>" + _Fight.GetRaid().RaidOwnerName + " vs ";

            if (attemptType != AttemptType.TrashAttempt)
            {
                int tryNumber  = 1;
                int totalTries = 0;
                _Fight.GetTryCount(out tryNumber, out totalTries);

                fightOverViewInfo += PageUtility.CreateLink("FightOverallOverview.aspx?FightName=" + _Fight.GetFightData().FightName, _Fight.GetFightData().FightName)
                                     + "(" + _Fight.GetRaid().RaidID.ToString() + ")<span class='badge badge-inverse'>attempt " + tryNumber + "/" + totalTries + " " + attemptStr + "</span>";

                fightOverViewInfo += "</h1><p>Fight started " + _Fight.GetStartDateTime().ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss")
                                     + " and fight duration was " + _Fight.GetFightDuration() + " seconds.</p><p>" + (_Fight.GetFightData().HasResetsMidFight() ? "SW_Stats Reset occured mid fight thus the data on this page may not be accurate" : "") + "</p>";
            }
            else//if(attemptType == AttemptType.TrashAttempt)
            {
                fightOverViewInfo += "Trash" + (_Fight.GetRaidBossFightIndex() + 1) + "(" + _Fight.GetRaid().RaidID.ToString() + ")";
                fightOverViewInfo += "</h1><p>Trash between " + _Fight.GetStartDateTime().ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + " and " + _Fight.GetFightData().GetEndDateTime().ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "</p>";
            }

            if (_Fight.GetExtraFightVersionCount() > 0)
            {
                int indexSkew = 0;
                if (_Fight.IsExtraFightDataVersion() == true)
                {
                    fightOverViewInfo += "<p>This alternative version was recorded by " + CreateColorCodedPlayer(_RealmDB, _Fight.GetFightData().RecordedByPlayer) + " using addon version " + "<font color='#00FF00'>" + _Fight.GetFightData().AddonVersion + "</font></p>";
                    fightOverViewInfo += "<p>Fight was also recorded by ";
                    indexSkew          = 0;
                }
                else
                {
                    fightOverViewInfo += "<p>Most accurate version was recorded by " + CreateColorCodedPlayer(_RealmDB, _Fight.GetFightData().RecordedByPlayer) + " using addon version " + "<font color='#00FF00'>" + _Fight.GetFightData().AddonVersion + "</font></p>";
                    fightOverViewInfo += "<p>Fight was also recorded(possibly less accurately) by ";
                    indexSkew          = 1;
                }
                for (int i = 0; i < _Fight.GetExtraFightVersionCount(); ++i)
                {
                    var extraFight = _Fight.GetExtraFightVersion(i);
                    if (extraFight != null && extraFight.GetFightCacheData() != _Fight.GetFightCacheData())
                    {
                        fightOverViewInfo += "<a href='" + _Details.VersionChangeURL.Replace("versionchangeid", (i + indexSkew).ToString()) + "'>" + CreateColorCodedPlayer(_RealmDB, extraFight.GetFightData().RecordedByPlayer) + ((_Fight.IsExtraFightDataVersion() == true && i == 0) ? "(most accurate)" : "") + "</a>, ";
                    }
                }
                fightOverViewInfo += "</p>";
            }
            else
            {
                fightOverViewInfo += "<p>Fight was recorded by " + CreateColorCodedPlayer(_RealmDB, _Fight.GetFightData().RecordedByPlayer) + " using addon version " + "<font color='#00FF00'>" + _Fight.GetFightData().AddonVersion + "</font></p>";
            }

            string enemyUnits = "<h3>Enemy units:</h3>";
            {
                List <Tuple <string, int> > dmgTakenList = new List <Tuple <string, int> >();
                int bossPlusAddsDmgTaken = _Fight.GetBossPlusAddsDmgTaken(dmgTakenList);

                double totalValue = _Fight.GetTotal((_Value) => { return(_Value.I.Dmg); }, (_Value) => { return(_RealmDB.RD_IsPlayer(_Value.Item1, _Fight) && _Value.Item2.I.Dmg > 0); });
                if (totalValue < bossPlusAddsDmgTaken)
                {
                    totalValue = bossPlusAddsDmgTaken;
                }
                var dumgTakenSorted = dmgTakenList.OrderByDescending((_Value) => { if (_Value.Item1 == _Fight.GetFightData().FightName)
                                                                                   {
                                                                                       return(int.MaxValue);
                                                                                   }
                                                                                   return(_Value.Item2); });
                foreach (var dmgTakenObj in dumgTakenSorted)
                {
                    if (dmgTakenObj.Item1 == _Fight.GetFightData().FightName)
                    {
                        enemyUnits += "<font color='#00FF00'>"
                                      + ((double)dmgTakenObj.Item2 / totalValue).ToString("0%", System.Globalization.CultureInfo.InvariantCulture)
                                      + "(" + ((double)dmgTakenObj.Item2 / 1000.0).ToStringDot("0.0") + "k)"
                                      + "</font>"
                                      + " " + dmgTakenObj.Item1 + "(Boss)<br />";
                    }
                    else
                    {
                        enemyUnits += "<font color='#FFFF00'>"
                                      + ((double)dmgTakenObj.Item2 / totalValue).ToString("0%", System.Globalization.CultureInfo.InvariantCulture)
                                      + "(" + ((double)dmgTakenObj.Item2 / 1000.0).ToStringDot("0.0") + "k)"
                                      + "</font>"
                                      + " " + dmgTakenObj.Item1 + "(Add)<br />";
                    }
                }
                enemyUnits += "<font color='#FF0000'>"
                              + (1.0 - ((double)bossPlusAddsDmgTaken / totalValue)).ToString("0%", System.Globalization.CultureInfo.InvariantCulture)
                              + "(" + ((double)(totalValue - bossPlusAddsDmgTaken) / 1000.0).ToStringDot("0.0") + "k)"
                              + "</font>"
                              + " (Trash)";
            }


            string playerDeaths  = "";
            var    fightEvents   = VF_RaidDamageDatabase.FightEvent.GenerateFightEvents(_Fight);
            int    lastDeathTime = 0;

            foreach (var fightEvent in fightEvents)
            {
                if (fightEvent.m_FightEvent == VF_RaidDamageDatabase.FightEventEnum.UnitDeath)
                {
                    var unitName   = fightEvent.m_StringData;
                    var playerData = _RealmDB.RD_FindPlayer(unitName, _Fight);
                    if (playerData != null)
                    {
                        if (lastDeathTime != fightEvent.m_TimeIntoTheFight)
                        {
                            if (playerDeaths == "")
                            {
                                playerDeaths = "<h3>Player deaths:</h3>";
                            }
                            else
                            {
                                playerDeaths += "<br />";
                            }

                            playerDeaths += "After " + fightEvent.m_TimeIntoTheFight + "~ seconds: ";
                            lastDeathTime = fightEvent.m_TimeIntoTheFight;
                        }
                        else
                        {
                            playerDeaths += ", ";
                        }
                        playerDeaths += PageUtility.CreateColorCodedName(unitName, playerData.Character.Class);
                    }
                }
            }
            /////////////////////
            string unrealisticPlayerSpikes     = "";
            var    unrealisticPlayerSpikesList = _Fight.GetUnrealisticPlayerSpikes(_RealmDB.RD_GetPlayerIdentifierFunc(_Fight));

            foreach (var uPS in unrealisticPlayerSpikesList)
            {
                if (unrealisticPlayerSpikes != "")
                {
                    unrealisticPlayerSpikes += "<br />";
                }
                unrealisticPlayerSpikes += uPS.Player
                                           + " Dmg(" + uPS.DmgValue + "),"
                                           + " Heal(" + uPS.HealValue + ") @"
                                           + " Time(" + uPS.Time + "),"
                                           + " Factor(" + uPS.SpikeDmgFactor.ToStringDot("0.00") + "," + uPS.SpikeHealFactor.ToStringDot("0.00") + ")";
            }
            if (unrealisticPlayerSpikes != "")
            {
                if (_Details.FilterSpikes == true)
                {
                    unrealisticPlayerSpikes  = "<h3>Filtered unrealistic player Dmg/Heal spikes:</h3>" + unrealisticPlayerSpikes;
                    unrealisticPlayerSpikes += "<br /><a href='" + _Details.NoFilterSpikesURL + "'>View Unfiltered</a>";
                }
                else
                {
                    unrealisticPlayerSpikes  = "<h3>Unrealistic player Dmg/Heal spikes:</h3>" + unrealisticPlayerSpikes;
                    unrealisticPlayerSpikes += "<br /><a href='" + _Details.FilterSpikesURL + "'>View Filtered</a>";
                }
            }
            /////////////////////
            List <Tuple <string, VF_RealmPlayersDatabase.PlayerClass> > playersAttending = new List <Tuple <string, VF_RealmPlayersDatabase.PlayerClass> >();

            var attendingUnits = _Fight.GetAttendingUnits();

            foreach (var unitName in attendingUnits)
            {
                var playerData = _RealmDB.RD_FindPlayer(unitName, _Fight);
                if (playerData != null)
                {
                    playersAttending.Add(new Tuple <string, VF_RealmPlayersDatabase.PlayerClass>(unitName, playerData.Character.Class));
                }
            }
            string playersAttendingStr     = "<h3>Players attending(" + playersAttending.Count + "):</h3>";
            var    orderedPlayersAttending = playersAttending.OrderBy((_Value) => { return("" + (int)_Value.Item2 + _Value.Item1); });

            if (orderedPlayersAttending.Count() > 0)
            {
                var lastClass = orderedPlayersAttending.First().Item2;
                foreach (var player in orderedPlayersAttending)
                {
                    if (lastClass != player.Item2)
                    {
                        playersAttendingStr += "<br />";
                    }
                    playersAttendingStr += PageUtility.CreateColorCodedName(player.Item1, player.Item2) + " ";
                    lastClass            = player.Item2;
                }
            }
            /////////////////////

            ///////////////////////
            string buffInfo = "";

            if (_Details.DebugBuff != null)
            {
                string debugBuffName = _Details.DebugBuff;
                if (playersAttending.Exists((_Value) => { return(_Value.Item1 == debugBuffName); }) == true)
                {
                    int playerNameID = _Fight.GetFightCacheData().m_FightDataCollection.GetUnitIDFromName(debugBuffName);
                    Dictionary <int, int> accumulatedTime  = new Dictionary <int, int>();
                    Dictionary <int, int> accumulatedTime2 = new Dictionary <int, int>();
                    int prevTimeSliceTime = _Fight.GetFightData().TimeSlices.First().Time;
                    foreach (var timeSlice in _Fight.GetFightData().TimeSlices)
                    {
                        int deltaTime = timeSlice.Time - prevTimeSliceTime;
                        prevTimeSliceTime = timeSlice.Time;
                        if (timeSlice.UnitBuffs != null)
                        {
                            foreach (var unitBuff in timeSlice.UnitBuffs)
                            {
                                if (unitBuff.Key == playerNameID)
                                {
                                    if (unitBuff.Value == null)
                                    {
                                        continue;
                                    }
                                    foreach (var buff in unitBuff.Value)
                                    {
                                        if (accumulatedTime.ContainsKey(buff.BuffID) == false)
                                        {
                                            accumulatedTime.Add(buff.BuffID, 0);
                                        }
                                        accumulatedTime[buff.BuffID] += deltaTime;
                                    }
                                }
                            }
                        }
                        if (timeSlice.UnitDebuffs != null)
                        {
                            foreach (var unitBuff in timeSlice.UnitDebuffs)
                            {
                                if (unitBuff.Key == playerNameID)
                                {
                                    if (unitBuff.Value == null)
                                    {
                                        continue;
                                    }
                                    foreach (var buff in unitBuff.Value)
                                    {
                                        if (accumulatedTime2.ContainsKey(buff.BuffID) == false)
                                        {
                                            accumulatedTime2.Add(buff.BuffID, 0);
                                        }
                                        accumulatedTime2[buff.BuffID] += deltaTime;
                                    }
                                }
                            }
                        }
                    }

                    buffInfo = "<h3>Buffs used by " + debugBuffName + ":</h3>";
                    var orderedAccTime = accumulatedTime.OrderByDescending((_Value) => _Value.Value);
                    foreach (var accum in orderedAccTime)
                    {
                        buffInfo += BuffParser.GetBuffIconImage(_Fight.GetFightCacheData().m_FightDataCollection.m_BuffIDToNames[accum.Key])
                                    + " buff during " + accum.Value + " seconds of the fight!<br />";
                    }
                    buffInfo += "<h3>Debuffs:</h3>";
                    var orderedAccTime2 = accumulatedTime2.OrderByDescending((_Value) => _Value.Value);
                    foreach (var accum in orderedAccTime2)
                    {
                        buffInfo += BuffParser.GetBuffIconImage(_Fight.GetFightCacheData().m_FightDataCollection.m_BuffIDToNames[accum.Key])
                                    + " debuff during " + accum.Value + " seconds of the fight!<br />";
                    }
                }
                else// if (debugBuffName == "None")
                {
                    var buffIDToNames = _Fight.GetFightCacheData().m_FightDataCollection.m_BuffIDToNames;
                    if (buffIDToNames != null && buffIDToNames.Count > 0)
                    {
                        buffInfo = "<h3>Buffs used:</h3>";
                        foreach (var buff in buffIDToNames)
                        {
                            buffInfo += BuffParser.GetBuffIconImage(buff);
                        }
                    }
                }
            }
            else
            {
                var unitIDToNames = _Fight.GetFightCacheData().m_FightDataCollection.m_UnitIDToNames;
                Dictionary <int, VF_RealmPlayersDatabase.PlayerData.Player> unitIDToPlayer = new Dictionary <int, VF_RealmPlayersDatabase.PlayerData.Player>();
                foreach (var unitIDToName in unitIDToNames)
                {
                    var playerData = _RealmDB.RD_FindPlayer(unitIDToName.Value, _Fight);
                    if (playerData != null)
                    {
                        unitIDToPlayer.Add(unitIDToName.Key, playerData);
                    }
                }
                Dictionary <int, int> accumulatedTime = new Dictionary <int, int>();
                int        totalTime         = 0;
                List <int> playersAdded      = new List <int>();
                int        prevTimeSliceTime = _Fight.GetFightData().TimeSlices.First().Time;
                foreach (var timeSlice in _Fight.GetFightData().TimeSlices)
                {
                    int deltaTime = timeSlice.Time - prevTimeSliceTime;
                    totalTime        += deltaTime;
                    prevTimeSliceTime = timeSlice.Time;
                    if (timeSlice.UnitBuffs != null)
                    {
                        foreach (var unitBuff in timeSlice.UnitBuffs)
                        {
                            if (unitBuff.Value == null)
                            {
                                continue;
                            }
                            VF_RealmPlayersDatabase.PlayerData.Player player = null;
                            if (unitIDToPlayer.TryGetValue(unitBuff.Key, out player) == true)
                            {
                                playersAdded.AddUnique(unitBuff.Key);

                                foreach (var buff in unitBuff.Value)
                                {
                                    if (accumulatedTime.ContainsKey(buff.BuffID) == false)
                                    {
                                        accumulatedTime.Add(buff.BuffID, 0);
                                    }
                                    accumulatedTime[buff.BuffID] += deltaTime;
                                }
                            }
                        }
                    }
                }

                buffInfo = "<h3>Buffs used:</h3>";
                var orderedAccTime = accumulatedTime.OrderByDescending((_Value) => _Value.Value);
                Dictionary <int, double> buffDurations = new Dictionary <int, double>();

                foreach (var accum in orderedAccTime)
                {
                    double percentUsage = ((double)(accum.Value * 100 / playersAdded.Count) / (double)totalTime);
                    if (percentUsage < 2.0)
                    {
                        continue;
                    }
                    //buffDurations[accum.Key] = ((double)(accum.Value * 100 / playersAdded.Count) / (double)_Fight.GetFightDuration());
                    buffInfo += "<div style='width:43px;height:43px;position:relative;display:inline'>"
                                + BuffParser.GetBuffIconImage(_Fight.GetFightCacheData().m_FightDataCollection.m_BuffIDToNames[accum.Key])
                                + "<p class='niceshadowtext' style='position:absolute;top:10px;right:5px;margin:auto;text-align:right;float:right;'>";

                    if (percentUsage > 9.99)
                    {
                        buffInfo += percentUsage.ToStringDot("0") + "%</p></div>";
                    }
                    else
                    {
                        buffInfo += percentUsage.ToStringDot("0.0") + "%</p></div>";
                    }
                }
            }
            ///////////////////////

            ///////////////////////
            //if(true) //Debug Dispells
            //{

            //}
            ///////////////////////

            var realm = _Fight.GetRaid().Realm;
            ///////////////////////
            string lootDropped = "";

            if (attemptType == VF_RaidDamageDatabase.FightData.AttemptType.KillAttempt)
            {
                lootDropped  = "<h3>Boss Loot:</h3>";
                lootDropped += LootGenerator.CreateLootDroppedData(_Fight.GetItemDrops(), _RealmDB, _Details.ItemSummaryDatabase, _Details.GetItemInfoFunc);
            }
            ///////////////////////


            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            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 <string> labels = new List <string>();

                var fightDetails = _Fight.GetFightDetails();
                if (_Details.FilterSpikes == true)
                {
                    fightDetails = _Fight.GetFilteredFightDetails(_RealmDB.RD_GetPlayerIdentifierFunc(_Fight));
                }

                bool properStarted = false;
                for (int i = 0; i < fightDetails.Count; ++i)
                {
                    bool lastEvent = false;

                    var fightDetail = fightDetails[i];

                    int sliceDuration = 1;
                    if (i != 0)
                    {
                        sliceDuration = fightDetail.Time - fightDetails[i - 1].Time;
                        if (sliceDuration < 1)
                        {
                            sliceDuration = 1;
                        }
                    }

                    string events = "";
                    List <Tuple <string, int, int> > bossHealths = new List <Tuple <string, int, int> >();
                    int currHealth = 0;
                    int maxHealth  = 0;
                    foreach (var fightEvent in fightDetail.Events)
                    {
                        try
                        {
                            if (fightEvent.StartsWith("BossHealth="))
                            {
                                var bossHealth_CurrAndMax = fightEvent.Split(new string[] { "BossHealth=", "-" }, StringSplitOptions.RemoveEmptyEntries);
                                currHealth = int.Parse(bossHealth_CurrAndMax[0]);
                                maxHealth  = int.Parse(bossHealth_CurrAndMax[1]);
                            }
                            else if (fightEvent.StartsWith("BossHealth-"))
                            {
                                var bossHealth_NameCurrAndMax = fightEvent.Split(new string[] { "BossHealth-", "-", "=" }, StringSplitOptions.RemoveEmptyEntries);
                                bossHealths.Add(Tuple.Create(bossHealth_NameCurrAndMax[0], int.Parse(bossHealth_NameCurrAndMax[1]), int.Parse(bossHealth_NameCurrAndMax[2])));
                            }
                            else if (_Details.DebugInfo == true)
                            {
                                events = events + fightEvent + ", ";
                            }
                            else
                            {
                                if (fightEvent.StartsWith("Start"))
                                {
                                    string startType = fightEvent.Split(new char[] { '=', ' ' })[0];
                                    if (fightEvent.Contains("=" + _Fight.GetBossName()) && properStarted == false)
                                    {
                                        //if (startType == "Start" || startType == "Start_C" || startType == "Start_S")
                                        {
                                            events = events + "Fight Started, ";
                                            dataX.Clear();
                                            dataY1.Clear();
                                            dataY2.Clear();
                                            labels.Clear();
                                            properStarted = true;
                                        }
                                    }
                                }
                                else if (fightEvent.StartsWith("Phase"))
                                {
                                    string phaseType = fightEvent.Split(new char[] { '=', ' ' })[0];
                                    if (phaseType.EndsWith("_Y"))
                                    {
                                        phaseType = phaseType.Substring(0, phaseType.Length - 2);
                                    }
                                    events = events + phaseType + ", ";
                                }
                                else if (fightEvent.StartsWith("Dead"))
                                {
                                    if (fightEvent.Contains("=" + _Fight.GetBossName()))
                                    {
                                        string deadType = fightEvent.Split(new char[] { '=', ' ' })[0];
                                        //if (deadType == "Dead" || deadType == "Dead_C" || deadType == "Dead_S")
                                        events    = events + "Fight Ended, ";
                                        lastEvent = true;
                                    }
                                }
                            }
                        }
                        catch (Exception)
                        { }
                    }
                    string deathEvents   = "";
                    int    totalDmg      = 0;
                    int    totalHeal     = 0;
                    int    totalDmgTaken = 0;
                    int    topDPSDmg     = 0;
                    int    topHPSHeal    = 0;
                    string topDPSer      = "";
                    string topHPSer      = "";
                    foreach (var unitData in fightDetail.UnitDatas)
                    {
                        var unitPlayer = _RealmDB.RD_FindPlayer(unitData.Key, _Fight);
                        if (unitPlayer != null)
                        {
                            totalDmg      += unitData.Value.I.Dmg;
                            totalHeal     += unitData.Value.I.EffHeal;
                            totalDmgTaken += unitData.Value.I.DmgTaken;
                            if (unitData.Value.I.Death > 0)
                            {
                                deathEvents += PageUtility.CreateColorCodedName(unitData.Key, unitPlayer.Character.Class) + ",";
                            }
                            if (unitData.Value.I.Dmg > topDPSDmg)
                            {
                                topDPSDmg = unitData.Value.I.Dmg;
                                topDPSer  = PageUtility.CreateColorCodedName(unitData.Key, unitPlayer.Character.Class);
                            }
                            if (unitData.Value.I.EffHeal > topHPSHeal)
                            {
                                topHPSHeal = unitData.Value.I.EffHeal;
                                topHPSer   = PageUtility.CreateColorCodedName(unitData.Key, unitPlayer.Character.Class);
                            }
                        }
                    }
                    int totalDPS  = totalDmg / sliceDuration;
                    int totalHPS  = totalHeal / sliceDuration;
                    int totalDTPS = totalDmgTaken / sliceDuration;

                    string bossHealthStr = "BossHealth: ?%(?k/?k)";
                    if (bossHealths.Count > 0)
                    {
                        bossHealthStr = "BossHealth: ";

                        foreach (var bossHealth in bossHealths)
                        {
                            int cBH  = bossHealth.Item2;
                            int cBMH = bossHealth.Item3;
                            if (cBH != 0)
                            {
                                bossHealthStr = bossHealthStr + bossHealth.Item1 + " = "
                                                + ((double)cBH / (double)cBMH).ToStringDot("0.0%") + "(" + (cBH / 1000) + "k/" + (cBMH / 1000) + "k), ";
                            }
                        }
                        if (bossHealthStr == "BossHealth: ")
                        {
                            bossHealthStr = "BossHealth: ?%(?k/?k)";
                        }
                    }
                    else if (maxHealth != 0)
                    {
                        bossHealthStr = "BossHealth: " + ((double)currHealth / (double)maxHealth).ToStringDot("0.0%") + "(" + (currHealth / 1000) + "k/" + (maxHealth / 1000) + "k)";
                    }

                    events = "Time: " + fightDetail.Time + "&nbsp;&nbsp;&nbsp;" + bossHealthStr + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Events: " + events;
                    if (deathEvents != "")
                    {
                        events += "&nbsp;&nbsp;&nbsp;Deaths: " + deathEvents + "";
                    }
                    events += "<br /><br />";

                    events += "RaidDPS: " + PageUtility.CreateColorString(totalDPS.ToString(), System.Drawing.Color.Red) + "&nbsp;&nbsp;&nbsp;"
                              + "RaidHPS: " + PageUtility.CreateColorString(totalHPS.ToString(), System.Drawing.Color.Green) + "&nbsp;&nbsp;&nbsp;"
                              + (_Details.DebugInfo == true ? "RaidDTPS: " + PageUtility.CreateColorString(totalDTPS.ToString(), System.Drawing.Color.Yellow) + "&nbsp;&nbsp;&nbsp;" : "");
                    events += "TopDPS: " + topDPSer + "(" + PageUtility.CreateColorString((topDPSDmg / sliceDuration).ToString(), System.Drawing.Color.Red) + ")"
                              + "&nbsp;&nbsp;&nbsp;TopHPS: " + topHPSer + "(" + PageUtility.CreateColorString((topHPSHeal / sliceDuration).ToString(), System.Drawing.Color.Green) + ")";


                    events += "<br /><br />";
                    dataX.Add(fightDetail.Time);
                    labels.Add(events);
                    dataY1.Add(totalDPS);
                    dataY2.Add(totalHPS);
                    dataY3.Add(totalDTPS);
                    if (lastEvent == true)
                    {
                        break;
                    }
                }
                if (_Details.DebugInfo == true)
                {
                    graphSection += "<div class='fame' style='min-width: 935px; max-width: 935px'>" + PageUtility.CreateGraph(dataX, dataY1, System.Drawing.Color.Red, dataY2, System.Drawing.Color.Green, dataY3, System.Drawing.Color.Yellow, labels) + "</div>";
                }
                else
                {
                    graphSection += "<div class='fame' style='min-width: 935px; max-width: 935px'>" + PageUtility.CreateGraph(dataX, dataY1, System.Drawing.Color.Red, dataY2, System.Drawing.Color.Green, labels) + "</div>";
                }
            }

            List <Tuple <string, VF_RaidDamageDatabase.UnitData> > unitsData = null;

            if (_Details.FilterSpikes == true)
            {
                unitsData = _Fight.GetFilteredPlayerUnitsDataCopy(true, _RealmDB.RD_GetPlayerIdentifierFunc(_Fight));
            }
            else
            {
                unitsData = _Fight.GetUnitsDataCopy(true);
            }
            var petData = _Fight.GetFilteredPetUnitsData();
            List <Tuple <string, VF_RaidDamageDatabase.UnitData> > abusingPets = new List <Tuple <string, VF_RaidDamageDatabase.UnitData> >();

            List <string> entireRaidMembers;

            if (_RaidSummary != null)
            {
                entireRaidMembers = _RaidSummary.m_RaidMembers;
            }
            else
            {
                entireRaidMembers = _Fight.GetFightCacheData().m_FightDataCollection.m_RaidMembers;
            }
            foreach (var unitPet in petData)
            {
                if (entireRaidMembers.Contains(unitPet.Item1.Split('(').First()) == true)
                {
                    //Player with Pet UnitPet should be banned from damagemeter or has its damage purged
                    string abusingPlayer = unitPet.Item1.Split(new string[] { "(Pet for ", ")" }, StringSplitOptions.RemoveEmptyEntries)[1];
                    abusingPets.Add(Tuple.Create(abusingPlayer, unitPet.Item2));
                }
            }
            foreach (var abusingPet in abusingPets)
            {
                for (int i = 0; i < unitsData.Count; ++i)
                {
                    if (unitsData[i].Item1 == abusingPet.Item1)
                    {
                        var unitFightData = unitsData[i].Item2.CreateCopy();
                        unitFightData.SubtractUnitData(abusingPet.Item2);
                        unitsData[i] = Tuple.Create(abusingPet.Item1, unitFightData);
                    }
                }
            }
            unitsData.AddRange(petData);
            graphSection += "<style>" + PageUtility.CreateStatsBars_HTML_CSSCode() + "</style>";
            {
                PageUtility.StatsBarStyle statsBarStyle = new PageUtility.StatsBarStyle
                {
                    m_TitleText          = "",
                    m_BarTextColor       = "#000",
                    m_LeftSideTitleText  = "#",
                    m_RightSideTitleText = "",
                    m_BeforeBarWidth     = 25,
                    m_MaxWidth           = 470,
                    m_AfterBarWidth      = 30
                };

                bool   decurseInfoPresent = false;
                string dmgThreatSection   = "<div class='span4' style='min-width: 460px;'>";
                string healSection        = "<div class='span4' style='min-width: 460px;'>";
                foreach (var dataPresentTypeInfo in sm_DataPresentTypeInfoList)
                {
                    if (_Details.DebugInfo == false && dataPresentTypeInfo.m_TypeName == "Efficient Heal Recv")
                    {
                        continue;
                    }
                    if (decurseInfoPresent == true && dataPresentTypeInfo.m_TypeName == "Overheal")
                    {
                        continue;
                    }

                    var sortedUnits = unitsData.OrderByDescending((_Unit) => { return(dataPresentTypeInfo.m_GetValue(_Unit.Item2)); });
                    if (sortedUnits.Count() > 0)
                    {
                        List <PageUtility.StatsBarData> statsBars = new List <PageUtility.StatsBarData>();
                        //string newBossSection = "";
                        double totalValue   = 0;
                        double maxValue     = 0;
                        int    bossDmgTaken = -1;
                        VF_RaidDamageDatabase.UnitData.CalculateTotalAndMax(unitsData.AsReadOnly(), dataPresentTypeInfo.m_GetValue
                                                                            , (_Value) => { return(_RealmDB.RD_IsPlayer(_Value.Item1, _Fight) && dataPresentTypeInfo.m_ValidCheck(_Value.Item2)); }
                                                                            , out totalValue, out maxValue);
                        //newBossSection += "VF_CreateDmgBar(1.0, '#000000', '" + dataPresentTypeInfo.m_TypeName + "','#ffffff', '" + (totalValue / 1000).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "k total');";
                        int players = 0;
                        foreach (var unit in sortedUnits)
                        {
                            if (unit.Item1 == _Fight.GetBossName())
                            {
                                bossDmgTaken = unit.Item2.I.DmgTaken;
                            }
                            var playerData = _RealmDB.RD_FindPlayer(unit.Item1, _Fight);
                            if (playerData == null && _Details.DebugInfo == true)
                            {
                                playerData = new VF_RealmPlayersDatabase.PlayerData.Player();
                                playerData.Character.Class = VF_RealmPlayersDatabase.PlayerClass.Unknown;
                                playerData.Name            = unit.Item1;
                            }
                            double currValue = dataPresentTypeInfo.m_GetValue(unit.Item2);
                            if (playerData != null && currValue > 0 && dataPresentTypeInfo.m_ValidCheck(unit.Item2))
                            {
                                double percentage = (double)currValue / totalValue;

                                double displayPercentage = percentage / (maxValue / totalValue);
                                //percentage *= maxValue;
                                //if (players < dataPresentTypeInfo.m_Count)
                                {
                                    ++players;
                                    string classColor = "#CCCCCC";
                                    classColor = RealmPlayersServer.Code.Resources.VisualResources._ClassColors[playerData.Character.Class];
                                    //newBossSection += "VF_CreateDmgBar(" + displayPercentage.ToString(System.Globalization.CultureInfo.InvariantCulture) + ", '" + classColor + "', '<player," + unit.Item1 + ">" + unit.Item1 + "(" + (currValue / interestingFight.m_Fight.FightDuration).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "/s)','#000000', '" + (int)currValue + "(" + string.Format("{0:0.0%}", percentage) + ")');";

                                    double valuePerSecond = (currValue / _Fight.GetFightDuration());
                                    string rightSideText  = "";
                                    if (valuePerSecond < 1.0)
                                    {
                                        rightSideText += (int)currValue + "(" + (valuePerSecond * 60.0).ToStringDot("0") + "/m)";
                                    }
                                    else
                                    {
                                        rightSideText += (int)currValue + "(" + valuePerSecond.ToStringDot("0") + "/s)";
                                    }
                                    statsBars.Add(new PageUtility.StatsBarData
                                    {
                                        m_BeforeBarText   = "#" + players,// + "(" + string.Format("{0:0.0%}", percentage) + ")",
                                        m_OnBarLeftText   = PageUtility.CreateLink_RaidStats_Player(playerData),
                                        m_BarColor        = classColor,
                                        m_PercentageWidth = displayPercentage,
                                        m_AfterBarText    = percentage.ToStringDot("0.0%"),
                                        m_OnBarRightText  = rightSideText,
                                        m_OnBarTextWidth  = StaticValues.MeasureStringLength(playerData.Name + " " + rightSideText)
                                    });
                                }
                            }
                            else if (unit.Item1.Contains("(Pet for") && currValue > 0 && dataPresentTypeInfo.m_ValidCheck(unit.Item2))
                            {
                                double percentage = (double)currValue / totalValue;

                                double displayPercentage = percentage / (maxValue / totalValue);
                                //percentage *= maxValue;
                                //if (players < dataPresentTypeInfo.m_Count)
                                {
                                    ++players;
                                    string classColor = "#00FF00";
                                    //newBossSection += "VF_CreateDmgBar(" + displayPercentage.ToString(System.Globalization.CultureInfo.InvariantCulture) + ", '" + classColor + "', '<player," + unit.Item1 + ">" + unit.Item1 + "(" + (currValue / interestingFight.m_Fight.FightDuration).ToString("0.0", System.Globalization.CultureInfo.InvariantCulture) + "/s)','#000000', '" + (int)currValue + "(" + string.Format("{0:0.0%}", percentage) + ")');";

                                    double valuePerSecond = (currValue / _Fight.GetFightDuration());
                                    string rightSideText  = "";
                                    if (valuePerSecond < 1.0)
                                    {
                                        rightSideText += (int)currValue + "(" + (valuePerSecond * 60.0).ToStringDot("0") + "/m)";
                                    }
                                    else
                                    {
                                        rightSideText += (int)currValue + "(" + valuePerSecond.ToStringDot("0") + "/s)";
                                    }
                                    statsBars.Add(new PageUtility.StatsBarData
                                    {
                                        m_BeforeBarText   = "#" + players,// + "(" + string.Format("{0:0.0%}", percentage) + ")",
                                        m_OnBarLeftText   = unit.Item1,
                                        m_BarColor        = classColor,
                                        m_PercentageWidth = displayPercentage,
                                        m_AfterBarText    = percentage.ToStringDot("0.0%"),
                                        m_OnBarRightText  = rightSideText,
                                        m_OnBarTextWidth  = StaticValues.MeasureStringLength(unit.Item1 + " " + rightSideText)
                                    });
                                }
                            }
                        }
                        //graphSection += newBossSection;
                        if (totalValue > 10000)
                        {
                            statsBarStyle.m_TitleText = dataPresentTypeInfo.m_TypeName + "(" + (totalValue / 1000).ToStringDot("0.0") + "k)";
                        }
                        else
                        {
                            statsBarStyle.m_TitleText = dataPresentTypeInfo.m_TypeName + "(" + (int)totalValue + ")";
                        }
                        if (dataPresentTypeInfo.m_TypeName == "Damage" || dataPresentTypeInfo.m_TypeName == "Threat" || dataPresentTypeInfo.m_TypeName == "Damage Taken")
                        {
                            dmgThreatSection += PageUtility.CreateStatsBars_HTML(statsBarStyle, statsBars, dataPresentTypeInfo.m_Count);
                        }
                        else if (dataPresentTypeInfo.m_TypeName == "Decurse/Dispells")
                        {
                            if (statsBars.Count > 0)
                            {
                                decurseInfoPresent = true;
                                healSection       += PageUtility.CreateStatsBars_HTML(statsBarStyle, statsBars, dataPresentTypeInfo.m_Count);
                            }
                        }
                        else
                        {
                            healSection += PageUtility.CreateStatsBars_HTML(statsBarStyle, statsBars, dataPresentTypeInfo.m_Count);
                        }
                    }
                }
                //graphSection = "<script>$(function () {if (g_RaphaelBarsDrawer == null) {g_RaphaelBarsDrawer = Raphael('diagramDiv', 700, " + (totalBarsCount * 20) + ");}"
                //    + graphSection;
                dmgThreatSection += "</div>";
                healSection      += "</div";
                graphSection     += "<div class='row'>" + dmgThreatSection;// +"<div class='span4'></div>";// +"<div class='span1' style='min-width: 50px;'></div>";
                graphSection     += healSection + "</div>";
            }

            //graphSection += "});";
            //graphSection += "</script>";
            //graphSection += "<div id='diagramDiv'></div>";
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if (_Details.DebugInfo == true && _RaidSummary != null)
            {
                foreach (var bossFight in _RaidSummary.BossFights)
                {
                    if (bossFight.AttemptType == VF_RDDatabase.AttemptType.KillAttempt && bossFight.BossName == _Fight.GetBossName())
                    {
                        fightOverViewInfo += "<p>HealthPercentageFirstSeen: " + bossFight.DataDetails.HealthPercentageFirstSeen.ToStringDot("0.000")
                                             + "</p><p>StartSpecifier: " + bossFight.DataDetails.StartSpecifier.ToString()
                                             + "</p><p>EndSpecifier: " + bossFight.DataDetails.EndSpecifier.ToString()
                                             + "</p><p>FightPrecision: " + bossFight.DataDetails.FightPrecision.ToStringDot("0.000") + "</p>";
                    }
                }
            }
            return("<header class='page-header'>" + fightOverViewInfo + playersAttendingStr + buffInfo + lootDropped + enemyUnits + playerDeaths + unrealisticPlayerSpikes + "</header>" + graphSection);
        }
Exemplo n.º 10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            m_BreadCrumbHTML = new MvcHtmlString(PageUtility.BreadCrumb_AddHome()
                                                 + PageUtility.BreadCrumb_AddFinish("RareItemsList"));

            var realm = RealmControl.Realm;

            if (realm == WowRealm.Unknown)
            {
                return;
            }
            var wowVersion = StaticValues.GetWowVersion(realm);

            int count = PageUtility.GetQueryInt(Request, "count", 100);

            var itemSummaryDB = Hidden.ApplicationInstance.Instance.GetItemSummaryDatabase();

            m_ItemUsageInfoHTML = new MvcHtmlString("<h1>Rarest items<span class='badge badge-inverse'>" + count + " Items</span></h1>"
                                                    + "<p>List contains the most rarest items on the realm.</p>");

            Dictionary <PlayerColumn, string[]> extraColumns = new Dictionary <PlayerColumn, string[]>();
            PlayerColumn ItemAndAquiredDateAfterColumn       = PlayerColumn.Number;

            extraColumns.Add(ItemAndAquiredDateAfterColumn, new string[] { "Item", "Count", "First Aquired", "First Player(s)" });
            m_TableHeadHTML = new MvcHtmlString(PageUtility.CreatePlayerTableHeaderRow(Table_Columns, extraColumns));

            string currentItemDatabase = DatabaseAccess.GetCurrentItemDatabaseAddress();

            string tableBody = "";
            int    nr        = 1;
            Func <KeyValuePair <ulong, VF_RPDatabase.ItemSummary>, int> lambdaComparison = (_Tuple) => { return(_Tuple.Value.m_ItemOwners.Count((_Value) => (itemSummaryDB.GetPlayerRealm(_Value.Item1) == realm))); };
            Func <Tuple <ulong, DateTime>, DateTime> lambdaDateTimeComparison            = (_Tuple) => { return(_Tuple.Item2); };
            var rareItemsList = itemSummaryDB.m_Items.OrderBy(lambdaComparison);

            foreach (var rareItem in rareItemsList)
            {
                if (nr >= count)
                {
                    break;
                }
                int rareItemCount = rareItem.Value.m_ItemOwners.Count((_Value) => (itemSummaryDB.GetPlayerRealm(_Value.Item1) == realm));
                if (rareItemCount > 0 && Code.Resources.ItemAnalyzer.IsRareItem(rareItem.Value.m_ItemID) == true)
                {
                    var itemInfo = DatabaseAccess.GetItemInfo(rareItem.Value.m_ItemID, wowVersion);
                    if (itemInfo.ItemQuality < 4)
                    {
                        continue;
                    }
                    //rareItem.
                    Player   player         = null;
                    var      orderedAquires = rareItem.Value.m_ItemOwners.OrderBy(lambdaDateTimeComparison);
                    DateTime dateTimeCutoff = orderedAquires.First((_Value) => (itemSummaryDB.GetPlayerRealm(_Value.Item1) == realm)).Item2;
                    if (dateTimeCutoff < new DateTime(2013, 8, 1, 0, 0, 0))
                    {
                        dateTimeCutoff = new DateTime(2013, 8, 1, 0, 0, 0);
                    }
                    else
                    {
                        dateTimeCutoff = dateTimeCutoff.AddDays(3);
                    }

                    string firstPlayers     = "<div style='overflow: hidden; display: table; height: 58px;'>";
                    var    interestingItems = orderedAquires.Where((_Tuple) => { return(_Tuple.Item2 < dateTimeCutoff && (itemSummaryDB.GetPlayerRealm(_Tuple.Item1) == realm)); });
                    if (interestingItems.Count() < 5)
                    {
                        foreach (var playerAquire in interestingItems)
                        {
                            if (playerAquire.Item2 < dateTimeCutoff)
                            {
                                player = DatabaseAccess.FindRealmPlayer(this, realm, itemSummaryDB.GetPlayerName(playerAquire.Item1));
                                if (player != null)
                                {
                                    var playerFaction = StaticValues.GetFaction(player.Character.Race);
                                    firstPlayers += "<div class='" + StaticValues.GetFactionCSSName(playerFaction) + "_col' style='display: table-cell; width:160px;" /*"background-color: " + (playerFaction == PlayerFaction.Horde ? "#372727" : "#272f37")*/ + "'>";
                                    firstPlayers += "<p style='text-align:center;'><a href='CharacterViewer.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&player=" + System.Web.HttpUtility.HtmlEncode(player.Name) + "'>" + PageUtility.CreateColorCodedName(player.Name, player.Character.Class) + "</a>";
                                    if (player.Guild.GuildName != "nil")
                                    {
                                        string visualGuildName = PageUtility.BreakLongStr(player.Guild.GuildName, 16, 8);
                                        firstPlayers += "<br>" + PageUtility.CreateLink("GuildViewer.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&guild=" + System.Web.HttpUtility.HtmlEncode(player.Guild.GuildName), "&lt;" + visualGuildName + "&gt;") + "</p>";
                                    }
                                    firstPlayers += "</div>";
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        firstPlayers += "Data not detailed enough<br>(more than 5 players within aquire timespan)";
                    }
                    firstPlayers += "</div>";
                    extraColumns[ItemAndAquiredDateAfterColumn] = new string[] {
                        "<div class='inventory' style='background: none; width: 58px; height: 58px;'><div>"
                        + "<img class='itempic' src='" + "http://realmplayers.com/" + itemInfo.GetIconImageAddress() + "'/>"
                        + "<div class='quality' id='" + CharacterViewer.ItemQualityConversion[itemInfo.ItemQuality] + "'></div>"
                        + "<img class='itemframe' src='assets/img/icons/ItemNormalFrame.png'/>"
                        + CharacterViewer.GenerateItemLink(currentItemDatabase, rareItem.Value.m_ItemID, rareItem.Value.m_SuffixID, wowVersion)
                        + "<a class='itemplayersframe' href='ItemUsageInfo.aspx?realm=" + StaticValues.ConvertRealmParam(realm) + "&item=" + rareItem.Value.m_ItemID + (rareItem.Value.m_SuffixID != 0 ? "&suffix=" + rareItem.Value.m_SuffixID : "") + "'>" + rareItemCount.ToString() + "</a>"
                        + "</div></div>"
                        , rareItemCount.ToString()
                        , " &gt; " + interestingItems.First().Item2.ToString("yyyy-MM-dd") + "<br> &lt; " + dateTimeCutoff.ToString("yyyy-MM-dd")
                        , firstPlayers
                    };
                    tableBody += PageUtility.CreateTableRow("",
                                                            PageUtility.CreateTableColumn("#" + (nr++))
                                                            + PageUtility.CreateTableColumn(extraColumns[ItemAndAquiredDateAfterColumn][0])
                                                            + PageUtility.CreateTableColumn(extraColumns[ItemAndAquiredDateAfterColumn][1])
                                                            + PageUtility.CreateTableColumn(extraColumns[ItemAndAquiredDateAfterColumn][2])
                                                            + PageUtility.CreateTableColumn(extraColumns[ItemAndAquiredDateAfterColumn][3]));
                }
            }
            m_TableBodyHTML = new MvcHtmlString(tableBody);
        }