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; } } }
public static async Task <bool> Export(Deck deck, Func <Task <bool> > onInterrupt) { if (deck == null) { return(false); } var currentClipboard = ""; try { Log.Info("Exporting " + deck.GetDeckInfo()); if (Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) { currentClipboard = Clipboard.GetText(); } var info = new ExportingInfo(); LogDebugInfo(info); info = await ExportingHelper.EnsureHearthstoneInForeground(info); if (info == null) { return(false); } LogDebugInfo(info); Log.Info($"Waiting for {Config.Instance.ExportStartDelay} seconds before starting the export process"); await Task.Delay(Config.Instance.ExportStartDelay *1000); var exporter = new ExportingActions(info, deck, onInterrupt); await exporter.ClearDeck(); await exporter.SetDeckName(); await exporter.ClearFilters(); await exporter.CreateDeck(); await exporter.ClearSearchBox(); if (Config.Instance.ExportPasteClipboard) { Clipboard.Clear(); } Log.Info("Success exporting deck."); return(true); } catch (ExportingInterruptedException e) { Log.Warn(e.Message); return(false); } catch (Exception e) { Log.Error("Error exporting deck: " + e); return(false); } finally { try { if (Config.Instance.ExportPasteClipboard && currentClipboard != "") { Clipboard.SetText(currentClipboard); } } catch (Exception ex) { Log.Error("Could not restore clipboard content after export: " + ex); } } }
public static async Task Export(Deck deck) { if (deck == null) { return; } var currentClipboard = ""; try { Logger.WriteLine("Exporting " + deck.GetDeckInfo(), "DeckExporter"); if (Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) { currentClipboard = Clipboard.GetText(); } var info = new ExportingInfo(); LogDebugInfo(info); var inForeground = await ExportingHelper.EnsureHearthstoneInForeground(info.HsHandle); if (!inForeground) { return; } Logger.WriteLine("Waiting for " + Config.Instance.ExportStartDelay + " seconds before starting the export process", "DeckExporter"); await Task.Delay(Config.Instance.ExportStartDelay * 1000); Core.Overlay.ForceHide(true); await ExportingActions.ClearDeck(info); await ExportingActions.SetDeckName(deck, info); await ExportingActions.ClearFilters(info); var lostFocus = await ExportingActions.CreateDeck(deck, info); if (lostFocus) { return; } await ExportingActions.ClearSearchBox(info.HsHandle, info.SearchBoxPos); if (Config.Instance.ExportPasteClipboard) { Clipboard.Clear(); } Logger.WriteLine("Success exporting deck.", "DeckExporter"); } catch (Exception e) { Logger.WriteLine("Error exporting deck: " + e, "DeckExporter"); } finally { Core.Overlay.ForceHide(false); if (Config.Instance.ExportPasteClipboard && currentClipboard != "") { Clipboard.SetText(currentClipboard); } } }
///<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); }
public static async Task <bool> Export(Deck deck) { if (deck == null) { return(false); } var currentClipboard = ""; var altScreenCapture = Config.Instance.AlternativeScreenCapture; try { Log.Info("Exporting " + deck.GetDeckInfo()); if (Config.Instance.ExportPasteClipboard && Clipboard.ContainsText()) { currentClipboard = Clipboard.GetText(); } var info = new ExportingInfo(); LogDebugInfo(info); var inForeground = await ExportingHelper.EnsureHearthstoneInForeground(info.HsHandle); if (!inForeground) { return(false); } Log.Info($"Waiting for {Config.Instance.ExportStartDelay} seconds before starting the export process"); await Task.Delay(Config.Instance.ExportStartDelay * 1000); if (!altScreenCapture) { Core.Overlay.ForceHide(true); } await ClearDeck(info); await SetDeckName(deck, info); await ClearFilters(info); var lostFocus = await CreateDeck(deck, info); if (lostFocus) { return(false); } await ClearSearchBox(info.HsHandle, info.SearchBoxPos); if (Config.Instance.ExportPasteClipboard) { Clipboard.Clear(); } Log.Info("Success exporting deck."); return(true); } catch (Exception e) { Log.Error("Error exporting deck: " + e); return(false); } finally { if (!altScreenCapture) { Core.Overlay.ForceHide(false); } if (Config.Instance.ExportPasteClipboard && currentClipboard != "") { Clipboard.SetText(currentClipboard); } } }