/// <summary>Get the items a specified NPC can receive.</summary> /// <param name="npc">The NPC to check.</param> /// <param name="metadata">Provides metadata that's not available from the game data directly.</param> public static IDictionary <SObject, GiftTaste> GetGiftTastes(NPC npc, Metadata metadata) { if (!GameHelper.IsSocialVillager(npc, metadata)) { return(new Dictionary <SObject, GiftTaste>()); } // get giftable items HashSet <int> giftableItemIDs = new HashSet <int>( from int refID in GameHelper.GiftTastes.Value.Select(p => p.RefID) from ObjectModel obj in GameHelper.Objects.Value where obj.ParentSpriteIndex == refID || obj.Category == refID select obj.ParentSpriteIndex ); // get gift tastes return (( from int itemID in giftableItemIDs let item = GameHelper.GetObjectBySpriteIndex(itemID) let taste = GameHelper.GetGiftTaste(npc, item) where taste.HasValue select new { Item = item, Taste = taste.Value } ) .ToDictionary(p => p.Item, p => p.Taste)); }
/// <summary>Get how much each NPC likes receiving an item as a gift.</summary> /// <param name="item">The item to check.</param> /// <param name="metadata">Provides metadata that's not available from the game data directly.</param> public static IEnumerable <KeyValuePair <NPC, GiftTaste> > GetGiftTastes(Item item, Metadata metadata) { if (!item.canBeGivenAsGift()) { yield break; } foreach (NPC npc in GameHelper.GetAllCharacters()) { if (!GameHelper.IsSocialVillager(npc, metadata)) { continue; } GiftTaste?taste = GameHelper.GetGiftTaste(npc, item); if (taste.HasValue) { yield return(new KeyValuePair <NPC, GiftTaste>(npc, taste.Value)); } } }