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