using System; using System.Data; using System.Data.SqlClient; using System.Collections.Generic; using FiestaLib; using DevExpress.XtraBars; using DevExpress.XtraBars.Ribbon; namespace Character_Log { public partial class Main : RibbonForm { private Dictionary Items = new Dictionary(); private SqlConnectionStringBuilder ConnectionBuilder; private SqlConnection Connection; public Main() { InitializeComponent(); } private void Main_Shown(Object Sender, EventArgs Args) { SHNFile ItemInfo = new SHNFile(String.Format("{0}\\ItemInfo.shn", AppDomain.CurrentDomain.BaseDirectory)); foreach (DataRow Item in ItemInfo.Rows) { Items.Add(Convert.ToInt32(Item[0]), Convert.ToString(Item[1])); } Status.Caption = String.Format("Loaded {0} items", Items.Count); } private void Database_Open_ItemClick(Object Sender, ItemClickEventArgs Args) { ConnectionBuilder = new SqlConnectionStringBuilder(); ConnectionBuilder.DataSource = Convert.ToString(Database_DataSource.EditValue); ConnectionBuilder.IntegratedSecurity = false; ConnectionBuilder.MultipleActiveResultSets = true; ConnectionBuilder.Password = Convert.ToString(Database_Password.EditValue); ConnectionBuilder.UserID = Convert.ToString(Database_Username.EditValue); try { Connection = new SqlConnection(); Connection.ConnectionString = ConnectionBuilder.ConnectionString; Connection.Open(); Database_DataSource.Enabled = false; Database_Username.Enabled = false; Database_Password.Enabled = false; Database_Character.Enabled = false; Database_GameLog.Enabled = false; Database_Open.Enabled = false; Database_Close.Enabled = true; Character_FindLogs.Enabled = true; TraceItem.Enabled = true; } catch { Database_Open.Enabled = true; Database_Close.Enabled = false; Character_FindLogs.Enabled = false; TraceItem.Enabled = false; Status.Caption = "Could not connect to the Database."; } } private void Database_Close_ItemClick(Object Sender, ItemClickEventArgs Args) { if (Connection != null) { Connection.Close(); Connection.Dispose(); } Database_DataSource.Enabled = true; Database_Username.Enabled = true; Database_Password.Enabled = true; Database_Character.Enabled = true; Database_GameLog.Enabled = true; Database_Open.Enabled = true; Database_Close.Enabled = false; Character_FindLogs.Enabled = false; TraceItem.Enabled = false; } private void Character_FindLogs_ItemClick(Object Sender, ItemClickEventArgs Args) { if (Convert.ToString(Character_Name.EditValue) == String.Empty) { Status.Caption = "Please enter a Character name."; return; } else if (!CheckForsID(Convert.ToString(Character_Name.EditValue))) { Status.Caption = String.Format("Could not find {0}.", Character_Name.EditValue); return; } Logs.Items.Clear(); Character_Name.Enabled = false; Character_FindLogs.Enabled = false; ItemKey.Enabled = false; TraceItem.Enabled = false; Status.Caption = String.Format("Loading {0}...", Character_Name.EditValue); SqlCommand Command = Connection.CreateCommand(); Command.CommandText = String.Format("SELECT dDate, nType, sMap, nMapX, nMapY, nTargetCharNo, nTargetID, nItemKey, nInt1, nInt2, nInt3, nBigint1 FROM {0}..tGameLog WHERE nCharNo = '{1}'", Database_GameLog.EditValue, sIDTonCharNo(Convert.ToString(Character_Name.EditValue))); SqlDataReader Reader = Command.ExecuteReader(); while (Reader.Read()) { switch (Convert.ToInt32(Reader["nType"])) { case 10: { if (ShowLogins.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} Logged in.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue)); } break; } case 11: { if (ShowLogouts.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} Logged out.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue)); } break; } case 15: { if (ShowMapMoves.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} went to {2}. X: {3}. Y: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Reader["sMap"], Reader["nMapX"], Reader["nMapY"])); } break; } case 17: { Logs.Items.Add(String.Format("[{0}] :: {1} was created.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue)); break; } case 18: { Logs.Items.Add(String.Format("[{0}] :: {1} was deleted.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue)); break; } case 74: { if (ShowTrades.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} traded {2} ({3}) to {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], nCharNoTosID(Convert.ToInt32(Reader["nTargetCharNo"])))); } break; } case 82: { if (ShowItemEnchants.Checked) { Logs.Items.Add(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"), Character_Name.EditValue, Reader["nItemKey"], Convert.ToInt32(Reader["nInt2"]) - Convert.ToInt32(Reader["nInt1"]), Convert.ToInt32(Reader["nInt1"]), Convert.ToInt32(Reader["nInt2"]))); } break; } case 87: { if (ShowItemDivide.Checked) { Logs.Items.Add(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"), Character_Name.EditValue, Convert.ToInt32(Reader["nInt2"]), Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], Reader["nInt1"], Reader["nBigint1"])); } break; } case 89: { if (ShowItemUses.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} used {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nInt1"])], Reader["nItemKey"])); } break; } case 91: { if (ShowVendorBuys.Checked) { Logs.Items.Add(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"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], nCharNoTosID(Convert.ToInt32(Reader["nTargetCharNo"])), Reader["nInt1"], Reader["nInt2"], Reader["nBigint1"])); } break; } case 92: { if (ShowVendorSells.Checked) { Logs.Items.Add(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"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], nCharNoTosID(Convert.ToInt32(Reader["nTargetCharNo"])), Reader["nInt1"], Reader["nInt2"], Reader["nBigint1"])); } break; } case 94: { if (ShowStorageDeposit.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} despoited {2} into storage. New storage balance: {3}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Reader["nInt1"], Reader["nBigint1"])); } break; } case 95: { if (ShowStorageWithdraws.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} withdrew {2} from storage. New storage balance: {3}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Reader["nInt1"], Reader["nBigint1"])); } break; } case 96: { if(ShowMoneyReceives.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} received {2} from {3}. New balance: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Reader["nBigint1"], nCharNoTosID(Convert.ToInt32(Reader["nInt1"])), Reader["nItemKey"])); } break; } case 97: { if (ShowMoneyGives.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} paid {2} to {3}. New balance: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Reader["nBigint1"], nCharNoTosID(Convert.ToInt32(Reader["nInt1"])), Reader["nItemKey"])); } break; } case 140: { Logs.Items.Add(String.Format("[{0}] :: {1} created guild {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Reader["sMap"], Reader["nTargetID"])); break; } case 510: { if (ShowPickups.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} picked up {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"])); } break; } case 511: { if (ShowDrops.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} dropped {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"])); } break; } case 512: { if (ShowNPCBuys.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} bought {2} ({3}) from NPC. Price: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], Reader["nInt3"])); } break; } case 513: { if (ShowNPCSells .Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} sold {2} ({3}) to NPC. Price: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"], Reader["nInt3"])); } break; } case 518: { if (ShowItemCreates.Checked) { Logs.Items.Add(String.Format("[{0}] :: {1} created {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), Character_Name.EditValue, Items[Convert.ToInt32(Reader["nTargetID"])], Reader["nItemKey"])); } break; } } Logs.SortOrder = System.Windows.Forms.SortOrder.Descending; Character_Name.Enabled = true; Character_FindLogs.Enabled = true; ItemKey.Enabled = true; TraceItem.Enabled = true; Status.Caption = String.Format("Loaded {0}.", Character_Name.EditValue); } } private void TraceItem_ItemClick(Object Sender, ItemClickEventArgs Args) { if (Convert.ToString(ItemKey.EditValue) == String.Empty) { Status.Caption = "Please enter a ItemKey."; return; } else if (!CheckFornItemKey(Convert.ToString(ItemKey.EditValue))) { Status.Caption = String.Format("Could not find {0}.", ItemKey.EditValue); return; } Logs.Items.Clear(); Character_Name.Enabled = false; Character_FindLogs.Enabled = false; ItemKey.Enabled = false; TraceItem.Enabled = false; Status.Caption = String.Format("Loading {0}...", ItemKey.EditValue); SqlCommand Command = Connection.CreateCommand(); Command.CommandText = String.Format("SELECT dDate, nCharNo, nType, nCharNo, nTargetCharNo, nTargetID, nInt3 FROM {0}..tGameLog WHERE nItemKey = '{1}'", Database_GameLog.EditValue, ItemKey.EditValue); SqlDataReader Reader = Command.ExecuteReader(); while (Reader.Read()) { switch (Convert.ToInt32(Reader["nType"])) { case 74: { Logs.Items.Add(String.Format("[{0}] :: {1} traded {2} ({3}) to {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), nCharNoTosID(Convert.ToInt32(Reader["nCharNo"])), Items[Convert.ToInt32(Reader["nTargetID"])], ItemKey.EditValue, nCharNoTosID(Convert.ToInt32(Reader["nTargetCharNo"])))); break; } case 89: { Logs.Items.Add(String.Format("[{0}] :: {1} used {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), nCharNoTosID(Convert.ToInt32(Reader["nCharNo"])), Items[Convert.ToInt32(Reader["nInt1"])], ItemKey.EditValue)); break; } case 510: { Logs.Items.Add(String.Format("[{0}] :: {1} picked up {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), nCharNoTosID(Convert.ToInt32(Reader["nCharNo"])), Items[Convert.ToInt32(Reader["nTargetID"])], ItemKey.EditValue)); break; } case 511: { Logs.Items.Add(String.Format("[{0}] :: {1} dropped {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), nCharNoTosID(Convert.ToInt32(Reader["nCharNo"])), Items[Convert.ToInt32(Reader["nTargetID"])], ItemKey.EditValue)); break; } case 513: { Logs.Items.Add(String.Format("[{0}] :: {1} sold {2} ({3}) to NPC. Price: {4}.", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), nCharNoTosID(Convert.ToInt32(Reader["nCharNo"])), Items[Convert.ToInt32(Reader["nTargetID"])], ItemKey.EditValue, Reader["nInt3"])); break; } case 518: { Logs.Items.Add(String.Format("[{0}] :: {1} created {2} ({3}).", Convert.ToDateTime(Reader["dDate"]).ToString("MM/dd/yyyy || HH:mm"), nCharNoTosID(Convert.ToInt32(Reader["nCharNo"])), Items[Convert.ToInt32(Reader["nTargetID"])], ItemKey.EditValue)); break; } } } Logs.SortOrder = System.Windows.Forms.SortOrder.Descending; Character_Name.Enabled = true; Character_FindLogs.Enabled = true; ItemKey.Enabled = true; TraceItem.Enabled = true; Status.Caption = String.Format("Loaded {0}.", ItemKey.EditValue); } private Boolean CheckForsID(String sID) { SqlCommand Command = Connection.CreateCommand(); Command.CommandText = String.Format("SELECT TOP 1 nCharNo FROM {0}..tCharacter WHERE sID = '{1}'", Database_Character.EditValue, sID); SqlDataReader Reader = Command.ExecuteReader(); return Reader.HasRows; } private Boolean CheckFornItemKey(String nItemKey) { SqlCommand Command = Connection.CreateCommand(); Command.CommandText = String.Format("SELECT TOP 1 nLogNo FROM {0}..tGameLog WHERE nItemKey = '{1}'", Database_GameLog.EditValue, nItemKey); SqlDataReader Reader = Command.ExecuteReader(); return Reader.HasRows; } private Int32 sIDTonCharNo(String sID) { SqlCommand Command = Connection.CreateCommand(); Command.CommandText = String.Format("SELECT TOP 1 nCharNo FROM {0}..tCharacter WHERE sID = '{1}'", Database_Character.EditValue, sID); return Convert.ToInt32(Command.ExecuteScalar()); } private String nCharNoTosID(Int32 nCharNo) { SqlCommand Command = Connection.CreateCommand(); Command.CommandText = String.Format("SELECT TOP 1 sID FROM {0}..tCharacter WHERE nCharNo = '{1}'", Database_Character.EditValue, nCharNo); return Convert.ToString(Command.ExecuteScalar()); } } }