using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Timers; namespace FilterCentralV2 { class GameLogMonitor { private static Int64 nLogNo; private static Timer GameLogTimer; public GameLogMonitor() { GameLogTimer = new Timer(); GameLogTimer.Elapsed += new ElapsedEventHandler(Run); nLogNo = Convert.ToInt64(Program.SQL.GetValue(Program.Conf.GetConfigValue("GameLogDB"), "tGameLog", "nLogNo")); } public bool Enabled { get { return GameLogTimer.Enabled; } set { GameLogTimer.Enabled = value; } } public void Stop() { GameLogTimer.Stop(); } public void Start() { GameLogTimer.Start(); } public int Interval { get { return (int)GameLogTimer.Interval / 1000; } set { GameLogTimer.Interval = Convert.ToDouble(value * 1000); } } private static void Run(object sender, ElapsedEventArgs e) { using (SqlCommand Command = Program.SQL.Connection.CreateCommand()) { Dictionary CharacterNames = new Dictionary(); Command.CommandText = String.Format("SELECT nCharNo, sID FROM {0}..tCharacter WHERE bDeleted = '0'", Program.Conf.GetConfigValue("CharacterDB")); using (var Reader = Command.ExecuteReader()) { while (Reader.Read()) { if (!CharacterNames.ContainsKey(Convert.ToInt32(Reader["nCharNo"]))) { CharacterNames.Add(Convert.ToInt32(Reader["nCharNo"]), Convert.ToString(Reader["sID"])); } } Reader.Close(); } Command.CommandText = String.Format("SELECT * FROM {0}..tGameLog WHERE nLogNo > {1}", Program.Conf.GetConfigValue("GameLogDB"), nLogNo); using (SqlDataReader Reader = Command.ExecuteReader()) { while (Reader.Read()) { try { switch (Convert.ToInt32(Reader["nType"])) { case 10: { Program.GLMWriteLine(ConsoleColor.Green, String.Format("[{0}] :: {1} Logged in.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])])); break; } case 11: { Program.GLMWriteLine(ConsoleColor.Red, String.Format("[{0}] :: {1} Logged out.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])])); break; } case 15: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} went to {2}. X: {3}. Y: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["sMap"], Reader["nMapX"], Reader["nMapY"])); break; } case 17: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} was created.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])])); break; } case 18: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} was deleted.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])])); break; } case 30: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} leveled up to {2}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nInt1"])); break; } case 41: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} killed {2} at {3}. X: {4}. Y: {5}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], CharacterNames[(Convert.ToInt32(Reader["nTargetCharNo"]))], Reader["sMap"], Reader["nMapX"], Reader["nMapY"])); break; } case 50: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} learned skill {2}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.SkillNames[Convert.ToInt32(Reader["nInt1"])])); break; } case 74: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} traded {2} ({3}) to {4}. Amount: {5}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], CharacterNames[(Convert.ToInt32(Reader["nTargetCharNo"]))], Reader["nInt1"])); break; } case 82: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} enchanted {2} by {3}. Old enchant level: {4}. New enchant level: {5}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nItemKey"], Convert.ToInt32(Reader["nInt2"]) - Convert.ToInt32(Reader["nInt1"]), Convert.ToInt32(Reader["nInt1"]), Convert.ToInt32(Reader["nInt2"]))); break; } case 87: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} took {2} from {3} ({4}). New stack amount: {5}. New item key: {6}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Convert.ToInt32(Reader["nInt2"]), Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], Reader["nInt1"], Reader["nBigint1"])); break; } case 89: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} used {2} ({3}). Left with: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nInt1"])], Reader["nItemKey"], Reader["nInt2"])); break; } case 91: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} bought {2} ({3}) from {4}. Amount: {5}. Price: {6}. New balance: {7}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], CharacterNames[Convert.ToInt32(Reader["nTargetCharNo"])], Reader["nInt1"], Reader["nInt2"], Reader["nBigint1"])); break; } case 92: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} sold {2} ({3}) to {4}. Amount: {5}. Price: {6}. New balance: {7}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], CharacterNames[Convert.ToInt32(Reader["nTargetCharNo"])], Reader["nInt1"], Reader["nInt2"], Reader["nBigint1"])); break; } case 94: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} despoited {2} into storage. New balance: {3}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nInt1"], Reader["nBigint1"])); break; } case 95: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} withdrew {2} from storage. New balance: {3}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nInt1"], Reader["nBigint1"])); break; } case 96: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} received {2} from {3}. New balance: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nBigint1"], CharacterNames[Convert.ToInt32(Reader["nInt1"])], Reader["nItemKey"])); break; } case 97: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} paid {2} to {3}. New balance: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nBigint1"], CharacterNames[Convert.ToInt32(Reader["nInt1"])], Reader["nItemKey"])); break; } case 140: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} created guild {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["sMap"], Reader["nTargetID"])); break; } case 510: { if (Convert.ToInt32(Reader["nTargetID"]) != 0) { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} picked up {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"])); } break; } case 511: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} dropped {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"])); break; } case 512: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} bought {2} ({3}) from NPC. Price: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], Reader["nInt3"])); break; } case 513: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} sold {2} ({3}) to NPC. Price: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], Reader["nInt3"])); break; } //case 515: // { // Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} placed {2} into their storage.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Reader["nItemKey"])); // break; // } //case 518: // { // Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} created {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.ItemNames[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"])); // break; // } case 600: { Program.GLMWriteLine(ConsoleColor.Magenta, String.Format("[{0}] :: {1} accepeted {2} proposal.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nTargetCharNo"])], CharacterNames[Convert.ToInt32(Reader["nCharNo"])])); break; } case 910: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} was spawned at {2}. X: {3}. Y: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Program.MobNames[Convert.ToInt32(Reader["nTargetCharNo"])], Reader["sMap"], Reader["nMapX"], Reader["nMapY"])); break; } case 911: { Program.GLMWriteLine(ConsoleColor.Cyan, String.Format("[{0}] :: {1} was near {2} when it was killed at {3}. X: {4}. Y: {5}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), CharacterNames[Convert.ToInt32(Reader["nCharNo"])], Program.MobNames[Convert.ToInt32(Reader["nTargetCharNo"])], Reader["sMap"], Reader["nMapX"], Reader["nMapY"])); break; } } } catch { } nLogNo = Convert.ToInt64(Reader["nLogNo"]); } } } } } }