rendered paste bodyusing 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");
}
}
}