using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace YASB { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //botThread = new System.Threading.Thread(new System.Threading.ThreadStart(Bot)); //botThread.Start(); Bot(); } private void Bot() { #region MySql /*YASB.MySQL mySQL = new MySQL("BOTMTGO", "budlight1", "MTGO", "www.gamerobot.com"); if (mySQL.Connection.State != ConnectionState.Open) { throw new Exception("Couldn't connect to MySQL!"); }*/ #endregion List cardTable = new List(); AutoItX.Instance.Au3.WinSetState("Magic Online V2", "", AutoItX.Instance.Au3.SW_MAXIMIZE); AutoItX.Instance.Au3.WinActivate("Magic Online V2", ""); AutoItX.Instance.Au3.WinWaitActive("Magic Online V2", "", 5000); /* // 908503041 int check = AutoItX.Instance.PixelChecksum(17, 570, 270, 923, 5); Pixel.Pixel myScanner = new Pixel.Pixel(Pixel.ScreenOffset.ClientArea); int found = myScanner.GetArea(17, 570, 270, 923, 5); // 1023538053 int check2 = Adler32.HashCore(found); */ /* TODO: * [x] Make sure card is loaded * [x] Grab card info from clipboard * [x] Grab whole card checksum * [x] Make sure that checksum isn't in the list * [x] If it is, we hit the bottom * [x] Otherwise, press down key */ String v_prev_card_name = ""; String v_prev_card_edition_code = ""; String v_prev_card_number = ""; bool v_prev_card_version_code = false; int i = 0; for (; ; ) { if (AutoItX.Instance.Au3.WinActive("Magic Online", "") != 1) break; /* int TimeOut = 5000; DateTime start = DateTime.Now; // Make absolutely sure card is loaded before we grab it while (16777215 == AutoItX.Instance.Au3.PixelGetColor(170, 636) && 16777215 == AutoItX.Instance.Au3.PixelGetColor(235, 742) && 16777215 == AutoItX.Instance.Au3.PixelGetColor(60, 690)) { if (((TimeSpan)DateTime.Now.Subtract(start)).TotalMilliseconds > TimeOut) break; System.Threading.Thread.Sleep(100); } */ // Create card Card tempCard = new Card(); // Grab card information AutoItX.Instance.Au3.Send("^c", 0); string info = AutoItX.Instance.Au3.ClipGet(); Regex getCardInfo = new Regex(@"(?.*?)&0&0&0&((?.)|.*?)&((?.*?)|.*?)&(((?.*?)/)|.*?)"); Match m = getCardInfo.Match(info); // If regex fails //if (!m.Success) // break; tempCard.Name = new Regex(@"({.*})").Replace(m.Groups["Name"].Value, "").Trim(); tempCard.Edition = m.Groups["Set"].Value.Trim(); tempCard.Number = m.Groups["Number"].Value; tempCard.IsFoil = m.Groups["Name"].Value.Contains("{q}") ? true : false; tempCard.ExcelViewID = i; tempCard.Checksum = CardReader.Read(); if (tempCard.Name == "") continue; if ((tempCard.Name == v_prev_card_name)&&(tempCard.Edition == v_prev_card_edition_code)&& (tempCard.IsFoil == v_prev_card_version_code)&&(tempCard.Number == v_prev_card_number)&& (tempCard.Number!="")&& (tempCard.Name != "Brothers Yamazaki") ) continue; if ((tempCard.Name == v_prev_card_name) && (tempCard.Edition == v_prev_card_edition_code) && (tempCard.IsFoil == v_prev_card_version_code) && (tempCard.Number == v_prev_card_number) && (tempCard.Edition == "ST") ) continue; if ((tempCard.Name == v_prev_card_name) && (tempCard.Edition == v_prev_card_edition_code) && (tempCard.IsFoil == v_prev_card_version_code) && (tempCard.Number == v_prev_card_number) && (tempCard.Edition == "WL") ) continue; // Make sure this doesn't exist already if (!Array.Exists(cardTable.ToArray(), delegate(Card item) { return item.Checksum == tempCard.Checksum; })) { cardTable.Add(tempCard); v_prev_card_name = tempCard.Name; v_prev_card_edition_code = tempCard.Edition; v_prev_card_number = tempCard.Number; v_prev_card_version_code = tempCard.IsFoil; } else if (tempCard.Name != "Scourge Booster") break; // Wait for next card AutoItX.Instance.Au3.Send("{DOWN}", 0); AutoItX.Instance.Au3.ClipPut(""); int TimeOut = 5000; DateTime start = DateTime.Now; // Make absolutely sure card is loaded before we grab it while (tempCard.Checksum == CardReader.Read()) { if (((TimeSpan)DateTime.Now.Subtract(start)).TotalMilliseconds > TimeOut) break; System.Threading.Thread.Sleep(10); } i++; } Stream stream3 = File.Open(cardTable.Count.ToString() + " cards.dat", FileMode.Create); BinaryFormatter bformatter3 = new BinaryFormatter(); bformatter3.Serialize(stream3, cardTable); stream3.Close(); //+ [0] {[14696841, 49056616, YASB.Card]} System.Collections.Generic.KeyValuePair MessageBox.Show("Done"); } private void button2_Click(object sender, EventArgs e) { List cardTable = new List(); // Merge string[] files = Directory.GetFiles(Directory.GetCurrentDirectory() + "//merge"); int conflicts = 0; foreach (string file in files) { Stream stream = File.Open(file, FileMode.Open); BinaryFormatter bformatter = new BinaryFormatter(); List tempCardTable = (bformatter.Deserialize(stream) as List); stream.Close(); foreach (Card tempCard in tempCardTable) { if (tempCard.Number.Length > 4) tempCard.Number = ""; if (!cardTable.Contains(tempCard)) cardTable.Add(tempCard); else conflicts++; } } Stream stream2 = File.Open(Directory.GetCurrentDirectory() + "//merge//merged//merged.dat", FileMode.Create); BinaryFormatter bformatter2 = new BinaryFormatter(); bformatter2.Serialize(stream2, cardTable); stream2.Close(); MessageBox.Show("Merged together " + cardTable.Count.ToString() + " cards, with " + conflicts.ToString() + " conflicts"); } private System.Threading.Thread cardReadThread; private void button3_Click(object sender, EventArgs e) { CardIdentifyThread(); /* if (cardReadThread != null) { if (!cardReadThread.IsAlive) cardReadThread.Start(); else { cardReadThread.Abort(); cardReadThread = null; } } else { cardReadThread = new System.Threading.Thread(new System.Threading.ThreadStart(CardIdentifyThread)); cardReadThread.Start(); } AutoItX.Instance.Au3.ToolTip("", 400, 0); if (button3.Text == "Test merged (Pause)") button3.Text = "Test merged"; else button3.Text = "Test merged (Pause)";*/ } private void CardIdentifyThread() { AutoItX.Instance.Au3.WinSetState("Magic Online V2", "", AutoItX.Instance.Au3.SW_MAXIMIZE); AutoItX.Instance.Au3.WinActivate("Magic Online V2", ""); AutoItX.Instance.Au3.WinWaitActive("Magic Online V2", "", 5000); Stream stream = File.Open(Directory.GetCurrentDirectory() + "//merge//merged//merged.dat", FileMode.Open); BinaryFormatter bformatter = new BinaryFormatter(); List cardTable = (bformatter.Deserialize(stream) as List); stream.Close(); for (; ; ) { string checksum = CardReader.Read(); foreach (Card tempCard in cardTable) { if (tempCard.Checksum == checksum) { AutoItX.Instance.Au3.ToolTip(tempCard.Name + "\n" + tempCard.Edition + "\n" + tempCard.Number + "\n" + "Is foil? - " + tempCard.IsFoil.ToString(), 400, 0); } } System.Threading.Thread.Sleep(50); } } private void button4_Click(object sender, EventArgs e) { Stream stream = File.Open(Directory.GetCurrentDirectory() + "//merge//merged//merged.dat", FileMode.Open); BinaryFormatter bformatter = new BinaryFormatter(); List cardTable = (bformatter.Deserialize(stream) as List); stream.Close(); string filePath = Directory.GetCurrentDirectory() + "//merge//merged//merged.sql"; if (!File.Exists(filePath)) { FileStream fs = File.Create(filePath); fs.Close(); } StreamWriter sw = File.CreateText(filePath); foreach (Card tempCard in cardTable) { string isFoil = tempCard.IsFoil == true ? "F" : "N"; sw.WriteLine(@"INSERT INTO BOTMTGO_CARDS_STAGING(CARD_PIXELID, CARD_EXCELID, CARD_NAME, CARD_NUMBER, CARD_EDITION_CODE, CARD_VERSION_CODE) VALUES ('" + tempCard.Checksum + "', '" + tempCard.ExcelViewID + "', '" + tempCard.Name.Replace("'", "\\'") + "', '" + tempCard.Number + "', '" + tempCard.Edition + "', '" + isFoil + "');"); } sw.Flush(); sw.Close(); MessageBox.Show("Done"); } } }