Example #1
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);
        }