// Метод вызывается по клику кнопок действий.
        private void AttemptAction(Database.Action action)
        {
            locattempt++;

            if (action.number == currentAction)
            { // Выбрано верное действие
                PB_Process.Value++;

                // Проверяем, сколько ещё повреждений. Если их не осталось,
                // возвращаемся в окно операции, а также нейтрализуем одну ошибку.
                if (damage.order.Count > 0)
                    currentAction = damage.order.Dequeue();
                else
                {
                    DialogResult = DialogResult.OK;

                    // "Стабилизация" пациента.
                    operation.HealStats();

                    TMR_CriticalFlickering.Enabled = false;
                    LB_Critical.Visible = false;

                    GUIMessageBox.ShowDlg(new string[] 
                    { "", "Повреждение вылечено.",
                    "Дроид стабилизирует пациента..." });

                    Close();
                }
            }
            else // Неверное действие
            {
                operation.attempt++;
                operation.HurtStats();

                if (operation.attempt >= OperationInfo.maxAttempts)
                {
                    DialogResult = DialogResult.No;
                    Close();
                }
                else if (operation.IsCritical())
                {
                    GUIMessageBox.ShowDlg(new string[] 
                    { "", "Пациент в критическом состоянии!"});
                }
                else
                {
                    GUIMessageBox.ShowDlg(new string[]
                    { "", "Состояние пациента ухудшилось." });
                }

                if (operation.IsCritical())
                {
                    LB_Critical.Visible = true;
                    TMR_CriticalFlickering.Enabled = true;
                }
            }
        }
 private void ActionSelected(object sender, EventArgs e)
 {
     Button button = (Button)sender;
     Database.Action action = new Database.Action(Database.Action.GetTypeByName(button.Text));
     AttemptAction(action);
 }
 // ВНИМАНИЕ! Этот и следующий методы ЗАВИСИМЫ от ТЕКСТА НА КНОПКЕ, т.к. с его помощью
 // определяется тип действия. Ввод текста несуществующего действия приведёт к ошибке и стопору системы.
 private void BT_Inject_Click(object sender, EventArgs e)
 {
     Database.Action.Type actType = Database.Action.GetTypeByName(LB_InjSelection.SelectedItem.ToString());
     Database.Action action = new Database.Action(actType);
     AttemptAction(action);
 }