using System; using System.Data; using System.Linq; using System.Threading; using System.Data.SqlClient; using System.Collections.Generic; using FilterAPI.Networking; namespace FilterTimers.Timers { internal class REAbstateTimer { #region Timer Variables private Int32 Interval; private Int32 Duration; #endregion private Boolean IsDone = true; public REAbstateTimer(Int32 I, Int32 D) { Interval = I; Duration = D; Thread NewThread = new Thread(delegate () { while (true) { Thread.Sleep(Interval * 1000); if (IsDone) { Run(); } } }); NewThread.Start(); } private void Run() { IsDone = false; try { using (SqlCommand Command = Program.SQL.Connection.CreateCommand()) { Command.CommandText = String.Format("SELECT nCharNo FROM {0}..tRebirth", Program.Auth.ConfigValues["FilterDB"]); Dictionary RebirthnCharNos = new Dictionary(); using (SqlDataReader Reader = Command.ExecuteReader()) { while (Reader.Read()) { if (!RebirthnCharNos.ContainsKey(Convert.ToInt32(Reader["nCharNo"]))) { RebirthnCharNos.Add(Convert.ToInt32(Reader["nCharNo"]), 0); } RebirthnCharNos[Convert.ToInt32(Reader["nCharNo"])] += 1; } } List OnlinesIDs = Program.SQL.GetOnlinesIDs(); foreach (Int32 RebirthnCharNo in RebirthnCharNos.Keys) { String sID = Program.SQL.GetsIDFromnCharNo(RebirthnCharNo); if (OnlinesIDs.Contains(sID)) { Byte nClass = Program.SQL.GetnClassFromnCharNo(RebirthnCharNo); foreach (DataRow Row in Program.Rebirth.Table.Rows) { if (Convert.ToByte(Row[0]) == RebirthnCharNos[RebirthnCharNo] && Convert.ToString(Row[2]) == "ABSTATE" && (Convert.ToByte(Row[1]) == 0 || nClass == Convert.ToByte(Row[1]))) { using (var LocalPacket = new Packet(5, 11)) { LocalPacket.PacketWriter.Write(Convert.ToString(Program.AbStateView.Table.Rows.Cast().Where(ItemArray => Convert.ToUInt16(ItemArray.ItemArray[0]) == Convert.ToUInt16(Row[3])).FirstOrDefault().ItemArray[1])); LocalPacket.PacketWriter.Write(Duration * 1000); LocalPacket.PacketWriter.Write(Convert.ToByte(Row[4])); LocalPacket.PacketWriter.Write(Program.SQL.GetsIDFromnCharNo(RebirthnCharNo)); Program.LocalClient.SendPacket(LocalPacket); } } } } } } } catch (Exception Error) { Program.SendConsoleText(ConsoleColor.Red, "Timers error - Rebirth abstate giver\n{0}", Error.ToString()); } IsDone = true; } } }