Ejemplo n.º 1
0
        public static Point FromD3toScreenCoords(Vector3 objectGameLocation)
        {
            var     localAcd           = ActorCommonDataHelper.GetLocalAcd();
            Vector3 currentCharGameLoc = new Vector3()
            {
                X = localAcd.x0D0_WorldPosX, Y = localAcd.x0D4_WorldPosY, Z = localAcd.x0D8_WorldPosZ
            };

            double xd = objectGameLocation.X - currentCharGameLoc.X;
            double yd = objectGameLocation.Y - currentCharGameLoc.Y;
            double zd = objectGameLocation.Z - currentCharGameLoc.Z;

            double w = -0.515 * xd + -0.514 * yd + -0.686 * zd + 97.985;
            double X = (-1.682 * xd + 1.683 * yd + 0 * zd + 7.045e-3) / w;
            double Y = (-1.54 * xd + -1.539 * yd + 2.307 * zd + 6.161) / w;

            double width  = Engine.Current.VideoPreferences.x0C_DisplayMode.x20_Width;
            double height = Engine.Current.VideoPreferences.x0C_DisplayMode.x24_Height;

            double aspectChange = (double)((double)width / (double)height) / (double)(4.0f / 3.0f); // 4:3 = default aspect ratio

            X /= aspectChange;

            float rX = (float)((X + 1) / 2 * width);
            float rY = (float)((1 - Y) / 2 * height);

            if ((uint)rX > width || (uint)rY > height)
            {
            }

            return(new Point((int)rX, (int)rY));
        }
Ejemplo n.º 2
0
        private void FetchDangerRegions(object source = null, ElapsedEventArgs e = null)
        {
            lock (m_FetchDangerRegionsLock)
            {
                if (IsUpdating && DangerRegionsEnabled)
                {
                    try
                    {
                        IEnumerable <ActorCommonData> objects = ActorCommonDataHelper.Enumerate(x => (x.x184_ActorType == ActorType.ServerProp || x.x184_ActorType == ActorType.Monster || x.x184_ActorType == ActorType.Projectile || x.x184_ActorType == ActorType.CustomBrain) && DANGERS.Exists(d => x.x004_Name.Contains(d.name)));

                        HashSet <region_data> dangers = new HashSet <region_data>();

                        foreach (ActorCommonData obj in objects)
                        {
                            danger_data data = DANGERS.Find(d => obj.x004_Name.Contains(d.name));
                            if (data != null)
                            {
                                Vec3 pos  = new Vec3(obj.x0D0_WorldPosX, obj.x0D4_WorldPosY, obj.x0D8_WorldPosZ);
                                AABB area = new AABB(pos - new Vec3(data.range, data.range, pos.Z - 100), pos + new Vec3(data.range, data.range, pos.Z + 100));
                                dangers.Add(new region_data(area, data.move_cost_mult));
                            }
                        }

                        Regions = dangers;
                    }
                    catch (Exception)
                    {
                    }
                }

                m_FetchDangerRegionsTimer.Start();
            }
        }
Ejemplo n.º 3
0
        public static ActorCommonData GetTarget()
        {
            ActorCommonData acdTarget = null;

            var queryMonster = ActorCommonDataHelper.EnumerateMonsters().Where(x => x.x0D0_WorldPosX > 0 && x.x188_Hitpoints > 00001 && x.x190_TeamId == 10 && x.x184_ActorType == Enigma.D3.Enums.ActorType.Monster && !x.x004_Name.Contains("sandWasp"));

            var queryMonsterQuality = queryMonster
                                      .Where(x => x.x0B8_MonsterQuality > Enigma.D3.Enums.MonsterQuality.Normal)
                                      .OrderBy(x => x.x0B8_MonsterQuality);

            if (queryMonsterQuality.Any())
            {
                var acd = queryMonsterQuality.First();
                WindowHook.SetD3WindowText(string.Format("Target {0} x098_MonsterSnoId:{1}", acd.x004_Name, acd.x098_MonsterSnoId));
                return(acd);
            }


            var queryMonsterLeft = queryMonster
                                   .OrderBy(x => x.x188_Hitpoints);

            if (queryMonsterLeft.Any())
            {
                var acd = queryMonsterLeft.First();
                WindowHook.SetD3WindowText(string.Format("Target {0} x098_MonsterSnoId:{1}", acd.x004_Name, acd.x184_ActorType == Enigma.D3.Enums.ActorType.Monster));
                return(acd);
            }

            WindowHook.SetD3WindowText("Target NULL");
            return(acdTarget);
        }
Ejemplo n.º 4
0
        public static List <ActorCommonData> Get_RareUpgradableItems()
        {
            List <ActorCommonData> Items = new List <ActorCommonData>();

            try
            {
                var inventory = ActorCommonDataHelper.EnumerateInventoryItems();

                foreach (var item in inventory)
                {
                    var quality = item.GetAttributeValue(AttributeId.ItemQualityLevel);

                    if (quality >= 6 && quality <= 8) //Rare
                    {
                        Items.Add(item);
                    }
                }

                return(Items);
            }
            catch (Exception)
            {
                return(Items);
            }
        }
Ejemplo n.º 5
0
        private static bool tryCheckInventoryFull()
        {
            try
            {
                var inventoryItems = ActorCommonDataHelper.EnumerateInventoryItems();

                if (inventoryItems.Count() <= 20)
                {
                    return(false);
                }

                string error_notification_uielement = "Root.TopLayer.error_notify.error_text";
                //string inventory_full_text = "Not enough Inventory space to complete this operation.";
                string item_canot_be_picked = "That item cannot be picked up.";

                var errortext = UXHelper.GetControl <UXLabel>(error_notification_uielement);

                if (errortext.xA20_Text_StructStart_Min84Bytes == item_canot_be_picked && errortext.IsVisible())
                {
                    return(true);
                }

                return(false);
            }
            catch { return(true); }
        }
Ejemplo n.º 6
0
        public static void UpdateSwapItems()
        {
            try
            {
                if (A_Collection.Me.HeroStates.isInGame && A_Collection.D3UI.isOpenInventory)
                {
                    List <GearSwapItem> GearSwaps;
                    lock (A_Collection.Me.GearSwap.GearSwaps) GearSwaps = A_Collection.Me.GearSwap.GearSwaps.ToList();

                    bool CollectionChanged = false;

                    var HeroId       = A_Collection.Me.HeroGlobals.HeroID;
                    var CurrentSwaps = GearSwaps.Where(x => x.HeroID == HeroId).ToList();

                    List <GearSwapItem> Buffer = new List <GearSwapItem>();

                    if (CurrentSwaps.Count() > 0)
                    {
                        var InventoryItems = ActorCommonDataHelper.EnumerateInventoryItems();


                        foreach (var Item in CurrentSwaps)
                        {
                            var tryGetEntry =
                                InventoryItems.FirstOrDefault(
                                    x => x.GetAttributeValue(Enigma.D3.Enums.AttributeId.Seed) == Item.ItemSeed);

                            if (tryGetEntry != null)
                            {
                                Buffer.Add(new GearSwapItem(HeroId, Item.SwapId, Item.ItemSeed,
                                                            tryGetEntry.x118_ItemSlotX, tryGetEntry.x11C_ItemSlotY, Item.ItemSize));

                                if (Item.ItemSlotX != tryGetEntry.x118_ItemSlotX ||
                                    Item.ItemSlotY != tryGetEntry.x11C_ItemSlotY)
                                {
                                    CollectionChanged = true;
                                }
                            }
                            else
                            {
                                CollectionChanged = true;
                            }
                        }

                        if (CollectionChanged)
                        {
                            A_Collection.Me.GearSwap.GearSwaps = Buffer;

                            A_Tools.T_ExternalFile.GearSwaps.Save();
                        }
                    }
                }
            }
            catch { }
        }
Ejemplo n.º 7
0
 private void DumpAttributeDescriptors()
 {
     var attribDescriptors = Engine.Current.AttributeDescriptors;
     var acd = ActorCommonDataHelper.GetLocalAcd();
     var q   = acd.EnumerateAttributes().Select(a => new { Id = a.x04_Key & 0xFFF, Key = a.x04_Key, Mod = (a.x04_Key >> 12), Value = a.x08_Value, Descriptor = attribDescriptors.Single(d => d.x00_Id == (a.x04_Key & 0xFFF)) });
     var str = string.Join(Environment.NewLine, q.Select(a => string.Join("\t",
                                                                          a.Id.ToString().PadRight(5),
                                                                          "0x" + a.Key.ToString("X8"),
                                                                          (a.Mod == 0xFFFFF ? "-1" : a.Mod.ToString()).PadRight(5),
                                                                          "0x" + a.Mod.ToString("X8").Substring(3),
                                                                          a.Descriptor.x1C_Name,
                                                                          a.Descriptor.x10_DataType == 1 ? a.Value.Int32 : a.Value.Single)));
 }
Ejemplo n.º 8
0
        private static bool IsItemSeedEquipped(double ItemSeed)
        {
            try
            {
                var container   = ActorCommonDataHelper.EnumerateEquippedItems();
                var tryGetEntry = container.FirstOrDefault(x => x.GetAttributeValue(Enigma.D3.Enums.AttributeId.Seed) == ItemSeed);

                if (tryGetEntry != null)
                {
                    return(true);
                }
                return(false);
            }
            catch { return(false); }
        }
Ejemplo n.º 9
0
        //private static bool IsValidMonster(ActorCommonData acd)
        //{
        //    return acd.x188_Hitpoints > 0.00001 && // seems to be lower limit for what D3 considers dead
        //        (acd.x194_Flags_Is_Trail_Proxy_Etc & 1) == 0 && // this removes most weird actors
        //        acd.x190_TeamId == 10; // = hostile
        //}

        public void GetAllMonsters()
        {
            var engine = Engine.Create();
            var acds   = new ActorCommonData[0];
            var pt     = System.Diagnostics.Stopwatch.StartNew();

            for (int i = 0; i < 1000; i++)
            {
                acds = ActorCommonDataHelper.EnumerateMonsters().ToArray();
            }
            pt.Stop();
            Console.WriteLine("Getting all monster ACDs 1000 times took " + pt.Elapsed.TotalMilliseconds.ToString("0.00") + "ms");
            Console.WriteLine("Max update frequency: " + (1000d / (pt.Elapsed.TotalMilliseconds / 1000)).ToString("0") + "Hz");
            Console.WriteLine("Number of ACDs: " + ActorCommonDataHelper.Enumerate(a => true).Count());
            Console.ReadLine();
        }
Ejemplo n.º 10
0
        public static async Task <bool> MoveToPosWithNavMeshAsync(SharpDX.Vector3 vecDest, int NearDistance = 50)
        {
            if (Nav.D3.Navmesh.Current == null)
            {
                Nav.D3.Navmesh.Create(Enigma.D3.Engine.Current, new Nav.ExploreEngine.Nearest());
            }

            var localAcd = ActorCommonDataHelper.GetLocalAcd();
            var distance = vecDest.Distance(); // (Math.Pow(localAcd.x0D0_WorldPosX - vecDest.X, 2) + Math.Pow(localAcd.x0D4_WorldPosY - vecDest.Y, 2));

            var minDistanceReached = distance;
            var dtDistanceReached  = DateTime.Now;

            DateTime dtTimeout = DateTime.Now;

            while (distance > NearDistance)
            {
                if (DateTime.Now > dtTimeout.AddSeconds(30) || DateTime.Now > dtDistanceReached.AddSeconds(10))
                {
                    return(false);
                }

                SharpDX.Vector2 curVector  = localAcd.ToSharpDXVector2(); // new SharpDX.Vector2(localAcd.x0D0_WorldPosX, localAcd.x0D4_WorldPosY);
                SharpDX.Vector2 destVector = new SharpDX.Vector2(vecDest.X, vecDest.Y);

                // Update current player position.
                Nav.D3.Navmesh.Current.Navigator.CurrentPos = localAcd.ToNavVec3(); // new Nav.Vec3(localAcd.x0D0_WorldPosX, localAcd.x0D4_WorldPosY, localAcd.x0D8_WorldPosZ);

                // Update destination. You can keep setting the same value there is internal check if destination has actually changed.
                // This destination overrides any internal destinations (including exploration). When You just want to explore You do
                // not need to set any destination. It will be set automatically.
                Nav.D3.Navmesh.Current.Navigator.Destination = new Nav.Vec3(vecDest.X, vecDest.Y, vecDest.Z);

                // Get current destination.
                Nav.Vec3 goToPosition = Nav.D3.Navmesh.Current.Navigator.GoToPosition;
                while (goToPosition.IsEmpty)
                {
                    await Task.Delay(10);
                }

                SharpDX.Vector3 goToPositionVector = new SharpDX.Vector3(goToPosition.X, goToPosition.Y, goToPosition.Z);
                await MoveToPosAsync(goToPositionVector);
            }

            return(true);
        }
        public static double Get_AvailableMaterial_Convert(string inputQuality, out List <ActorCommonData> Materials)
        {
            Materials = new List <ActorCommonData>();
            try
            {
                int ConvertMaterialCost   = 100;
                int ConvertMaterialDBCost = 1;
                int CountMaterial         = 0;

                var             inventory = ActorCommonDataHelper.EnumerateItems().ToList();
                ActorCommonData acd;

                switch (inputQuality)
                {
                case "normal":
                    CountMaterial = GetMaterial_ReusableParts(inventory, out acd);
                    Materials.Add(acd);
                    break;

                case "magic":
                    CountMaterial = GetMaterial_ArcaneDust(inventory, out acd);
                    Materials.Add(acd);
                    break;

                case "rare":
                    CountMaterial = GetMaterial_VeiledCrystal(inventory, out acd);
                    Materials.Add(acd);
                    break;
                }

                int Count_DB = GetMaterial_DeathBreath(inventory, out acd);
                Materials.Add(acd);

                double   Enchants_DB      = Count_DB / ConvertMaterialDBCost;
                double   Enchants         = CountMaterial / ConvertMaterialCost;
                double[] x                = new[] { Enchants_DB, Enchants };
                double   possibleEnchants = x.OrderBy(y => y).First();

                return(Enchants);
            }
            catch (Exception)
            {
                return(0);
            }
        }
Ejemplo n.º 12
0
        public static List <double> GetInventoryChanges()
        {
            try
            {
                List <double> Changes_Seeds = new List <double>();

                bool InventoryChanged = false;

                List <ActorCommonData> Inventory_Buffer = ActorCommonDataHelper.EnumerateInventoryItems().ToList();

                while (true)
                {
                    var Inventory = ActorCommonDataHelper.EnumerateInventoryItems().ToList();

                    foreach (var item in Inventory)
                    {
                        var tryGetEntry = Inventory_Buffer.FirstOrDefault(x => x.x000_Id == item.x000_Id);

                        if (tryGetEntry == null)
                        {
                            InventoryChanged = true;

                            Changes_Seeds.Add(item.GetAttributeValue(Enigma.D3.Enums.AttributeId.Seed));
                        }
                    }

                    if (InventoryChanged)
                    {
                        break;
                    }

                    Inventory_Buffer = Inventory;

                    Thread.Sleep(50);
                }

                return(Changes_Seeds);
            }
            catch { return(new List <double>()); }
        }
Ejemplo n.º 13
0
        public static async Task <bool> MoveToPosAsync(SharpDX.Vector3 vecDest, int NearDistance = 50)
        {
            var localAcd = ActorCommonDataHelper.GetLocalAcd();
            var distance = (Math.Pow(localAcd.x0D0_WorldPosX - vecDest.X, 2) + Math.Pow(localAcd.x0D4_WorldPosY - vecDest.Y, 2));

            var minDistanceReached = distance;
            var dtDistanceReached  = DateTime.Now;

            DateTime dtTimeout = DateTime.Now;

            while (distance > NearDistance)
            {
                if (DateTime.Now > dtTimeout.AddSeconds(30) || DateTime.Now > dtDistanceReached.AddSeconds(10))
                {
                    return(false);
                }

                SharpDX.Vector2 curVector  = new SharpDX.Vector2(localAcd.x0D0_WorldPosX, localAcd.x0D4_WorldPosY);
                SharpDX.Vector2 destVector = new SharpDX.Vector2(vecDest.X, vecDest.Y);

                distance = (Math.Pow(localAcd.x0D0_WorldPosX - vecDest.X, 2) + Math.Pow(localAcd.x0D4_WorldPosY - vecDest.Y, 2));
                var minExtendValue = Math.Min(10f, float.Parse(distance.ToString(), CultureInfo.InvariantCulture.NumberFormat));

                var vecNormalized = curVector.Extend(destVector, minExtendValue).To3D();

                System.Drawing.Point screenPoint = D3ToScreen.FromD3toScreenCoords(vecNormalized);

                MouseEvents.RightClick(screenPoint.X, screenPoint.Y);
                await Task.Delay(new Random().Next(100, 250));

                if (distance < minDistanceReached)
                {
                    minDistanceReached = distance;
                    dtDistanceReached  = DateTime.Now;
                }
            }

            return(true);
        }
Ejemplo n.º 14
0
        private static int[] Costs_UpgradeRare = new int[] { 25, 50, 50, 50 }; // Deaths Breath | Reusable Parts | Arcane Dust | Veiled Crystal

        public static double Get_AvailableEnchants_UpgradeRare(out List <ActorCommonData> Materials)
        {
            Materials = new List <ActorCommonData>();
            try
            {
                var inventory = ActorCommonDataHelper.EnumerateInventoryItems().ToList();

                ActorCommonData acd;

                int Count_DB = GetMaterial_DeathBreath(inventory, out acd);
                Materials.Add(acd);

                int Count_RP = GetMaterial_ReusableParts(inventory, out acd);
                Materials.Add(acd);

                int Count_AD = GetMaterial_ArcaneDust(inventory, out acd);
                Materials.Add(acd);

                int Count_VC = GetMaterial_VeiledCrystal(inventory, out acd);
                Materials.Add(acd);

                double Enchants_DB = Count_DB / Costs_UpgradeRare[0];
                double Enchants_RP = Count_RP / Costs_UpgradeRare[1];
                double Enchants_AD = Count_AD / Costs_UpgradeRare[2];
                double Enchants_VC = Count_VC / Costs_UpgradeRare[3];

                double[] x = new[] { Enchants_DB, Enchants_RP, Enchants_AD, Enchants_VC };

                double possibleEnchants = x.OrderBy(y => y).First();

                return(possibleEnchants);
            }
            catch (Exception)
            {
                return(0);
            }
        }
        public static List <ActorCommonData> Get_Items(string inputQuality)
        {
            int  QualityRange1 = 0;
            int  QualityRange2 = 0;
            bool ancient       = false;
            bool primal        = false;

            List <ActorCommonData> Items = new List <ActorCommonData>();

            switch (inputQuality)
            {
            case "normal":
                QualityRange1 = 0;
                QualityRange2 = 2;
                break;

            case "magic":
                QualityRange1 = 3;
                QualityRange2 = 5;
                break;

            case "rare":
                QualityRange1 = 6;
                QualityRange2 = 8;
                break;

            case "legendary":
                QualityRange1 = 9;
                QualityRange2 = 9;
                break;

            case "ancient":
                QualityRange1 = 9;
                QualityRange2 = 9;
                ancient       = true;
                break;

            case "primal":
                QualityRange1 = 9;
                QualityRange2 = 9;
                primal        = true;
                break;
            }

            try
            {
                var inventory = ActorCommonDataHelper.EnumerateInventoryItems();

                foreach (var item in inventory)
                {
                    // Ignore these materials (these have "normal" quality)
                    switch (item.x090_ActorSnoId)
                    {
                    case 361988:     //Crafting_Legendary_05
                    case 361989:     //Crafting_Looted_Reagent_05
                    case 361986:     //Crafting_Rare_05
                    case 361985:     //Crafting_Magic_05
                    case 361984:     //Crafting_AssortedParts_05
                    case 137958:     //CraftingMaterials_Flippy_Global
                    case 365020:     //CraftingReagent_Legendary_Set_Borns_X1
                    case 364281:     //CraftingReagent_Legendary_Set_Cains_X1
                    case 364290:     //CraftingReagent_Legendary_Set_Demon_X1
                    case 364305:     //CraftingReagent_Legendary_Set_Hallowed_X1
                    case 364975:     //CraftingReagent_Legendary_Set_CaptainCrimsons_X1
                    case 364725:     //DemonOrgan_Diablo_x1
                    case 364723:     //DemonOrgan_Ghom_x1
                    case 364724:     //DemonOrgan_SiegeBreaker_x1
                    case 364722:     //DemonOrgan_SkeletonKing_x1
                    case 366949:     //InfernalMachine_Diablo_x1
                    case 366947:     //InfernalMachine_Ghom_x1
                    case 366948:     //InfernalMachine_SiegeBreaker_x1
                    case 366946:     //InfernalMachine_SkeletonKing_x1
                    case 359504:     //HoradricRelic
                    case 437414:     //Amethyst_15 Marquise Amethyst
                    case 437415:     //Amethyst_16 Imperial Amethyst
                    case 437459:     //Ruby_15 Marquise Ruby
                    case 437460:     //Ruby_16 Imperial Ruby
                    case 437481:     //x1_Diamond_06 Marquise Diamond
                    case 437482:     //x1_Diamond_07 Imperial Diamond
                    case 437448:     //x1_Emerald_06 Marquise Emerald
                    case 437449:     //x1_Emerald_07 Imperial Emerald
                    case 437469:     //x1_Topaz_06 Marquise Topaz
                    case 437470:     //x1_Topaz_07 Imperial Topaz
                        break;

                    default:
                        var name    = item.x004_Name;                             // not needed but nice for debug
                        var quality = item.GetAttributeValue(AttributeId.ItemQualityLevel);
                        if (quality >= QualityRange1 && quality <= QualityRange2) // Magic
                        {
                            if (ancient)
                            {
                                var ancientRank = item.GetAttributeValue(AttributeId.AncientRank);
                                if (ancientRank == 1)
                                {
                                    Items.Add(item);
                                }
                            }
                            else if (primal)
                            {
                                var ancientRank = item.GetAttributeValue(AttributeId.AncientRank);
                                if (ancientRank == 2)
                                {
                                    Items.Add(item);
                                }
                            }
                            else
                            {
                                Items.Add(item);
                            }
                        }
                        break;
                    }
                }
                return(Items);
            }
            catch (Exception)
            {
                return(Items);
            }
        }
Ejemplo n.º 16
0
        public void Update(Engine engine)
        {
            try
            {
                if (!IsLocalActorValid(engine))
                {
                    return;
                }

                if (!IsObjectManagerOnNewFrame(engine))
                {
                    return;
                }

                var itemsToAdd = new List <IMapMarker>();

                var acds = ActorCommonData.Container;
                if (acds == null)
                {
                    Trace.TraceError("ACDs == null");
                }
                else
                {
                    var bufferSizePreDump = _acdsBuffer.Length;

                    acds.TakeSnapshot();
                    var dump = acds.GetBufferDump(ref _acdsBuffer);

                    var bufferSizePostDump = _acdsBuffer.Length;
                    if (bufferSizePostDump < bufferSizePreDump)
                    {
                        _minimapItems.Clear();
                        _minimapItemsDic.Clear();
                        _playerAcd = null;
                        return;
                    }

                    // Must have a local ACD to base coords on.
                    if (_playerAcd == null)
                    {
                        var playerAcdId = ActorCommonDataHelper.GetLocalAcd().x000_Id;

                        foreach (var item in dump)
                        {
                            var acdId = BitConverter.ToInt32(_acdsBuffer, item.BufferOffset + 0x00);
                            if (acdId == playerAcdId)
                            {
                                _playerAcd = item.Create();
                            }
                        }

                        if (_playerAcd == null)
                        {
                            return;
                        }
                    }

                    var firstFreeAcd = acds.x114_Free;
                    if (firstFreeAcd != _firstFreeAcd)
                    {
                        foreach (var item in dump)
                        {
                            if (_minimapItemsDic.ContainsKey(item.Address))
                            {
                                continue;
                            }
                            var acd = item.Create();

                            int acdId = acd.x000_Id;
                            if (acdId == -1)
                            {
                                continue;
                            }

                            var actorSnoId = acd.x090_ActorSnoId;
                            if (_ignoredSnoIds.Contains(actorSnoId))
                            {
                                continue;
                            }

                            if (!_minimapItemsDic.ContainsKey(acd.Address))
                            {
                                bool ignore;
                                var  minimapItem = MapMarkerFactory.Create(acd, out ignore);
                                if (ignore)
                                {
                                    _ignoredSnoIds.Add(actorSnoId);
                                }
                                else if (minimapItem != null)
                                {
                                    _minimapItemsDic.Add(acd.Address, minimapItem);
                                    itemsToAdd.Add(minimapItem);
                                }
                            }
                        }
                    }

                    _firstFreeAcd = firstFreeAcd;
                    acds.FreeSnapshot();
                }

                UpdateUI(itemsToAdd);
            }
            catch (Exception exception)
            {
                OnUpdateException(exception);
            }
        }
Ejemplo n.º 17
0
        public static void tryGearSwap()
        {
            try
            {
                isSwaping = true;

                bool CollectionChanged = false;

                // Save Current Cursor Pos
                Point getCursorPos = new Point((int)Cursor.Position.X, (int)Cursor.Position.Y);

                // Get Current Pressed SwapHotkey Id
                int  Current_SwapId = A_Collection.Me.GearSwap.Selected_SwapId;
                long HeroId         = A_Collection.Me.HeroGlobals.HeroID;

                // Get Collection of Items to Swap
                lock (A_Collection.Me.GearSwap.GearSwaps)
                {
                    var GearSwap = A_Collection.Me.GearSwap.GearSwaps.ToList().Where(x => x.HeroID == HeroId && x.SwapId == Current_SwapId).ToList();


                    if (GearSwap.Count() > 0)
                    {
                        // Check If Inventory is opened otherwise Open it
                        if (InventoryOpened())
                        {
                            int _Ring_Counter     = 0;
                            int _1HWeapon_Counter = 0;

                            for (int i = 0; i < GearSwap.Count(); i++)
                            {
                                // Get ItemType
                                A_Enums.ItemTypes ItemType = GetItemTypeByItemSeed(GearSwap[i].ItemSeed);

                                if (ItemType == A_Enums.ItemTypes.Ring)
                                {
                                    _Ring_Counter = _Ring_Counter + 1;
                                }
                                if (ItemType == A_Enums.ItemTypes._1HWeapon)
                                {
                                    _1HWeapon_Counter = _1HWeapon_Counter + 1;
                                }

                                // Get UIRect of current Item to Swap
                                UIRect ItemUIRect = A_Collection.D3UI.InventoryItemUIRectMesh.FirstOrDefault(x => x.Key.ItemSlotX == GearSwap[i].ItemSlotX && x.Key.ItemSlotY == GearSwap[i].ItemSlotY).Value;

                                // Buffer Current Equipped Items before Swaping Item
                                var           Inventory_Buffer    = ActorCommonDataHelper.EnumerateInventoryItems();
                                List <double> Pre_Inventory_Seeds = new List <double>();
                                foreach (var Item in Inventory_Buffer)
                                {
                                    double Seed = Item.GetAttributeValue(Enigma.D3.Enums.AttributeId.Seed);
                                    Pre_Inventory_Seeds.Add(Seed);
                                }

                                // Right Click on Random Point in Items UIRect
                                bool IsAltSwap = false;

                                if (ItemType == A_Enums.ItemTypes._1HWeapon && _1HWeapon_Counter >= 2)
                                {
                                    IsAltSwap = true;

                                    InputSimulator.SimulateKeyDown(VirtualKeyCode.LMENU);
                                }
                                if (ItemType == A_Enums.ItemTypes.Ring && _Ring_Counter >= 2)
                                {
                                    IsAltSwap = true;

                                    InputSimulator.SimulateKeyDown(VirtualKeyCode.LMENU);
                                }

                                while (!IsItemSeedEquipped(GearSwap[i].ItemSeed) && A_Tools.T_D3UI.UIElement.isVisible(A_Enums.UIElements.Inventory))
                                {
                                    A_Tools.InputSimulator.IS_Mouse.RightCLick((int)ItemUIRect.Left, (int)ItemUIRect.Top, (int)ItemUIRect.Right, (int)ItemUIRect.Bottom);
                                    Thread.Sleep(250);
                                }

                                if (IsAltSwap)
                                {
                                    InputSimulator.SimulateKeyUp(VirtualKeyCode.LMENU);
                                }

                                // Equipped Items after Swaping
                                var           Inventory           = ActorCommonDataHelper.EnumerateInventoryItems();
                                List <double> Cur_Inventory_Seeds = new List <double>();
                                foreach (var Item in Inventory)
                                {
                                    double Seed = Item.GetAttributeValue(Enigma.D3.Enums.AttributeId.Seed);
                                    Cur_Inventory_Seeds.Add(Seed);
                                }

                                // Diff Equipped and Equipped_Buffer and add Swapped Item(s) to GearSwap
                                foreach (var seed in Pre_Inventory_Seeds)
                                {
                                    if (!Cur_Inventory_Seeds.Contains(seed))
                                    {
                                        //Console.WriteLine("Inventory Items changed! Item removed!");

                                        var TryGetEntry = A_Collection.Me.GearSwap.GearSwaps.FirstOrDefault(x => x.HeroID == HeroId && x.SwapId == Current_SwapId && x.ItemSeed == seed);

                                        if (TryGetEntry != null)
                                        {
                                            A_Collection.Me.GearSwap.GearSwaps.Remove(TryGetEntry);

                                            CollectionChanged = true;
                                        }
                                    }
                                }
                                foreach (var seed in Cur_Inventory_Seeds)
                                {
                                    if (!Pre_Inventory_Seeds.Contains(seed))
                                    {
                                        //Console.WriteLine("Inventory Items changed! Item added!");

                                        var TryGetEntry = A_Collection.Me.GearSwap.GearSwaps.FirstOrDefault(x => x.HeroID == HeroId && x.SwapId == Current_SwapId && x.ItemSeed == seed);

                                        if (TryGetEntry == null)
                                        {
                                            var item =
                                                Inventory.FirstOrDefault(
                                                    x => x.GetAttributeValue(AttributeId.Seed) == seed);

                                            A_Collection.Me.GearSwap.GearSwaps.Add(new GearSwapItem(HeroId, Current_SwapId, seed, item.x118_ItemSlotX, item.x11C_ItemSlotY, GearSwap[i].ItemSize));

                                            CollectionChanged = true;
                                        }
                                    }
                                }

                                if (CollectionChanged)
                                {
                                    A_Tools.T_ExternalFile.GearSwaps.Save();
                                }
                            }
                        }
                    }


                    // Close Inventory
                    CloseInventory();

                    // Restore Cursor Pos to previous Pos
                    Cursor.Position = getCursorPos;



                    isSwaping = false;
                }
            }
            catch { isSwaping = false; }
        }
Ejemplo n.º 18
0
        private static ActorCommonData GetSelectedItemAcd(int AcdId)
        {
            var InventoryItemContainer = ActorCommonDataHelper.EnumerateInventoryItems();

            return(InventoryItemContainer.FirstOrDefault(x => x.x000_Id == AcdId));
        }
Ejemplo n.º 19
0
        private static A_Enums.ItemTypes GetItemTypeByItemSeed(double ItemSeed)
        {
            try
            {
                var InventoryItems = ActorCommonDataHelper.EnumerateInventoryItems();

                string ItemName = InventoryItems.FirstOrDefault(x => x.GetAttributeValue(Enigma.D3.Enums.AttributeId.Seed) == ItemSeed).x004_Name.ToLower();

                if (ItemName.Contains("x1_"))
                {
                    ItemName = ItemName.TrimStart('x', '1', '_');
                }
                if (ItemName.Contains("p2_"))
                {
                    ItemName = ItemName.TrimStart('p', '2', '_');
                }

                // 1HWeapons

                if (ItemName.StartsWith("sword"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("axe"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("dagger"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("wand"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("ceremonial"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("fistweapon"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("handxbow"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("mace"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }
                if (ItemName.StartsWith("mightyweapon"))
                {
                    return(A_Enums.ItemTypes._1HWeapon);
                }

                // Ring

                if (ItemName.StartsWith("ring"))
                {
                    return(A_Enums.ItemTypes.Ring);
                }

                // Amulet

                if (ItemName.StartsWith("amulet"))
                {
                    return(A_Enums.ItemTypes.Amulet);
                }

                return(A_Enums.ItemTypes.Armor);
            }
            catch { return(A_Enums.ItemTypes.Other); }
        }
Ejemplo n.º 20
0
 private static bool IsStillOnGround(int ActorId)
 {
     return(ActorCommonDataHelper.EnumerateGroundItems().FirstOrDefault(x => x.x08C_ActorId == ActorId) != null);
 }
Ejemplo n.º 21
0
 public static SharpDX.Vector3 To3D(this SharpDX.Vector2 v)
 {
     return(new SharpDX.Vector3(v.X, v.Y, ActorCommonDataHelper.GetLocalAcd().x0D8_WorldPosZ));
 }