All pastes #486993 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-05-14 05:53 UTC
rendered paste body
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<Card> cardTable = new List<Card>();

            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(@"(?<Name>.*?)&0&0&0&((?<Rarity>.)|.*?)&((?<Set>.*?)|.*?)&(((?<Number>.*?)/)|.*?)");

                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<Card>(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<YASB.Checksum,YASB.Card>

            MessageBox.Show("Done");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            List<Card> cardTable = new List<Card>();

            // 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<Card> tempCardTable = (bformatter.Deserialize(stream) as List<Card>);
                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<Card> cardTable = (bformatter.Deserialize(stream) as List<Card>);
            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<Card> cardTable = (bformatter.Deserialize(stream) as List<Card>);
            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");
        }
    }
}