public ExportingActions(ExportingInfo info, Deck deck, Func <Task <bool> > onInterrupt) { _info = info; _deck = deck; _mouse = new MouseActions(info, onInterrupt); _clearCardPoint = new Point(GetScaledXPos(Config.Instance.ExportClearX), GetYPos(Config.Instance.ExportClearY)); _deckNamePoint = new Point(GetScaledXPos(Config.Instance.ExportNameDeckX), GetYPos(Config.Instance.ExportNameDeckY)); _card1Point = new Point((int)_info.CardPosX + CardPosOffset, (int)_info.CardPosY + CardPosOffset); _card2Point = new Point((int)_info.Card2PosX + CardPosOffset, (int)_info.CardPosY + CardPosOffset); _zeroManaCrystalPoint = new Point(GetScaledXPos(Config.Instance.ExportZeroButtonX), GetYPos(Config.Instance.ExportZeroButtonY)); _setFilterMenuPoint = new Point(GetScaledXPos(Config.Instance.ExportSetsButtonX), GetYPos(Config.Instance.ExportSetsButtonY)); _setFilterAllPoint = new Point(GetScaledXPos(Config.Instance.ExportAllSetsButtonX), GetYPos(Config.Instance.ExportStandardSetButtonY)); }
public static async Task <bool> CheckForSpecialCases(Card card, double cardPosX, double card2PosX, double cardPosY, IntPtr hsHandle) { if (card.Name == "Feugen") { if (Config.Instance.OwnsGoldenFeugen && Config.Instance.PrioritizeGolden) { await MouseActions.ClickOnPoint(hsHandle, new Point((int)card2PosX, (int)cardPosY)); } else { await MouseActions.ClickOnPoint(hsHandle, new Point((int)cardPosX, (int)cardPosY)); } return(true); } if (card.Name == "Stalagg") { var posX3 = cardPosX + (card2PosX - cardPosX) * 2; var posX4 = cardPosX + (card2PosX - cardPosX) * 3; if (Config.Instance.OwnsGoldenFeugen) { if (Config.Instance.OwnsGoldenStalagg && Config.Instance.PrioritizeGolden) { await MouseActions.ClickOnPoint(hsHandle, new Point((int)posX4, (int)cardPosY)); } else { await MouseActions.ClickOnPoint(hsHandle, new Point((int)posX3, (int)cardPosY)); } } else { if (Config.Instance.OwnsGoldenStalagg && Config.Instance.PrioritizeGolden) { await MouseActions.ClickOnPoint(hsHandle, new Point((int)posX3, (int)cardPosY)); } else { await MouseActions.ClickOnPoint(hsHandle, new Point((int)card2PosX, (int)cardPosY)); } } return(true); } return(false); }
public static async Task ClearSetsFilter(ExportingInfo info) { Logger.WriteLine("Clearing set filter...", "DeckExporter"); // Then ensure "All Sets" is selected var setsPoint = new Point((int)Helper.GetScaledXPos(Config.Instance.ExportSetsButtonX, info.HsRect.Width, info.Ratio), (int)(Config.Instance.ExportSetsButtonY * info.HsRect.Height)); // open sets menu await MouseActions.ClickOnPoint(info.HsHandle, setsPoint); // select "All Sets" await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)Helper.GetScaledXPos(Config.Instance.ExportAllSetsButtonX, info.HsRect.Width, info.Ratio), (int)(Config.Instance.ExportAllSetsButtonY *info.HsRect.Height))); // close sets menu await MouseActions.ClickOnPoint(info.HsHandle, setsPoint); }
public static async Task ClearManaFilter(ExportingInfo info) { Logger.WriteLine("Clearing \"Zero\" crystal...", "DeckExporter"); // First, ensure mana filters are cleared var crystalPoint = new Point((int)Helper.GetScaledXPos(Config.Instance.ExportZeroButtonX, info.HsRect.Width, info.Ratio), (int)(Config.Instance.ExportZeroButtonY * info.HsRect.Height)); if (ExportingHelper.IsZeroCrystalSelected(info.HsHandle, info.Ratio, info.HsRect.Width, info.HsRect.Height)) { // deselect it await MouseActions.ClickOnPoint(info.HsHandle, crystalPoint); } else { // select it and then unselect it (in case other crystals are on) await MouseActions.ClickOnPoint(info.HsHandle, crystalPoint); await MouseActions.ClickOnPoint(info.HsHandle, crystalPoint); } }
public static async Task SetDeckName(Deck deck, ExportingInfo info) { if (Config.Instance.ExportSetDeckName && !deck.TagList.ToLower().Contains("brawl")) { var name = Regex.Replace(deck.Name, @"[\(\)\{\}]", ""); if (name != deck.Name) { Logger.WriteLine("Removed parenthesis/braces from deck name. New name: " + name, "DeckExporter"); } if (Config.Instance.ExportAddDeckVersionToName) { var version = " " + deck.SelectedVersion.ShortVersionString; if (name.Length + version.Length > MaxLengthDeckName) { name = name.Substring(0, MaxLengthDeckName - version.Length); } name += version; } Logger.WriteLine("Setting deck name...", "DeckExporter"); var nameDeckPos = new Point((int)Helper.GetScaledXPos(Config.Instance.ExportNameDeckX, info.HsRect.Width, info.Ratio), (int)(Config.Instance.ExportNameDeckY * info.HsRect.Height)); await MouseActions.ClickOnPoint(info.HsHandle, nameDeckPos); //send enter and second click to make sure the current name gets selected SendKeys.SendWait("{ENTER}"); await MouseActions.ClickOnPoint(info.HsHandle, nameDeckPos); if (Config.Instance.ExportPasteClipboard) { Clipboard.SetText(name); SendKeys.SendWait("^v"); } else { SendKeys.SendWait(name); } SendKeys.SendWait("{ENTER}"); } }
public static async Task ClearDeck(ExportingInfo info) { if (!Config.Instance.AutoClearDeck) { return; } var count = 0; Logger.WriteLine("Clearing deck...", "DeckExporter"); while (!ExportingHelper.IsDeckEmpty(info.HsHandle, info.HsRect.Width, info.HsRect.Height, info.Ratio)) { await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)Helper.GetScaledXPos(Config.Instance.ExportClearX, info.HsRect.Width, info.Ratio), (int)(Config.Instance.ExportClearY *info.HsRect.Height))); if (count++ > 35) { break; } } }
///<summary> /// Returns -1 if Hearthstone loses focus /// </summary> public static async Task <int> AddCardToDeck(Card card, ExportingInfo info) { if (!User32.IsHearthstoneInForeground()) { Core.MainWindow.ShowMessage("Exporting aborted", "Hearthstone window lost focus."); Logger.WriteLine("Exporting aborted, window lost focus", "DeckExporter"); return(-1); } if (Config.Instance.ExportForceClear) { await ClearSearchBox(info.HsHandle, info.SearchBoxPos); } await MouseActions.ClickOnPoint(info.HsHandle, info.SearchBoxPos); if (Config.Instance.ExportPasteClipboard) { Clipboard.SetText(ExportingHelper.GetSearchString(card)); SendKeys.SendWait("^v"); } else { SendKeys.SendWait(ExportingHelper.GetSearchString(card)); } SendKeys.SendWait("{ENTER}"); Logger.WriteLine("try to export card: " + card, "DeckExporter"); await Task.Delay(Config.Instance.DeckExportDelay * 2); if (await ExportingHelper.CheckForSpecialCases(card, info.CardPosX + 50, info.Card2PosX + 50, info.CardPosY + 50, info.HsHandle)) { return(0); } //Check if Card exist in collection if (ExportingHelper.CardExists(info.HsHandle, (int)info.CardPosX, (int)info.CardPosY, info.HsRect.Width, info.HsRect.Height)) { //Check if a golden exist if (Config.Instance.PrioritizeGolden && ExportingHelper.CardExists(info.HsHandle, (int)info.Card2PosX, (int)info.CardPosY, info.HsRect.Width, info.HsRect.Height)) { await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)info.Card2PosX + 50, (int)info.CardPosY + 50)); if (card.Count == 2) { await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)info.Card2PosX + 50, (int)info.CardPosY + 50)); await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)info.CardPosX + 50, (int)info.CardPosY + 50)); } } else { await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)info.CardPosX + 50, (int)info.CardPosY + 50)); if (card.Count == 2) { //Check if two card are not available await Task.Delay(200 - Config.Instance.DeckExportDelay); if (ExportingHelper.CardHasLock(info.HsHandle, (int)(info.CardPosX + info.HsRect.Width * 0.048), (int)(info.CardPosY + info.HsRect.Height * 0.287), info.HsRect.Width, info.HsRect.Height)) { if (ExportingHelper.CardExists(info.HsHandle, (int)info.Card2PosX, (int)info.CardPosY, info.HsRect.Width, info.HsRect.Height)) { await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)info.Card2PosX + 50, (int)info.CardPosY + 50)); return(0); } Logger.WriteLine("Only one copy found: " + card.Name, "DeckExporter"); return(1); } await MouseActions.ClickOnPoint(info.HsHandle, new Point((int)info.CardPosX + 50, (int)info.CardPosY + 50)); } } } else { return(card.Count); } return(0); }