namespace Turbo.Plugins.LightningMod { using SharpDX.DirectInput; using System.Linq; using System.Text; using Turbo.Plugins.Default; public class BaseKanaiPlugin : BasePlugin { public bool TurnedOn { get; set; } public IKeyEvent ToggleKeyEvent { get; set; } public bool Running { get; protected set; } protected IUiElement vendorPage; protected IUiElement transmuteDialog; protected IUiElement pageNumber; protected IUiElement transmuteButton; protected IUiElement reciepeButton; protected IUiElement fillButton; protected IUiElement nextButton; protected IUiElement prevButton; protected int[] PageIndexes { get; } public IFont HeaderFont { get; set; } public IFont InfoFont { get; set; } public IBrush ItemHighlighBrush { get; set; } public BaseKanaiPlugin(params int[] pageIndexes) { Enabled = true; TurnedOn = false; Running = false; PageIndexes = pageIndexes; } public override void Load(IController hud) { base.Load(hud); ToggleKeyEvent = Hud.Input.CreateKeyEvent(true, Key.F4, false, false, false); vendorPage = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage", Hud.Inventory.InventoryMainUiElement, null); transmuteDialog = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.transmute_dialog", vendorPage, null); pageNumber = Hud.Render.RegisterUiElement("Root.NormalLayer.Kanais_Recipes_main.LayoutRoot.PageControls.page_number", transmuteDialog, null); transmuteButton = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.transmute_dialog.LayoutRoot.transmute_button", transmuteDialog, null); reciepeButton = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.transmute_dialog.LayoutRoot.recipe_button", transmuteDialog, null); fillButton = Hud.Render.RegisterUiElement("Root.NormalLayer.Kanais_Recipes_main.LayoutRoot.button_fill_currencies", transmuteDialog, null); nextButton = Hud.Render.RegisterUiElement("Root.NormalLayer.Kanais_Recipes_main.LayoutRoot.PageControls.page_next", transmuteDialog, null); prevButton = Hud.Render.RegisterUiElement("Root.NormalLayer.Kanais_Recipes_main.LayoutRoot.PageControls.page_previous", transmuteDialog, null); HeaderFont = Hud.Render.CreateFont("tahoma", 12, 255, 200, 200, 100, true, false, 255, 0, 0, 0, true); InfoFont = Hud.Render.CreateFont("tahoma", 7, 255, 200, 200, 0, true, false, 255, 0, 0, 0, true); ItemHighlighBrush = Hud.Render.CreateBrush(255, 200, 200, 100, -1.6f); } protected int GetPageNum() { var pageText = pageNumber.ReadText(Encoding.UTF8, true); var pageleft = Between(pageText, null, ","); if (string.IsNullOrEmpty(pageleft)) pageleft = Between(pageText, null, ","); if (string.IsNullOrEmpty(pageleft)) pageleft = Between(pageText, null, "/"); if (string.IsNullOrEmpty(pageleft)) return -1; if (pageleft.Contains("10")) return 10; else if (pageleft.Contains("1")) return 1; else if (pageleft.Contains("2")) return 2; else if (pageleft.Contains("3")) return 3; else if (pageleft.Contains("4")) return 4; else if (pageleft.Contains("5")) return 5; else if (pageleft.Contains("6")) return 6; else if (pageleft.Contains("7")) return 7; else if (pageleft.Contains("8")) return 8; else if (pageleft.Contains("9")) return 9; else return -1; } public static string Between(string str, string strLeft, string strRight) //取文本中间 { if (str == null || str.Length == 0) return ""; if (strLeft != null) { int indexLeft = str.IndexOf(strLeft);//左边字符串位置 if (indexLeft < 0) return ""; indexLeft = indexLeft + strLeft.Length;//左边字符串长度 if (strRight != null) { int indexRight = str.IndexOf(strRight, indexLeft);//右边字符串位置 if (indexRight < 0) return ""; return str.Substring(indexLeft, indexRight - indexLeft);//indexRight - indexLeft是取中间字符串长度 } else return str.Substring(indexLeft, str.Length - indexLeft);//取字符串右边 } else//取字符串左边 { if (strRight == null) return ""; int indexRight = str.IndexOf(strRight); if (indexRight <= 0) return ""; else return str.Substring(0, indexRight); } } protected bool OpenKanaiCube(int pageNum) { for (int i = 0; i < 50; i++) { Hud.ReCollect(true); if (GetPageNum() == pageNum) { Hud.Interaction.ClickUiElement(System.Windows.Forms.MouseButtons.Left, prevButton); Hud.Wait(10); } else { break; } } for (int i = 0; i < 50; i++) { Hud.ReCollect(true); int page = GetPageNum(); if (!Hud.Game.IsInGame) return false; if (page < pageNum) { Hud.Interaction.ClickUiElement(System.Windows.Forms.MouseButtons.Left, nextButton); Hud.Wait(10); } Hud.ReCollect(true); if (page > pageNum) { Hud.Interaction.ClickUiElement(System.Windows.Forms.MouseButtons.Left, prevButton); Hud.Wait(10); } Hud.ReCollect(true); if (page == pageNum) return true; } return false; } protected bool TransmuteOne(IItem item) { for (int i = 0; i < 2; i++) { Hud.Interaction.ClickInventoryItem(System.Windows.Forms.MouseButtons.Right, item); Hud.Wait(10); } for (int i = 0; i < 2; i++) { Hud.Interaction.ClickUiElement(System.Windows.Forms.MouseButtons.Left, fillButton); Hud.Wait(10); } for (int i = 0; i < 2; i++) { Hud.Interaction.ClickUiElement(System.Windows.Forms.MouseButtons.Left, transmuteButton); Hud.Wait(10); } var ok = Hud.WaitFor(5000, 25, 0, () => !Hud.Inventory.ItemsInInventory.Any(x => x.ItemUniqueId == item.ItemUniqueId)); Hud.Wait(10); Hud.ReCollect(); return ok; } protected bool ValidateTurnedOn() { if (!Running) { if (!Hud.Game.IsInGame || !transmuteDialog.Visible || !pageNumber.Visible || (Hud.Inventory.InventoryLockArea.Width <= 0) || (Hud.Inventory.InventoryLockArea.Height <= 0)) { TurnedOn = false; } //else //{ // var pageNum = GetPageNum(); // if (!PageIndexes.Contains(pageNum)) // { // TurnedOn = false; // } //} } return TurnedOn; } } }