private static void AddItems <T>(Shop shop, ShopMenu shopMenu, List <T> items) { foreach (var item in items) { if (ItemDefinitions.GetExtInfo(item, out ExtItemInfo extInfo) && extInfo.SellingCondition.IsFulfilled(shop)) { Item saleItem = CreateItemInstance(item); shopMenu.forSale.Add(saleItem); shopMenu.itemPriceAndStock.Add(saleItem, new int[] { extInfo.Price, 1 }); } } }
static void ValidateCraft(TailoringMenu __instance) { // TODO: HUD message is displayed behind tailoring menu -> store once and show when tailoring menu gets closed if (__instance.craftResultDisplay.item != null && ItemDefinitions.GetExtInfo(__instance.craftResultDisplay.item, out ExtItemInfo extInfo)) { if (extInfo.IsCraftingDisabled) { if (extInfo.SoldBy != Shop.None) { // display a hint after closing the menu where the player might buy the item TailoringPatches.AddTailoringMessage($"Hm, that did not quite work out. Maybe {extInfo.SoldBy.GetShopReferral()} sells something similar.", __instance.craftResultDisplay.item); } // indicate to the player that this is an invalid recipe now int itemId = __instance.craftResultDisplay.item.parentSheetIndex; __instance.craftResultDisplay.item = null; craftStateFieldInfo.SetValue(__instance, CraftState.InvalidRecipe); craftDisplayedDescriptionFieldInfo.SetValue(__instance, Game1.content.LoadString("Strings\\UI:Tailor_InvalidRecipe")); // delete the recipe, so that the player cannot craft the item __instance._tailoringRecipes.RemoveAll(x => x.CraftedItemID == itemId); } } }