예제 #1
0
    public void StartMixing(BasePlayer player)
    {
        if (IsOn())
        {
            return;
        }
        List <Item> orderedContainerItems = GetOrderedContainerItems(base.inventory);
        int         quantity;

        currentRecipe   = RecipeDictionary.GetMatchingRecipeAndQuantity(Recipes, orderedContainerItems, out quantity);
        currentQuantity = quantity;
        if (!(currentRecipe == null) && (!currentRecipe.RequiresBlueprint || player.blueprints.HasUnlocked(currentRecipe.ProducedItem)))
        {
            if (base.isServer)
            {
                lastTickTimestamp = UnityEngine.Time.realtimeSinceStartup;
            }
            RemainingMixTime = currentRecipe.MixingDuration * (float)currentQuantity;
            TotalMixTime     = RemainingMixTime;
            ReturnExcessItems(orderedContainerItems, player);
            if (RemainingMixTime == 0f)
            {
                ProduceItem(currentRecipe, currentQuantity);
                return;
            }
            InvokeRepeating(TickMix, 1f, 1f);
            SetFlag(Flags.On, true);
            SendNetworkUpdateImmediate();
        }
    }
예제 #2
0
    public override void ServerInit()
    {
        base.ServerInit();
        ItemContainer itemContainer = base.inventory;

        itemContainer.canAcceptItem       = (Func <Item, int, bool>)Delegate.Combine(itemContainer.canAcceptItem, new Func <Item, int, bool>(CanAcceptItem));
        base.inventory.onItemAddedRemoved = OnItemAddedOrRemoved;
        RecipeDictionary.CacheRecipes(Recipes);
    }
예제 #3
0
 private bool CanAcceptItem(Item item, int targetSlot)
 {
     if (item == null)
     {
         return(false);
     }
     if (!OnlyAcceptValidIngredients)
     {
         return(true);
     }
     if (GetItemWaterAmount(item) > 0)
     {
         item = item.contents.itemList[0];
     }
     if (!(item.info == currentProductionItem))
     {
         return(RecipeDictionary.ValidIngredientForARecipe(item, Recipes));
     }
     return(true);
 }
 // Start is called before the first frame update
 void Start()
 {
     recipeDictionary = new RecipeDictionary();
 }