예제 #1
0
 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 });
         }
     }
 }
예제 #2
0
        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);
                }
            }
        }