EzPlugins

OpenAndTake

Mar 5th, 2025 (edited)
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.11 KB | None | 0 0
  1. using Turbo.Plugins.Default;
  2. using System;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using System.Windows.Forms;
  6. using SharpDX.DirectInput;
  7. using System.Runtime.InteropServices;
  8. using System.Threading;
  9. using System.Drawing;
  10.  
  11. namespace Turbo.Plugins.Ez
  12. {
  13.     public class OpenAndTake : BasePlugin, IAfterCollectHandler, INewAreaHandler
  14.     {
  15.         [DllImport("user32.dll")]
  16.         public static extern bool SetCursorPos(int x, int y);
  17.         [DllImport("user32.dll")]
  18.         public static extern bool GetCursorPos(out Point point);
  19.  
  20.         [DllImport("user32.dll")]
  21.         private static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, IntPtr dwExtraInfo);
  22.  
  23.         private IUiElement ChatUI;
  24.  
  25.         private Dictionary<uint,int> Data { get; set; } = new Dictionary<uint, int>();
  26.  
  27.         private readonly HashSet<ActorSnoEnum> StoneList = new HashSet<ActorSnoEnum>()
  28.         {
  29.             ActorSnoEnum._trdun_cath_floorspawner_01,
  30.             ActorSnoEnum._x1_westm_graveyard_ground_clicky,
  31.             ActorSnoEnum._x1_westm_ground_clicky,
  32.             ActorSnoEnum._x1_catacombs_ground_clicky,
  33.             ActorSnoEnum._x1_fortress_ground_clicky,
  34.             ActorSnoEnum._x1_pand_ext_ground_clicky,
  35.             ActorSnoEnum._x1_bog_ground_clicky,
  36.             ActorSnoEnum._x1_abattoir_ground_clicky,
  37.             ActorSnoEnum._x1_pand_hexmaze_ground_clicky,
  38.             ActorSnoEnum._p6_moor_ground_clicky,
  39.             ActorSnoEnum._p6_church_groundclicky_02,
  40.         };
  41.  
  42.         private readonly HashSet<ActorSnoEnum> DoorsIdsBlackList = new HashSet<ActorSnoEnum>() // From Jack plugin
  43.         {
  44.             ActorSnoEnum._trout_highlands_goatmen_chokepoint_gate, // A1 , Tierras Altas del Sur
  45.             ActorSnoEnum._cald_merchant_cart, // A2 to belial
  46.             ActorSnoEnum._a2dun_cald_exit_gate, // A2 to belial
  47.             ActorSnoEnum._a2dunswr_gates_causeway_gates_non_op, // A2 to belial
  48.             ActorSnoEnum._a2dun_cald_belial_acid_attack, // A2 to belial
  49.             ActorSnoEnum._a2dun_cald_belial_room_gate_a, // A2 to belial
  50.             ActorSnoEnum._trout_cultists_summoning_portal_b, // A2 Alcarnus
  51.             ActorSnoEnum._caout_target_dummy, // A2 City
  52.             ActorSnoEnum._start_location_team_0, // A2 City
  53.             ActorSnoEnum._a3dun_crater_st_demon_chainpylon_fire_azmodan, // A3 rakkis crossing
  54.             ActorSnoEnum._a3dun_keep_bridge, // A3 rakkis crossing
  55.             ActorSnoEnum._a3dun_rmpt_frozendoor_a, // A3 stonefort
  56.             ActorSnoEnum._catapult_a3dunkeep_warmachines_snow_firing, // A3 battlefields
  57.             ActorSnoEnum._x1_crusader_trebuchet_pending_tar,
  58.             ActorSnoEnum._event_1000monster_portal,
  59.             ActorSnoEnum._a2dun_zolt_sandbridgebase_bossfight,
  60.             ActorSnoEnum._px_highlands_camp_resurgentcult_portal,
  61.             ActorSnoEnum._x1_bog_catacombsportal_beaconloc,
  62.             ActorSnoEnum._x1_malthael_boss_orb_collapse, // malthael fight
  63.             ActorSnoEnum._caout_oasis_mine_entrance_a, // check this one, maybe a bounty
  64.             ActorSnoEnum._trout_leor_painting, // leoric manor
  65.             ActorSnoEnum._a4dun_sigil_room_platform_a, // Holy Sanctum
  66.             ActorSnoEnum._a3dun_rmpt_catapult_follower_event_gate, // a3 catapult event
  67.             ActorSnoEnum._a1dun_leor_jail_door_superlocked_a_fake,
  68.             ActorSnoEnum._cos_pet_mimic_01,
  69.             ActorSnoEnum._shoulderpads_norm_base_flippy, // ???
  70.             ActorSnoEnum._x1_abattoir_barricade_solid,
  71.             ActorSnoEnum._x1_fortress_floatrubble_a,
  72.             ActorSnoEnum._a3dun_keep_barrel_snow_no_skirt, // Sturdy Barrel
  73.             ActorSnoEnum._x1_fortress_crystal_prison_shield,
  74.             ActorSnoEnum._x1_westm_railing_a_01_piece1,
  75.             ActorSnoEnum._x1_pand_hexmaze_corpse, // Corpse
  76.             ActorSnoEnum._dh_companion_runec,
  77.             ActorSnoEnum._loottype2_tristramvillager_male_c_corpse_01, // Dead Villager
  78.             ActorSnoEnum._uber_bossworld3_st_demon_chainpylon_fire_azmodan, // uber realm
  79.             ActorSnoEnum._trdun_crypt_skeleton_king_throne_parts, // uber realm
  80.             ActorSnoEnum._double_crane_a_caout_miningevent_chest_minievent, // A2 howling plateau event
  81.             ActorSnoEnum._p6_church_bloodchannel_a, // A2 Temple of Unborn 1
  82.             ActorSnoEnum._a4dun_sigil_tile_invis_wall, // A4 Bounty "Watch Your Step"
  83.             ActorSnoEnum._p1_tgoblin_gate, // Greed door
  84.             ActorSnoEnum._p1_tgoblin_vault_door, // Vault door
  85.             ActorSnoEnum._x1_urzael_soundspawner, // Urzael fight
  86.             ActorSnoEnum._x1_urzael_soundspawner_02, // Urzael fight
  87.             ActorSnoEnum._x1_urzael_soundspawner_03, // Urzael fight
  88.             ActorSnoEnum._x1_urzael_soundspawner_04, // Urzael fight
  89.             ActorSnoEnum._x1_westm_ex,
  90.             ActorSnoEnum._trout_cath_entrance_door,
  91.         };
  92.  
  93.         private long msLapseAction { get; set; } = 0;
  94.         private long msLapseMin { get; set; } = 150;
  95.         private int maxRetry { get; set; } = 20;
  96.  
  97.         public Keys KeyNoOperate { get; set; }
  98.         public int maxGR { get; set; }
  99.         public float addToRadius { get; set; }
  100.         public float distancePowerUp { get; set; }
  101.         public bool Door { get; set; }
  102.         public bool Chest { get; set; }
  103.         public bool ChestNormal { get; set; }
  104.         public bool DeadBody { get; set; }
  105.         public bool Rack { get; set; }
  106.         public bool Pool { get; set; }
  107.         public bool Shrine { get; set; }
  108.         public bool Stone { get; set; }
  109.         public bool ChestLore { get; set; }
  110.         public bool Switch { get; set; }
  111.  
  112.         public void OnNewArea(bool newGame, ISnoArea area)
  113.         {
  114.             if (area.IsTown)
  115.             {
  116.                 Data.Clear();
  117.             }
  118.         }
  119.  
  120.         public OpenAndTake()
  121.         {
  122.             Enabled = true;
  123.  
  124.             KeyNoOperate = Keys.C;
  125.             maxGR = 110;
  126.             addToRadius = 4.2f;
  127.             distancePowerUp = 12.0f;
  128.  
  129.             Pool = true;
  130.             Shrine = true;
  131.             Door = true;
  132.             ChestNormal = true;
  133.             Chest = true;
  134.             ChestLore = true;
  135.             Rack = true;
  136.             DeadBody = true;
  137.             Stone = true;
  138.             Switch = true;
  139.         }
  140.  
  141.         public override void Load(IController hud)
  142.         {
  143.             base.Load(hud);
  144.  
  145.             ChatUI = Hud.Render.GetUiElement("Root.NormalLayer.chatentry_dialog_backgroundScreen.chatentry_content.chat_editline");
  146.         }
  147.  
  148.         private bool CharacterCannotCast()
  149.         {
  150.             return         Hud.Game.IsPaused
  151.                         || Hud.Game.IsInTown
  152.                         || Hud.Game.IsLoading
  153.                         || Hud.Game.Me.IsDead
  154.                         || !Hud.Window.IsForeground
  155.                         || Hud.Game.MapMode != MapMode.Minimap
  156.                         || ChatUI.Visible
  157.                         || Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_AxeOperateGizmo.Sno)
  158.                         || Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_ActorInvulBuff.Sno)
  159.                         || Hud.Game.Me.AnimationState == AcdAnimationState.CastingPortal
  160.                         || Hud.Game.Me.AnimationState == AcdAnimationState.Transform
  161.                         || Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_ActorGhostedBuff.Sno)
  162.             ;
  163.         }
  164.  
  165.         public void AfterCollect()
  166.         {
  167.             if (!Hud.Game.IsInGame) return;
  168.             if (Hud.Game.CurrentRealTimeMilliseconds > msLapseAction)
  169.             {
  170.                 msLapseAction = Hud.Game.CurrentRealTimeMilliseconds + msLapseMin;
  171.                 if (Hud.Game.Me.InGreaterRiftRank > maxGR || Hud.Input.IsKeyDown(KeyNoOperate) || CharacterCannotCast()) return;
  172.                 var actor = Hud.Game.Actors.FirstOrDefault(a => a.IsClickable && !a.IsDisabled && !a.IsOperated && a.CentralXyDistanceToMe < ((a.GizmoType == GizmoType.PowerUp)?distancePowerUp:(a.RadiusBottom + addToRadius)) && a.ZDistanceToMeAbsolute < 12);
  173.                 if (actor != null)
  174.                 {
  175.                     var operate = (actor.SnoActor.Kind == ActorKind.Shrine)?(
  176.                                                                                 (actor.GizmoType == GizmoType.HealingWell)? false
  177.                                                                                     :(actor.GizmoType == GizmoType.PoolOfReflection)? (Pool && (Hud.Game.Me.Powers.BuffIsActive(488011)? Hud.Game.Me.BonusPoolRemaining == 0 : Hud.Game.NumberOfPlayersInGame == 1))
  178.                                                                                         :(  actor.GizmoType == GizmoType.PowerUp && Shrine //  318820 , Hud.Sno.SnoPowers.NemesisBracers.Sno
  179.                                                                                             && ( Hud.Game.NumberOfPlayersInGame == 1 || Hud.Game.Me.Powers.BuffIsActive(318820) || !Hud.Game.Players.Any(p => p.Powers.BuffIsActive(318820)) )
  180.                                                                                           )
  181.                                                                             )
  182.                                     :(actor.SnoActor.Kind == ActorKind.Chest)? Chest
  183.                                         :(actor.SnoActor.Kind == ActorKind.ChestNormal)? ChestNormal
  184.                                                 :(actor.SnoActor.Kind == ActorKind.ArmorRack || actor.SnoActor.Kind == ActorKind.WeaponRack)? Rack
  185.                                                     :(actor.SnoActor.Kind == ActorKind.DeadBody)? DeadBody
  186.                                                         :(actor.SnoActor.Kind != ActorKind.None)?  false
  187.                                                             :(actor.GizmoType == GizmoType.Door)? (Door && !DoorsIdsBlackList.Contains(actor.SnoActor.Sno))
  188.                                                                 :(actor.GizmoType == GizmoType.LoreChest)? ChestLore
  189.                                                                     :(actor.GizmoType == GizmoType.Switch)? Switch
  190.                                                                         :(Stone && StoneList.Contains(actor.SnoActor.Sno))
  191.                     ;
  192.                     if (operate)
  193.                     {
  194.                         if (!Data.TryGetValue(actor.AnnId, out int n) || n < maxRetry)
  195.                         {
  196.                             Data[actor.AnnId] = ++n;
  197.                             GetCursorPos(out var point);    point.X -= Hud.Window.Offset.X;     point.Y -= Hud.Window.Offset.Y;
  198.                             SetCursorPos((int) actor.ScreenCoordinate.X + Hud.Window.Offset.X, (int) actor.ScreenCoordinate.Y + Hud.Window.Offset.Y);
  199.                             Thread.Sleep(1);
  200.                             mouse_event(6U, 0, 0, 0U, IntPtr.Zero);
  201.                             SetCursorPos(point.X + Hud.Window.Offset.X, point.Y + Hud.Window.Offset.Y);
  202.                         }
  203.                     }
  204.                 }
  205.             }
  206.         }
  207.     }
  208. }
Advertisement
Add Comment
Please, Sign In to add comment