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)); }
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(); } }
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); }
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); } }
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); } }
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 { } }
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))); }
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); } }
//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(); }
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); } }
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>()); } }
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); }
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); } }
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); } }
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; } }
private static ActorCommonData GetSelectedItemAcd(int AcdId) { var InventoryItemContainer = ActorCommonDataHelper.EnumerateInventoryItems(); return(InventoryItemContainer.FirstOrDefault(x => x.x000_Id == AcdId)); }
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); } }
private static bool IsStillOnGround(int ActorId) { return(ActorCommonDataHelper.EnumerateGroundItems().FirstOrDefault(x => x.x08C_ActorId == ActorId) != null); }
public static SharpDX.Vector3 To3D(this SharpDX.Vector2 v) { return(new SharpDX.Vector3(v.X, v.Y, ActorCommonDataHelper.GetLocalAcd().x0D8_WorldPosZ)); }