Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Turbo.Plugins.Default;
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using SharpDX.DirectInput;
- using System.Runtime.InteropServices;
- using System.Threading;
- using System.Drawing;
- namespace Turbo.Plugins.Ez
- {
- public class OpenAndTake : BasePlugin, IAfterCollectHandler, INewAreaHandler
- {
- [DllImport("user32.dll")]
- public static extern bool SetCursorPos(int x, int y);
- [DllImport("user32.dll")]
- public static extern bool GetCursorPos(out Point point);
- [DllImport("user32.dll")]
- private static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, IntPtr dwExtraInfo);
- private IUiElement ChatUI;
- private Dictionary<uint,int> Data { get; set; } = new Dictionary<uint, int>();
- private readonly HashSet<ActorSnoEnum> StoneList = new HashSet<ActorSnoEnum>()
- {
- ActorSnoEnum._trdun_cath_floorspawner_01,
- ActorSnoEnum._x1_westm_graveyard_ground_clicky,
- ActorSnoEnum._x1_westm_ground_clicky,
- ActorSnoEnum._x1_catacombs_ground_clicky,
- ActorSnoEnum._x1_fortress_ground_clicky,
- ActorSnoEnum._x1_pand_ext_ground_clicky,
- ActorSnoEnum._x1_bog_ground_clicky,
- ActorSnoEnum._x1_abattoir_ground_clicky,
- ActorSnoEnum._x1_pand_hexmaze_ground_clicky,
- ActorSnoEnum._p6_moor_ground_clicky,
- ActorSnoEnum._p6_church_groundclicky_02,
- };
- private readonly HashSet<ActorSnoEnum> DoorsIdsBlackList = new HashSet<ActorSnoEnum>() // From Jack plugin
- {
- ActorSnoEnum._trout_highlands_goatmen_chokepoint_gate, // A1 , Tierras Altas del Sur
- ActorSnoEnum._cald_merchant_cart, // A2 to belial
- ActorSnoEnum._a2dun_cald_exit_gate, // A2 to belial
- ActorSnoEnum._a2dunswr_gates_causeway_gates_non_op, // A2 to belial
- ActorSnoEnum._a2dun_cald_belial_acid_attack, // A2 to belial
- ActorSnoEnum._a2dun_cald_belial_room_gate_a, // A2 to belial
- ActorSnoEnum._trout_cultists_summoning_portal_b, // A2 Alcarnus
- ActorSnoEnum._caout_target_dummy, // A2 City
- ActorSnoEnum._start_location_team_0, // A2 City
- ActorSnoEnum._a3dun_crater_st_demon_chainpylon_fire_azmodan, // A3 rakkis crossing
- ActorSnoEnum._a3dun_keep_bridge, // A3 rakkis crossing
- ActorSnoEnum._a3dun_rmpt_frozendoor_a, // A3 stonefort
- ActorSnoEnum._catapult_a3dunkeep_warmachines_snow_firing, // A3 battlefields
- ActorSnoEnum._x1_crusader_trebuchet_pending_tar,
- ActorSnoEnum._event_1000monster_portal,
- ActorSnoEnum._a2dun_zolt_sandbridgebase_bossfight,
- ActorSnoEnum._px_highlands_camp_resurgentcult_portal,
- ActorSnoEnum._x1_bog_catacombsportal_beaconloc,
- ActorSnoEnum._x1_malthael_boss_orb_collapse, // malthael fight
- ActorSnoEnum._caout_oasis_mine_entrance_a, // check this one, maybe a bounty
- ActorSnoEnum._trout_leor_painting, // leoric manor
- ActorSnoEnum._a4dun_sigil_room_platform_a, // Holy Sanctum
- ActorSnoEnum._a3dun_rmpt_catapult_follower_event_gate, // a3 catapult event
- ActorSnoEnum._a1dun_leor_jail_door_superlocked_a_fake,
- ActorSnoEnum._cos_pet_mimic_01,
- ActorSnoEnum._shoulderpads_norm_base_flippy, // ???
- ActorSnoEnum._x1_abattoir_barricade_solid,
- ActorSnoEnum._x1_fortress_floatrubble_a,
- ActorSnoEnum._a3dun_keep_barrel_snow_no_skirt, // Sturdy Barrel
- ActorSnoEnum._x1_fortress_crystal_prison_shield,
- ActorSnoEnum._x1_westm_railing_a_01_piece1,
- ActorSnoEnum._x1_pand_hexmaze_corpse, // Corpse
- ActorSnoEnum._dh_companion_runec,
- ActorSnoEnum._loottype2_tristramvillager_male_c_corpse_01, // Dead Villager
- ActorSnoEnum._uber_bossworld3_st_demon_chainpylon_fire_azmodan, // uber realm
- ActorSnoEnum._trdun_crypt_skeleton_king_throne_parts, // uber realm
- ActorSnoEnum._double_crane_a_caout_miningevent_chest_minievent, // A2 howling plateau event
- ActorSnoEnum._p6_church_bloodchannel_a, // A2 Temple of Unborn 1
- ActorSnoEnum._a4dun_sigil_tile_invis_wall, // A4 Bounty "Watch Your Step"
- ActorSnoEnum._p1_tgoblin_gate, // Greed door
- ActorSnoEnum._p1_tgoblin_vault_door, // Vault door
- ActorSnoEnum._x1_urzael_soundspawner, // Urzael fight
- ActorSnoEnum._x1_urzael_soundspawner_02, // Urzael fight
- ActorSnoEnum._x1_urzael_soundspawner_03, // Urzael fight
- ActorSnoEnum._x1_urzael_soundspawner_04, // Urzael fight
- ActorSnoEnum._x1_westm_ex,
- ActorSnoEnum._trout_cath_entrance_door,
- };
- private long msLapseAction { get; set; } = 0;
- private long msLapseMin { get; set; } = 150;
- private int maxRetry { get; set; } = 20;
- public Keys KeyNoOperate { get; set; }
- public int maxGR { get; set; }
- public float addToRadius { get; set; }
- public float distancePowerUp { get; set; }
- public bool Door { get; set; }
- public bool Chest { get; set; }
- public bool ChestNormal { get; set; }
- public bool DeadBody { get; set; }
- public bool Rack { get; set; }
- public bool Pool { get; set; }
- public bool Shrine { get; set; }
- public bool Stone { get; set; }
- public bool ChestLore { get; set; }
- public bool Switch { get; set; }
- public void OnNewArea(bool newGame, ISnoArea area)
- {
- if (area.IsTown)
- {
- Data.Clear();
- }
- }
- public OpenAndTake()
- {
- Enabled = true;
- KeyNoOperate = Keys.C;
- maxGR = 110;
- addToRadius = 4.2f;
- distancePowerUp = 12.0f;
- Pool = true;
- Shrine = true;
- Door = true;
- ChestNormal = true;
- Chest = true;
- ChestLore = true;
- Rack = true;
- DeadBody = true;
- Stone = true;
- Switch = true;
- }
- public override void Load(IController hud)
- {
- base.Load(hud);
- ChatUI = Hud.Render.GetUiElement("Root.NormalLayer.chatentry_dialog_backgroundScreen.chatentry_content.chat_editline");
- }
- private bool CharacterCannotCast()
- {
- return Hud.Game.IsPaused
- || Hud.Game.IsInTown
- || Hud.Game.IsLoading
- || Hud.Game.Me.IsDead
- || !Hud.Window.IsForeground
- || Hud.Game.MapMode != MapMode.Minimap
- || ChatUI.Visible
- || Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_AxeOperateGizmo.Sno)
- || Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_ActorInvulBuff.Sno)
- || Hud.Game.Me.AnimationState == AcdAnimationState.CastingPortal
- || Hud.Game.Me.AnimationState == AcdAnimationState.Transform
- || Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.Generic_ActorGhostedBuff.Sno)
- ;
- }
- public void AfterCollect()
- {
- if (!Hud.Game.IsInGame) return;
- if (Hud.Game.CurrentRealTimeMilliseconds > msLapseAction)
- {
- msLapseAction = Hud.Game.CurrentRealTimeMilliseconds + msLapseMin;
- if (Hud.Game.Me.InGreaterRiftRank > maxGR || Hud.Input.IsKeyDown(KeyNoOperate) || CharacterCannotCast()) return;
- 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);
- if (actor != null)
- {
- var operate = (actor.SnoActor.Kind == ActorKind.Shrine)?(
- (actor.GizmoType == GizmoType.HealingWell)? false
- :(actor.GizmoType == GizmoType.PoolOfReflection)? (Pool && (Hud.Game.Me.Powers.BuffIsActive(488011)? Hud.Game.Me.BonusPoolRemaining == 0 : Hud.Game.NumberOfPlayersInGame == 1))
- :( actor.GizmoType == GizmoType.PowerUp && Shrine // 318820 , Hud.Sno.SnoPowers.NemesisBracers.Sno
- && ( Hud.Game.NumberOfPlayersInGame == 1 || Hud.Game.Me.Powers.BuffIsActive(318820) || !Hud.Game.Players.Any(p => p.Powers.BuffIsActive(318820)) )
- )
- )
- :(actor.SnoActor.Kind == ActorKind.Chest)? Chest
- :(actor.SnoActor.Kind == ActorKind.ChestNormal)? ChestNormal
- :(actor.SnoActor.Kind == ActorKind.ArmorRack || actor.SnoActor.Kind == ActorKind.WeaponRack)? Rack
- :(actor.SnoActor.Kind == ActorKind.DeadBody)? DeadBody
- :(actor.SnoActor.Kind != ActorKind.None)? false
- :(actor.GizmoType == GizmoType.Door)? (Door && !DoorsIdsBlackList.Contains(actor.SnoActor.Sno))
- :(actor.GizmoType == GizmoType.LoreChest)? ChestLore
- :(actor.GizmoType == GizmoType.Switch)? Switch
- :(Stone && StoneList.Contains(actor.SnoActor.Sno))
- ;
- if (operate)
- {
- if (!Data.TryGetValue(actor.AnnId, out int n) || n < maxRetry)
- {
- Data[actor.AnnId] = ++n;
- GetCursorPos(out var point); point.X -= Hud.Window.Offset.X; point.Y -= Hud.Window.Offset.Y;
- SetCursorPos((int) actor.ScreenCoordinate.X + Hud.Window.Offset.X, (int) actor.ScreenCoordinate.Y + Hud.Window.Offset.Y);
- Thread.Sleep(1);
- mouse_event(6U, 0, 0, 0U, IntPtr.Zero);
- SetCursorPos(point.X + Hud.Window.Offset.X, point.Y + Hud.Window.Offset.Y);
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment