public frmMain()
        {
            InitializeComponent();

            XmlSerializer xml;

            try
            {
                xml = new XmlSerializer(typeof(AlchemyBase));
            }
            catch (Exception x)
            {
                MessageBox.Show(
                    "Ошибка сериализации, невозможно создать сериализатор. Попробуйте запустить программу с правами администратора.",
                    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
                return;
            }

            try
            {
                using (var fs = new StringReader(Resources.alchemy))
                {
                    _base = (AlchemyBase)xml.Deserialize(fs);
                }
            }
            catch (Exception x)
            {
                MessageBox.Show(
                    "Не удается прочитать базу данных. Возможно данные повреждены, переустановите программу.",
                    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
                return;
            }

            foreach (var item in _base.Items)
            {
                comboBox1.Items.Add(item);
                checkedListBox1.Items.Add(item);
            }

            foreach (var effect in _base.Effects)
            {
                comboBox2.Items.Add(effect);
            }

            comboBox1.SelectedIndex = 0;
        }
        public void Calculate(AlchemyBase db)
        {
            int[] effects;

            if (Items.Length == 2)
            {
                effects = Items[0].Effects.Where(e => Items[1].Effects.Contains(e)).ToArray();
            }
            else
            {
                var e1 = Items[0].Effects.Where(e => Items[1].Effects.Contains(e)).ToArray();
                var e2 = Items[0].Effects.Where(e => Items[2].Effects.Contains(e)).ToArray();
                var e3 = Items[1].Effects.Where(e => Items[2].Effects.Contains(e)).ToArray();

                effects = e1.Concat(e2.Concat(e3)).Distinct().ToArray();
            }

            Value = effects.Select(e => db.Effects[e].Value).Sum();
        }