// 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; }
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>"); } }
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>"); }
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); }
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>"); } }