Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Turbo.Plugins.Default;
- using System;
- using System.Text;
- using System.Linq;
- using System.Windows.Forms;
- using SharpDX.DirectInput;
- using System.Runtime.InteropServices;
- using System.Text.RegularExpressions;
- namespace Turbo.Plugins.Ez
- {
- public class UrshiUpgrade : BasePlugin, IKeyEventHandler, IAfterCollectHandler, IInGameTopPainter
- {
- private static IntPtr D3Hwnd = IntPtr.Zero;
- [DllImport("USER32.DLL")]
- private static extern IntPtr FindWindow(string ClassName, string WindowText);
- [DllImport("USER32.DLL")]
- private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
- private static IntPtr MakeLParam(int x, int y)
- {
- return (IntPtr)(y << 16 | (x & 65535));
- }
- public static void SendPressKey(Keys key)
- {
- SendMessage(D3Hwnd, 256U, (IntPtr)((int)key), IntPtr.Zero);
- SendMessage(D3Hwnd, 257U, (IntPtr)((int)key), IntPtr.Zero);
- }
- public void mouseLClickUiE(IUiElement uie) // D3Hwnd
- {
- if (uie.Visible)
- {
- IntPtr lParam = MakeLParam((int)(uie.Rectangle.X + uie.Rectangle.Width * 0.5f), (int)(uie.Rectangle.Y + uie.Rectangle.Height * 0.5f));
- SendMessage(D3Hwnd, 513U, (IntPtr)1, lParam);
- SendMessage(D3Hwnd, 514U, (IntPtr)1, lParam);
- }
- }
- protected IUiElement GemUpgradePane;
- protected IUiElement Upgrade_Button;
- protected IUiElement GemLevelText;
- protected IUiElement GemUpgradeChance;
- protected IUiElement Item_Button;
- protected IUiElement Item0;
- protected IUiElement Item0_Highlight;
- protected IUiElement Click_Eater;
- private bool doUpgrade { get; set; } = true;
- private bool autoSelect { get; set; } = true;
- private string msgInfo { get; set; } = string.Empty;
- private long msLapseAction { get; set; } = 0;
- private long msLapseMin { get; set; } = 20;
- private string NamePlugin { get; } = "[UrshiUpgrade] ";
- private Func<int> UpgradeTimes { get; set; }
- public Keys keyTown { get; set; } = Keys.T; // Teleport To Town
- public IKeyEvent ToggleKeyEvent { get; set; }
- public IFont InfoFont { get; set; }
- public string TextTryInv { get; set; } = "Selecting Gem from Inventory (0,0)";
- public string TextTryClick { get; set; } = "Pressing the button to update the Gem {0}"; // {0} = level gem
- public string TextSelectYou { get; set; } = "You need to select a gem to upgrade";
- public string TextNotUpgrade { get; set; } = "Select another Gem (non-upgradable)!";
- public string TextMaxLevel { get; set; } = "Select another Gem to upgrade (max level)!";
- public string TextReadLevel { get; set; } = "Cannot read Gem level";
- public string TextProcessing { get; set; } = "Processing..";
- public string TextClickDetected { get; set; } = "Clicking the button";
- public string TextSelected { get; set; } = "There is a selected Gem";
- public string TextAutoSelect { get; set; } = "\nAutoSelect Gem Inventory (0,0): {0}"; // {0} = On/Off
- public string TextRunning { get; set; } = "\nRunning... Press {0} to Stop."; // {0} = ToggleKeyEvent.ToString()
- public string TextStopped { get; set; } = "\nStopped... Press {0} to Start."; // {0} = ToggleKeyEvent.ToString()
- public UrshiUpgrade()
- {
- Enabled = true;
- }
- public override void Load(IController hud)
- {
- base.Load(hud);
- ToggleKeyEvent = Hud.Input.CreateKeyEvent(true, Key.F3, controlPressed: false, altPressed: false, shiftPressed: false); // Hotkey
- InfoFont = Hud.Render.CreateFont("tahoma", 8, 255, 200, 200, 0, true, false, 255, 0, 0, 0, true);
- GemUpgradePane = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane", null, null);
- Upgrade_Button = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.upgrade_button", null, null);
- Item_Button = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.item_button", null, null);
- Item0 = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.items_list._content._stackpanel._tilerow0._item0.Item", null, null);
- GemLevelText = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.gemLevelText", null, null);
- GemUpgradeChance = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.gemUpgradeChance", null, null);
- Item0_Highlight = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.items_list._content._stackpanel._tilerow0._item0.Highlight", null, null);
- Click_Eater = Hud.Render.RegisterUiElement("Root.NormalLayer.vendor_dialog_mainPage.riftReward_dialog.LayoutRoot.gemUpgradePane.click_eater", null, null);
- UpgradeTimes = () => Hud.Game.Me.GetAttributeValueAsInt(Hud.Sno.Attributes.Jewel_Upgrades_Bonus, 1048575, 0) + Hud.Game.Me.GetAttributeValueAsInt(Hud.Sno.Attributes.Jewel_Upgrades_Max, 1048575, 0) - Hud.Game.Me.GetAttributeValueAsInt(Hud.Sno.Attributes.Jewel_Upgrades_Used, 1048575, 0);
- D3Hwnd = FindWindow("D3 Main Window Class", null); // D3Hwnd = FindWindow(null, "Diablo III");
- }
- public void OnKeyEvent(IKeyEvent keyEvent)
- {
- if (keyEvent.IsPressed && ToggleKeyEvent.Matches(keyEvent))
- {
- if (GemUpgradePane.Visible)
- {
- if (doUpgrade)
- {
- doUpgrade = false;
- autoSelect = false;
- }
- else
- {
- doUpgrade = true;
- }
- }
- }
- }
- private bool JewelUpgradeable(IItem item)
- {
- switch (item.SnoItem.NameEnglish)
- { // item.SnoItem.NameEnglish / item.SnoItem.Code / item.SnoActor.Sno (uint)
- case "Boon of the Hoarder": return item.JewelRank < 50; // ITEM => NameEnglish: "Boon of the Hoarder" / Code: Hud.Sno.SnoItems.Unique_Gem_014_x1 / Sno: ActorSnoEnum._unique_gem_014_x1 (405803)
- case "Iceblink": return item.JewelRank < 50; // ITEM => NameEnglish: "Iceblink" / Code: Hud.Sno.SnoItems.Unique_Gem_021_x1 / Sno: ActorSnoEnum._unique_gem_021_x1 (428355)
- case "Legacy of Dreams": return item.JewelRank < 99; // ITEM => NameEnglish: "Legacy of Dreams" / Code: Hud.Sno.SnoItems.Unique_Gem_023_x1 / Sno: ActorSnoEnum._unique_gem_023_x1 (483318)
- case "Esoteric Alteration": return item.JewelRank < 100; // ITEM => NameEnglish: "Esoteric Alteration" / Code: Hud.Sno.SnoItems.Unique_Gem_016_x1 / Sno: ActorSnoEnum._unique_gem_016_x1 (428033)
- case "Mutilation Guard": return item.JewelRank < 100; // ITEM => NameEnglish: "Mutilation Guard" / Code: Hud.Sno.SnoItems.Unique_Gem_019_x1 / Sno: ActorSnoEnum._unique_gem_019_x1 (428346)
- case "Whisper of Atonement": return item.JewelRank < 150; // ITEM => NameEnglish: "Whisper of Atonement" / Code: Hud.Sno.SnoItems.P73_Unique_Gem_125 / Sno: ActorSnoEnum._p73_swarmrift_gem_01 (486955)
- default: return true;
- }
- }
- public void AfterCollect()
- {
- if (Hud.Game.IsInGame && Hud.Game.Me.InGreaterRiftRank > 0 && Hud.Game.Quests.Any(q => q.SnoQuest.Sno == 337492 && q.QuestStepId == 34)) // Hud.Game.RiftPercentage == 100
- {
- if (GemUpgradePane.Visible)
- {
- if (Hud.Game.CurrentRealTimeMilliseconds > msLapseAction)
- {
- msLapseAction = Hud.Game.CurrentRealTimeMilliseconds + msLapseMin;
- var gemInventory = Hud.Inventory.ItemsInInventory.FirstOrDefault(x => x.InventoryX == 0 && x.InventoryY == 0 && x.IsLegendary && x.SnoItem.MainGroupCode == "gems_unique");
- if (Item_Button.AnimState == -1)
- {
- if (autoSelect && gemInventory != null)
- {
- mouseLClickUiE(Item0);
- msLapseAction += 150;
- msgInfo = TextTryInv;
- }
- else msgInfo = TextSelectYou;
- }
- else if (autoSelect && gemInventory != null && !Item0_Highlight.Visible && JewelUpgradeable(gemInventory))
- {
- mouseLClickUiE(Item0);
- msLapseAction += 150;
- msgInfo = TextTryInv;
- }
- else if (doUpgrade)
- {
- if (Upgrade_Button.AnimState == 24 || Upgrade_Button.AnimState == 25)
- {
- var match = Regex.Match(GemLevelText.ReadText(Encoding.UTF8, true), @"([0-9]+)");
- if (match.Success && int.TryParse(match.Groups[1].Value, out var num))
- {
- if (num < 150 || (Item0_Highlight.Visible && gemInventory != null))
- {
- mouseLClickUiE(Upgrade_Button);
- msgInfo = string.Format(TextTryClick, num);
- }
- else msgInfo = TextMaxLevel;
- }
- else msgInfo = TextReadLevel;
- }
- else if (Upgrade_Button.AnimState == 27)
- {
- if (Click_Eater.Visible)
- {
- msgInfo = TextProcessing;
- if (Hud.Game.Me.AnimationState != AcdAnimationState.CastingPortal && UpgradeTimes() < 3) SendPressKey(keyTown);
- }
- else msgInfo = (Upgrade_Button.ReadText(Encoding.UTF8, true) != string.Empty)? TextNotUpgrade : string.Empty;
- }
- else msgInfo = TextClickDetected; // Upgrade_Button.AnimState == 26
- }
- else msgInfo = (Upgrade_Button.ReadText(Encoding.UTF8, true) != string.Empty && Upgrade_Button.AnimState == 27)? TextNotUpgrade : TextSelected;
- }
- }
- else if (msgInfo != string.Empty)
- {
- doUpgrade = true;
- autoSelect = true;
- msgInfo = string.Empty;
- }
- }
- }
- public void PaintTopInGame(ClipState clipState)
- {
- if (clipState == ClipState.AfterClip && GemUpgradePane.Visible && msgInfo != string.Empty)
- {
- var msg = NamePlugin + msgInfo + string.Format(TextAutoSelect, (autoSelect?"On":"Off")) + string.Format((doUpgrade?TextRunning:TextStopped), ToggleKeyEvent.ToString());
- InfoFont.DrawText(InfoFont.GetTextLayout(msg), GemUpgradePane.Rectangle.X + (GemUpgradePane.Rectangle.Width * 0.056f), GemUpgradePane.Rectangle.Y + (GemUpgradePane.Rectangle.Height * 0.082f));
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment