コード例 #1
0
 // free resources
 public void Dispose()
 {
     m_Attempts.Clear();
     //foreach (var key in m_Attempts.Select(x => x.Key).ToArray()) m_Attempts[key] = null;
     m_Attempts = null;
     m_SaReference.Clear();
     //foreach (var key in m_SaReference.Select(x => x.Key).ToArray()) m_SaReference[key] = null;
     m_SaReference = null;
     m_SatReference.Clear();
     //foreach (var key in m_SatReference.Select(x => x.Key).ToArray()) m_SatReference[key] = null;
     m_SatReference = null;
     m_SataReference.Clear();
     //foreach (var key in m_SataReference.Select(x => x.Key).ToArray()) m_SataReference[key] = null;
     m_SataReference = null;
     m_Auras.Clear();
     //foreach (var key in m_Auras.Select(x => x.Key).ToArray()) m_Auras[key] = null;
     m_Auras = null;
     m_Deaths.Clear();
     //foreach (var key in m_Deaths.Select(x => x.Key).ToArray()) m_Deaths[key] = null;
     m_Deaths = null;
     m_Dispels.Clear();
     //foreach (var key in m_Dispels.Select(x => x.Key).ToArray()) m_Dispels[key] = null;
     m_Dispels = null;
     m_Interrupts.Clear();
     //foreach (var key in m_Interrupts.Select(x => x.Key).ToArray()) m_Interrupts[key] = null;
     m_Interrupts = null;
     m_Damage.Clear();
     //foreach (var key in m_Damage.Select(x => x.Key).ToArray()) m_Damage[key] = null;
     m_Damage = null;
     m_Healing.Clear();
     //foreach (var key in m_Healing.Select(x => x.Key).ToArray()) m_Healing[key] = null;
     m_Healing = null;
     m_Loot.Clear();
     //foreach (var key in m_Loot.Select(x => x.Key).ToArray()) m_Loot[key] = null;
     m_Loot = null;
     m_Threat.Clear();
     //foreach (var key in m_Threat.Select(x => x.Key).ToArray()) m_Threat[key] = null;
     m_Threat = null;
     m_Casts.Clear();
     //foreach (var key in m_Casts.Select(x => x.Key).ToArray()) m_Casts[key] = null;
     m_Casts = null;
     m_Participants.Clear();
     m_Participants = null;
     foreach (var key in mAtmtCache.Select(x => x.Key).ToArray())
     {
         mAtmtCache[key] = null;
         //for (int i = 0; i < mAtmtCache[key].Length; ++i) mAtmtCache[key][i] = null;
     }
     mTooltipCache.Clear();
     mTooltipCache = null;
     mQueryCache.Clear();
     mQueryCache = null;
     mAtmtCache  = null;
     m_Instance  = null;
     m_DB        = null;
     m_Guild     = null;
     m_Server    = null;
 }
コード例 #2
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!App.loaded && !Server.MapPath(".").ToLower().Contains("loading"))
        {
            try { Response.Redirect("/Loading/", false); Context.ApplicationInstance.CompleteRequest(); } catch (System.Threading.ThreadAbortException) { }
            return;
        }

        this.Title = "LegacyPlayers | Speedkill";
        //App.UpdateRaidSpecificData();
        Utility.GetExpansionList(ref pmExpansion);
        Utility.GetFactionList(ref pmFaction);

        if (IsPostBack)
        {
            Utility.SetCookie(Response, Request, "Speedkills_Faction", pmFaction.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Realm", pmRealm.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Expansion", pmExpansion.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Encounter", pmEncounter.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Selection", pmSelection.Value);
            m_EncounterVal = pmEncounter.Value;
        }
        else
        {
            pmFaction.Value   = Utility.GetCookie(Request, "Speedkills_Faction", "0");
            pmRealm.Value     = Utility.GetCookie(Request, "Speedkills_Realm", "0");
            pmSelection.Value = Utility.GetCookie(Request, "Speedkills_Selection", "0");
            pmExpansion.Value = Utility.GetCookie(Request, "Speedkills_Expansion", "0");
            GetEncounterList(ref pmEncounter, "None", expansion);
            pmEncounter.Value = Utility.GetCookie(Request, "Speedkills_Encounter", "12118");
            m_EncounterVal    = pmEncounter.Value;
        }

        if (Utility.GetQueryString(Request, "exp", "") != "")
        {
            pmExpansion.Value = Utility.GetQueryString(Request, "exp", "0");
        }

        expansion = int.Parse(pmExpansion.Value);
        Utility.GetRealmList(ref pmRealm, false, expansion);
        var bosses = (expansion == 0
            ? Utility.m_BossList.Where(x => (x.Key < 32 && !(x.Key >= 1 && x.Key <= 10)) || (x.Key >= 84 && x.Key <= 89)).ToDictionary()
            : Utility.m_BossList.Where(x => x.Key >= 32 && !(x.Key >= 84 && x.Key <= 89)).ToDictionary());
        bool foundNpc = bosses.Any(instance => instance.Value.Any(npc => m_EncounterVal == npc.ToString()));

        if (!foundNpc)
        {
            m_EncounterVal = bosses.First().Value[0].ToString();
        }

        GetEncounterList(ref pmEncounter, "None", expansion);
        GetEncounterList(ref pmEncounter, m_EncounterVal, expansion);

        short counter     = 1;
        var   searchspace = FilterGuilds();

        if (searchspace.Length == 0)
        {
            return;
        }

        searchspace = (pmSelection.Value == "1") ? searchspace : searchspace.Where(x => x.Average.Count(y => y.Time > 0) >= 5).ToArray();
        int bestTime = (searchspace[0] == null) ? 1 : (pmSelection.Value == "0")
            ? searchspace[0].GetAverage()
            : searchspace[0].Best.Time;

        foreach (var guild in searchspace)
        {
            DBGuilds gInfo = App.GetGuild(guild.GuildID);
            if (gInfo.ServerID <= 0 || gInfo.ServerID >= App.m_Server.Length)
            {
                continue;
            }
            int  time, atmt;
            uint killed = 0;
            time = atmt = 0;
            if (pmSelection.Value == "0")
            {
                time   = guild.GetAverage();
                atmt   = guild.Average[0].Attempt;
                killed = guild.Average[0].Killed;
            }
            else
            {
                time   = guild.Best.Time;
                atmt   = guild.Best.Attempt;
                killed = guild.Best.Killed;
            }

            m_Table.Append("<tr><td>" + (counter++) + "</td><td><div class=\"tstatusbar bgcolor-f" + gInfo.Faction + "\" style=\"width: " + (100.0 * bestTime / time) + "%;\">" +
                           "<div><a href=\"/Armory/Guild/?guildid=" + guild.GuildID + "\" onmouseover=\"tt_show(this, 4, " + guild.GuildID + ",[])\">" + gInfo.Name + " (" + App.m_Server[gInfo.ServerID].Name + ")</a></div>" +
                           "<div>" + Math.Round(time / 1000.0, 2) + " seconds</div></div></td>" +
                           "<td><a href=\"/Raids/Viewer/?atmt=" + atmt + "&exp=" + expansion + "\">" + DateTimeOffset.FromUnixTimeSeconds(killed).UtcDateTime + "</a></td></tr>");
        }
    }
コード例 #3
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!App.loaded && !Server.MapPath(".").ToLower().Contains("loading"))
        {
            try { Response.Redirect("/Loading/", false); Context.ApplicationInstance.CompleteRequest(); } catch (System.Threading.ThreadAbortException) { }
            return;
        }

        if ((this.Master as MasterPage).ValidForAds())
        {
            mAds = "<ins class=\"adsbygoogle\" style=\"display:inline-block;width:300px;height:250px\" data-ad-client=\"ca-pub-5192077039791210\" data-ad-slot=\"2928397668\"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script>";
        }

        var imgType  = Utility.GetImageType(Request, "png");
        var imgType2 = Utility.GetImageType(Request, "jpg");

        this.Title = "LegacyPlayers | Guild";
        m_GuildID  = Int32.Parse(Utility.GetQueryString(Request, "guildid", "0"));
        m_CurPage  = Int32.Parse(Utility.GetQueryString(Request, "page", "0"));
        var guildMem    = App.m_Chars.Values.Where(x => x.ServerID > 0 && x.RefGuild.GuildID == m_GuildID).Where(x => x.Seen >= Utility.GetUnixTimeStamp() * 1000 - 1000 * 60 * 60 * 24 * 14);
        var guildMember = guildMem.Select(x => x.CharId).ToDictionary(x => x, x => true);

        int toLeft = 0;

        if (m_CurPage >= 5)
        {
            toLeft = m_CurPage - 5;
        }
        for (int i = toLeft; i < toLeft + 7; ++i) // Sometimes there may not that many pages
        {
            if (i != m_CurPage)
            {
                m_PageBar.Append("<a href=\"?page=" + i + "&guildid=" + m_GuildID +
                                 "\"><div class=\"bbdesign placeholder\" >" + (i + 1) +
                                 "</div></a>");
            }
            else
            {
                m_PageBar.Append("<a href=\"?page=" + i + "&guildid=" + m_GuildID +
                                 "\"><div class=\"bbdesign placeholder\" style=\"color:#f28f45\">" + (i + 1) +
                                 "</div></a>");
            }
        }
        if (!App.m_Guilds.ContainsKey(m_GuildID))
        {
            Response.Redirect("/404/");
            return;
        }
        m_Me      = App.GetGuild(m_GuildID);
        expansion = App.m_Server[m_Me.ServerID].Expansion;

        // Recent raid list
        m_Schedule = new Dictionary <short, List <short> >();
        foreach (var raid in App.mRSInstances[expansion].Where(x => x.mGuildId == m_GuildID).OrderByDescending(x => x.mEnd).Take(10))
        {
            m_RecentRaids.Append("<tr><td><div class=\"sp bbdesign\" style=\"background:url(/Assets/raids/" + raid.mInstanceId + "." + imgType + ")\"><div>" +
                                 App.m_Instances[raid.mInstanceId].Name + "</div></div></td>" +
                                 "<td><a href=\"/Raids/Viewer/?id=" + raid.mId + "&exp=" + expansion + "\">" +
                                 Utility.GetTimeFromMillisecondsWithoutSeconds(raid.mEnd) + "</a></td></tr>");

            short dow = (short)DateTimeOffset.FromUnixTimeMilliseconds(raid.mEnd).UtcDateTime.DayOfWeek;
            if (m_Schedule.ContainsKey(dow))
            {
                if (!m_Schedule[dow].Contains(raid.mInstanceId))
                {
                    m_Schedule[dow].Add(raid.mInstanceId);
                }
            }
            else
            {
                m_Schedule.Add(dow, new List <short>()
                {
                    raid.mInstanceId
                });
            }
        }

        // Loading the schedule
        short p        = 0;
        var   weekDays = new[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };

        foreach (string day in weekDays)
        {
            string instances = "";
            if (m_Schedule.ContainsKey(p))
            {
                for (int i = 0; i < m_Schedule[p].Count; ++i)
                {
                    if (instances == "")
                    {
                        instances = m_ShortInstanceName[m_Schedule[p][i]];
                    }
                    else
                    {
                        instances += ", " + m_ShortInstanceName[m_Schedule[p][i]];
                    }
                }
            }

            m_ScheduleTable.Append("<tr><td>" + day + "</td><td>" + instances + "</td></tr>");
            ++p;
        }


        // Progress
        // Todo: Handle worldbosses
        foreach (IGrouping <int, DB_am_guild_progress> t in App.m_GuildProgress.Where(x => x.GuildID == m_GuildID)
                 .GroupBy(x => x.InstanceID).OrderBy(x => x.Key).ToArray())
        {
            m_ProgressTable.Append("<tr class=\"" +
                                   ((t.Count() == Utility.m_NumPerInstance[t.Key]) ? "positive" : "middle") +
                                   "\" onmouseover=\"tt_show(this, 2, " + m_GuildID + ", [], " + t.Key + ")\"><td><div class=\"sp bbdesign\" style=\"background:url(/Assets/raids/" + t.Key + "." + imgType + ")\"><div>" + App.m_Instances[t.Key].Name +
                                   "</div></div></td><td>" + t.Count() + "/" + Utility.m_NumPerInstance[t.Key] +
                                   "</td></tr>");
        }

        // Itemhistory
        Dictionary <int, Dictionary <int, bool> > tempDone  = new Dictionary <int, Dictionary <int, bool> >();
        Dictionary <int, Dictionary <int, bool> > tempDone2 = new Dictionary <int, Dictionary <int, bool> >();

        var amDataDesc = App.m_AmData[expansion].Values.Where(x => guildMember.ContainsKey(x.CharID) && x.Ref_Gear > 0)
                         .OrderByDescending(x => x.Uploaded).Take(20).ToArray();
        string date          = "";
        string someHackStr   = "";
        int    maxLimitItems = 100;
        int    curItemsCount = 0;
        int    maxLimitRows  = 10;
        int    curRowsCount  = 0;

        for (int i = 0; i < amDataDesc.Length; ++i)
        {
            if (curRowsCount >= maxLimitRows)
            {
                break;
            }

            if (!tempDone.ContainsKey(amDataDesc[i].CharID))
            {
                tempDone[amDataDesc[i].CharID]  = new Dictionary <int, bool>();
                tempDone2[amDataDesc[i].CharID] = new Dictionary <int, bool>();
            }
            if (tempDone[amDataDesc[i].CharID].ContainsKey(amDataDesc[i].Ref_Gear))
            {
                continue;
            }

            string newDate = DateTimeOffset.FromUnixTimeMilliseconds(amDataDesc[i].Uploaded).UtcDateTime.ToShortDateString();
            if (date != newDate)
            {
                if (date != "" && someHackStr != "")
                {
                    someHackStr = "<tr><td>" + someHackStr + "</td><td>" + date + "</td></tr>";
                    m_ItemHistoryTable.Append(someHackStr);
                }
                someHackStr = "";
                date        = newDate;
                ++curRowsCount;
            }

            for (int q = 0; q < 19; ++q)
            {
                if (curItemsCount >= maxLimitItems)
                {
                    break;
                }
                var item = App.m_RefGear[expansion][amDataDesc[i].Ref_Gear].Slots[q];
                if (item.ItemID <= 0 || item.Item(expansion).Quality <= 3 ||
                    tempDone2[amDataDesc[i].CharID].ContainsKey(item.ItemID))
                {
                    continue;
                }
                someHackStr += "<div class=\"item-template-32 qe" + item.Item(expansion).Quality +
                               "\" style=\"background-image: url('/Assets/icons/" + item.Item(expansion).IconName +
                               "." + imgType2 + "');\"><a href=\"#\">" + item.Item(expansion).Quantity(App.GetGuild(m_GuildID).ServerID) + "</a><a href=\"/Armory/Item/?i=" +
                               item.ItemID + "\"><div onmouseover=\"tt_show(this, 1, " + item.ItemID +
                               ",[]," + expansion + ")\"></div></a><a href=\"/Armory/?charid=" + amDataDesc[i].CharID + "\">" +
                               App.GetChar(amDataDesc[i].CharID).Name + "</a></div>";
                tempDone2[amDataDesc[i].CharID][item.ItemID] = true;
                ++curItemsCount;
            }

            tempDone[amDataDesc[i].CharID][amDataDesc[i].Ref_Gear] = true;
        }

        if (someHackStr != "")
        {
            someHackStr = "<tr><td>" + someHackStr + "</td><td>" + date + "</td></tr>";
            m_ItemHistoryTable.Append(someHackStr);
        }

        switch (Utility.GetCookie(Request, "Guild_Table", "0"))
        {
        case "0":
            // Member
            m_Table.Append("<table id=\"member\" class=\"table noborder bbdesign\"><thead><tr><td>Rank</td><td>Name</td><td>Guild Rank</td><td>Level</td><td>Seen</td></tr></thead><tbody>");

            foreach (var member in guildMem.OrderBy(x => x.RefGuild.GrankIndex).Skip(m_CurPage * 20).Take(20))
            {
                m_Table.Append("<tr><td><div class=\"pvprankimage\" style=\"background:url(/Assets/armory/rk" + member.RefHonor.Rank + "." + imgType + ")\"></div></td><td><div class=\"sp bbdesign\" style=\"background-image:url(/Assets/racegender/" + member.RefMisc.Gender + "-" +
                               member.RefMisc.Race + "." + imgType + ")\"></div>" +
                               "<div class=\"sp" +
                               " bbdesign\" style=\"background-image:url(/Assets/classes/ccc" + member.RefMisc.Class + "." + imgType + ")\"><div>" +
                               "<a class=\"color-c" + member.RefMisc.Class + "\" href=\"/Armory/?charid=" + member.CharId + "\" onmouseover=\"tt_show(this, 5, " + member.CharId + ", [])\">" + member.Name + "</a></div></div></td>" +
                               "<td>" + member.RefGuild.GrankName + "</td><td>" + member.RefMisc.Level +
                               "</td><td>" + Utility.GetSeenSince(member.Seen) + "</td></tr>");
            }

            break;

        case "1":
            // Top Ranked
            m_Table.Append("<table id=\"topranked\" class=\"table noborder bbdesign\"><thead><tr><td>Server</td><td>Class</td><td>Name</td><td>Type</td><td>Best</td><td>Average</td><td>Encounter</td></tr></thead><tbody>");

            foreach (var member in App.m_Rankings.Where(x => guildMember.ContainsKey(x.CharID))
                     .OrderBy(x => x.GetRank()).ThenBy(x => x.GetClassRank()).Skip(m_CurPage * 20).Take(20))
            {
                m_Table.Append("<tr><td>" + member.GetRank() + "</td><td>" + member.GetClassRank() +
                               "</td><td>" +
                               "<div class=\"sp" +
                               " bbdesign\" style=\"background-image:url(/Assets/racegender/" + App.GetChar(member.CharID).RefMisc.Gender + "-" +
                               App.GetChar(member.CharID).RefMisc.Race + "." + imgType + ")\"></div><div class=\"sp" +
                               " bbdesign\" style=\"background-image:url(/Assets/classes/ccc" + App.GetChar(member.CharID).RefMisc.Class + "." + imgType + ")\"><div>" +
                               "<a class=\"color-c" + App.GetChar(member.CharID).RefMisc.Class + "\" href=\"/Armory/?charid=" + member.CharID + "\" onmouseover=\"tt_show(this, 5, " + member.CharID + ", [])\">" + App.GetChar(member.CharID).Name + "</a></div></div></td>" +
                               "<td>" + ((member.Type == 0) ? "DPS" : "HPS") + "</td><td>" +
                               Math.Round(1000.0 * member.Best.Value / member.Best.Time, 1) + "</td><td>" +
                               Math.Round(member.GetAverage() / 1000.0, 1) + "</td>" +
                               "<td><div class=\"sp" +
                               " bbdesign\" style=\"background:url(/Assets/raids/" + member.InstanceID + "." + imgType + ")\"><div><a href=\"/Raids/Viewer/?atmt=" + member.Best.Attempt +
                               "&exp=" + expansion + "\">" + App.GetNpc(member.NpcID, expansion).Name + "</a></div></div></td></tr>");
            }

            break;

        case "2":
            // Latest changes
            // !! Going through the whole list here! This may be slow in the future!
            // TODO: Requires good armory filtering to prevent many join/leave events
            m_Table.Append("<table id=\"changes\" class=\"table noborder bbdesign\"><thead><tr><td>Player</td><td>Status Change</td><td>Date</td></tr></thead><tbody>");

            var amChanges = App.m_RefGuild[expansion].Where(x => x.Value.GuildID == m_GuildID).Join(App.m_AmData[expansion].Values, x => x.Key, y => y.Ref_Guild, (x, y) => y)
                            .OrderBy(x => x.Uploaded);
            Dictionary <int, int> lastRef       = new Dictionary <int, int>();
            List <string>         m_HackHistory = new List <string>();
            m_HackHistory.Clear();
            foreach (var change in amChanges)
            {
                if (!lastRef.ContainsKey(change.CharID))
                {
                    lastRef[change.CharID] = 0;
                }
                if (lastRef[change.CharID] == change.Ref_Guild)
                {
                    continue;
                }

                string          message = "";
                DB_am_ref_guild refOG   = App.m_RefGuild[expansion][lastRef[change.CharID]];
                DB_am_ref_guild refNG   = App.m_RefGuild[expansion][change.Ref_Guild];
                if (refOG.GuildID != refNG.GuildID)
                {
                    if (refOG.GuildID == m_GuildID)
                    {
                        message = "Removed from the guild.";
                    }
                    else if (refNG.GuildID == m_GuildID)
                    {
                        message = "Joined the guild.";
                    }
                }
                else
                {
                    if (refOG.GrankIndex != refNG.GrankIndex && refOG.GrankName != refNG.GrankName)
                    {
                        message = "Changed Rank From \"" + refOG.GrankName + "\" to \"" + refNG.GrankName + "\"";
                    }
                }

                if (message != "")
                {
                    m_HackHistory.Add("<tr><td><div class=\"bbdesign\" style=\"background-image:url(/Assets/racegender/" + App.GetChar(change.CharID).RefMisc.Gender + "-" +
                                      App.GetChar(change.CharID).RefMisc.Race + "." + imgType + ")\"></div><div class=\"sp" +
                                      " bbdesign\" style=\"background-image:url(/Assets/classes/ccc" + App.GetChar(change.CharID).RefMisc.Class + "." + imgType + ")\"><div><a class=\"color-c" +
                                      App.GetChar(change.CharID).RefMisc.Class + "\" href=\"/Armory/?charid=" + change.CharID + "\" onmouseover=\"tt_show(this, 5, " + change.CharID + ", [])\">" + App.GetChar(change.CharID).Name +
                                      "</a></div></div></td>" +
                                      "<td>" + message + "</td>" +
                                      "<td>" + DateTimeOffset.FromUnixTimeMilliseconds(change.Uploaded).UtcDateTime
                                      .ToShortDateString() + "</td></tr>");
                }
                lastRef[change.CharID] = change.Ref_Guild;
            }

            for (int i = m_HackHistory.Count - 1 - m_CurPage * 20; i >= 0 && i > m_HackHistory.Count - 20 - m_CurPage * 20; --i)
            {
                m_Table.Append(m_HackHistory[i]);
            }

            break;
        }
        m_Table.Append("</tbody></table>");
    }
コード例 #4
0
        private RaidData(int _InstanceID, int _GuildID, long _Start, long _End, string _LookUpSpace, int _Id, int _Uploader, int _Index = 0)
        {
            RequestData(_Index, _Id, _Uploader);
            m_InstanceId = _Id;
            m_UploaderId = _Uploader;
            m_DB         = App.GetDB(_Index + 1);

            string[] Tokens = _LookUpSpace.Split('&');

            m_Instance = App.m_Instances[_InstanceID].Name;
            m_Guild    = App.GetGuild(_GuildID);
            m_Server   = App.m_Server[m_Guild.ServerID];
            m_Start    = _Start;
            m_End      = _End;

            string[] Offset = Tokens[0].Split(',');
            try
            {
                MySqlDataReader dr = m_DB
                                     .Query("SELECT id, npcid, start, end, killed FROM rs_attempts WHERE id>=" + Offset[0] +
                                            " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Attempts[dr.GetInt32(0)] = new RS_Attempts()
                    {
                        NpcId  = dr.GetInt32(1),
                        Start  = dr.GetInt32(2),
                        End    = dr.GetInt32(3),
                        Killed = dr.GetInt16(4) == 1
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "Attempts: " + ex.Message + "<br /><br />";
            }

            // TODO: Optimize these
            try
            {
                if (!m_Uploader.ContainsKey(_Id))
                {
                    m_Uploader[_Id] = new List <KeyValuePair <int, int> >();
                }

                MySqlDataReader dr = m_DB.Query("SELECT a.id, b.userid FROM rs_instance_uploader a LEFT JOIN gn_uploader b ON a.uploaderid = b.id WHERE a.instanceid=" + _Id).ExecuteReaderRpll();
                while (dr.Read())
                {
                    var kvp = new KeyValuePair <int, int>(dr.GetInt32(0), dr.GetInt32(1));
                    if (!m_Uploader[_Id].Contains(kvp))
                    {
                        m_Uploader[_Id].Add(kvp);
                    }
                }

                dr.CloseRpll();

                dr = m_DB.Query("SELECT charid FROM rs_participants WHERE uploaderid=" + _Uploader).ExecuteReaderRpll();
                while (!dr.IsClosed && dr.Read())
                {
                    m_Participants.Add(App.GetChar(dr.GetInt32(0)));
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_instance_uploader: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset           = Tokens[1].Split(',');
                m_SaReference[0] = new RS_Sa_Reference()
                {
                    SourceId  = 0,
                    AbilityId = 0
                };
                MySqlDataReader dr = m_DB.Query("SELECT id, sourceid, abilityid FROM rs_sa_reference WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_SaReference[dr.GetInt32(0)] = new RS_Sa_Reference()
                    {
                        SourceId  = dr.GetInt32(1),
                        AbilityId = dr.GetInt32(2)
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "RS_sa_reference: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset            = Tokens[2].Split(',');
                m_SatReference[0] = new RS_Sat_Reference()
                {
                    SourceId  = 0,
                    AbilityId = 0,
                    TargetId  = 0
                };
                MySqlDataReader dr = m_DB.Query("SELECT id, targetid, said FROM rs_sat_reference WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_SatReference[dr.GetInt32(0)] = new RS_Sat_Reference()
                    {
                        TargetId  = dr.GetInt32(1),
                        AbilityId = m_SaReference[dr.GetInt32(2)].AbilityId,
                        SourceId  = m_SaReference[dr.GetInt32(2)].SourceId,
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_sat_reference: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset             = Tokens[3].Split(',');
                m_SataReference[0] = new RS_Sata_Reference()
                {
                    SourceId        = 0,
                    AbilityId       = 0,
                    TargetId        = 0,
                    TargetAbilityId = 0
                };
                MySqlDataReader dr = m_DB.Query("SELECT id, targetabilityid, satid FROM rs_sata_reference WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_SataReference[dr.GetInt32(0)] = new RS_Sata_Reference()
                    {
                        TargetAbilityId = dr.GetInt32(1),
                        AbilityId       = m_SatReference[dr.GetInt32(2)].AbilityId,
                        SourceId        = m_SatReference[dr.GetInt32(2)].SourceId,
                        TargetId        = m_SatReference[dr.GetInt32(2)].TargetId
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_sata_reference: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset = Tokens[4].Split(',');
                MySqlDataReader dr = m_DB.Query("SELECT id, said, gained, faded FROM rs_auras WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Auras[dr.GetInt32(0)] = new RS_Auras()
                    {
                        SaRefId = dr.GetInt32(1),
                        Gained  = dr.GetInt32(2),
                        Faded   = dr.GetInt32(3)
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_auras: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset = Tokens[5].Split(',');
                MySqlDataReader dr = m_DB.Query("SELECT id, sourceid, timestamp FROM rs_deaths WHERE id>=" + Offset[0] + " AND id<" +
                                                Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Deaths[dr.GetInt32(0)] = new RS_Deaths()
                    {
                        SourceId  = dr.GetInt32(1),
                        TimeStamp = dr.GetInt32(2)
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_deaths: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset = Tokens[6].Split(',');
                MySqlDataReader dr = m_DB.Query("SELECT id, sataid, timestamp FROM rs_dispels WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Dispels[dr.GetInt32(0)] = new RS_Dispels()
                    {
                        SataRefId = dr.GetInt32(1),
                        TimeStamp = dr.GetInt32(2)
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_dispels: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset = Tokens[7].Split(',');
                MySqlDataReader dr = m_DB.Query("SELECT id, sataid, timestamp FROM rs_interrupts WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Interrupts[dr.GetInt32(0)] = new RS_Interrupts()
                    {
                        SataRefId = dr.GetInt32(1),
                        TimeStamp = dr.GetInt32(2)
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_interrupts: " + ex.Message + "<br /><br />";
            }

            try{
                Offset = Tokens[8].Split(',');
                if (Tokens.Length >= 14)
                {
                    MySqlDataReader dr = m_DB
                                         .Query("SELECT a.id, a.satid, a.hittype, a.timestamp, a.amount, IFNULL(b.amount,0) FROM rs_damage a LEFT JOIN rs_damage_threat b ON a.id = b.dmgid WHERE a.id>=" + Offset[0] +
                                                " AND a.id<" + Offset[1]).ExecuteReaderRpll();
                    while (dr.Read())
                    {
                        m_Damage[dr.GetInt32(0)] = new RS_Damage()
                        {
                            SatRefId  = dr.GetInt32(1),
                            HitType   = dr.GetInt16(2),
                            TimeStamp = dr.GetInt32(3),
                            Amount    = dr.GetInt32(4),
                            MitGated  = new int[3]
                        };
                        m_Threat.Add(new RS_Threat()
                        {
                            SatRefId  = dr.GetInt32(1),
                            HitType   = dr.GetInt16(2),
                            TimeStamp = dr.GetInt32(3),
                            Amount    = dr.GetInt32(5),
                        });
                    }

                    dr.CloseRpll();
                }
                else
                {
                    MySqlDataReader dr = m_DB
                                         .Query("SELECT id, satid, hittype, timestamp, amount FROM rs_damage WHERE id>=" + Offset[0] +
                                                " AND id<" + Offset[1]).ExecuteReaderRpll();
                    while (dr.Read())
                    {
                        m_Damage[dr.GetInt32(0)] = new RS_Damage()
                        {
                            SatRefId  = dr.GetInt32(1),
                            HitType   = dr.GetInt16(2),
                            TimeStamp = dr.GetInt32(3),
                            Amount    = dr.GetInt32(4),
                            MitGated  = new int[3]
                        };
                    }

                    dr.CloseRpll();
                }

                if (_Index >= 1)
                {
                    MySqlDataReader dr = m_DB.Query("SELECT dmgid, type, amount FROM rs_damage_mitgated WHERE dmgid>=" + Offset[0] +
                                                    " AND dmgid<" + Offset[1]).ExecuteReaderRpll();
                    while (dr.Read())
                    {
                        m_Damage[dr.GetInt32(0)].MitGated[dr.GetInt32(1)] = dr.GetInt32(2);
                    }
                    dr.CloseRpll();
                }
                else
                {
                    MySqlDataReader dr = m_DB.Query("SELECT dmgid, amount FROM rs_damage_mitgated WHERE dmgid>=" + Offset[0] +
                                                    " AND dmgid<" + Offset[1]).ExecuteReaderRpll();
                    while (dr.Read())
                    {
                        m_Damage[dr.GetInt32(0)].MitGated[0] = dr.GetInt32(1);
                    }
                    dr.CloseRpll();
                }
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_damage: " + ex.Message + "<br /><br />";
            }

            try
            {
                if (Tokens.Length < 14)
                {
                    Offset = Tokens[9].Split(',');
                    MySqlDataReader dr = m_DB
                                         .Query("SELECT id, satid, hittype, timestamp, amount FROM rs_healing WHERE id>=" + Offset[0] +
                                                " AND id<" + Offset[1]).ExecuteReaderRpll();
                    while (dr.Read())
                    {
                        m_Healing[dr.GetInt32(0)] = new RS_Healing()
                        {
                            SatRefId  = dr.GetInt32(1),
                            HitType   = dr.GetInt16(2),
                            TimeStamp = dr.GetInt32(3),
                            Amount    = dr.GetInt32(4)
                        };
                    }

                    dr.CloseRpll();
                }
                else
                {
                    Offset = Tokens[9].Split(',');
                    MySqlDataReader dr = m_DB
                                         .Query("SELECT a.id, a.satid, a.hittype, a.timestamp, a.amount, IFNULL(b.amount, 0) FROM rs_healing a LEFT JOIN rs_healing_threat b ON a.id = b.healid WHERE a.id>=" + Offset[0] +
                                                " AND a.id<" + Offset[1]).ExecuteReaderRpll();
                    while (dr.Read())
                    {
                        m_Healing[dr.GetInt32(0)] = new RS_Healing()
                        {
                            SatRefId  = dr.GetInt32(1),
                            HitType   = dr.GetInt16(2),
                            TimeStamp = dr.GetInt32(3),
                            Amount    = dr.GetInt32(4)
                        };
                        if (dr.GetInt32(5) > 0)
                        {
                            m_Threat.Add(new RS_Threat()
                            {
                                SatRefId  = dr.GetInt32(1),
                                HitType   = (short)(60 + dr.GetInt16(2)),
                                TimeStamp = dr.GetInt32(3),
                                Amount    = dr.GetInt32(5),
                            });
                        }
                    }

                    dr.CloseRpll();
                }
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_healing: " + ex.Message + "<br /><br />";
            }

            try
            {
                Offset = Tokens[10].Split(',');
                MySqlDataReader dr = m_DB.Query("SELECT id, targetid, itemid, attemptid FROM rs_loot WHERE id>=" + Offset[0] + " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Loot[dr.GetInt32(0)] = new RS_Loot()
                    {
                        TargetId  = dr.GetInt32(1),
                        ItemId    = dr.GetInt32(2),
                        AttemptId = dr.GetInt32(3)
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_loot: " + ex.Message + "<br /><br />";
            }

            if (Tokens.Length >= 14)
            {
                try
                {
                    Offset = Tokens[13].Split(',');
                    MySqlDataReader dr = m_DB
                                         .Query("SELECT said, amount, timestamp FROM rs_gained_threat WHERE id>=" + Offset[0] +
                                                " AND id<" + Offset[1]).ExecuteReaderRpll();
                    int maxSatRef = m_SatReference.Max(x => x.Key) + 1;
                    Dictionary <int, int> keyMapper = new Dictionary <int, int>();
                    while (dr.Read())
                    {
                        // Creating custom satrefids to make integration easier
                        // Source == Target
                        int saId = dr.GetInt32(0);
                        if (!keyMapper.ContainsKey(saId))
                        {
                            m_SatReference[maxSatRef] = new RS_Sat_Reference()
                            {
                                SourceId  = m_SaReference[saId].SourceId,
                                AbilityId = m_SaReference[saId].AbilityId,
                                TargetId  = m_SaReference[saId].SourceId
                            };
                            keyMapper[saId] = maxSatRef;
                            ++maxSatRef;
                        }

                        m_Threat.Add(new RS_Threat()
                        {
                            SatRefId  = keyMapper[saId],
                            Amount    = dr.GetInt32(1),
                            TimeStamp = dr.GetInt32(2),
                            HitType   = 20,
                        });
                    }

                    dr.CloseRpll();
                }
                catch (KeyNotFoundException ex)
                {
                    Error += "rs_threat: " + ex.Message + "<br /><br />";
                }
            }

            try
            {
                Offset = Tokens[11].Split(',');
                MySqlDataReader dr = m_DB
                                     .Query("SELECT id, satid, timestamp FROM rs_casts WHERE id>=" + Offset[0] +
                                            " AND id<" + Offset[1]).ExecuteReaderRpll();
                while (dr.Read())
                {
                    m_Casts[dr.GetInt32(0)] = new RS_Casts()
                    {
                        SatRefId  = dr.GetInt32(1),
                        TimeStamp = dr.GetInt32(2),
                        Amount    = 1
                    };
                }
                dr.CloseRpll();
            }
            catch (KeyNotFoundException ex)
            {
                Error += "rs_casts: " + ex.Message + "<br /><br />";
            }

            // Sorting the crap for good measure
            m_Attempts   = m_Attempts.OrderBy(x => x.Value.Start).ToDictionary();
            m_Auras      = m_Auras.OrderBy(x => x.Value.Gained).ToDictionary();
            m_Deaths     = m_Deaths.OrderBy(x => x.Value.TimeStamp).ToDictionary();
            m_Dispels    = m_Dispels.OrderBy(x => x.Value.TimeStamp).ToDictionary();
            m_Interrupts = m_Interrupts.OrderBy(x => x.Value.TimeStamp).ToDictionary();
            m_Damage     = m_Damage.OrderBy(x => x.Value.TimeStamp).ToDictionary();
            m_Healing    = m_Healing.OrderBy(x => x.Value.TimeStamp).ToDictionary();
            m_Casts      = m_Casts.OrderBy(x => x.Value.TimeStamp).ToDictionary();
            m_Threat     = m_Threat.OrderBy(x => x.TimeStamp).ToList();

            // TODO: Boss yells

            FinishRequestData(_Index, _Id, _Uploader);
        }
コード例 #5
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!App.loaded && !Server.MapPath(".").ToLower().Contains("loading"))
        {
            try { Response.Redirect("/Loading/", false); Context.ApplicationInstance.CompleteRequest(); } catch (System.Threading.ThreadAbortException) { }
            return;
        }

        this.Title = "LegacyPlayers | Speedrun";
        //App.UpdateRaidSpecificData();
        Utility.GetFactionList(ref pmFaction);
        Utility.GetExpansionList(ref pmExpansion);

        if (IsPostBack)
        {
            Utility.SetCookie(Response, Request, "Speedkills_Faction", pmFaction.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Realm", pmRealm.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Expansion", pmExpansion.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Encounter", pmEncounter.Value);
            Utility.SetCookie(Response, Request, "Speedkills_Selection", pmSelection.Value);
        }
        else
        {
            pmFaction.Value   = Utility.GetCookie(Request, "Speedkills_Faction", "0");
            pmRealm.Value     = Utility.GetCookie(Request, "Speedkills_Realm", "0");
            pmExpansion.Value = Utility.GetCookie(Request, "Speedkills_Expansion", "0");
            pmSelection.Value = Utility.GetCookie(Request, "Speedkills_Selection", "0");
            pmEncounter.Value = Utility.GetCookie(Request, "Speedkills_Encounter", "25");
        }
        int expansion = int.Parse(pmExpansion.Value);

        Utility.GetRealmList(ref pmRealm, false, expansion);
        Utility.GetRaidList(ref pmEncounter, true, expansion);
        short instanceid = 0;

        if (!short.TryParse(pmEncounter.Value, out instanceid) || instanceid == 0)
        {
            return;
        }

        var query = App.m_SpeedrunRankings.Where(x => x.InstanceID == instanceid);

        if (pmRealm.Value != "0")
        {
            short id = 0;
            if (short.TryParse(pmRealm.Value, out id) && id != 0)
            {
                query = query.Where(x => App.GetGuild(x.GuildID).ServerID == id);
            }
        }
        if (pmFaction.Value != "0")
        {
            short id = 0;
            if (short.TryParse(pmFaction.Value, out id) && id != 0)
            {
                query = query.Where(x => App.GetGuild(x.GuildID).Faction == id);
            }
        }

        var searchSpace = (pmSelection.Value == "0")
            ? query.Where(x => x.Average.Count(y => y.Time > 0) >= 5).OrderBy(x => x.GetAverage()).ToArray()
            : query.OrderBy(x => x.Best.Time).ToArray();

        if (searchSpace.Length == 0)
        {
            return;
        }

        int   bestValue = (pmSelection.Value == "0") ? searchSpace[0].GetAverage() : searchSpace[0].Best.Time;
        short count     = 1;

        foreach (var guild in searchSpace)
        {
            DBGuilds gInfo = App.GetGuild(guild.GuildID);
            if (gInfo.ServerID <= 0 || gInfo.ServerID >= App.m_Server.Length)
            {
                continue;
            }
            int  time, id;
            uint killed = 0;
            time = id = 0;
            if (pmSelection.Value == "0")
            {
                time   = guild.GetAverage();
                killed = guild.Average[0].Killed;
                id     = guild.Average[0].InstanceID;
            }
            else
            {
                time   = guild.Best.Time;
                id     = guild.Best.InstanceID;
                killed = guild.Best.Killed;
            }
            m_Table.Append("<tr><td>" + count++ + "</td><td><div class=\"tstatusbar bgcolor-f" + gInfo.Faction + "\" style=\"width: " + (100.0 * bestValue / time) + "%;\">" +
                           "<div><a href=\"/Armory/Guild/?guildid=" + guild.GuildID + "\" onmouseover=\"tt_show(this, 4, " + guild.GuildID + ",[])\">" + gInfo.Name + " (" + App.m_Server[gInfo.ServerID].Name + ")</a></div>" +
                           "<div>" + TimeSpan.FromMilliseconds(time * 100).ToString(@"hh\:mm\:ss") + " hours</div></div></td>" +
                           "<td><a href=\"/Raids/Viewer/?id=" + id + "&exp=" + expansion + "\">" + DateTimeOffset.FromUnixTimeSeconds(killed).UtcDateTime + "</a></td></tr>");
        }
    }