Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Turbo.Plugins.Default;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using SharpDX.DirectInput;
- using System.Windows.Forms;
- using System.Threading;
- namespace Turbo.Plugins.Ez
- {
- public class ClickPortalPlugin : BasePlugin, IAfterCollectHandler
- {
- public static IntPtr D3Hwnd = IntPtr.Zero;
- [DllImport("USER32.DLL")]
- private static extern IntPtr FindWindow(string ClassName, string WindowText);
- [DllImport("user32.dll")]
- private static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, IntPtr dwExtraInfo);
- [DllImport("user32.dll")]
- public static extern bool SetCursorPos(int x, int y);
- public static void MoveMouseEventLClick(int x, int y)
- {
- SetCursorPos(x, y);
- Thread.Sleep(1); mouse_event(6U, 0, 0, 0U, IntPtr.Zero);
- Thread.Sleep(1); SetCursorPos(x, y); mouse_event(6U, 0, 0, 0U, IntPtr.Zero); // quick rp and retry
- }
- public static void MouseEventLClick()
- {
- mouse_event(6U, 0, 0, 0U, IntPtr.Zero);
- }
- private long msLapseAction { get; set; } = 0;
- private const long msLapse = 100; // 100
- private const long pauseClick = 250; // 250
- private uint blockPortalTarget { get; set; } = 0;
- private long blockPortalTime { get; set; } = 0;
- private long blockPortalLapse { get; set; } = 1500; // 1500
- private uint allowActorAnnId { get; set; } = 0;
- private long blockActorTime { get; set; } = 0;
- private long blockActorLapse { get; set; } = 2000; // 2000
- public bool enableEntranceVision { get; set; }
- public float distanceItem { get; set; }
- public float distanceElite { get; set; }
- public float distanceSelectedPortal { get; set; }
- public bool enableAutoPortal { get; set; }
- public float distanceAutoPortal { get; set; }
- public HashSet<ActorSnoEnum> BlackListPortals { get; set; } = new HashSet<ActorSnoEnum>()
- {
- ActorSnoEnum._p4_setdung_portal_wiz_opus, // Dungeons Sets
- ActorSnoEnum._p4_setdung_portal_wiz_rasha,
- ActorSnoEnum._p4_setdung_portal_wiz_firebird,
- ActorSnoEnum._p4_setdung_portal_wiz_vyr,
- ActorSnoEnum._p4_setdung_portal_barb_kings,
- ActorSnoEnum._p4_setdung_portal_barb_wastes,
- ActorSnoEnum._p4_setdung_portal_barb_raekor,
- ActorSnoEnum._p4_setdung_portal_barb_might,
- ActorSnoEnum._p4_setdung_portal_dh_mar,
- ActorSnoEnum._p4_setdung_portal_dh_nat ,
- ActorSnoEnum._p4_setdung_portal_dh_ess ,
- ActorSnoEnum._p4_setdung_portal_dh_shadow ,
- ActorSnoEnum._p4_setdung_portal_wd_tooth,
- ActorSnoEnum._p4_setdung_portal_wd_haunt,
- ActorSnoEnum._p4_setdung_portal_wd_spider,
- ActorSnoEnum._p4_setdung_portal_wd_jade,
- ActorSnoEnum._p4_setdung_portal_monk_innas,
- ActorSnoEnum._p4_setdung_portal_monk_sunwuko,
- ActorSnoEnum._p4_setdung_portal_monk_uliana,
- ActorSnoEnum._p4_setdung_portal_monk_storms,
- ActorSnoEnum._p6_setdung_portal_necro_blood,
- ActorSnoEnum._p6_setdung_portal_necro_bone,
- ActorSnoEnum._p6_setdung_portal_necro_plague,
- ActorSnoEnum._p6_setdung_portal_necro_saint,
- ActorSnoEnum._p4_setdung_portal_cru_thorns,
- ActorSnoEnum._p4_setdung_portal_cru_seeker,
- ActorSnoEnum._p4_setdung_portal_cru_akkhan,
- ActorSnoEnum._p4_setdung_portal_cru_roland,
- ActorSnoEnum._p4_setdung_portal_dynamicreturn,
- ActorSnoEnum._p4_setdung_portal_neph_eyes,
- //ActorSnoEnum._hearthportal, // Town
- //ActorSnoEnum._x1_openworld_lootrunportal, // Town
- //ActorSnoEnum._x1_openworld_tiered_rifts_portal, // Town
- ActorSnoEnum._x1_openworld_tiered_rifts_challenge_portal,
- ActorSnoEnum._p1_greed_portal,
- //ActorSnoEnum._p1_greed_portal_ancient, // Town
- ActorSnoEnum._p2_totallynotacowlevel_portal,
- ActorSnoEnum._dungeon_stone_portal,
- };
- private HashSet<uint> EnmityAreas { get; set; } = new HashSet<uint>
- {
- 488740, 488741, 488742, 488743, 488745, 488746, 488767, 488770, 488799, 488800, 488870, 488871, 488872, 488873, 488874
- };
- private HashSet<ActorSnoEnum> EnmityPortals { get; set; } = new HashSet<ActorSnoEnum> {
- ActorSnoEnum._p76_portal_oldtristram_seasontheme,
- ActorSnoEnum._p76_portal_newtristram_seasontheme,
- ActorSnoEnum._p76_portal_graveyardact1_seasontheme,
- ActorSnoEnum._p76_portal_bloodpit_seasontheme,
- ActorSnoEnum._p76_portal_moors_sacrifice_seasontheme,
- ActorSnoEnum._p76_portal_boneyard_seasontheme,
- ActorSnoEnum._p76_portal_church_seasontheme,
- ActorSnoEnum._p76_portal_alcarnus_seasontheme,
- ActorSnoEnum._p76_portal_sescheron_seasontheme,
- ActorSnoEnum._p76_portal_foresttower_seasontheme,
- ActorSnoEnum._p76_portal_bog_seasontheme,
- ActorSnoEnum._p76_portal_gideonscourt_seasontheme,
- ActorSnoEnum._p76_portal_spire_seasontheme,
- ActorSnoEnum._p76_portal_hell_seasontheme,
- ActorSnoEnum._p76_portal_ram_seasontheme,
- };
- public ClickPortalPlugin()
- {
- Enabled = true;
- }
- public override void Load(IController hud)
- {
- base.Load(hud);
- enableEntranceVision = true;
- enableAutoPortal = true;
- distanceAutoPortal = 10;
- distanceSelectedPortal = 16;
- distanceItem = 50;
- distanceElite = 50;
- D3Hwnd = FindWindow("D3 Main Window Class", null); // D3Hwnd = FindWindow(null, "Diablo III");
- }
- private bool IsElite(IMonster m)
- {
- return (m.Rarity == ActorRarity.Champion || m.Rarity == ActorRarity.Rare || m.Rarity == ActorRarity.Unique || m.Rarity == ActorRarity.Boss || m.SnoMonster.Priority >= MonsterPriority.goblin) && m.SummonerAcdDynamicId == 0;
- }
- public void AfterCollect()
- {
- if (!Hud.Game.IsInGame || Hud.Game.Me.IsInTown || !Hud.Window.IsForeground) return;
- if (Hud.Game.CurrentRealTimeMilliseconds > msLapseAction)
- {
- msLapseAction = Hud.Game.CurrentRealTimeMilliseconds + msLapse;
- if (Hud.Game.Me.AnimationState != AcdAnimationState.Running && !Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_ActorInvulBuff.Sno) && !Hud.Input.IsKeyDown(Keys.LControlKey))
- {
- IActor actorPortal = null; bool movemouse = false;
- if (Hud.Game.SelectedActor != null)
- {
- if (Hud.Game.SelectedActor.CentralXyDistanceToMe < distanceSelectedPortal && (Hud.Game.SelectedActor.SnoActor.Kind == ActorKind.Portal || Hud.Game.SelectedActor.GizmoType.ToString().Contains("Portal")))
- actorPortal = Hud.Game.SelectedActor;
- }
- else if (enableAutoPortal)
- {
- actorPortal = Hud.Game.Actors.Where(a => a.CentralXyDistanceToMe < distanceAutoPortal && (a.SnoActor.Kind == ActorKind.Portal || a.GizmoType.ToString().Contains("Portal"))).OrderBy(o => o.CentralXyDistanceToMe).FirstOrDefault();
- movemouse = true;
- }
- if (actorPortal != null && !BlackListPortals.Contains(actorPortal.SnoActor.Sno)) // !actorPortal.SnoActor.Code.Contains("_SetDung_Portal_")
- {
- if (!Hud.Game.AliveMonsters.Any(m => IsElite(m) && m.CentralXyDistanceToMe < distanceElite)) // No ELites Near
- {
- if (!Hud.Game.Items.Any(i => i.Location == ItemLocation.Floor && i.IsLegendary && i.CentralXyDistanceToMe < distanceItem))
- {
- var portal = Hud.Game.Portals.FirstOrDefault(p => p.ActorAvailable && (actorPortal.AnnId == p.AnnId));
- if (portal != null)
- {
- if (portal.TargetArea.Sno != Hud.Game.Me.SnoArea.Sno)
- {
- bool isvalid = (portal.TargetArea.IsTown)? false
- :(portal.GizmoType == GizmoType.BossPortal)? (Hud.Game.NumberOfPlayersInGame == 1)
- : (Hud.Game.Me.SnoArea.Sno == 288482 || Hud.Game.Me.SnoArea.HostAreaSno == 288482)? (portal.TargetArea.Sno > Hud.Game.Me.SnoArea.Sno && (Hud.Game.Me.InGreaterRiftRank == 0 || Hud.Game.RiftPercentage < 100))
- : EnmityAreas.Contains(Hud.Game.Me.SnoArea.Sno)? EnmityPortals.Contains(portal.SnoActor.Sno)
- : (EnmityPortals.Contains(portal.SnoActor.Sno))? enableEntranceVision
- : (portal.TargetArea.Sno != blockPortalTarget || Hud.Game.CurrentRealTimeMilliseconds > blockPortalTime)
- ;
- if (isvalid)
- {
- blockPortalTarget = Hud.Game.Me.SnoArea.Sno;
- blockPortalTime = Hud.Game.CurrentRealTimeMilliseconds + blockPortalLapse;
- msLapseAction = Hud.Game.CurrentRealTimeMilliseconds + pauseClick;
- if (movemouse) MoveMouseEventLClick((int)portal.ScreenCoordinate.X + Hud.Window.Offset.X, (int)portal.ScreenCoordinate.Y + Hud.Window.Offset.Y);
- else MouseEventLClick();
- }
- }
- }
- else if (actorPortal.GizmoType == GizmoType.Switch || (actorPortal.GizmoType == GizmoType.BossPortal && Hud.Game.NumberOfPlayersInGame == 1))
- {//else if (actorPortal.GizmoType == GizmoType.Switch || (actorPortal.SnoActor.Sno == ActorSnoEnum._p6_envy_bossportal && Hud.Game.NumberOfPlayersInGame == 1)) //(ActorSnoEnum._x1_fortress_portal_switch, ..)//vidian portal bug
- if (actorPortal.AnnId == allowActorAnnId || Hud.Game.CurrentRealTimeMilliseconds > blockActorTime)
- {
- allowActorAnnId = actorPortal.AnnId;
- blockActorTime = Hud.Game.CurrentRealTimeMilliseconds + blockActorLapse;
- msLapseAction = Hud.Game.CurrentRealTimeMilliseconds + pauseClick;
- if (movemouse) MoveMouseEventLClick((int)actorPortal.ScreenCoordinate.X + Hud.Window.Offset.X, (int)actorPortal.ScreenCoordinate.Y + Hud.Window.Offset.Y);
- else MouseEventLClick();
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment