예제 #1
0
        public override int RemoveSlotItems(int slotIndex, int count)
        {
            int num = 0;

            if (slotIndex == ResultSlotIndex)
            {
                if (m_matchedRecipe != null)
                {
                    if (m_matchedRecipe.RemainsValue != 0 && m_matchedRecipe.RemainsCount > 0)
                    {
                        if (m_slots[RemainsSlotIndex].Count == 0 || m_slots[RemainsSlotIndex].Value == m_matchedRecipe.RemainsValue)
                        {
                            int num2 = BlocksManager.Blocks[Terrain.ExtractContents(m_matchedRecipe.RemainsValue)].MaxStacking - m_slots[RemainsSlotIndex].Count;
                            count = MathUtils.Min(count, num2 / m_matchedRecipe.RemainsCount);
                        }
                        else
                        {
                            count = 0;
                        }
                    }
                    count = count / m_matchedRecipe.ResultCount * m_matchedRecipe.ResultCount;
                    if (slotIndex >= 0 && slotIndex < m_slots.Count)
                    {
                        Slot slot = m_slots[slotIndex];
                        count       = MathUtils.Min(count, GetSlotCount(slotIndex));
                        slot.Count -= count;
                        num         = count;
                    }
                    else
                    {
                        num = 0;
                    }
                    if (num > 0)
                    {
                        for (int index = 0; index < 36; index++)
                        {
                            if (!string.IsNullOrEmpty(m_matchedIngredients[index]))
                            {
                                int index2 = index % 6 + m_craftingGridSize * (index / 6);
                                m_slots[index2].Count = MathUtils.Max(m_slots[index2].Count - num / m_matchedRecipe.ResultCount, 0);
                            }
                        }
                        if (m_matchedRecipe.RemainsValue != 0 && m_matchedRecipe.RemainsCount > 0)
                        {
                            m_slots[RemainsSlotIndex].Value  = m_matchedRecipe.RemainsValue;
                            m_slots[RemainsSlotIndex].Count += num / m_matchedRecipe.ResultCount * m_matchedRecipe.RemainsCount;
                        }
                        ComponentPlayer componentPlayer = Entity.FindComponent <ComponentPlayer>();
                        if (componentPlayer == null)
                        {
                            ComponentBlockEntity componentBlockEntity = Entity.FindComponent <ComponentBlockEntity>();
                            if (componentBlockEntity != null)
                            {
                                var position = new Vector3(componentBlockEntity.Coordinates);
                                componentPlayer = Project.FindSubsystem <SubsystemPlayers>(true).FindNearestPlayer(position);
                            }
                        }
                        if (componentPlayer != null && componentPlayer.PlayerStats != null)
                        {
                            componentPlayer.PlayerStats.ItemsCrafted += num;
                        }
                    }
                }
            }
            else
            {
                if (slotIndex >= 0 && slotIndex < m_slots.Count)
                {
                    Slot slot = m_slots[slotIndex];
                    count       = MathUtils.Min(count, GetSlotCount(slotIndex));
                    slot.Count -= count;
                    num         = count;
                }
                else
                {
                    num = 0;
                }
            }
            UpdateCraftingResult();
            return(num);
        }
예제 #2
0
 public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap)
 {
     this.LoadItems(valuesDictionary);
     m_componentBlockEntity = Entity.FindComponent <ComponentBlockEntity>(true);
     SubsystemPlayers       = Project.FindSubsystem <SubsystemPlayers>(true);
 }