/// <summary> /// Finds first item of a given type belonging to a player (including their bank storage). /// </summary> /// <param name="player"></param> /// <param name="itemType"></param> /// <param name="skipArmors"></param> /// <param name="skipBanks"></param> /// <returns></returns> public static Item FindFirstPlayerItemOfType(Player player, int itemType, bool skipArmors = false, bool skipBanks = false) { int itemIdx; var itemTypeSet = new HashSet <int> { itemType }; itemIdx = ItemFinderLibraries.FindIndexOfFirstOfItemInCollection(player.inventory, itemTypeSet); if (itemIdx != -1) { return(player.inventory[itemIdx]); } if (!skipArmors) { itemIdx = ItemFinderLibraries.FindIndexOfFirstOfItemInCollection(player.armor, itemTypeSet); if (itemIdx != -1) { return(player.armor[itemIdx]); } } if (!skipBanks) { if (player.chest >= 0 && Main.chest[player.chest] != null) // Player's current chest { itemIdx = ItemFinderLibraries.FindIndexOfFirstOfItemInCollection(Main.chest[player.chest].item, itemTypeSet); if (itemIdx != -1) { return(Main.chest[player.chest].item[itemIdx]); } } if (player.chest == -2) // Piggy bank { itemIdx = ItemFinderLibraries.FindIndexOfFirstOfItemInCollection(player.bank.item, itemTypeSet); if (itemIdx != -1) { return(player.bank.item[itemIdx]); } } if (player.chest == -3) // Safe { itemIdx = ItemFinderLibraries.FindIndexOfFirstOfItemInCollection(player.bank2.item, itemTypeSet); if (itemIdx != -1) { return(player.bank2.item[itemIdx]); } } if (player.chest == -4) // ..whatever this is { itemIdx = ItemFinderLibraries.FindIndexOfFirstOfItemInCollection(player.bank3.item, itemTypeSet); if (itemIdx != -1) { return(player.bank3.item[itemIdx]); } } } return(null); }
} // <- Used to be 'FindChangesAt' /// <summary> /// Counts total valid items of a set of item types within a given collection. /// </summary> /// <param name="collection"></param> /// <param name="itemTypes"></param> /// <returns></returns> public static int CountTotalOfEach(Item[] collection, ISet <int> itemTypes) { var set = ItemFinderLibraries.FindIndexOfEach(collection, itemTypes); int total = 0; foreach (int idx in set) { total += collection[idx].stack; } return(total); }