private void PrintActiveItems() { var avatars = Game.Instance?.Simulation?.Avatars; if (avatars == null || avatars.Count <= 0) { Logger.Debug("Unable to find any avatars!"); return; } var items = new List <ItemData>(); InventoryExt.GetItems(avatars[0], items, true); foreach (var item in items) { Logger.Debug($"{item.guid} - {item.Hint} - {item.name}"); } foreach (var slot in Player.Inventory.EquipmentSlots) { var data = (ItemData)slot?.equipment?.Entity?.Data; if (data == null) { Logger.Debug($"{slot.slot} - empty"); } else { Logger.Debug($"{slot.slot} - {data.guid} - {data.Hint} - {data.name}"); } } }
private static void PatchGoldAmount(PlayerChapter chapter) { var patcher = _instance._patcher; InventoryExt extension1 = chapter.Owner.GetExtension <InventoryExt>(); var goldText = patcher.GetField <LocalizedText>(chapter, "m_goldText"); int resource1 = extension1.GetResource(GameData.Instance.GoldResource); int goldRetainAmount = Game.Instance.ResourceManager.GetGoldRetainAmount(resource1); goldText.Text = resource1 < 0 || Game.Instance.Mode != Game.GameMode.Story ? "{" + resource1.ToString() + "}" : string.Format("{0} {{{1}}}", resource1, goldRetainAmount); }
public static void SpawnRelic(this Mod mod) { try { var items = new List <ItemData>(); InventoryExt.GetItems(Game.Instance.Simulation.Avatars[0], items, true); var entities = Game.Instance .Simulation .Entities .Entities .Select(t => t.GetExtension <ItemExt>()) .Where(t => t != null) .Select(t => t.Data?.guid); var relics = mod.GameInstance .Data .RelicCollection .Cast <ItemData>() .Where(t => t.IsDiscovered && t.IsUnlocked && !items.Any(a => a.guid == t.guid) && !entities.Any(a => a == t.guid)) .ToArray(); if (relics == null || relics.Length <= 0) { mod.Logger.Warn("No relics exist to spawn!"); return; } var relic = relics[_rnd.Next(0, relics.Length)]; mod.GameInstance.SpawnRelic(relic); mod.Logger.Debug("Spawned random relic"); } catch (Exception ex) { mod.Logger.Error("Error occurred while spawning relic: " + ex); } }
public void ThreadDisassemble() { while (isRunning && itemsLeft > 0) { // Make sure we're on the right action bar if (ActionBar.CurrentActionBar != disassembleSpell.GetActionBarAction.Bar) { ActionBar.ChangeActionBar(disassembleSpell.GetActionBarAction.Bar); Thread.Sleep(1000); } disassembleSpell.GetActionBarAction.Push(); Thread.Sleep(500); bool success = InventoryExt.UseItemByIdExt(disassembleItem.ItemId); if (success) { itemsLeft--; } else { isRunning = false; Log("Unable to disassemble, maybe someone closed the bag"); } txtItems.Text = itemsLeft.ToString(); Log(disassembleItem.ToString() + ": " + itemsLeft.ToString() + " left"); while (ObjectManager.Me.IsCasting && isRunning) { Thread.Sleep(100); } UIFrame.Update(); UIFrame.Frame frame = UIFrame.GetFrameByName("LootFrame"); while (!frame.IsVisible && isRunning) { //Log("Waiting for loot window to open"); Thread.Sleep(100); UIFrame.Update(); frame = UIFrame.GetFrameByName("LootFrame"); } while (frame.IsVisible && isRunning) { //Log("Waiting for loot window to close"); Thread.Sleep(100); UIFrame.Update(); frame = UIFrame.GetFrameByName("LootFrame"); } Thread.Sleep(100); } Log("All done!"); btnStart.Text = "Start"; isRunning = false; thread = null; RefreshActions(); }
public void ThreadSort() { Inventory.CloseAllBags(); if (!Keybindings.IsValidKeyForAction("OPENALLBAGS")) { Log("Keybinding \"OPENALLBAGS\" is unbound, please bind it."); thread = null; isRunning = false; return; } Keybindings.UseBinding("OPENALLBAGS"); Log("Sorting items in to stacks..."); bool runBagCheck = true; do { runBagCheck = false; List <BagItem> bagItems = new List <BagItem>(); for (int i = 1; i <= 16; i++) { WowItem bagItem = Inventory.GetBackpackItemBySlot(i); if (bagItem.Name.Equals(disassembleItem.Name)) { bagItems.Add(new BagItem(bagItem, 0, i)); } } for (int i = 1; i <= Inventory.Bag1.MaxSlot; i++) { WowItem bagItem = Inventory.Bag1.GetItemBySlot(i); if (bagItem.Name.Equals(disassembleItem.Name)) { bagItems.Add(new BagItem(bagItem, 1, i)); } } for (int i = 1; i <= Inventory.Bag2.MaxSlot; i++) { WowItem bagItem = Inventory.Bag2.GetItemBySlot(i); if (bagItem.Name.Equals(disassembleItem.Name)) { bagItems.Add(new BagItem(bagItem, 2, i)); } } for (int i = 1; i <= Inventory.Bag3.MaxSlot; i++) { WowItem bagItem = Inventory.Bag3.GetItemBySlot(i); if (bagItem.Name.Equals(disassembleItem.Name)) { bagItems.Add(new BagItem(bagItem, 3, i)); } } for (int i = 1; i <= Inventory.Bag4.MaxSlot; i++) { WowItem bagItem = Inventory.Bag4.GetItemBySlot(i); if (bagItem.Name.Equals(disassembleItem.Name)) { bagItems.Add(new BagItem(bagItem, 4, i)); } } foreach (BagItem bagItem in bagItems) { if (bagItem.wowItem.StackCount % 5 > 0 && bagItems.Count > 1) { BagItem lastBagItem = bagItems[bagItems.Count - 1]; LogDebug("Merging " + lastBagItem.wowItem.StackCount); LogDebug(" with " + bagItem.wowItem.StackCount); InventoryExt.LeftClickItemInBag(lastBagItem.bag, lastBagItem.slot); Thread.Sleep(500); InventoryExt.LeftClickItemInBag(bagItem.bag, bagItem.slot); Thread.Sleep(1000); runBagCheck = true; break; } } } while(runBagCheck && isRunning); LogDebug("Done!"); Log("Done!"); thread = null; if (isRunning) { Thread.Sleep(3000); thread = new Thread(new ThreadStart(ThreadDisassemble)); thread.Start(); } }